1

Я не уверен, почему это не работает, как ожидалось. У меня есть полная резервная копия 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. Мой сценарий более сложен, чем этот, но я упростил его, чтобы изолировать проблему. Спасибо, Джефф

1 ответ1

0

Я полагаю, что опции -b --backup-dir не действуют так, как вы надеетесь.
Вместо этого вы можете попробовать использовать другую опцию --link-dest . Ваша командная строка должна быть похожа на следующую

rsync -aAXhH --link-dest=/scripts/full/  /scripts/source/  /scripts/diff/

В чем смысл?
Вы говорите rsync сравнить файлы в /scripts/source/ (новые) с файлами в /scripts //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)
    
  • Да, они должны быть менее туманными ...

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .