Czy można zmusić Unison do ignorowania opraw mocujących lub twardych łączy?

2

Szukam najlepszego sposobu synchronizacji mojego katalogu domowego z dyskiem USB o pojemności 120 GB. Połów jest, że używam powiązań wierzchowce (które nie chcą być przestrzegane) i dowiązania twarde (które nie mają być zachowane ). Rsync może to zrobić, ale jest to jeden kierunek, podczas gdy mam zmiany po obu stronach.

Unison wygląda na to, że może inteligentnie obsłużyć synchronizację dwukierunkową, ale nie mogę znaleźć żadnej opcji, aby ograniczyć go do jednego systemu plików lub zignorować montowania powiązań, a dokumentacja mówi „ Unison nie rozumie twardych dowiązań ”. Jednak domyślnie unison używa rsync do wykonania transferu. Czy istnieje sposób na wykorzystanie rozumienia przez rsync twardych dowiązań i wiązania mountów?

Alternatywnie może ktoś wskazać mi przykład ręcznej synchronizacji dwukierunkowej przy użyciu rsync i diff? Czy coś podobnego?

Uwaga: w przeszłości korzystałem z FreeFileSync, ale coś poszło nie tak i prawie straciłem zarówno moje pliki, jak i kopię zapasową! To była prawdopodobnie moja wina, ale teraz boję się korzystania z FreeFileSync.

Jesse the Wind Wanderer
źródło
Moje „ręczne” mam na myśli np. Napisanie niestandardowego skryptu, który używa diff lub podobnego do znalezienia zmian, a następnie rsync, aby wprowadzić zmiany.
Jesse the Wind Wanderer

Odpowiedzi:

3

Podejrzewam, że używając samego Unisona odpowiedź na twoje pytanie brzmi „ nie” . Zasadniczo trudno jest powiedzieć Unisonowi, aby zsynchronizował lub nie zsynchronizował plików / katalogów z właściwością, której nie można określić za pomocą pewnego rodzaju dopasowania wzorca w ich nazwie , np. Katalogów, które w twoim przypadku są montowanymi łącznikami lub dowiązaniami stałymi.

Nie jest poprawne stwierdzenie „ domyślnie unison używa rsync do wykonania transferu ”. Unison używa tego samego podstawowego algorytmu / protokołu co rsync , ale używa własnej implementacji; rzeczywisty rsyncplik wykonywalny nie jest wywoływany, więc nie możesz odwoływać się do jego funkcji rsynci nie będziesz w stanie rozwiązać problemu w ten sposób. Chociaż jeśli rsyncmoże to zrobić, to wyobrażam sobie, że Unison mógłby to zrobić, gdyby ktoś napisał tę funkcję.

Ponieważ, jak zauważyłeś, Unison nie rozumie twardych linków, myślę, że po prostu nie masz szczęścia. Możesz jednak użyć zewnętrznego programu do sprytnego zignorowania montowania powiązań. Możesz użyć findmnt, aby wyświetlić listę katalogów, które są podłączeniami , a następnie wstaw linię ignore = Path /path/to/bind/mountw swoim profilu Unison dla każdego podłączenia.

Ponadto, ponieważ wygląda na to, że zastanawiasz się nad zrobieniem tego ręcznie za pomocą skryptu lub czegoś takiego, powinieneś być świadomy narzędzi inotify .

Mike Pierce
źródło
Dzięki Mike, oczywiście nie na to liczyłem, ale to bardzo dobrze wyjaśnione. Więc skoro muszę napisać skrypt lub coś w tym celu, czy znasz jakieś przykładowe skrypty, które mógłbym poprawić? Z pewnością nie jestem jedyną osobą, która chciała zsynchronizować dwa drzewa katalogów z oboma dowiązaniami twardymi i powiązać w nich montowania.
Jesse the Wind Wanderer
@JessetheWindWanderer Na pewno nie jesteś. :) Ale niestety nie znam takich skryptów.
Mike Pierce
0

Możesz zignorować montowania powiązań, po prostu dając Unisonowi widok katalogu bez punktu montowania, używając montowania powiązań. Uważaj na propagację montowania, która po włączeniu (domyślnie Systemd) będzie propagować montowanie między montowaniami powiązań.

Timothy Baldwin
źródło