Ich habe ein lokales FreeNAS-System und möchte ZFS-Snapshots für Backups verwenden.
FreeNAS verfügt über die integrierten Replikationsaufgaben, die verwendet werden
zfs send snapshot_name
um einen Schnappschuss an ein entferntes System zu senden. Dies erfordert jedoch ein System mit ZFS am anderen Ende.
Ich möchte den Schnappschuss an eine Datei senden und diese komprimierte und verschlüsselte Datei an den Remote-Computer senden.
Dies ist möglich mit
zfs send snapshot_name | gzip | openssl enc -aes-256-cbc -a -salt > file.gz.ssl
Jeden Tag mache ich eine Momentaufnahme des Speicherpools und behalte jede Momentaufnahme 30 Tage lang.
Mit jedem Schnappschuss werde ich diesen Schnappschuss in eine Datei leiten.
- snapshot_file 1 enthält alle Dateien (sagen wir 2 GB)
- snapshot_file 2 enthält nur die Änderungen an snapshot_file 1 (sagen wir 5 MB)
- snapshot_file 3 enthält die Änderungen an snapshot_file 2; und so weiter.
Am 31. Tag wird snapshot_file 1 gelöscht (da ich nur die Änderungen der letzten 30 Tage möchte)
Daher muss snapshot_file 2 jede Datei enthalten (2 GB snapshot_file 1 + 5 MB Änderungen)
Bei diesem Ansatz muss jedoch täglich (ab dem 31. Tag) eine neue 2-GB-Datei erstellt und an ein Remote-System gesendet werden. Das ist zu viel Aufwand.
Was wäre der beste Ansatz, um Snapshots, die an eine Datei weitergeleitet werden, als Sicherungsstrategie mit einer Historie von X Tagen zu verwenden?
PS: Ich weiß, dass es eine Menge Backup-Software gibt (zum Beispiel rdiff-backup), die ich verwenden könnte. Ich bin aber gespannt, wie das geht.
zfs recv
am anderen Ende (zfs set compression=gzip-9
zum Beispiel bei einem Pool mit )? Das Speichern von Snapshot-Dateien klingt für mich sehr ineffizient.Antworten:
Wenn Sie die Schnappschüsse nicht im Dateisystem (zB mit
zfs receive
), sondern in Dateien speichern , ist dies leider nicht möglich.ZFS auf der Empfangsseite
Wenn Sie auf der Sende- und Empfangsseite ZFS verwenden, müssen Sie nicht den gesamten Snapshot übertragen und übertragen nur die Unterschiede des Snapshots zum vorherigen:
ZFS kennt die Snapshots und speichert gemeinsame Blöcke nur einmal. Wenn das Dateisystem die Snapshots versteht, können Sie die alten ohne Probleme löschen.
Anderes Dateisystem auf der empfangenden Seite
In Ihrem Fall speichern Sie die Snapshots in einzelnen Dateien, und Ihr Dateisystem kennt die Snapshots nicht. Wie Sie bereits bemerkt haben, bricht dies die Rotation. Sie müssen entweder ganze Schnappschüsse übertragen, was Bandbreite und Speicherplatz verschwendet, aber Sie können einzelne Schnappschüsse löschen. Sie hängen nicht voneinander ab. Sie können inkrementelle Snapshots wie folgt erstellen:
Um einen inkrementellen Snapshot wiederherzustellen, benötigen Sie auch die vorherigen Snapshots. Dies bedeutet, dass Sie die alten Inkrementale nicht löschen können.
Mögliche Lösungen
Sie können inkrementelle Schritte ausführen, wie in meinem letzten Beispiel gezeigt, und jeden Monat einen neuen, nicht inkrementellen Schritt ausführen. Die neuen inkrementellen Werte hängen von diesen nicht inkrementellen Werten ab und Sie können die alten Snapshots löschen.
Oder schauen Sie sich andere Backup-Lösungen an. Es gibt rsnapshot , das
rsync
harte Links verwendet. Es macht einen sehr guten Job bei der Rotation und ist sehr bandbreiteneffizient, da es nur einmal eine vollständige Sicherung erfordert.Dann gibt es Bareos . Es führt inkrementelle Schritte aus, die Bandbreite und Platz sparen. Es hat eine sehr schöne Eigenschaft; Es kann eine vollständige Sicherung aus einer Reihe von Inkrementalen berechnen. Auf diese Weise können Sie alte inkrementelle Daten löschen. Aber es ist ein ziemlich komplexes System und für größere Konfigurationen gedacht.
Die beste Lösung ist jedoch die Verwendung von ZFS auf der Empfängerseite. Es wird bandbreiteneffizient, speichereffizient und viel schneller als die anderen Lösungen sein. Der einzige wirkliche Nachteil, den ich mir vorstellen kann, ist, dass Sie mindestens 8 GiB ECC-Speicher auf dieser Box haben sollten (4 GiB sind möglicherweise in Ordnung, wenn Sie keine Dienste ausführen und sie nur verwenden
zfs receive
).quelle
rsnapshot
. Sie können auch nach einem Monat eine neue, nicht inkrementelle Aktion starten und dann die vorherigen inkrementellen Aktionen löschen.