Я работаю над утилитой резервного копирования с открытым исходным кодом, которая создает резервные копии файлов и передает их в различные внешние расположения, такие как 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
, можете ли вы порекомендовать использовать какую-либо утилиту?
Любая обратная связь очень ценится!