Z powodzeniem korzystam z rsync do synchronizacji katalogów domowych między laptopem a netbookiem (oba używają ext4 z Linuksem). Moim jedynym problemem jest to, że od czasu do czasu lubię całkowicie reorganizować niektóre katalogi, a rsync traktuje to jako usuwanie i tworzenie nowych plików, co czyni je bardzo powolnymi i nieefektywnymi.
Czy ktoś wie o dobrym oprogramowaniu, które dobrze obsługuje przenoszenie plików?
Przekonałem się, że unison powinien być w stanie to zrobić, ale wydaje się, że nie działa w praktyce. Testowałem unison , synchronizując dwa lokalne katalogi, każdy z dużym plikiem, i nadal wykrywa mój ruch jako usunięcie + tworzenie i działał nawet wolniej niż rsync .
Co więcej, jeśli dobrze pamiętam z mojego spojrzenia na kod źródłowy unisona kilka miesięcy temu, próbowałem zrobić coś takiego, jak robienie sum sha - i nie chcę, żeby moje idealne rozwiązanie generowało sha sumy - to zbyt wolno na duże pliki / katalogi. Chciałbym coś, co zauważy takie rzeczy jak:
„Wygląda na to, że ostatni źródłowy odpowiednik tego pliku został usunięty i gdzie indziej w drzewie źródłowego katalogu znajduje się nowy plik, który ma tę samą datę, rozmiar i numer i-węzła, więc zakładam, że był to ruch i przesuń odpowiednio jego docelowy odpowiednik zamiast usuwać i kopiować ”.
Ważne jest dla mnie to, że mogę szybko zsynchronizować te maszyny.
Jakieś sugestie?
źródło
Unison robi, co chcesz, ale tylko do zdalnej synchronizacji. Spróbuj użyć
ssh://localhost/path/to/dir
jako jednego z korzeni.Unison opiera swoje decyzje na zawartości pliku, nie śledzi numerów i-węzłów.
źródło
Pliki rsync można obsługiwać przeniesionymi i zmienionymi nazwami plików, jeśli systemy plików w katalogu źródłowym i docelowym obsługują twarde łącza. Chodzi o to, aby rsync zrekonstruował twarde linki przed rzeczywistym transferem. Możesz znaleźć dobre wyjaśnienie tutaj
Skończyło się na prostym rozwiązaniu, które tworzy ukryte drzewo twardych linków w katalogu źródłowym / docelowym, podstawowy skrypt może wyglądać tak:
Mam przykładowy skrypt na GitHub . Ale radzę przeprowadzić dużą ilość testów przed użyciem tej metody w produkcji.
źródło
Jeśli chcesz synchronizować pliki między wieloma komputerami, możesz po prostu użyć scentralizowanego systemu kontroli wersji, takiego jak Subversion (lub FSVS, który używa SVN jako backendu). Zaletą jest to, że wszystko w twoim / home (które dodajesz do kontroli wersji) jest następnie wersjonowane i może być łatwo zsynchronizowane z innymi komputerami lub przywrócone.
źródło
lsyncd obsługuje również przeniesione pliki z zachowaniem rsync + ssh, chociaż nieco wadliwe (dostaję około 15% ruchów traktowanych jako usuwanie / kopiowanie, ale nie wiem dlaczego). Przez większość czasu działa.
źródło