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.