Do Syncthing miałem w życiu kilka podejść i zawsze kończyło się tym, że sobie odpuszczałem, bo za skomplikowane, bo mi się nie chce, bo nie działa... no ale głównie bo za skomplikowane.
Ostatnio jednak powiedziałem sobie: wóz albo przewóz. Spróbujmy dociągnąć tę sprawę do końca.
I udało się.
Cóż to takiego, ten cały Syncthing? Jest to kawałek oprogramowania, którego jedynym zadaniem jest dbanie o to, żeby pliki w folderze na komputerze A oraz pliki folderze na komputerze B były ze sobą zsynchronizowane niezależnie od tego jakie to są pliki, ile ich jest, ani w jaki sposób komputery owe "widzą się" przez sieć.
Syncthing działa w sieci lokalnej, publicznej, zza firewalla, zza NAT-u i co tam, panie, jeszcze. Generalnie jeżeli obydwa komputery są podłączone do Internetu, będą się "widziały" w Syncthing. Przy czym synchronizacja jest bezpieczna (dane w locie są solidnie szyfrowane), dość szybka i całkiem logiczna; jedyna trudność to - zacząć. Potem już z górki.
Na ogół robimy coś z jakiegoś powodu[citation needed]. Raczej trudno jest mi sobie wyobrazić pana Staszka z warzywnego, który między jednym a drugim selerem nagle stwierdzi ni z gruszki ni z pietruszki: a, zainstaluję sobie Syncthing! W moim przypadku motywem przewodnim były ograniczenia "dużych" klientów chmurowych, takich jak Dropbox czy OneDrive, jeśli idzie o współdzielenie całych folderów, w połączeniu z aplikacją Obsidian na urządzeniach mobilnych, która do poprawnej pracy potrzebuje dostępu do całego folderu, a nie tylko do pojedynczych plików. A duże chmurowce owszem, potrafią synchronizować całe foldery, ale wyłącznie wewnątrz aplikacji klienckiej, czyli widać folder w kliencie Dropbox, ale w aplikacji Files (androidowy odpowiednik windowsowego Explorera) już nie. Folder synchronizowany przez OneDrive również nie jest dostępny "na zewnątrz" mobilnego klienta OneDrive. Jest to dość frustrujące, ale cozrobisznicniezrobisz.
Albo właśnie zrobisz.
Najpierw ściągamy instalkę Syncthing i instalujemy. Jeżeli wszystko poszło poprawnie, po wejściu na http://127.0.0.1:8384 powinniśmy zobaczyć interfejs użytkownika, w którym możemy zarządzać synchronizacją.
A więc tak: po pierwsze dodajemy do ST (będę pisał ST zamiast Syncthing bo mi tak krócej) folder - lub foldery - do synchronizacji. Następnie dodajemy inne urządzenia (na których też powinniśmy najpierw zainstalować ST - na przykład telefon, tablet, czy inny komputer). To drugie będzie wymagało zeskanowania kodu QR, eventualnie przesłania długiego (56 znaków plus myślniki) identyfikatora jakimś innym kanałem.
Tu - uwaga - wielka zaleta ST w porównaniu z większością konkurencji: dodanie nowego urządzenia musi być przeprowadzone dwukrotnie: najpierw z komputera X dodajemy komputer Y, następnie z komputera Y dodajemy komputer X. Zapobiega to nieprzyjemnej sytuacji, kiedy ktoś jakimś cudem przechwyci kody identyfikacyjne któregoś z urządzeń i będzie próbował dodać swoje własne urządzenie, żeby nam wykraść dane.
Wreszcie w ustawieniach współdzielenia folderu zaptaszkowujemy te urządzenia, z którymi chcemy dany folder dzielić. W tym momencie na urządzeniu "z drugiej strony" pojawia się zapytanie czy aby na pewno wyrażamy zgodę, wskazujemy też lokalizację folderu w docelowym systemie plików i już za chwilę rozpoczyna się proces synchronizacji. W moim przypadku synchronizuję folder z sejfami Obsidian (na chwilę obecną mam cztery sejfy: trzy własne i jeden przykładowy z Sieci), wszystkiego raptem 200MB - i wszystko działa aż miło. Domowy pecet jest w centrum tego bajzlu, a do niego podpięte są przez ST smartfon oraz tablet.
Opóźnienia? Oczywiście, są. Zrobiłem eksperyment i zmierzyłem czas między wykonaniem zmiany w pliku na smartfonie a pokazaniem się tej zmiany na tablecie (czyli plik musiał najpierw zostać zsynchronizowany z pecetem, a potem z tabletem) - opóźnienie przez sieć lokalną (po WiFi) wynosi pi x drzwi 8-10 sekund. Nie najgorzej. Opóźnień przez WAN jeszcze nie mierzyłem.
Jedyna - na szczęście maleńka - łyżka dziegciu to sposób, w jaki ST radzi sobie z konfliktami synchronizacji, których w tego typu sytuacjach uniknąć się nie da. Pojawiają się one wtedy, gdy zmienię tę samą notkę w Obsidianie na dwóch różnych urządzeniach w bardzo krótkim odstępie czasu. Co prawda trzeba się naprawdę postarać, żeby taki konflikt wygenerować, więc w codziennym użytkowaniu będą się one pojawiać nader rzadko (niektórzy użytkownicy ST wspominają, że przy setkach tysięcy synchronizowanych plików mają średnio coś między 1 a 10 konfliktów rocznie, ale wiadomo, wszystko zależy od tego jak często zmieniamy ten sam plik na dwóch różnych maszynach).
No dobra. Załóżmy jednak, że taki konflikt się pojawi. Dajmy na to, komputer A zmieni pierwszą linijkę w pliku main.py
i zanim ST zdąży te zmianę rozpropagować, komputer B zmieni ten sam plik ale w linijce drugiej. Cyk - mamy konflikt. Co ST w tym momencie zrobi, żeby ten konflikt rozwiązać?
Otóż - nic. Absolutnie nic. Po prostu zapisze obydwie wersje tego pliku pod dwiema różnymi nazwami: main.sync-conflict-<data>-<godzina>-<nazwa-komputera>.py
- i już. Nawet nas nie powiadomi o tym, że taki konflikt wystąpił (aczkolwiek informacja o konflikcie pokaże się w UI aplikacji, ale kto by tam zaglądał, nieprawdaż). Od tej pory obydwie wersje pliku będą się synchronizowały między komputerami do usranej śmierci, albo aż nie rozwiążemy problemu manualnie. Oprócz tego rzecz jasna na obydwu komputerach pozostaną pliki z oryginalną nazwą (czyli w naszym przykładzie main.py
) i różnymi zawartościami.
Konflikt synchronizacji pojawia się również wówczas, gdy jeden komputer skasuje plik, a drugi w tym samym czasie go zmieni. Wówczas ST założy, że drugi komputer "ma rację" i skasowany plik za chwilę pojawi się wszędzie z powrotem, z nową zawartością. Jest to podejście zachowawcze - mi się osobiście podoba, choć wyobrażam sobie scenariusze, kiedy może przeszkadzać.
Na zakończenie jeszcze notka o zużyciu baterii, CPU, łącza sieciowego.
Jeżeli dodajemy do systemu duży folder (gigabajty, terabajty...), to zanim się on zsynchronizuje, wszystkie urządzenia będą się grzały do czerwoności, bo trzeba przecież powyliczać hasze kryptograficzne każdego pliku, a to kosztuje cykle procesora (czyli też - więcej prundu). Trzeba też wszystko przesłać przez sieć, więc jeżeli mamy limity transferu u operatora, możemy skończyć z ręką w nocniku.
Ale potem, okazuje się, ST "zjada" wyjątkowo mało zasobów. Gdzie tylko może, kompresuje dane w celu zaoszczędzenia łącza. Cykle procesora też konsumuje tak bardziej jak przy strajku głodowym. Ogólnie - miód, malina.
I to wszystko za darmo! No chyba że ktoś ma nadwyżkę na koncie, to może wesprzeć ST datkiem.
Piszę to ledwie w kilka dni po postawieniu ST na moich klamotach, więc być może w dłuższym używaniu wyjdą jakieś babole (i wtedy będzie o czym pisać), ale póki co jestem zachwycony i jeżeli system się sprawdzi, rozważę rezygnację przynajmniej z jednego z dostawców chmurowych. Zawsze to parę groszy w kieszeni...
Wiele kopii online to oczywiście nie backup, ale warto zauważyć, że opisany setup sprawi, że będziemy bardziej podatni na przypadkowe skasowanie danych czy skutki ransomware.
Oczywiście. Dlatego nadal synchronizuję ten folder również w Dropbox, gdzie mogę przywrócić każdą wersję pliku (nawet skasowanego) z ostatnich 180 dni.
„łyżka dziegciu to sposób”
Dla mnie to jest dealbreaker.
W sensie, że dziegieć jest niekompatybilny z łyżką, czy jak?
Testowałem syncthing i jest super, ale wymaga, żeby oba komputery były włączone – co jest zupełnie logiczne, bo program przerzuca wszak pliki bezpośredniego z jednego twardego dysku na drugi. U mnie jednak komputer domowy jest zwykle wyłączony, a i zdarza się, że wyłączam ten roboczy przed wyjściem z pracy.
Szukałem więc dalej i okazało się, że OneDrive jest zaskakująco (jak na Microsoft) dobrym sposobem na asynchroniczne synchronizowanie. Ma klienta nie tylko na Linuksa, ale również na FreeBSD, który postawiłem sobie na domowym kompie. Do łączenia się z innymi chmurami używam natomiast rclone, fantastycznego poleceniowierszowego narzędzia, które obsługuje pCloud, Dropboksa i wiele innych.
OneDrive daje radę, zgadza się, używam służbowo i prywatnie, i jestem bardzo zadowolony. Ale klient na Androida nie pozwala na synchronizowanie z chmurą lokalnego folderu. A właśnie tego potrzebuję pracując z Obsidianem.
Sam korzystam od wielu miesięcy z ST i jestem z nich zadowolony. mam kopie na smartfonie, na qnapie czy na lapku. niestety na samym początku straciłem backup zdjęć xD (źle odczytałem informacje zwrotne z ST). 😉
1. Powiadomienia o konfliktach pokazuje Synctrayzor, który robi ikonkę w trayu i pokazuje, jak coś się ze sobą pogryzie.
2. @Borys – problem (u mnie!) rozwiązuje trzecia (w sumie, to piąta, bo ST mam na dwóch desktopach, laptopie i telefonie) instalacja Syncthing na NASie. Który z natury rzeczy jest stale włączony i stanowi coś w rodzaju centralnego repozytorium katalogów synchronizowanych.
3. ST obsługuje wersjonowanie i także przechowuje wersje skasowanych plików, to da się ustawić.
At your service, fan SyncThing 😉