Datensicherung mit ZFS und syncoid

Heute zeige ich euch, wie man ganz einfach Backups von ZFS Dateisystemen macht, die auf der Snapshot Funktion von ZFS basieren. ZFS nutze ich mit der Virtualiserungsumgebung Proxmox.

ZFS kurz erklärt


Bild ZFS on Linux von Lawrence Livermore National Laboratory Lizenz: GPL

ZFS ist ein Dateisystem, Volume- und Raidmanager in einem. Es gibt Pools, die eine oder mehrere Datenträger als Volume vereinen. Also den Pool als RAID0 (stripped) aufbauen oder mit anderen RAID Funktionalitäten wie RAID1 (mirrored), RAID10 (stripped und mirrored) usw. erstellen. Eine Partition auf dem Pool heißen Dataset.

Vorteile von ZFS sind in meinen Augen drei Dinge, die die fFexibilität deutlich machen:

  1. Die Datasets verbrauchen nur soviel physischen Platz auf dem Laufwerk, wie sie grade mit Nutzdaten belegt sind. Das Dataset wächst also mit den Nutzdaten mit. Wird der Platz eng, hängt man einfach weitere Datenträger in den Pool und und es kann weitergehen.
  2. Bei den einzelnen Datasets kann man on-the-fly Komprimierung einschalten, um den physischen notwendigen Platz noch weiter zu verringern; ohne wirklich spürbare Performanceeinbußen.
  3. Mit der Snapshotfunktion von ZFS kann man eine regelmäßige Datensicherung basierend auf inkrementellen Snapshots durchführen.

Datensicherung mit syncoid

Genau diese snapshotbasierte Datensicherung kann man mit syncoid` wirklich sehr einfach durchführen. Das Tool `syncoid`findet ihr zusammen mit der "Mutterapplikation" `sanoid auf GitHub. Dort ist auch die Installation beschrieben. Die Anwendung ist sehr einfach. Ich beschreibe sie anhand des folgenden Szenarios:

Szenario

Es gibt bei mir zwei Pools mit Daten, wie virtuellen Maschinen (VM) oder Linux-Containern (LXC), sowie den Daten meines Fileservers. Das sind die Pools raidpool`und `ssdpool`. Darauf sind mehrere Datasets. Passend dazu gibt es zwei Festplatten, die als Backuppools fungieren: `backuphdd`und `backupssd.

Sicherung ausführen

Um den raidpool (hier mit Ausnahme eines bestimmten Datasets) zu sichern reicht der Befehl:

syncoid -r --exclude=vmstore/backup raidpool backuphdd

Die SSD kann komplett gesichert werden mit

syncoid -r ssdpool backupssd

Beim ersten Mal hat das bei mir mit einem zu gut zwei Dritteln gefüllten 6TB Pool und einer 1TB SSD etwa 3 Stunden gedauert. Die inkrementellen Snapshots funktionieren dann in wenigen Sekunden. Inkrementelle Backups werden mit den selben Kommandos aufgerufen.

Übrigens: Das Backupmedium muss nicht im selben Computer verbaut sein. Das funktioniert auch verschlüsselt über SSH z.B. mit einem NAS oder mit einem externen Medium wie einer USB Festplatte. Einzig ZFS auf dem Zielmedium ist Voraussetzung.

Und der Ernstfall?

Den habe ich kürzlich gehabt: Ich habe mir versehentlich ein Dataset gelöscht, weil ich in Proxmox auf move statt remove geklickt habe. Mit

syncoid backuphdd/vmstore/vm/vm-160-cloudinit ssdpool/vm/vm-160-cloudinit

den gesicherten Snapshot an die neue, richtige Stelle zurückgespielt und schon ging es wieder los. Hat wirklich nur ein paar Sekunden gedauert.

Bild Screenshot von Ulrich Ivens

Ich freue mich über eure Kommentare und eure Erfahrungen mit ZFS und Proxmox.


Der Beitrag "Datensicherung mit ZFS und syncoid" von Ulrich Ivens steht unter der Lizenz CC BY-SA 4.0, sofern an integrierten Medien nichts anderes angegeben ist.

5 Kommentare

  1. Hallo Ulrich,

    Sehr interessanter Artikel, danke!

    snapshot können nicht einfach woanders gespeichert werden? (also einfach auf ntfs dateisystem)

    Ich frage mich schon länger ob es sinnvoll wäre die snapshot als Backup zu nutzen

    folgender fall:
    Ich habe nen pool und mehrere datasets angelegt.
    Im Dataset: “daten” speicher ich alle meine Daten, Word, Excel, Bilder usw

    Die idee:
    Ich mache immer snapshot und Speicher diese zusätzlich auf einer externen hdd.

    Die externe hdd hält die Kopie der Daten vor und alle snapshot. (beispielsweise auf ntfs), und diese hdd ist nur für den worst case notwendig.

    Die Frage die ich mir schon lange stelle:
    Wenn ich nun bemerke mir fehlt was, also eine Datei ist modifiziert oder gar gelöscht, kann ich nur diese eine Datei aus dem snapshot wiederherstellen?

    VG
    CHristian

  2. Hast du dann gar kein template angelegt vorher?
    Mann kann einfach den Befehl “syncoid -r ssdpool backupssd” ausführen, nachdem ich sandroid per apt installiert habe?

  3. Hallo Mathias, da kann ich dir nicht helfen. Ich habe eine fest verbaute Backup-Platte. Es gibt von Proxmox aber eine Backuplösung, ich meine die ist auch Open Source. Guck dir das vielleicht mal an. Gruß Ulli

  4. Hallo Ulrich,

    schöne Grüße zunächst aus Mönchengladbach.

    Ich bin auf deinen Artikel gestoßen, weil ich nach einer _einfachen_ Möglichkeit suche, meine 3 Pools auf meinem Proxmox-Host ein mal in der Woche auf wechselnde USB Platten zu sichern. Da würde mir das Thema mit dem Script von oben ja nicht so viel helfen, nehme ich an, oder?

    Hast du eine Idee?

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert