У меня есть два сервера: наш производственный веб-сервер (freebsd) и резервный сервер (centos). Производственный сервер делает дамп базы данных mysql каждые 3 часа и сжимает файл дампа с помощью bzip2. Итак, у нас есть папка / backups / dumps /, а файлы похожи на database_dump-20120119_152100.bz2.
На нашем сервере резервного копирования у нас есть папка / BackupRaid / webserver /. На этом сервере каждые 3 часа запускается сценарий rsync, синхронизирующий папку / backups / dumps на производственном сервере с папкой / BackupRaid / webserver на сервере резервного копирования. Размер одного из этих файлов резервной копии составляет около 500 МБ. Если распаковать, это 3,2 ГБ.
Этот процесс отлично работает уже много лет. Но совсем недавно я проверил сервер резервного копирования и увидел, что на прошлой неделе есть файл bz2 размером 500 МБ на каждые 3 часа, как и ожидалось, но есть также несжатая версия каждого из этих файлов объемом 3,2 ГБ. Итак, теперь есть двойные файлы, один несжатый и один сжатый для каждого периода времени.
Я узнаю, когда будет следующая синхронизация, сижу и наблюдаю за ней. На сервере резервного копирования я вижу файл «.database_dump-201201119_182100.tlv1d4», что означает, что rsync выполняется. Я смотрю файл, он растет и растет, превышает 500 МБ, которые должны быть. Он приступает к загрузке распакованного файла дампа объемом 3,2 ГБ. Я вхожу на веб-сервер и проверяю папку, с которой он синхронизируется, и в ней всего 500 МБ файлов bz2. Как только он закончит с файлом 3,2 ГБ, он перейдет к загрузке файла bz2 размером 500 МБ.
Так откуда же у него этот несжатый дамп размером 3,2 ГБ? Он действует так, как будто удаленный сервер распаковывает файл перед передачей, передает файл дампа размером 3,2 ГБ на сервер резервного копирования, а затем сервер резервного копирования снова сжимает его до размера 500 МБ.
Я использовал lsof, grepped для имени файла, нашел PID процесса rsync. Проверил PID от ps aux
и, конечно же, это исходило из моего сценария. Мой сценарий - очень простая команда:
#Rsync files, timeout set to 5 seconds
until rsync -avv --progress --partial --timeout=5 "${SOURCE_USER}"@"${SOURCE_SERVER}":"${SOURCE_PATH}" "${TARGET_PATH}";
do echo "Didn't quite get the whole file before an error/timeout occurred. Restarting where it left off..." >&2;
sleep 1;
done
Что происходит??
Похоже, вы используете -a
переключиться с помощью rsync, что приравнивается к -rlptgoD
, который включает рекурсивные, ссылки, время файлов и т. д.
Вдобавок к этому, судя по опубликованной вами команде, похоже, что вы вызываете путь на стороне источника.
Поэтому при использовании пути с -a
или -r
переключатель, rsync синхронизирует все файлы в пути. Я предполагаю, что большой файл также существует в исходном пути, поэтому он также копируется.
Звучит для меня как bzip2
не закончен раньше rsync
начинается. Кстати - вы когда-нибудь удаляли эти дампы с обеих сторон?