
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-dir
funktionieren 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) rsync
vergleichen./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 besserTESTFILE="newfile${CTIME}"
alsTESTFILE=newfile$CTIME
Vom Menschen
rsync
:--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...