
Я не уверен, почему это не работает так, как ожидалось. У меня есть полная rsync-резервная копия /scripts/source в /scripts/full, и я хочу поместить дифференциальную резервную копию в /scripts/diff. Однако, когда файл добавляется в исходное местоположение /scripts/source, а затем запускается дифференциальная резервная копия, файлы копируются в /scripts/full вместо /scripts/diff. Вот тестовый сценарий, который я сделал:
DIFF='/scripts/diff'
SOURCE='/scripts/source'
FULL='/scripts/full'
CTIME=$(date +%T)
TESTFILE=newfile$CTIME
rm -r $DIFF/*
rm $SOURCE/newfile*
rm $FULL/newfile*
echo "I'm in a file " > $SOURCE/$TESTFILE
rsync \
-a \
-A \
-X \
-h \
-H \
-b \
--backup-dir=$DIFF \
$SOURCE/* \
$FULL
echo "----------------------------------------------------------------------"
echo "Our test file is: $TESTFILE"
echo "----------------------------------------------------------------------"
echo "Source Files in $SOURCE - we should see our one test file"
ls $SOURCE
echo "----------------------------------------------------------------------"
echo "Full backup in past - We should not see any test files here"
ls $FULL
echo "----------------------------------------------------------------------"
echo "Diff files in $DIFF - we should see the same test file here as"
echo "was in the $SOURCE dir"
ls $DIFF
В скрипте тестовый файл сбрасывается в исходный каталог. rsync не должен копировать его в полный каталог (но он копирует). Его следует копировать в каталог diff (он этого не делает).
Перечитывание страниц руководства и поиск в Интернете не помогли. Простые схемы дифференциального резервного копирования, адаптированные для моей среды, просто не работают. Что я делаю не так? Я хочу время от времени делать полную резервную копию. Затем я хочу запускать последующие diff-файлы, содержащие только измененные файлы (в то время как полная резервная копия никогда не меняется). Идея в том, что есть полная резервная копия, на которую можно ссылаться, и измененные файлы можно найти в diff-файле. Мой сценарий сложнее этого, но я упростил его, чтобы изолировать проблему. Спасибо, -Джефф
решение1
Я полагаю, что опции -b
--backup-dir
не действуют так, как вы надеетесь.
Вы можете попробовать использовать другую опцию --link-dest
. Ваша командная строка должна быть похожа на следующую
rsync -aAXhH --link-dest=/scripts/full/ /scripts/source/ /scripts/diff/
В чем смысл?
Вы говорите rsync
сравнить файлы в /scripts/source/
(новые) с теми в /scripts/diff/
(пустые)и в дополнительном каталоге /scripts/full/
(то есть в каталоге вашей резервной копии).
Примечания:
- Обычно лучше защитить переменную двойными кавычками
""
. Так что лучшеTESTFILE="newfile${CTIME}"
тогдаTESTFILE=newfile$CTIME
От человека
rsync
:--link-dest=DIR hardlink to files in DIR when unchanged
Параметры
--backup-dir
(...), вероятно, используются для создания копии файла, обычно с другим расширением или в другом каталоге, вместо перезаписи файла в целевом каталоге.-b, --backup make backups (see --suffix & --backup-dir) --backup-dir=DIR make backups into hierarchy based in DIR --suffix=SUFFIX backup suffix (default ~ w/o --backup-dir)
- Да, они должны быть такими.менее туманно...