Jak wykonać kopię zapasową jednego dużego pliku z małymi zmianami?

9

Jeśli zestaw plików (po kilka GB każdy) i każdy zmienia się nieznacznie każdego dnia (w losowych miejscach, nie tylko informacje dołączane na końcu), jak można je skutecznie skopiować? Mam na myśli w tym sensie, że tylko zmienione części są aktualizowane, a nie całe pliki. Oznaczałoby to różnicę między kopiowaniem niektórych Kb tu i tam lub niektórych GB.

Quora Feans
źródło
Różnica binarna? Myślę, że to jest coś, ale nie sądzę diff, że to zrobi
kot
@cat: diffmoże być w stanie zgłosić różnice, ale tutaj problemem jest skopiowanie małych różnic.
Quora Feans
Cóż, myślałem, że po prostu skopiuj różnice - rsynclepiej
cat

Odpowiedzi:

25

Program rsync właśnie to robi. Ze strony podręcznika:

Słynie z algorytmu transferu delta, który zmniejsza ilość danych przesyłanych przez sieć, wysyłając tylko różnice między plikami źródłowymi a istniejącymi plikami w miejscu docelowym. Rsync jest szeroko stosowany do tworzenia kopii zapasowych i kopii lustrzanych oraz jako ulepszone polecenie kopiowania do codziennego użytku.

hlovdal
źródło
W rzeczywistości rsync faktycznie działa podczas pisania tej odpowiedzi, tworząc kopię zapasową wszystkiego na tym komputerze na moim serwerze plików (z ZFS).
hlovdal
Do celów tworzenia kopii zapasowych chciałbym polecić rdiff-backup ( nongnu.org/rdiff-backup ). Używam go do tworzenia kopii zapasowych czterech różnych maszyn, od kilku lat, z dobrymi wynikami.
Thomas Padron-McCarthy
Wikipedia ma dobre wyjaśnienie, w jaki sposób rsyncporównuje fragmenty plików za pomocą ruchomych sum kontrolnych.
Adam Katz,
Próbowałem rsync, aby „przywrócić” stary obraz dysku twardego VM, na którym zmieniono tylko kilka plików w środku, niestety rsync wydaje się ponownie kopiować cały plik (zajmuje około 3 minut, zapisując ~ 300 MB / s)? rsync -av --progress --partial --inplace arch-test1.qcow2.bak arch-test1.qcow2
feedc0de,
8

Prawdopodobnie potrzebujesz nowoczesnego programu do tworzenia kopii zapasowych. Sprawdź BorgBackup .

Spowoduje to utworzenie wielu kopii zapasowych każdej wersji dużego pliku, ale będzie współużytkować wspólną zawartość między różnymi wersjami, więc całkowite miejsce wykorzystane dla danej wersji dużego pliku będzie tylko nieznacznie większe niż łączne miejsce na dysku dla pojedynczej wersji wersja, przy założeniu, że różne wersje różnią się tylko nieznacznie.

Faheem Mitha
źródło
5

Jeśli jesteś w jakikolwiek sposób ograniczony przez IO, użyj systemu plików takiego jak BTRFS lub ZFS, który bezpośrednio obsługuje przyrostowe kopie zapasowe bez konieczności znajdowania różnic w plikach, takich jak to, rsyncco trzeba zrobić.

Używanie rsyncbędzie powolne i bardzo intensywne we / wy.

Ponieważ jeśli jakakolwiek aplikacja zapisuje zmiany w plikach, jest w jakikolwiek sposób ograniczona przez IO, użycie rsyncspowoduje odebranie znacznych cykli We / Wy od aplikacji, to właśnie dlatego pliki istnieją. A jeśli proces tworzenia kopii zapasowej lub system jest ograniczony rsyncdo operacji we / wy, zabierze cykle we / wy od dostępnej przepustowości.

Tylko Google „rsync jest wolny”. Na przykład: rsync działa bardzo wolno (współczynnik 8 do 10) w porównaniu do cp podczas kopiowania plików z udziału nfs do lokalnego katalogu

Andrew Henle
źródło
Ma to dodatkową zaletę polegającą na zachowaniu wszystkich metadanych bez konieczności ich sprawdzania i zawsze wiedząc, że kopia zapasowa jest tak dobra, jak kopia oryginalna. rsync nadaje się do ogólnego użytku, ale jeśli masz nowoczesny system plików, głupotą byłoby ignorowanie jego zalet.
user121391,