rsync --backup-dir ruft keine geänderten Daten ab, sondern wechselt zum ursprünglichen Sicherungsspeicherort.

rsync --backup-dir ruft keine geänderten Daten ab, sondern wechselt zum ursprünglichen Sicherungsspeicherort.

Ich bin mir nicht sicher, warum das nicht wie erwartet funktioniert. Ich habe ein vollständiges rsync-Backup von /scripts/source in /scripts/full und möchte ein differenzielles Backup in /scripts/diff ablegen. Wenn jedoch eine Datei zum ursprünglichen Speicherort von /scripts/source hinzugefügt und dann ein differenzielles Backup ausgeführt wird, werden die Dateien in /scripts/full statt in /scripts/diff gesichert. Hier ist ein Testskript, das ich erstellt habe:

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

Im Skript wird die Testdatei im Quellverzeichnis abgelegt. rsync sollte sie nicht in das gesamte Verzeichnis kopieren (wird es aber). Sie sollte in das Diff-Verzeichnis kopiert werden (wird es aber nicht).

Das erneute Lesen der Manpages und die Suche im Internet haben nicht geholfen. Einfache differenzielle Backup-Schemata funktionieren einfach nicht, wenn sie an meine Umgebung angepasst sind. Was mache ich hier falsch? Ich möchte ab und zu ein vollständiges Backup durchführen. Dann möchte ich nachfolgende Diffs ausführen, die nur die geänderten Dateien enthalten (während das vollständige Backup sich nie ändert). Die Idee ist, dass es ein vollständiges Backup als Referenz gibt und geänderte Dateien im Diff gefunden werden können. Mein Skript ist komplexer als dies, aber ich habe es vereinfacht, um das Problem zu isolieren. Danke, -Jeff

Antwort1

Ich nehme an, die Optionen -b --backup-dirfunktionieren nicht wie erhofft.
Sie können stattdessen versuchen, eine andere Option zu verwenden --link-dest. Ihre Befehlszeile sollte ungefähr wie folgt aussehen:

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

Was bedeutet das?
Sie sagen mir, ich solle die Dateien in (den neuen) mit denen in (dem leeren) rsyncvergleichen./scripts/source//scripts/diff/Und im zusätzlichen Verzeichnis /scripts/full/(das ist das Ihres Backups).

Anmerkungen:

  • Normalerweise ist es besser, die Variable mit doppelten Anführungszeichen zu schützen "". Also besser TESTFILE="newfile${CTIME}"alsTESTFILE=newfile$CTIME
  • Vom Menschenrsync:

    --link-dest=DIR         hardlink to files in DIR when unchanged
    
  • Die Optionen --backup-dir(...) werden wahrscheinlich verwendet, um eine Kopie der Datei zu erstellen, normalerweise mit einer anderen Erweiterung oder in einem anderen Verzeichnis, anstatt die Datei im Zielverzeichnis zu überschreiben.

    -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)
    
  • Ja, das sollten sie seinweniger nebulös...

verwandte Informationen