Ich habe einen Heimserver mit Ubuntu 14.04.3 LTS und einem ext4
Dateisystem, auf dem ich regelmäßig Daten von verschiedenen Geräten sichern kann.
Jetzt habe ich eine externe USB-Festplatte mit ZFS
Dateisystem eingerichtet und möchte alle Daten vom Heimserver auf diesem USB-Laufwerk sichern. Und da ich ZFS
auf dem externen Laufwerk verwende, möchte ich auch die ZFS
Schnappschussfähigkeiten von verwenden.
Da ich Dateien von ext4
nach kopieren würde ZFS
, kann ich den zfs send
Befehl nicht verwenden . Deshalb bin ich fest mit rsync
.
Ich benutze es schon rsync
eine 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
, -x
und --delete
es 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:
- Sichern Sie jedes Mal mit rsync in dasselbe Verzeichnis
- Erstellen Sie einen Schnappschuss dieses Verzeichnisses mit
zfs snapshot backup@'date +%Y%m%d'
Ich --inplace
vermute, dass dies ein Muss ist (da jedes Mal in dasselbe Verzeichnis gesichert wird). Das gleiche gilt wahrscheinlich, --no-whole-file
da nur geänderte Datenblöcke kopiert werden. Aber was ist mit -H
? Irgendwelche anderen Flaggen, die ich hinzufügen sollte?
-aAHX --delete --numeric-ids --relative --delete-excluded
einigen--exclude
Parametern aus. Sie können sich diesen Parametersatz als Ausgangspunkt ansehen.-x
Je nachdem, wie Ihre Dateisysteme eingerichtet sind, ist die Verwendung möglicherweise angemessen oder nicht.-x
ergibt es vermutlich keinen Sinn. Ich verwende auch keine ACLs in fstab, daher-A
ist dies wahrscheinlich auch nicht sinnvoll. Ich brauche es auch nicht--relative
und werde es hinzufügen,--delete-excluded
wenn ich etwas ausschließe. Auf der anderen Seite-X
und--numeric-ids
nützlich aussehen, so werde ich sie wahrscheinlich verwenden. Würden Sie dem zustimmen--inplace
und--no-whole-file
sind auch gut zu bedienen?-x
ist es wahrscheinlich das, was Sie möchten (es sei denn, Sie möchten das Sicherungszielverzeichnis rekursiv in sich selbst kopieren.)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.Antworten:
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:
plus einige
--exclude
Parameter 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
--inplace
und--no-whole-file
es 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--exclude
den Sicherungszielspeicherort.)-x
Rsync 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.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.
quelle
$()
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. Istzfs destroy backup@some-date
genug , um den Raum zu schaffen, oder muss ich einige andere Aktionen durchzuführen?zfs destroy backup@some-date
sollte ausreichen, wenn Sie nur ein einziges Dateisystem im Pool haben. Andernfalls sollten Sie etwas wie verwendenzfs destroy backup@some-date -r
. Beachten Sie, dass das Löschen von Snapshots möglicherweise langwierig ist, obwohl derzfs destroy
Befehl möglicherweise schnell beendet wird. Überprüfen Sieman zpool-features
fürasync_destroy
und prüfen Sie es auf Ihrem Pool ermöglicht , wenn es nicht bereits aktiviert ist.