RSync один (архив) файл, который меняется каждый раз - PullRequest
6 голосов
/ 05 марта 2011

Я работаю над утилитой резервного копирования с открытым исходным кодом, которая создает резервные копии файлов и передает их в различные внешние расположения, такие как Amazon S3, Rackspace Cloud Files, Dropbox и удаленные серверы по протоколам FTP / SFTP / SCP.

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

Позвольте мне дать вам краткое изложение того, что происходит при создании резервной копии. По сути, он начнет создавать дамп баз данных, таких как MySQL, PostgreSQL, MongoDB, Redis. Это может занять несколько обычных файлов (например, изображений) из файловой системы. Как только все будет готово, оно объединит все это в один .tar (дополнительно оно сожмет и зашифрует, используя gzip и openssl).

Как только это будет сделано, у нас будет один файл, который выглядит следующим образом:
mybackup.tar.gz.enc

Теперь я хочу перенести этот файл в удаленное местоположение. Цель состоит в том, чтобы уменьшить пропускную способность и стоимость хранения. Итак, давайте предположим, что этот небольшой резервный пакет имеет размер 1GB. Поэтому мы используем rsync, чтобы перенести это в удаленное местоположение и локально удалить резервную копию файла. Завтра будет создан новый файл резервной копии, и выясняется, что за последние 24 часа было добавлено намного больше данных, и мы создаем новый файл mybackup.tar.gz.enc, и похоже, что его размер достигает 1.2GB. .

Теперь мой вопрос: возможно ли передать только те 1021, которые были добавлены за последние 24 часа? Я попробовал следующую команду:

rsync -vhP --append mybackup.tar.gz.enc backups/mybackup.tar.gz.enc

Результат:

mybackup.tar.gz.enc 1,20G 100% 36,69 МБ / с 0:00:46 (xfer # 1, to-check = 0/1)

отправлено 200,01M байт
получено 849,40 Кбайт
8,14Мбайт / с
общий размер 1,20 г
ускорение составляет 2,01

Глядя на sent 200.01M bytes Я бы сказал, что «добавление» данных сработало правильно. Теперь мне интересно, передал ли он весь 1.2GB, чтобы выяснить, сколько и что добавить к существующей резервной копии, или действительно передал только 200MB? Потому что если он передал целое 1.2GB, то я не вижу, насколько он сильно отличается от использования утилиты scp для отдельных больших файлов.

Кроме того, если то, что я пытаюсь сделать, вообще возможно, какие флаги вы рекомендуете? Если это невозможно с rsync, можете ли вы порекомендовать использовать какую-либо утилиту?

Любая обратная связь очень ценится!

Ответы [ 3 ]

8 голосов
/ 24 октября 2012

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

В некоторых версиях gzip есть переключатель --rsyncable, который устанавливает размер блока, на котором работает gzip, таким же, как у rsync, что приводит к немного менее эффективному сжатию (в большинстве случаев), но ограничивает изменения в выходных данных.файл в ту же область выходного файла, что и изменения в исходном файле.

Если он вам недоступен, то обычно лучше rsync распаковать несжатый файл (используя собственное сжатие rsync, если рассматривается пропускная способность)и сжать в конце (если место на диске является соображением).Очевидно, это зависит от специфики вашего варианта использования.

6 голосов
/ 05 марта 2011

Он отправил только то, что говорит, что отправил - только передача измененных частей является одной из основных функций rsync.Он использует некоторые довольно умные алгоритмы контрольной суммы (и отправляет эти контрольные суммы по сети, но это незначительно - на несколько порядков меньше данных, чем при передаче самого файла; в вашем случае, я бы предположил, что это.01 in 200.01M) и передает только те части, которые ему нужны.

Обратите также внимание, что уже существуют довольно мощные инструменты резервного копирования на основе rsync, а именно Duplicity .В зависимости от лицензии вашего кода, возможно, стоит посмотреть, как они это делают.

1 голос
/ 22 октября 2013

New rsync --append будет взламывать содержимое вашего файла, если есть какие-либо изменения в ваших существующих данных. (С версии 3.0.0)

...