Backups with btrbk


Storage setup of my home server is btrfs raid1 over two, dm-crypt'ed 16TB HDDs cached with bcache on NVMe. It works fine, however for PostgreSQL database and my homedir I prefer full NVMe speed.

Therefore I've put those two directories on (dm-crypt'ed) btrfs subvolumes directly on NVMe. Thanks to DUP profile there's a protection against bitrot. But it's still a single device which may just die. Regardless of full backups, I was doing daily rsync into main drives, but there's faster and more capable way.

Enter btrbk, which operates on btrfs subvolumes. It uses btrfs' native send capability to copy the subvolume between filesystems effectively.

Additionally, it's very easy to keep some number of historic subvolume snapshots. They utilize copy-on-write, minimizing space usage. This let me recover files quickly or compare filesystem's state over last few days.

The config it bit tricky, that's why I'm posting this. My full backup config below, divided in three sections for explanations.

timestamp_format        long
snapshot_preserve       14d
snapshot_preserve_min   2d      # defaults to 'all'

The source definition. preserve option combination is needed to have daily snapshots kept for last two weeks and have older snapshots removed.

target_preserve         7d
target_preserve_min     latest  # defaults to 'all'

What to do with subvolumes copies at the target directory. Above combination of options keeps last seven days of snapshots copies.

send_compressed_data    yes

volume /run/btrbk-work
        target /home/poligon/backs/btrbk_snaps

        subvolume home_zdzichu

        subvolume var_lib_pgsql

Job definition. /run/btrbk-work is a directory where I temporarily mount NVMe drive root volume with subvolumes beneath. /home/poligon/backs/btrbk_snaps is the directory on my main (raid1) pool where subvolume copies are stored. And the last two lines are specific subvolumes to copy.

That works for me. btrbk is run by cron.daily/ from a short script ensuring everything is mounted where it should be.

020/100 of #100DaysToOffload

No to pohulane


Na fali postów naprawczo–remontowych… po przejechaniu trochę ponad 6 200km w 2,5 roku, oddałem moją hulajnogę do serwisu. Zaciski hamulcowe trzeba wymienić i coś zaczęło się dziać z baterią.

Nie zawsze ładuje się do pełna, przestaje losowo w trakcie. Poniżej dwa wykresy: górny to obecne zachowanie. Dolny to prawidłowe ładowanie:

/dżogstaff/2025.10.24-ładowanko.png

W serwisie rozebrali baterię, stwierdzili brak uszkodzeń mechanicznych i sprawdzili wszystkie sekcje. Diagnoza: akumulator ma 60% oryginalnej pojemności, jest już na wykończeniu. Szkoda, bo dbałem o higienę. Nigdy nie rozładowałem go do zera, ani też nie trzymałem naładowanego na 100%. To niestety kwestia budżetowości części.

Dostałem trzy opcje:

  • zbalansowanie ogniw i złożenie wszystkiego; jeszcze z jeden sezon da się pojeździć

  • nowy akumulator od producenta, koszt 2 850zł

  • zupełnie nowa, ale taka sama hulajnoga, bo akurat mają taki model w kartonie, za jakieś 3,5k zł

Przy tych kosztach postanowiłem dojeździć Joyora do końca, a jak przyjdzie czas – rozejrzeć się za czymś z wyższej półki. Absolutnie sprawdził się finansowo i czasowo jako główny środek transportu w mieście.

Ostatnie 2 tygodnie, gdy hulajnoga była w warsztacie, do biura jeździłem na rowerze. I jest spoko, może będę to robił częściej. Drogę „tam” mam bardzo z górki, większość trasy nawet nie muszę pedałować:

/dżogstaff/2025.10.24-pedałowanko.jpg

A w biurze są prysznice. Może zabiera to 10 minut dodatkowych minut, ale dużo więcej oszczędzam nie robiąc samochodem korków.

019/100 of #100DaysToOffload

Halo, czy mnie słychać?


Zaczynając pracę w obecnej firmie, na startup gift poprosiłem o słuchawki Sony WF-1000XM4 – douszne. Raczej rzadko ich używam. Do porządnego wyciszenia mam duże WF-1000, a do jazdy na jednośladzie i hikingów lepiej sprawiają się kostne Shokzy.

Niemniej małe słuchawki mają zaletę bycia małymi, więc czasem biorę je do plecaka. I tu negatywnie zaskoczyły mnie w zeszłym miesiącu. Bateria zaczęła niknąć w oczach niczym wody jeziora Karaczaj. Niecała godzina i kaput.

Otóż nie jest to niezwykłe. Któraś z wersji firmware wypuszczona przez Sony miała błąd skutkujący zbyt wysoką temperaturą pracy akumulatorków. Efektem jest trwałe uszkodzenie i obniżenie pojemności.

Gwarancja? Owszem, ale moim słuchawkom dwa lata już minęły.

Opcja druga, naprawa. Można samemu spróbować. Akumulatorki Z55H kosztują kilkadziesiąt złotych sztuka, a wymiana wymaga rozklejania i manipulacji drobnymi elementami.

Może to też zlecić komuś. Koszt usługi z materiałami to około 250 zł. Trochę dużo, ale to tylko ¼–⅓ ceny nowych słuchawek.

I tu wchodzi Sony, całe na… jasnoszaro. Mają pogwarancyjny program serwisowy. Obowiązuje tylko w trzecim roku posiadania (czyli rok po upłynięciu gwarancji). Za 160 zł autoryzowany serwis wymienia elementy douszne na nowe. Całe, nie rozklejają i nie wymieniają tylko akumulatorków. Etui pozostaje to samo.

Zadzwoniłem do Sontronic, wypełniłem formularz, wysłałem paczkę Paczkomatem. Tydzień później wyjąłem z maszyny nowe słuchawki, które mam nadzieję będą działać bez problemu przez lata.

018/100 of #100DaysToOffload <https://100daystooffload.com/>

Jaki matrix?


Znowu mam wrażenie, że muszę wykonać pewną ilość pracy, żeby zostać w tym samym miejscu.

Tym razem matriksowy homeserver Dendrite. Jakiś czas temu został przejęty przez Element, co miało zapewnić jego dalszy rozwój. W zamian jednak umarł i mam wrażenie, że dalszy rozwój protokołu powoduje coraz gorsze działanie Dendrite. Np. podobno winą homeservera są niedziałające ustawienia powiadomień we Fractal.

No więc trzeba się zmigrować na coś działającego. Pewnie na Conduwuit, pardon, teraz to Tuwunel. Przy okazji doktoryzacja z przenoszenia kont i subskrypcji kanałów… już mi się nie chce.

017/100 of #100DaysToOffload

Szeptany obwiniacz


Model Whisper okazał się zaskakująco użyteczny. Mam nagrania z kilku lat zebrań pewnego kolektywu. Protokoły z tych zebrań często pomijały niektóre sprawy. A przesłuchiwanie godzinnych nagrań w celu znalezienia jakiegoś zdania… po prostu nie wydarza się.

I tu wchodzii cały na biało wspomniany model. Kilka linijek w Pythonie przemieliło te nagrania na wyszukiwalny tekst, ze znacznikami czasowymi. I nawet ładnie ogarnia kwestie finansowe.

00:58:47,960 --> 00:58:53,960 Tak, tylko czy 3 razy więcej z 300 zł, czy z 3000 zł, to też jest różnica.

Teraz z łatwością można komuś wypomnieć co deklarował lata temu i puścić odpowiedni fragment nagrania.

016/100 of #100DaysToOffload

Tunezja objazdowo 7: koniec


Jesteśmy zadowoleni. Przewodnik wygadany i zorganizowany, grupa też się nie rozłaziła, całkiem fajni ludzie.

Przeraża ilość śmieci wszędzie, nawet na pustyni na każdym metrze wala się plastik.

Dinarów nie wolno wywozić z Turcji, nam zostało prawie 200. Kantor na lotnisku chciał jakieś kwitki i potwierdzenia wymiany których nie mieliśmy. Po głębokim patrzeniu w oczy znalazł pasujące w swoich śmieciach i dostaliśmy euro.

Przez tydzień przejechane 2100km autobusem, 200km samochodami 4x4, zużyłem 8,13GiB danych komórkowych.

015/100 of #100DaysToOffload

Tunezja objazdowo 6: rzymskie miasta


Wyjazd 6.30.

Trzy osoby zrezygnowały, zostały w hotelu. Zbytnio zmęczone czy przepimprezowane?

Jedno rzymskie musi miasto Dougga.

Drugie rzymskie miasto Thuburbo Maius.

Niesamowite, otwierają oczy jak rozległe było imperium rzymskie. To stąd większość mozaik oglądanych na początku wycieczki.

8k kroków, 5,7km.

014/100 of #100DaysToOffload

Tunezja objazdowo 5: gladiator-style


Śniadanie o 5.00.

Amfiteatr El-Jemm w stylu rzymskim, największy w Afryce, nieźle zachowany, chociaż po zwiedzeniu Koloseum odbieram go trochę jak remix.

Muzeum mozaik spoko.

Monastyr: Mauzoleum prezydenta Habib Burgiba, twierdza.

Stare Miasto w Sousse: typowa uliczka handlowa, skąd tu tyle ludzi :(

18,8k kroków, 13,3km.

013/100 of #100DaysToOffload

Tunezja objazdowo 4: Djerba


Muzeum etnograficzne de Guellala bardzo fajne. Takie rzeczy lubimy na wyjazdach.

Obrzezanie jako okazja na dostania kasy na PlayStation, ciekawe podejście, ale jakoś trzeba sobie radzić z traumą.

Synagoga Al-Gharbia bardzo eklektyczna, kolory lokalne, układ klasyczny.

Rynek: jak zwykle najgorsze co ludzie ludziom mogą zrobić.

Morze ciepłe, plaża cicha, dało się odpocząć.

12,7k kroków, 8,3km.

012/100 of #100DaysToOffload

Tunezja objazdowo 3: więcej offroad


Tym razem śniadanie o 5.00. Karaluch w pokoju znacząco większy niż w pierwszym hotelu: 3-4 cm.

W czasie przejażdżki dorażką dostałem lejce. Kierowało się łatwiej niż barką na Mekongu, koń sam wiedział dokąd jechać.

Oaza z daktylami w porządku.

Słone jeziora: niesamowite puste przestrzenie, wydmy i kopczyki solne. Wow.

Quady na pustyni, ciarki przechodzą, gdy cywilizacja znika za wydmami i wokół tylko piasek.

Wiejskie gospodarstwa na pustyni – efekt raczej smutny, jak tu jest biedne!

Dom wujostwa Luka Skywalkera – w filmie jest tak bardzo tłem, że gdyby nie fotosy kadrów na ścianach, trudno by było skojarzyć. A oglądaliśmy początek Nowej Nadziei tydzień temu.

Droga Rommla z super górskimi widokami, podziwiane znad szklanki gorącej miętowej herbaty z migdałami i miodem.

Na koniec basen w kolejnym hotelu, ponownie super po całym dniu upałów.

5.8k kroków, 8.9km.

011/100 of #100DaysToOffload

Tunezja objazdowo 2: offroad


Znowu śniadanie o 5.30 i wyjazd godzinę później.

Kairouan najstarsze stare miasto, meczet robi wrażenie, koty pozują z grupami turystów. Siedem pielgrzymek do tego miasta liczy się jak jedna do Mekki.

Lokalne mauzoleum ładne, w środku elektroniczny czasomierz modlitewny identyczny jak w naszym gdańskim meczecie.

Zbiorniki Aghlabides ładne od strony inżynieryjnej.

Potem samochodami 4x4 do oazy (kręcili tu Angielskiego Pacjenta), i przełajem trasą Paryż-Dakar, obók góra wielbłąda, do Mos Espa. Atrakcja turystyczna zajebana straganami, ciężko znaleźć źródło mocy.

Po takim dniu wieczór w basenie (na środku pustyni) dwa plus dobry.

9,8k kroków, 6km.

010/100 of #100DaysToOffload

Tunezja objazdowo 1: Tunis


Stare miasto w stolicy nawet spoko. Klimatyczne uliczki i mnóstwo kotów!

Muzeum Bardo – mozaiki i super koronkowo-gipsowe sufity.

Kartagina: niewiele zostało: łaźnie, cmentarz meh, portów nie ma, ale wzgórze z ekstra widokiem.

Sidi Bou Said (“Tunis Santorini”) nawet ładne. Jedyna jak dotąd ulica ze śmietnikami, bo tak to syf wszędzie.

Na pytanie po ile pączek, dziwnie brzmiąca odpowiedź. One and half. Spodziewałem się one fifty, ale połówka tunezyjskiego dinara to nie pięćdziesiąt, a pińcet jednostek milimonetarnych.

14.3k kroków, 9.4 km.

009/100 of #100DaysToOffload

Tunezja objazdowo 0: wylot


Wyjazdy co do zasady organizujemy sami, ale w tym roku natłok spraw nie zostawił na to czasu. Postanowiliśmy spróbować czegoś nowego i do Tunezji wybraliśmy się na wycieczkę objazdową z biurem podróży.

Spakować się, wykupić ubezpieczenie, eSIM, wziąć euro i pojechać autobusem na lotnisko… i to już? Żadnych parkingów, rezerwacji, biletów wstępu, wynajmu auta, szukania parkingów czy ustalania marszruty. Dziwnie.

Na miejscu czekając na bagaże kupno SIM do drugiego telefonu. Przepłacone 2x (15EUR za 27GiB na miesiąc), ale za to wygodnie.

Potem niestety czekanie w autokarze przed lotniskiem, bo ktoś się zgubił. W hotelu po północy, a o 5.30 śniadanie i wyjazd.

Pierwsza obserwacja: do rzeczy dobrych przyzwyczajamy się szybko. Do Tunezji nie dotarły jeszcze przytwierdzone do butelek zakrętki. Trzeba być czujnym, dwa razy prawie taką luźną zakrętkę zgubiliśmy.

008/100 of #100DaysToOffload

Spacer gospodarczy vol. 2


Po raz kolejny uczestniczyłem w spacerze po dzielnicy z p. Prezydent Gdańska i sztabem urzędników.

Małe deja vu. Dróg o których dyskutowaliśmy przed 3 laty dalej nie ma, przejścia przez potok też, chociaż mieszkańcy w międzyczasie zrobili kładkę z poręczami. Cośtam miał zrobić deweloper, ale się nie wyrobił, więc przedłuży mu się termin. A może by nie przedłużać, tylko egzekwować zapisy umowy? Zbyt radykalne.

Może dlatego na zdjęciach wyglądam jakbym chciał tym urzędnikom strzelić z bańki.

007/100 of #100DaysToOffload

Gdzie Ty mnie prowadzisz, Komoocie?


O, kolejny wpis rowerowy. Ale to prawie ostatni (w draftach jest tylko jeden podobny).

Wczoraj po pracy pojechałem na Wyspię Sobieszewską, dzielnicę Gdańska od 1973r, zjeść batonika pod zbiornikiem wody Kazimierz.

Wcześniej zaplanowana droga na zdjęciach satelitarnych wyglądała podejrzanie – skoki przez Kanał Rudnicki? Błotniske drogi wzdłuż podziemnego rurociągu?

Zaryzykowałem i pozytywnie się zaskoczyłem. To, co na zdjęciach sprzed kilku lat było chaszczami, dzisiaj jest zagospodarowanym teren rekreacyjnym.

/dżogstaff/2025.09.11-opływ.jpg

Gdzie indziej, w miejscu błotniawki powstała szeroka droga dla rowerów, odseparowana od ruchu kołowego. Który jest tam spory, bo to wylot z Gdańska na Elbląg i Warszawę, a także tereny przemysłowe.

/dżogstaff/2025.09.11-rzęsna.jpg

Mapa zeznaje, że to fragmentu Wiślanej Trasy Rowerowej oraz EuroVelo 9/10/13.

Fajnie, że infra rowerowa buduje się tak szybko.

To była przyjemna przejażdżka, łącznie 50km.

006/100 of #100DaysToOffload

Na dwóch kółkach z łańcuchem


Odnotowuję:

Wczorajszy dzień spędziliśmy na rowerach na Wyspie Sobieszewskiej. W końcu w sobotę udało się kupić Focusa dla małżonki. Było super. Były bunkry. Był chillout.

Zaczęła się kolejna edycja Kręć Kilometry Dla Gdańska. Poniekąd rywalizacja, ale można:

  • przyzwyczaić się do codziennej jazdy jednośladem

  • zdobyć gadżety

  • poznać lepiej Gdańsk (fajnie jest spotykać ludzi przyjeżdżających na ten sam punkt bonusowy)

  • doposażyć dzielnicę

Co do ostatniego, w zeszłorocznej edycji moja dzielnica Jasień wyjeździła pierwszy wynik, co przełożyło się na 30 stojaków rowerowych do rozdysponowania. Powinny się właśnie pojawiać. Jutro z rana spróbuję pobrać z okolicy czołgu kilka plakatów o akcji do rozwieszenia na dzielni.

005/100 of #100DaysToOffload

Nabrałem się na phishing


Aż byłem zaskoczony, dopiero jak dostałem czerwonym po oczach to się skupiłem co klikam. A było to tak.

Zmieniałem niedawno kartę kredytową – Alior nie ma procedury na zwiększenie limitu kredytowego. A na zmniejszenie jest! Anyway. Był problem z dodaniem nowej karty do Amazona. Nie kupuję tam, sklepu z gorszą używalnością nie widziałem, ale Prime się przydaje. Bo Expanse, Reacher, The Boys, Gen V, Upload, Mrs & Mr Smith, Invincible, Legend of Vox Machina, Modern Love i dziesiątki innych.

No więc jakoś w wakacje odnawia mi się płatność za Prime. Nb. 49zł / rok to odpowiednia cena za streaming. I dostałem właśnie maila, że jest jakiś problem z płatnością. Ekstra, pewnie ta nowa karta się nie dodała jednak 😠. Do tego mail wysłany tylko w HTML, w Mutt wyglądał jak kupa. Na takie wypadki mam zakurzony webmail do mojej poczty. No więc paczam.

/dżogstaff/2025.08.28-phish1.webp

No OK. Not good not terrible.

To klikamy o co dokładnie tam chodzi.

/dżogstaff/2025.08.28-phish2.webp

Tak, tak, przecież wiem, że Amazon. W tym momencie powinienem spojrzeć na URL. Powinieniem.

Czy to zrobiłem? Nigdy się nie dowiemy, chociaż możemy się domyślać. Klikam.

/dżogstaff/2025.08.28-phish3.webp

Ale że co‽ Dopiero na tym etapie zacząłem się przyglądać, co się dzieje. I dziękuję Pan Gógiel za ocalenie. Dotąd doszedłem na autopilocie. Dalej? Raczej jakbym miał podać dane swojej karty, to bym się przyjrzał gdzie dokładnie je wpisuję. I potwierdzenia z bankowej appki też zawsze czytam. Czerwona alarmowa wisienka na torcie: konto na Amazonie mam na inny adres email, niż ten na który przyszedł atak.

Nie ulega wątpliwości, że dwa razy kliknąłem na podejrzane treści, a nie jestem lajkonikiem bezpieczeństwa IT. Phishing był dobrze trafił – akurat w miesiącu, gdy kończył mi się Prime (szansa 8.3%). Dwa, że wcześniej były problemy z kartą, więc uznałem to za ich kontynuację. Bingo i bingo. I do tego zajmowałem się kilkoma rzeczami na raz (co starałem się oddać w początkowych akapitach). Trafiony zatopiony.

Zjebaliśmy z tym internetem, zacznijmy od początku.

004/100 of #100DaysToOffload

Gdańskie Kręcenie Kilometrów


Po raz kolejny startuje w Gdańsku akcja zachęcająca do odstawienia samochodu na codziennych przejazdach. Poza oczywistymi zaletami, w zeszłej edycji mieszkańcy mojej dzielnicy nakręcili najlepszy wynik wśród dużych dzielnic Gdańska. Nagrodą było 30 stojaków rowerowych, których lokalizację wybrałem na początku roku, a montaż powinien właśnie się kończyć.

Sam na codzień jeżdżę hulajnogą, ostatnio też rowerem elektrycznym. Przyznaję, że gdyby nie infrastruktura w postaci dróg dla rowerów, raczej bym tego nie robił. Ale to już temat na osobną notkę.

W Kręć Kilometry dla Gdańska zbiera się punkty. Akcja trwa trzy miesiące, punkty zebrane w październiku liczą się podwójnie, a w listopadzie potrójnie. To aby wynagrodzić osoby dalej jeżdzące jednośladami w gorszej pogodzie.

003/100 of #100DaysToOffload

Leaving BuyPass as an ACME provider


For a long time I've been using BuyPass as TLS certificates provider for ACME. Unfortunately they decided to disengage from this area of services.

There are quite a few ACME providers. Some even look like they could replace BuyPass, which had two strong traits: it is based in Europe and was providing certificates valid for half a year. It looked like Actalis would be a good replacement. They're from Italy and have 1 year certificates, but available in paid plans only.

After some tinkering with cert-manager I was unable to make it work. Some cryptic, discouraging messages like "ACME server URL host and ACME private key registration host differ. Re-checking ACME account registration" and "failed to verify ACME account" err="failed to decode external account binding key data: illegal base64 data at input byte 43" made me look further.

Next shot, ZeroSSL worked straight away. Worth noting – official cert-manager documentation has a tutorial on using ZeroSSL. There are some limitation, but it's fine to me. There's nothing more to write, it just works.

For private services (meant to be accessed only from my devices), I'm using FreeIPA as an ACME provider, of course.

Why not Let's Encrypt? Only because it is not hipster enough.

This is post 001/100 of 100DaysToOffload challenge. I intend to write short posts about nothing in particular, just collected thoughts. Language will vary: Polish, English, maybe Arabic if I get back to learning it.