
Não sei por que isso não está funcionando conforme o 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 um backup diferencial é executado , o backup dos arquivos é feito em /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 é colocado no diretório de origem. O rsync não deve copiar o diretório completo (mas o faz). Deve ser copiado para o diretório diff (não é).
Reler as páginas de manual e pesquisar na web não ajudou. Esquemas simples de backup diferencial, quando adaptados ao meu ambiente, simplesmente não funcionam. O que estou fazendo de errado aqui? Quero fazer um backup completo de vez em quando. Então, quero executar diferenças subsequentes que contenham apenas os arquivos alterados (enquanto o backup completo nunca muda). A ideia é que haja um backup completo para referência e os arquivos alterados possam ser encontrados no diff. Meu script é mais complexo que isso, mas simplifiquei para isolar o problema. Obrigado, -Jeff
Responder1
Suponho que as opções -b
--backup-dir
não funcionam 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 para rsync
comparar os arquivos /scripts/source/
(os novos) com os que estão /scripts/diff/
(que estão vazios)e no diretório adicional /scripts/full/
(Esse é o do seu backup).
Notas:
- Geralmente é melhor proteger a variável com aspas duplas
""
.TESTFILE="newfile${CTIME}"
Então é melhorTESTFILE=newfile$CTIME
Do homem
rsync
:--link-dest=DIR hardlink to files in DIR when unchanged
As opções
--backup-dir
(...) provavelmente são usadas para fazer uma cópia do arquivo geralmente 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 deveriam sermenos nebuloso...