Ich habe kürzlich einen Computer mit Ubuntu Server eingerichtet, auf dem Spieleserver gehostet werden. Ich habe für jeden Spieleserver ein Backup-Plugin installiert, das regelmäßig Backups von Spieledateien in einem bestimmten Ordner auf dem Computer erstellt. Ich habe auch eine cron
Aufgabe eingerichtet, um diese Sicherungen mit rsync und der -a
Option jede Nacht automatisch in meinen Dropbox-Ordner zu kopieren .
Nach ein paar Monaten hatte mein Dropbox-Konto sein Speicherlimit erreicht und ich stellte fest, dass ich nicht mehr so viele Backups speichern konnte. Deshalb habe ich das Backup-Plugin für den Spieleserver so konfiguriert, dass nicht mehr so viele Backups gespeichert werden Löschen Sie die älteren Backups wie geplant wöchentlich. Das Backup-Plugin hat schließlich seine Aufgabe erledigt und die älteren Backups gelöscht. Ich hatte erwartet, dass der rsync
Cron-Task anschließend die älteren Backups aus meinem Dropbox-Ordner löscht, um sie mit dem Quellordner abzugleichen. Dies ist jedoch nicht der Fall. Ich habe also ein paar Fragen:
Standardmäßig wird
rsync
nur hinzufügen , Dateien in den Zielordner, in den Quellordner hinzugefügt wurden und ändern Dateien , die im Quellordner geändert wurden , aber nicht löschen Dateien , die aus dem Quellordner gelöscht wurden?Wenn dies der Fall ist, wie kann man dies am besten erreichen
rsync
? Ich möchte, dass der Zielordner den Quellordner perfekt widerspiegelt. Das bedeutet, dass alle Dateien gelöscht werden, die aus dem Quellordner gelöscht wurden.
Ich sehe einige Optionen, die in der Handbuchseite aufgeführt sind rsync
, um den Trick zu machen, aber da ich nicht mit vertraut bin.
source/* dest/
wird nicht funktionieren.--delete
oder--delete-after
es wird aufgrund einiger Fehler nicht gelöscht: "Es ist ein E / A-Fehler aufgetreten - Löschen der Datei wird übersprungen". Um diese Add---ignore-errors
Option zu beheben und die Fehler separat zu debuggen-n, --dry-run
Option IMMER zu verwenden , bevor Sie ausgeführt werden.rsync
Dies gilt insbesondere für Optionen wie diese (--delete
). Es werden mögliche Kopfschmerzen vermieden :).-a
impliziert-r
.Der Befehl rsync löscht keine Datei, während Sie einige seiner Optionen
delete
in diesem Befehl verwenden. Wenn also Dateien oder Ordner in der Quelle hinzugefügt werden, werden sie ohne Löschung mit dem Ziel synchronisiert.Ich empfehle Ihnen,
rsync
eine Sicherungskopie von Quelldateien zu erstellen undfind ... rm
Dateien für einen bestimmten Zeitraum oder eine bestimmte Dateigröße zu löschen:Erstellen Sie im obigen Codeblock eine Sicherungskopie vom Quellcode und löschen Sie anschließend alle Dateien, deren letzte Änderungszeit mehr als 2 Monate beträgt.
AKTUALISIEREN
Da ich finde, dass die
delete
Optionen nur für TARGET gelten,rsync --delete
entfernen Sie einige Dateien aus TARGET, wenn sie aus dem Quellcode entfernt wurden. Und diedelete
Option vonafter
undbefore
, wie in seiner Manpage erwähnt:Bedeutet, dass:
--delete-after receiver deletes after transfer, not during
Bedeutet, dass:
HINWEIS : das
--delete-{before/after}
Gerät nur in TARGET.quelle
Mit diesem Befehl werden inkrementelle Daten kopiert und mit dem Remote-Server synchronisiert.
rsync -avWe ssh --delete-before (source) root@localhost:(destination) rsync -avW --delete-before -e ssh (source) root@localhost:(destination)
Beispiel:
quelle
rsync: Failed to exec --delete-before: No such file or directory (2)
Wenn es irgendwelche Fehler während eines rsync scync sind, rsync nicht richtig die Dateien löschen sollte, auch wenn Sie verwendet
--delete
,--delete-after
oder--delete-before
.Aus diesem Grund ist es wichtig, rsync-Fehler zu beheben.
Die meisten meiner Fehler waren auf die Verwendung der
--perms
Option während der Synchronisation mit einem Nicht-Linux-Dateisystem zurückzuführen. Als ich ersetzt--perms
mit--no-perms
, gingen diese Fehler weg und arbeitete dann zu löschen.--perms
ist in Ordnung, wenn Sie von einem Linux-Dateisystem zu einem anderen Linux-Dateisystem synchronisieren. Wenn Sie jedoch von Linux zu einem Nicht-Linux-Dateisystem synchronisieren (z. B. NTFS, FAT),--perms
führt dies zu Fehlern, da rsync keine Linux-Berechtigungen für a festlegen kann Nicht-Linux-Dateisysteme . Wieder Fehler = kein Löschen.- Wenn die Synchronisierung zu einer Nicht-Linux - Partition, benutze ich ,
--no-perms
um diese Fehler zu vermeiden , die Sabotage--delete
,--delete-after
oder--delete-before
.Wenn danach immer noch Fehler auftreten und Sie nicht herausfinden können, wie diese Fehler behoben werden können, können Sie einen Befehl ausführen, der ausschließlich zum Löschen der nicht synchronisierten Dateien bestimmt ist:
Der obige Befehl löscht nicht synchronisierte Inhalte, synchronisiert jedoch keine Dateien. Also sollten Sie danach erneut synchronisieren. Dieser Befehl basiert auf dieser Antwort , mit der Ausnahme, dass ich das
--ignore-errors
Argument ebenfalls hinzugefügt habe , sodass es gelöscht wird, selbst wenn Fehler vorliegen.quelle