Как сделать резервную копию одного большого файла с небольшими изменениями?

9

Если набор файлов (по несколько ГБ каждый) и каждый немного меняется каждый день (в случайных местах, а не только информация, добавляемая в конце), как это может быть эффективно скопировано? Я имею в виду, в том смысле, что обновляются только измененные части, а не целые файлы. Это будет означать разницу между копированием нескольких килобайт здесь и там или нескольких гигабайт.

Quora Feans
источник
Бинарный дифференциал? Я думаю, что это вещь, но я не думаю, diffчто сделает это
кошка
@cat: diffможет сообщать о различиях, но здесь проблема заключается в копировании небольших различий.
Quora Feans
Ну, я подумал, просто скопируйте различия - rsyncлучше
кошка

Ответы:

25

Программа rsync делает именно это. Со страницы руководства:

Он известен своим алгоритмом дельта-передачи, который уменьшает объем данных, передаваемых по сети, отправляя только различия между исходными файлами и существующими файлами в месте назначения. Rsync широко используется для резервного копирования и зеркалирования, а также как улучшенная команда копирования для повседневного использования.

hlovdal
источник
Фактически, rsync фактически работает во время написания этого ответа, сохраняя все данные на этом компьютере на моем файловом сервере (с помощью zfs).
Хловдал
В целях резервного копирования я бы рекомендовал rdiff-backup ( nongnu.org/rdiff-backup ). Я использую его для резервного копирования четырех разных машин уже несколько лет с хорошими результатами.
Томас Падрон-Маккарти
В Википедии есть хорошее объяснение того, как rsyncсравнивать куски файлов, используя скользящие контрольные суммы.
Адам Кац
Я попытался rsync «вернуться» к образу старого жесткого диска ВМ, в котором были изменены только несколько файлов, к сожалению, rsync, кажется, снова копирует весь файл (на ~ 3 минуты записи ~ 300 МБ / с)? rsync -av --progress --partial --inplace arch-test1.qcow2.bak arch-test1.qcow2
feedc0de
8

Возможно, вам нужна современная программа резервного копирования с дедупликацией. Проверьте BorgBackup .

Это создаст несколько резервных копий для каждой версии вашего большого файла, но будет распределять общий контент между различными версиями, поэтому общее пространство, используемое для данной версии вашего большого файла, будет лишь немного больше, чем общее дисковое пространство для одного версия, при условии, что разные версии отличаются незначительно.

Фахим Митха
источник
5

Если вы каким-либо образом ограничены IO, используйте файловую систему, такую ​​как BTRFS или ZFS, которая напрямую поддерживает инкрементное резервное копирование без необходимости искать различия в файлах, например, что rsyncнужно делать.

Использование rsyncбудет медленным и очень интенсивным вводом-выводом.

Потому что, если какое-либо приложение записывает изменения в файлы, каким-либо образом ограничено вводом-выводом, использование rsyncотнимет у приложения значительные циклы ввода-вывода, и именно поэтому файлы существуют. И если ваш процесс или система резервного копирования ограничены вводом-выводом, rsyncэто приведет к сокращению циклов ввода-вывода от доступной пропускной способности резервного копирования.

Просто гугл "rsync медленный". Например: rsync очень медленный (фактор от 8 до 10) по сравнению с cp при копировании файлов из nfs-share в локальный каталог

Эндрю Хенле
источник
Это дает дополнительное преимущество: сохраняются все метаданные без необходимости их проверки и всегда известно, что ваша резервная копия так же хороша, как и оригинальная копия. rsync подходит для общего использования, но если у вас современная файловая система, было бы глупо игнорировать ее преимущества.
user121391