Chciałbym mieć zsynchronizowaną kopię jednego folderu ze wszystkimi jego poddrzewem.
Powinien działać automatycznie w ten sposób: za każdym razem, gdy tworzę, modyfikuję lub usuwam rzeczy z oryginalnego folderu, te zmiany powinny być automatycznie stosowane do folderu synchronizacji.
Jakie jest najlepsze podejście do tego zadania?
BTW: Jestem na Ubuntu 12.04
Ostatecznym celem jest oddzielna kopia zapasowa w czasie rzeczywistym, bez użycia dowiązań symbolicznych lub montowania. Użyłem Ubuntu One do synchronizacji danych między moimi komputerami i po chwili coś poszło nie tak i wszystkie moje dane zostały utracone podczas synchronizacji.
Pomyślałem więc, aby dodać krok dalej, aby zachować kopię zapasową moich danych:
- Przechowuję dane w „folderze A”
- Potrzebuję odpowiedzi na moje obecne pytanie, aby utworzyć jednokierunkową synchronizację „folderu A” do „folderu B” (
cron
skrypt zrsync
? Może być?). Potrzebuję, aby był tylko jednokierunkowy z A do B, żadne zmiany w B nie mogą być stosowane w A. - Po prostu utrzymuję synchronizację „folderu B” z Ubuntu One.
W ten sposób każda zmiana w A zostanie zastosowana do B, która zostanie wykryta z U1 i zsynchronizowana z chmurą. Jeśli coś pójdzie nie tak i U1 usunie moje dane z B, zawsze mam je na A.
Zainspirowany komentarzami Lanzza, innym pomysłem mogłoby być uruchomienie rsync przy starcie w celu wykonania kopii zapasowej zawartości folderu w Ubuntu One i uruchomienie Ubuntu One dopiero po zakończeniu rsync.
Co myślicie o tym? Po czym poznać zakończenie rsync?
źródło
rsync
za pośrednictwem cron.Odpowiedzi:
Możesz użyć
inotifywait
(zmodify,create,delete,move
włączonymi flagami) irsync
.while inotifywait -r -e modify,create,delete,move /directory; do rsync -avz /directory /target done
Jeśli nie masz
inotifywait
w swoim systemie, uruchomsudo apt-get install inotify-tools
źródło
-e ssh user@remote:/target
do,rsync
jeśli chcesz używać SSH jako transportu, aby uzyskać dostęp do zdalnego komputera.rsync -avz --delete --exclude-from=.rsyncignore /directory user@server:path
. Jednak chciałem napisać prostą odpowiedź..git
folder.modify,create,delete,move
Potrzebujesz czegoś takiego: https://github.com/axkibe/lsyncd Jest to narzędzie, które łączy rsync i inotify - to pierwsze jest narzędziem, które tworzy kopię lustrzaną katalogu do ostatniego bitu z ustawionymi odpowiednimi opcjami. Ta ostatnia mówi jądru, aby powiadomiło program o zmianach w katalogu lub pliku. To mówi:
Ale - według Digital Ocean na https://www.digitalocean.com/community/tutorials/how-to-mirror-local-and-remote-directories-on-a-vps-with-lsyncd - powinno być repozytorium Ubuntu!
Mam podobne wymagania, a to narzędzie, którego jeszcze nie wypróbowałem, wydaje się odpowiednie do tego zadania.
źródło
Wystarczy prosta modyfikacja odpowiedzi @silgon:
while true; do inotifywait -r -e modify,create,delete /directory rsync -avz /directory /target done
(Wersja @silgon czasami ulega awarii na Ubuntu 16, jeśli uruchomisz ją w cron)
źródło
Możesz skorzystać z fschange . To powiadomienie o zmianie systemu plików Linuksa. Kod źródłowy można pobrać z powyższego linku, możesz go samodzielnie skompilować.
fschange
może być używany do śledzenia zmian plików poprzez odczyt danych z pliku proc (/ proc / fschange). Kiedy dane są zapisywane do pliku, fschange podaje dokładny interwał, który został zmodyfikowany, zamiast po prostu mówić, że plik został zmieniony. Jeśli szukasz bardziej zaawansowanego rozwiązania, proponuję sprawdzić Resilio Connect . Jest wieloplatformowy, zapewnia rozszerzone opcje użytkowania i monitorowania. Ponieważ jest oparty na BitTorrent, jest szybszy niż jakiekolwiek inne istniejące narzędzie do synchronizacji. Został napisany w ich imieniu.źródło
Używam tego darmowego programu do synchronizacji lokalnych plików i katalogów: https://github.com/Fitus/Zaloha.sh . Repozytorium zawiera również proste demo.
Dobra uwaga: jest to skrypt powłoki bash (tylko jeden plik). Nie jest to czarna skrzynka, jak inne programy. Jest tam również dokumentacja. Ponadto, mając pewne talenty techniczne, można go „zgiąć” i „zintegrować”, aby stworzyć ostateczne rozwiązanie, które lubisz.
źródło