Я работаю над утилитой резервного копирования с открытым исходным кодом, которая создает резервные копии файлов и передает их в различные внешние хранилища, такие как 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.20G 100% 36.69MB/s 0:00:46 (xfer#1, to-check=0/1)
отправлено 200,01 млн байт
получено 849,40 тыс. байт
8,14 млн байт/с
общий размер 1,20 ГБ
ускорение 2,01
Глядя на sent 200.01M bytes
, я бы сказал, что "добавление" данных работает правильно. Теперь мне интересно, перенес ли он все 1.2GB
, чтобы выяснить, сколько и что добавить к существующей резервной копии, или он действительно перенес только 200MB
? Потому что, если он передал все 1.2GB
, то я не вижу, чем он сильно отличается от использования утилиты scp
для отдельных больших файлов.
Кроме того, если то, что я пытаюсь сделать, вообще возможно, какие флаги вы рекомендуете? Если это невозможно с rsync
, есть ли какая-нибудь утилита, которую вы могли бы порекомендовать вместо этого?
Любая обратная связь очень ценится!