rsync --backup-dir não está recebendo dados alterados - em vez disso, ele está indo para o local de backup original

1

Não sei por que isso não está funcionando como esperado. Eu tenho um backup rsync completo de / scripts / source em / scripts / full e quero colocar backup diferencial em / scripts / diff No entanto, quando um arquivo é adicionado ao local de origem de / scripts / source e, em seguida, um backup diferencial é executado , os arquivos são copiados para / scripts / full em vez de / scripts / diff Aqui está um script de teste que fiz:

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

No script, o arquivo de teste é descartado no diretório de origem. O rsync não deve copiar o diretório completo (mas sim). Deve ser copiado para o diretório diff (não é).

A releitura das páginas do manual e a pesquisa na Web não ajudaram. Esquemas de backup diferencial simples quando adaptados para o meu ambiente simplesmente não funcionam. O que eu estou fazendo errado aqui? Eu quero fazer um backup completo de vez em quando. Então eu quero executar os diffs subseqüentes que contêm apenas os arquivos alterados (enquanto o backup completo nunca muda). Idéia sendo que há um backup completo para referência, e arquivos alterados podem ser encontrados no diff. Meu script é mais complexo que isso, mas simplifiquei para isolar o problema. Obrigado, -Jeff

    
por gephenzie 29.06.2014 / 23:17

1 resposta

0

Suponho que as opções -b --backup-dir não atuem como você espera.
Você pode tentar usar uma opção diferente --link-dest . Sua linha de comando deve ser semelhante à seguinte

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

Qual é o significado?
Você está dizendo a rsync para comparar os arquivos em /scripts/source/ (os novos) com os que estão em /scripts/diff/ (que está vazio) e no diretório adicional /scripts/full/ (Isso é o do seu backup).

Notas:

  • Geralmente é melhor proteger a variável com aspas duplas "" . Então, melhor TESTFILE="newfile${CTIME}" then TESTFILE=newfile$CTIME
  • De man rsync :

    --link-dest=DIR         hardlink to files in DIR when unchanged
    
  • As opções --backup-dir (...) são provavelmente usadas para fazer uma cópia do arquivo normalmente com uma extensão diferente ou em um diretório diferente, em vez de sobrescrever o arquivo no diretório de destino.

    -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)
    
  • Sim, eles devem ser menos nebulosos ...
por 30.06.2014 / 11:27