Richtige Rsync-Flags für die Sicherung von ext4 auf ZFS

1

Ich habe einen Heimserver mit Ubuntu 14.04.3 LTS und einem ext4Dateisystem, auf dem ich regelmäßig Daten von verschiedenen Geräten sichern kann.

Jetzt habe ich eine externe USB-Festplatte mit ZFSDateisystem eingerichtet und möchte alle Daten vom Heimserver auf diesem USB-Laufwerk sichern. Und da ich ZFSauf dem externen Laufwerk verwende, möchte ich auch die ZFSSchnappschussfähigkeiten von verwenden.

Da ich Dateien von ext4nach kopieren würde ZFS, kann ich den zfs sendBefehl nicht verwenden . Deshalb bin ich fest mit rsync.

Ich benutze es schon rsynceine Weile, daher bin ich ziemlich vertraut damit. Da ich jedoch Snapshots auf dem Zieldateisystem ausführen werde, möchte ich so wenig Speicherplatz wie möglich verschwenden.

Ich bin auf diesen Blog-Beitrag gestoßen, der den folgenden Befehl verwendet:

/usr/bin/rsync -axH --no-whole-file --inplace --delete / /$backup_target/root/

Abgesehen von den üblichen Flags wie -a, -xund --deletees nutzt auch:

  • -H (harte Links),
  • --no-whole-file (Erzwinge die Aktivierung des Delta-Xfer-Algorithmus) und
  • --inplace (Ordner aktualisieren, anstatt ein neues Backup zu erstellen).

Meine Frage : Reichen diese Flags aus oder sollte ich einige hinzufügen oder entfernen?

Der Sicherungsablauf sieht wie folgt aus:

  1. Sichern Sie jedes Mal mit rsync in dasselbe Verzeichnis
  2. Erstellen Sie einen Schnappschuss dieses Verzeichnisses mit zfs snapshot backup@'date +%Y%m%d'

Ich --inplacevermute, dass dies ein Muss ist (da jedes Mal in dasselbe Verzeichnis gesichert wird). Das gleiche gilt wahrscheinlich, --no-whole-fileda nur geänderte Datenblöcke kopiert werden. Aber was ist mit -H? Irgendwelche anderen Flaggen, die ich hinzufügen sollte?

alesc
quelle
1
Ich führe rsync in einem ähnlichen Szenario mit -aAHX --delete --numeric-ids --relative --delete-excludedeinigen --excludeParametern aus. Sie können sich diesen Parametersatz als Ausgangspunkt ansehen. -xJe nachdem, wie Ihre Dateisysteme eingerichtet sind, ist die Verwendung möglicherweise angemessen oder nicht.
ein CVn
Alles befindet sich im selben Dateisystem, daher -xergibt es vermutlich keinen Sinn. Ich verwende auch keine ACLs in fstab, daher -Aist dies wahrscheinlich auch nicht sinnvoll. Ich brauche es auch nicht --relativeund werde es hinzufügen, --delete-excludedwenn ich etwas ausschließe. Auf der anderen Seite -Xund --numeric-idsnützlich aussehen, so werde ich sie wahrscheinlich verwenden. Würden Sie dem zustimmen --inplaceund --no-whole-filesind auch gut zu bedienen?
Alesc
1
Ich weiß nichts über die beiden letzteren, aber ich vermute, dass sie nicht wirklich schaden können. Wenn sich alles auf demselben Dateisystem befindet, -xist es wahrscheinlich das, was Sie möchten (es sei denn, Sie möchten das Sicherungszielverzeichnis rekursiv in sich selbst kopieren.)
ein CVn
Nochmals vielen Dank für den Tipp. Ich werde dann bei bleiben x. Ich habe es die ganze Zeit benutzt, war mir aber nicht bewusst, dass es das rekursive Kopieren verhindert :) Wenn Sie möchten, können Sie alles in eine Antwort schreiben, damit ich Sie belohnen kann.
alesc

Antworten:

3

Die gefundene Befehlszeile bietet einen vernünftigen Ausgangspunkt. Ich führe rsync für Backups aus (über rsnapshot, was nicht wirklich relevant ist, da Sie ZFS-Snapshots für den Verlauf verwenden werden. Ich habe damit begonnen, bevor ich mit ZFS angefangen habe, und habe es weiterhin verwendet, weil es für mich gut funktioniert) von Parametern:

-aAHX --delete --numeric-ids --relative --delete-excluded

plus einige --excludeParameter für Dinge, die ich nicht sichern möchte. Der Hauptunterschied zwischen meinem Setup und dem, den Sie gefunden haben, ist wahrscheinlich die Verwendung von -A( --acls) und --delete-excluded( auch das Löschen ausgeschlossener Dateien aus Zielverzeichnissen ).

Wie wir in den Kommentaren besprochen haben --inplaceund --no-whole-filees sich um Optionen handelt, die in Ihrem Anwendungsfall wahrscheinlich nicht wirklich schaden können.

-x( --one-file-system) ist in erster Linie nützlich, wenn Sie nur ein oder wenige Dateisysteme haben, die Sie sichern möchten. (Da ich ZFS-Dateisysteme weitgehend auf der Quellenseite verwende, verwende ich stattdessen --excludeden Sicherungszielspeicherort.) -xRsync wird angewiesen, keine anderen Dateisysteme als die in der Befehlszeile aufgeführten als Quellen zu verwenden. Auf die eine oder andere Weise müssen Sie den Zielspeicherort von rsync's Vorstellung von Quellspeicherorten fernhalten. andernfalls auf dem ersten Backup erhalten Sie (sagen wir) / * kopiert in / backup /, dann erhalten Sie beim nächsten Mal / * und als Teil dieser / Backup in / backup kopiert, und so weiter. Das habe ich gemeint, als ich in den Kommentaren erwähnt habe, dass das Backup-Zielverzeichnis rekursiv in sich selbst kopiert wird.

Erstellen Sie einen Schnappschuss dieses Verzeichnisses mit zfs snapshot backup@'date +%Y%m%d'

Das willst du zfs snapshot backup@$(date +'%Y%m%d')natürlich machen. (Verwenden Sie $()entweder Backticks oder Backticks, keine Apostrophe. Ich bevorzuge die Syntax $ (). Zum einen ist sie verschachtelbar.)

Stellen Sie außerdem sicher, dass eine Snapshot-Bereinigungsstrategie vorhanden ist, wenn der Speicherplatz knapp wird.

ein CVn
quelle
Ich habe Backtics zum Einfügen des Datums verwendet, es war jedoch nicht mit dem Markup dieser Site kompatibel (das auch Backtics für Inline-Code verwendet). Also habe ich sie in Apostrophe geändert und vergessen, das zu erwähnen. Aber $()sieht besser aus, so werde ich wohl , dass verwenden. Im Moment habe ich keine automatische Bereinigungsstrategie, lösche jedoch ältere Schnappschüsse nach Bedarf manuell. Ist zfs destroy backup@some-dategenug , um den Raum zu schaffen, oder muss ich einige andere Aktionen durchzuführen?
Alesc
@alesc zfs destroy backup@some-datesollte ausreichen, wenn Sie nur ein einziges Dateisystem im Pool haben. Andernfalls sollten Sie etwas wie verwenden zfs destroy backup@some-date -r. Beachten Sie, dass das Löschen von Snapshots möglicherweise langwierig ist, obwohl der zfs destroyBefehl möglicherweise schnell beendet wird. Überprüfen Sie man zpool-featuresfür async_destroyund prüfen Sie es auf Ihrem Pool ermöglicht , wenn es nicht bereits aktiviert ist.
ein Lebenslauf vom