Используя облачный носитель данных (продукт 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 на стороне провайдера?
