Я использую команду rsync для инкрементного резервного копирования. Моим требованием является инкрементное резервное копирование измененных файлов в другом каталоге с тем же именем местоположения с текущей датой, но когда я использую rsync, оно сохраняет инкрементное резервное копирование в полном резервном копировании, а не в каталоге с именем даты. Я использую следующую команду для инкрементного резервного копирования.
rsync -av --backup --backup-dir=/mnt/`date +%Y.%m.%d.%T` /etc/ /mnt/
Rsync выполнит возрастающие резервные копирования по умолчанию, но вероятно не, так что в итоге Вы ожидаете. Команда
rsync -av /etc/ /mnt/
передает только измененные файлы. Для этого это сравнивает содержание /etc
и /tmp
. Если Вы добавляете вычисленную дату, например, /tmp/$(date)
, целевая папка пуста и поэтому, все файлы будут переданы снова.
опции --backup
и --backup-dir
только полезны при необходимости в резервном копировании файлов которые были бы удалены, если Вы запустите эти rsync
команда с опцией --delete
.
Сводка
Для создания истинных возрастающих резервных копий, Вам будет нужен другой инструмент, например, rsnapshot
.
Зависит от того, под чем Вы подразумеваете возрастающий . Один прием должен использовать hardlinks на диске EXT4. Это означает, что, если файлы не изменяются, они появятся в каждом снимке, но будут только существовать (и будут скопированы в диск однажды). Вот сценарий, который я использовал прежде:
#!/bin/sh
NEW_FOLDER="$(date +%F\ %H-%M-%S)"
rsync --archive --human-readable --progress --link-dest /media/current "/etc/" "/media/incomplete/
mv /media/incomplete /media/'$NEW_FOLDER'
rm -f /media/current
ln -s /media/'$NEW_FOLDER' /media/current
При помощи неполный папка, если резервное копирование останавливается на полпути через (очень полезный для больших резервных копий), оно возьмет снова, когда Вы затем попробуете. Можно затем просмотреть каждую папку как полное инкрементное резервное копирование. Это - аналогичный подход к Apple Time Machine.
, Если Вы не побеспокоены об использовании hardlinks, чтобы оставить свободное место, и не возражать против дублирования файла, удалить --link-dest /media/current
установка.
Я искал ответ здесь раньше и сначала выбрал ответ @Hadog. Он работает отлично, пока вы не запустите rsync через сетевое соединение, и при подключении не возникнет сбоев. Rsync просто выйдет и больше не будет пытаться. Проблема в том, что хотя это и не удается, символическая ссылка изменяется на новую несуществующую папку (неработающая ссылка), что приводит к тому, что rsync игнорирует --link-dest. Это означает, что полная копия создается снова вместо использования жестких ссылок.
Вот мой вариант сценария @Hadog с улучшенной обработкой ошибок:
#!/bin/sh
# determine how the new folder should be called
NEW_FOLDER="$(date +%F\ %H-%M-%S)"
rsync --archive --human-readable --progress --link-dest $PWD/current source "$PWD/destination"
# get exit code of rsync. -> don't put anything between this line and the rsync command!
rsync_exit_code=$?
# if the rsync command exited with a code that we consider "successfull" ...
if [ "$rsync_exit_code" -eq "0" ] || [ "$rsync_exit_code" -eq "23" ] || [ "$rsync_exit_code" -eq "24" ]
then
# move files to their actual destination
mv $PWD/incomplete $PWD/"$NEW_FOLDER"
# remove the old symlink
rm -f current
# set the symlink to the newest backup that we have just created
ln -s $PWD/"$NEW_FOLDER" $PWD/current
else
echo "No moving of incomplete folder! Rsync exited with code $rsync_exit_code"
fi
Существенное отличие заключается в условии. Мы должны сбросить «текущую» символическую ссылку только в том случае, если у нас действительно есть новая рабочая резервная копия. Для моего приведенного выше примера, когда создание сетевого соединения не удается, это будет означать, что сценарий резервного копирования завершается без повторной попытки. Повторной попыткой будет повторный запуск сценария. Вместо использования условий if вы можете использовать цикл do-while, чтобы повторять команду rsync до тех пор, пока она не завершится успешно.
В моем коде я считаю коды выхода rsync 0, 23 и 24 успешными. Вот что они означают (см. справочную страницу rsync для всех кодов):
Обновление через 4 месяца после публикации: приведенный выше скрипт пока не вызывал никаких проблем, поэтому я могу с уверенностью сказать, что, по крайней мере, для меня он стабилен.