Отдельный (архивный) файл RSync, который меняется каждый раз
Я работаю над утилитой резервного копирования с открытым исходным кодом, которая создает резервные копии файлов и передает их в различные внешние хранилища, такие как 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
по размеру.
Теперь мой вопрос: можно ли передать только 200MB
что было добавлено за последние 24 часа? Я попробовал следующую команду:
rsync -vhP --append mybackup.tar.gz.enc backups/mybackup.tar.gz.enc
Результат:
mybackup.tar.gz.enc 1,20 ГБ 100% 36,69 МБ / с 0:00:46 (xfer#1, to-check=0/1)
отправлено 200.01M байтов
получил 849.40K байт
8,14M байт / сек
общий размер 1,20 г
ускорение составляет 2,01
Глядя на sent 200.01M bytes
Я бы сказал, что "добавление" данных работает правильно. Теперь мне интересно, передал ли он весь 1.2GB
чтобы выяснить, сколько и что добавить к существующей резервной копии, или она действительно только передает 200MB
? Потому что, если он передал весь 1.2GB
тогда я не вижу, как это сильно отличается от использования scp
утилита для одиночных больших файлов.
Кроме того, если то, что я пытаюсь сделать, вообще возможно, какие флаги вы рекомендуете? Если это невозможно с rsync
, есть ли какая-либо утилита, которую вы можете порекомендовать использовать вместо?
Любая обратная связь высоко ценится!
3 ответа
Он отправил только то, что говорит, что отправил - только передача измененных частей является одной из основных функций rsync
, Он использует некоторые довольно умные алгоритмы контрольной суммы (и отправляет эти контрольные суммы по сети, но это ничтожно мало - данных на несколько порядков меньше, чем при передаче самого файла; в вашем случае, я бы предположил, что это .01
в 200.01M
) и переносит только те части, которые ему нужны.
Также обратите внимание, что уже существуют довольно мощные инструменты резервного копирования, основанные на rsync, а именно, Duplicity. В зависимости от лицензии вашего кода, возможно, стоит посмотреть, как они это делают.
Природа gzip такова, что небольшие изменения в исходном файле могут привести к очень большим изменениям результирующего сжатого файла - gzip будет каждый раз принимать свои собственные решения относительно наилучшего способа сжатия данных, которые вы ему предоставляете.
Некоторые версии gzip имеют --rsyncable
переключатель, который устанавливает размер блока, с которым работает gzip, таким же, как rsync, что приводит к несколько менее эффективному сжатию (в большинстве случаев), но ограничивает изменения выходного файла той же областью выходного файла, что и изменения в исходный файл.
Если он вам недоступен, то обычно лучше rsync распаковать несжатый файл (используя собственное сжатие rsync, если учитывается пропускная способность), и сжать в конце (если рассматривается дисковое пространство). Очевидно, это зависит от специфики вашего варианта использования.
Новый rsync --append сломает содержимое вашего файла, если какие-либо изменения в ваших существующих данных. (С версии 3.0.0)