Используя облачный носитель данных (продукт Strato HiDrive), я использую схему резервного копирования с использованием rsync
. Во время работы большая часть файлов моего локального сервера резервируется в облаке с помощью cronjob. Мой скрипт резервного копирования активно использует возможность rsync не копировать неизмененные файлы, а вместо этого жестко связывать их. Это выглядит как
rsync -av -M--perms \
$inp_sig $REMOTE_USER@$RSYNC_HOST:$REMOTE_BASIS/$CURRENT_SNAPSHOT \
--exclude-from=$EXCLUDE_FILES \
--link-dest=$link_destination/
где все показанные переменные заранее установлены в правильные значения сценарием. Все это работает очень хорошо.
Ночью запускается другой скрипт, который очищает снимки, которые больше не используются. Для задачи удаления я использую другой скрипт, в основе которого лежит следующая команда rsync
:
empty_dir=`mktemp -d`
rsync -d --delete-before --inplace --perms \
$empty_dir/ $REMOTE_USER@$RSYNC_HOST:$REMOTE_BASIS/$snap/ || \
log_rsync ERROR: could not delete $snap
rm $empty_dir
Этот тоже работает - почти. Проблема в том, что при удалении rsync
все разрешения на все связанные файлы сводятся на нет (все они имеют 644
разрешения, в то время как у некоторых из них должно быть 444
).
Я уже несколько дней занимаюсь этой проблемой, работая с опциями удаления rsync
в разных комбинациях. Я пробовал -rd
против -r
или -a
; --delete
vs. --delete-before
, пока безрезультатно. Из справочной страницы я узнал, что опция --inplace
должна помочь:
Эта опция изменяет способ, которым rsync передает файл, когда его данные должны быть обновлены: вместо метода по умолчанию создания новой копии файла и перемещения его на место, когда он завершен, rsync вместо этого записывает обновленные данные непосредственно в файл назначения. ... Жесткие ссылки не битые.
Это заставляет меня думать , что --inplace
не используя должно привести к разрушению жестких связей. Но в нашем случае жесткие ссылки все равно не работают (для файлов с разными битами разрешений).
У них также есть интерфейс cifs
который идеально подходит для небольшого числа файловых операций. Но rm -rf
в каталоге моментальных снимков ни в коем случае не осуществим - он длится часами для типичного резервного снимка, и мне приходится выполнять от 16 до 20 удалений за ночь. Вариант rsync работает около двух минут.
Итак, я потерян из-за моего ограниченного понимания или подразумеваемых ограничений rsync
? Или мне просто не повезло из-за плохой реализации rsync
на стороне провайдера?