W jaki sposób RSYNC wykonuje przyrostowe kopie zapasowe

14

Skąd rsyncwiadomo, które pliki są zmieniane, a które nie? Czy loguje swoje dane gdziekolwiek w pliku?

Ponieważ chcę tworzyć przyrostowe kopie zapasowe, ale najpierw przeniesie wszystkie pliki.

Więc moje główne pytanie brzmi: czy przesyłam pliki początkowe przez FTP, ale nie przez rsync. Czy rsyncnadal pomija te istniejące pliki lub będzie załadować wszystko na pierwszym biegu.

umläute
źródło

Odpowiedzi:

12

Rsync ma wiele flag, które kontrolują, na co będzie patrzył i co skopiuje do miejsca docelowego. Najczęściej używana jest flaga „-a”, która jest flagą „Archiwum”, prawdopodobnie tego właśnie chcesz. uruchom rsync z flagami „-av” i poproś go o wykonanie pierwszego uruchomienia w stosunku do danych, których kopię zapasową chcesz utworzyć. Następnym razem uruchomi blokową sumę kontrolną pliku i skopiuje tylko części zmodyfikowane w istniejących plikach, skopiuje nowe pliki i usunie pliki, których już nie ma. Sprawdź sekcję opcji „-a” na:

http://linux.die.net/man/1/rsync

Pierwsze uruchomienie będzie intensywnie wykorzystywało przepustowość, kolejne uruchomienia najprawdopodobniej będą intensywnie obciążać procesor, ale zużyją niewielką przepustowość w porównaniu do pierwszego uruchomienia. Chyba że masz dużo rezygnacji z zestawu danych.

Rsync nie dba o to, w jaki sposób masz pliki w źródłowym lub docelowym katalogu, skopiuje tylko zmiany między nimi, chyba że dodasz flagi, aby zrobić coś innego.

Jeśli chcesz zalogować to, co zostało zmienione, możesz użyć opcji „--log-file”. W sumie coś takiego brzmi jak chcesz:

rsync -av --log-file=/var/log/rsync.log -e "ssh -l backup-user" backup-user@source-machine::module /nas01/backups
Ali Chehab
źródło
9

rsync nie robi „przyrostowego”, jest bardziej jak „różnicowy”. nie przenosi zmian (które zakładają pewną znajomość wcześniejszego uruchomienia), przenosi różnice (porównując źródło z plikami docelowymi)

uproszczenie procesu:

  • najpierw sprawdza rozmiar pliku, daty utworzenia / modyfikacji, flagi ... jeśli wszystko jest identyczne, pomiń plik.
  • jeśli nie ma pliku o takiej nazwie w celu, wystarczy skopiować cały plik.
  • jeśli plik docelowy zawiera plik, oblicza sumy kontrolne dla każdego 2 KB pliku i przekazuje go do nadawcy.
  • nadawca porównuje zawartość pliku źródłowego i porównuje z celem, a także przesyła wszelkie dane, których jeszcze nie ma, wraz z odniesieniami do dowolnych dopasowanych danych. dzięki temu cel może zrekonstruować cały plik przy użyciu fragmentów starego celu i nowych bloków.
Javier
źródło
5

rsync nie rejestruje żadnych danych, sprawdza znaczniki czasu modyfikacji pliku, a następnie zawartość. jeśli najpierw prześlesz ftp, wszystko będzie w porządku - rsync nie prześle ponownie wszystkich danych, ale prawdopodobnie przejdzie całą zawartość i naprawi znaczniki czasu. ale znów nie będzie wielkiego transferu.

pQd
źródło
5

Być może jestem pedantyczny, ale przyrostowe kopie zapasowe oznaczają, że najpierw masz pełną kopię zapasową. Następnie masz kopię zapasową plików zmienioną od czasu tej kopii. Następnie masz kolejną kopię zapasową kopii zapasowych zmienioną od poprzedniej itp. Więc potrzebujesz pełnej kopii zapasowej i wszystkich przyrostowych kopii zapasowych od tej.

Tak więc samo użycie trybu archiwizacji nie jest przyrostową kopią zapasową . Myślę, że różnica jest ważna, ponieważ oznacza, że ​​nie można cofnąć się w czasie, aby uzyskać pliki, zanim zostaną zmienione .

Jeśli chcesz zrobić prawdziwą przyrostową kopię zapasową, skorzystaj z opcji takich jak --backup-dir. Oto przykład .

Kyle Brandt
źródło
1
+1 za rozróżnienie między przyrostowymi kopiami zapasowymi a tworzeniem kopii lustrzanych (co domyślnie robi rsync).
śleske
O tak! Odbicie lustrzane było słowem, które chwytałem, dobry telefon :-)
Kyle Brandt
0

Jeśli prawdziwe pytanie brzmi: „Chcę tworzyć przyrostowe kopie zapasowe za pomocą rsync”, dostępnych jest kilka opcji. Używam Dirvish:

http://www.dirvish.org/

Przywracanie jest łatwe, ponieważ zapewnia migawki: używa twardych dowiązań, aby zapewnić pełne migawki, oszczędzając jednocześnie miejsce, w którym plik jest identyczny. Wewnętrznie korzysta z opcji rsync --link-dest:

--link-dest=DIR         hardlink to files in DIR when unchanged

Ponieważ używa rsync, oszczędza również przepustowość sieci (a tym samym czas) tam, gdzie zmiany są bardzo małe. Działa to również, jeśli najpierw utworzysz tar i skradniesz lokalnie utworzony obraz Dirvish, jeśli masz dużo plików i powolny link.

Alphax
źródło