Backup mit ZFS

christian83

Well-Known Member
Hallo,

ich habe mal eine Frage auf die ich in der schnelle keine einfache Antwort finden konnte. Ich nutze hier für mein Linux zum erstellen von Backups Redo Backup was auch problemlos bei Linux Dateisystemen funktioniert. So kann ich im zweifel wenn ich mal was teste wieder zu einem sauberen System in wenigen Minuten zurück. Bei einem PC-BSD funktioniert das mit ZFS leider nicht, ein Backup klappt natürlich nur dauert es Stunden weil die gesamte Festplatte kopiert wird und nicht nur die Dateien. Da geht eine Neuinstallation schneller.

ZFS bietet aber nach meinem Wissen auch die Möglichkeit Snapshots zu erstellen. Gibt es da eine einfache Anleitung zu in die man nicht erst alle Winkel des Dateisystems durch studieren muss?

Ich würde gerne nachdem ich mein System installiert und komplett eingerichtet habe einen Snapshot machen, so das ich zu diesem Zustand jederzeit zurückgehen kann wenn mal was kaputt ist, oder das System nach dem testen von diversen Dingen zugemüllt wurde ;)
 
guck mal in der manpage von zfs (man zfs) nach "snapshot". Da steht eigentlich alles drin. Am Ende der manpage sind sogar noch einige Beispiele.
 
Und falls du ein echtes Backup haben willst, schreibst du deinen Snapshot mit send in eine Datei und packst sie dir gut weg. :)
 
Also wenn ich es richtig verstehe mache ich einen Snapshot z.B mit
Code:
zfs snapshot pool/home/bob@yesterday

Diesen stelle ich wieder her mit einem
Code:
zfs rollback -r pool/home/bob@yesterday

Und falls du ein echtes Backup haben willst, schreibst du deinen Snapshot mit send in eine Datei und packst sie dir gut weg.

Hast du da zufällig ein Beispiel wie ich eine gesamte Festplatte (pool) so auf z.B einen usb Datenträge kopieren kann und vor allem wie ich es wieder zurück bekomme. Das wäre eine gute Kombination, ein Snapshot machen so das man im laufenden System zurück kommt und noch mal ein Backup haben welches man nutzen kann wenn mal die Festplatte nicht mehr möchte.
 
Okay, nur zur Sicherheit das ich es verstanden habe:

Snapshot des pools erstellen und in Datei packen mit
Code:
zfs snapshot zroot@now ; zfs send zroot@now | gzip > /Pfad/Backup.gz

Wiederherstellung würde dann gehen mit
Code:
gunzip -c /Pfad/Backup.gz | zfs receive -F zroot

Kann die Wiederherstellung im laufenden System gestartet werden, oder sollte man das über ein Live System machen?
 
ath0: Du hast eines vergessen. Während zfs send eine gute Entsprechung zu dump für UFS ist gibt es keine entsprechung zu restore. Einen ZFS Stream kann man nur mit zfs recv in einen ZFS Pool einlesen. Desweiteren können beschädigte Streams mit heutigem ZFS Code nicht einmal teilweise eingelesen werden. Außerdem ist nicht nicht garantiert, dass ZFS Streams von neueren Versionen gelesen werden können.

Diese Limitierungen führen dazu, dass es ZFS Streams zu archivieren eine dumme Idee ist. Deutlich besser ist es ZFS Streams in andere Pools zu replizieren. So hast du ein Backup aus dem du einzelne Dateien wiederherstellen kannst mit all den sonstigen ZFS Features, die man nach kurzer Zeit nicht mehr missen will z.B. Prüfsummen und Selbstheilung.
 
Und ich hätte gedacht es würde einfach werden ;)

Für mich würde es ja im Prinzip reichen ein Snapshot für die gesamte Festplatte zu erstellen damit ich immer wieder darauf zurück kommen kann. Wenn wirklich mal ein Datenträger seinen Dienst verweigert was ja nicht jede Woche passiert wäre die einfachere Lösung einfach nur das home Verzeichnis zu sichern extern...
 
So, nur um es zum Abschluss zu bringen, ich mache einen Snapshot mit
Code:
zfs snapshot -r zroot@backup

und stelle diesen wieder her mit einem
Code:
zfs rollback -r zroot@backup

Habe ich das Prinzip jetzt so richtig verstanden?
 
Ja. Probier es einfach einmal in ner VM aus. Es gibt nix sinnloseres als Backups deren Restore man nie versucht hat.
 
Auch in Produktivumgebungen "testet" man, auch wenn's letzendlich der eigentliche Life Test unter realen Produktivbedingungen ist , denn diese kann man in der Regel nur ungenügend in Vortests in reinen Testumgebungen darstellen.
 
Wir müssen es ja nicht übertreiben, mein Desktop ist ja nur ein Desktop und kein Hochverfügbarkeitssystem. Bei den Backups geht es mir nur um die Erleichterung da ich mir gerne Neuinstallationen spare und Systemabbilder gerne griffbereit habe.
 
@christian

Ich kann Dir auch nur dringendst raten, zumindest einen Pool auf eine nackte VM oder einen Rechner zu reimportieren!
Es reicht ein gekipptes Bit oder irgendein Denkfehler und deine ganzen schönen Sicherungen sind für die Tonne!
Du solltest das auch bei Änderungen an Einstellungen aller beteiligter Programme wiederholen.
 
ath0: Du hast eines vergessen. Während zfs send eine gute Entsprechung zu dump für UFS ist gibt es keine entsprechung zu restore. Einen ZFS Stream kann man nur mit zfs recv in einen ZFS Pool einlesen. Desweiteren können beschädigte Streams mit heutigem ZFS Code nicht einmal teilweise eingelesen werden. Außerdem ist nicht nicht garantiert, dass ZFS Streams von neueren Versionen gelesen werden können.

Gut das habe ich nicht bedacht stimmt. Zum Thema Backups von alten ZFS Versionen in einen neueren Pool ein zu spielen, das sollte wohl gehen wenn nicht 100 Versionen dazwischen liegen. Ich nehme zum aufbewahren eine Externe Platte und habe von meinem Desktop den System Pool auf meinem Server in einem Pool und den von meinem Server auf meinem Desktop. Wenn jetzt noch was schief geht is das eben Pech. :)
 
Sagen wir mal so. Wenn man die richtigen zwei(!) Zeilen auskommentiert, läuft er beim "zfs receive" über Prüfsummenfehler hinweg. Dann kommt man an alles ran, was nicht zerdeppert wurde. Soll man nicht machen, aber kann einem im Zweifel den Hintern retten.
 
Gut das habe ich nicht bedacht stimmt. Zum Thema Backups von alten ZFS Versionen in einen neueren Pool ein zu spielen, das sollte wohl gehen wenn nicht 100 Versionen dazwischen liegen. Ich nehme zum aufbewahren eine Externe Platte und habe von meinem Desktop den System Pool auf meinem Server in einem Pool und den von meinem Server auf meinem Desktop. Wenn jetzt noch was schief geht is das eben Pech. :)

Klingt nach ziemlich viel Traffic....
 
In sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c diesen Block (derzeit auf 9.2-RC3 Zeile 1549ff) auskommentieren:
Code:
            /*   
             * We compare against the *previous* checksum
             * value, because the stored checksum is of
             * everything before the DRR_END record.
             */
            if (!ZIO_CHECKSUM_EQUAL(drre.drr_checksum, pcksum))
                ra.err = SET_ERROR(ECKSUM);
Anschließend zfs.ko neubauen und laden. Er akzeptiert dann auch "zfs receive"-Stream mit Checksum-Fehlern. Aus Sicherheitsgründen sollte man für das Empfangen des kaputten Streams immer einen neuen, leeren Pool nehmen. Kaputte Daten im Pool können schlimmstenfalls den Totalschaden bedeuten. Anschließend auf jeden Fall ein "zpool scrub $pool" machen. Das ist ein Hack für den Fall, dass man sowieso nichts mehr zu verlieren hat, weil man es schon versaut hat. :)
 
Zurück
Oben