Würde ein ZFS-Spiegel mit einem Laufwerk größtenteils offline funktionieren?

5

Szenario: Ich habe zwei externe Festplatten und möchte, dass eine eine Sicherungskopie der anderen ist. Normalerweise verbinde ich regelmäßig das zweite Laufwerk und synchronisiere alle Änderungen. Bietet ZFS eine bessere Möglichkeit, dies zu tun?

Ich würde denken, dass ich ein 'zfs mirror'-Setup erstellen möchte, aber ich möchte das Sicherungslaufwerk nicht die ganze Zeit mit mir transportieren, sondern Änderungen regelmäßig synchronisieren. Bietet ZFS eine Möglichkeit, dies zu tun, oder ist dies keine angemessene Verwendung? Wenn ja, wie geht das mit kanonischem ZFS? (Ich möchte das Laufwerk nicht damit belasten, dass jedes Mal, wenn ich beispielsweise das Sicherungslaufwerk aktualisieren möchte, jeder einzelne Sektor auf Änderungen überprüft werden muss.)

Matthew
quelle

Antworten:

8

ZFS kann ein gespiegeltes Laufwerk nur eingeschränkt inkrementell aktualisieren, nachdem es eine Weile offline war. TL; DR: Sie können Mach, was du suchst, wie du es vorschlägst, aber es ist nicht das, wozu Spiegel gedacht sind.

In der Praxis würde das, was Sie vorschlagen, mit ziemlicher Sicherheit jedes Mal ein vollständiges Resilver erfordern, da die vorläufigen Änderungen dazu führen würden, dass zu viele Überblock-Revisionen vergangen sind, sodass es keinen gemeinsamen Ausgangspunkt für ein inkrementelles Resilver gibt. Wenn während dieses Vorgangs ein Fehler auftritt, sind Sie wahrscheinlich in großen Schwierigkeiten, was Ihre Daten anbelangt. Beachten Sie auch, dass ZFS-Resilver aufgrund ihres Merkle-Tree-On-Disk-Datenformats in einer "Reihenfolge mit abnehmender Datenbedeutung" ausgeführt werden können (und werden), anstatt sequentiell wie nicht dateisystembasierte RAID-Systeme. Natürlich ist "Datenwichtigkeit" hier für ZFS von Bedeutung und nicht für das, was Sie für wichtig oder wertvoll halten. Die resultierende Suchaktivität kann insbesondere ein einzelnes Laufwerk leicht stark belasten.

Die kanonische Möglichkeit, zwei ZFS-Dateisysteme zu synchronisieren, besteht in der Verwendung von a zfs send | zfs receive zwischen ihnen. Dies setzt voraus, dass beide Dateisysteme verfügbar sind (aber Sie können Speichern Sie die Ausgabe von zfs send und verwenden Sie diese als Eingabe für den späteren Empfang von zfs eine große Einschränkung : zfs receive macht Nein Versuchen Sie, einen teilweise beschädigten Datenstrom wiederherzustellen, und brechen Sie den Vorgang nur ab, wenn Fehler festgestellt werden.

  • Haben Sie einen Pool für jedes Sicherungslaufwerk. Nennen wir sie Panzer und Rohr . Nehmen wir an, wir haben Daten über Panzer dass wir kopieren wollen Rohr .
  • Schließen Sie beide Laufwerke und an zpool import beide Panzer und Rohr . Sie können durch -N zu zpool importieren, damit es keine Dateisysteme mounten kann.
  • Machen Sie einen Schnappschuss des Quelldateisystems. Panzer . zfs snapshot tank@current1984 -r
  • Finden Sie den neuesten Schnappschuss, der beide Panzer und Rohr gemeinsam hat. Verwenden Sie so etwas wie zfs list tank pipe -t snapshot um eine rohe Liste zu erhalten, von der aus man arbeiten kann. Nehmen wir an, der letzte gemeinsame Schnappschuss ist current1948.
  • Führen Sie so etwas wie zfs send -R -I tank@current1948 tank@current1984 | zfs receive pipe Inkrementelle Übertragung des Deltas zwischen dem current1948 und current1984 Schnappschüsse von Panzer zu Rohr . Lies das zfs Manpage für weitere Details zu den Sende- und Empfangs-Unterbefehlen.
  • Warten Sie, bis dies abgeschlossen ist, und löschen Sie optional alle nicht mehr benötigten Snapshots. Stellen Sie sicher, dass Sie mindestens einen Schnappschuss aufbewahren (z. B. current1984 ), die beide Pools (eher Dateisysteme) gemeinsam haben, um beim nächsten Mal als Basis zu dienen.

Zu diesem Zeitpunkt haben die beiden Pools den gleichen Inhalt, bis zu dem von Ihnen verwendeten Snapshot. Bei ordnungsgemäßer Ausführung sollten auch nur die Differenzen übertragen werden müssen. Ich kann mir kein Szenario vorstellen, in dem eine inkrementelle zfs send | zfs receive müsste sowas wie ein vollspiegel resilver machen. Auf diese Weise können Sie den Backup-Pools später Redundanz hinzufügen, falls Sie dies wünschen. Wenn das Quelllaufwerk während des Kopiervorgangs ausfällt, sollte das alte Backup immer noch verfügbar sein. Nur die Unterschiede, die Sie übertragen wollten, gingen verloren.

a CVn
quelle
Erstaunlich ausführliche Antwort. Vielen Dank für Ihre Antwort!
Matthew
3
@ Matthew ZFS-Fragen erreichen bei weitem nicht das Ausmaß an Liebe, das sie für Super User verdienen. (Oh und Stellen Sie sicher, dass Sie ECC-RAM verwenden . Dafür brauchst du mir nicht zu danken.)
a CVn
Wenn kein ECC-RAM verfügbar ist, welches Dateisystem würden Sie empfehlen? Der Link lässt es so klingen, als wäre ein "dümmeres" Dateisystem in diesem Fall die bessere Option?
Matthew
1
@Matthew Wenn kein ECC-RAM verfügbar ist, fällt eine der wenigen Hauptannahmen, die ZFS macht, vollständig auseinander. Denken Sie daran, dass ZFS für High-End-Server und in dieser Umgebung im Wesentlichen für Nicht-ECC-RAM entwickelt wurde existiert nicht . Wenn Ihr System nicht über die ECC-RAM-Fähigkeit verfügt, sollten Sie ZFS wahrscheinlich besser verschrotten und stattdessen ein reguläres Dateisystem auf Ihrer Plattform (ext4, UFS, HFS + usw.) verwenden, das nicht versucht, aufgetretene Fehler automatisch zu beheben. Sie können so etwas wie hashdeep regelmäßig ausführen, um nachträglich ein bisschen Rot zu fangen und eine gute Kopie von Backups wiederherzustellen.
a CVn
1
@ Matthew Mind you, ZFS auf Nicht-ECC-RAM-Systemen können Arbeit, besonders mit hochwertigem RAM. Ich habe es eine Weile so laufen lassen, bevor ich den RAM durch ECC-Sticks ersetzt habe. Aber du lebst wirklich am Rande, indem du das tust; Jeder Speicherfehler kann sich von einem Hinweis in einer Protokolldatei zu einem datenvernichtenden Problem entwickeln. Aus diesem Grund wird generell empfohlen, ZFS niemals ohne ECC-RAM zu verwenden. Mit dem automatischen Reparaturverhalten von ZFS ist das Risiko einfach zu hoch. Bei anderen Dateisystemen verteilt sich ein RAM-Bit-Flip nicht automatisch auf alle auf der Festplatte gespeicherten Daten und Metadaten, wohingegen dies bei ZFS möglich ist.
a CVn