Ist es möglich, eine ZFS-Festplatte zu trennen und wieder anzuschließen, ohne dass ein vollständiger Resilver erforderlich ist?

10

Ich habe einen gespiegelten ZFS-Pool mit insgesamt vier Laufwerken. Zwei der Laufwerke sind zum Rotieren von Offsite-Backups vorgesehen. Meine Erwartung war, dass ich nach dem ersten Resilvering detachund später attacheine Festplatte nur einen inkrementellen Resilver ausführen lassen konnte - beim Testen scheint es jedoch einen vollständigen Resilver auszuführen, unabhängig davon, ob die angeschlossene Festplatte bereits fast den gesamten Pool enthält oder nicht Inhalt.

Würde die Verwendung eines offline/ online-Ansatzes zu dem gewünschten Ergebnis führen, dass nur die Festplatte aktualisiert wird, anstatt sie vollständig neu zu erstellen? Oder damit diese Arbeit wie erwartet funktioniert, muss ich etwas völlig anderes tun - beispielsweise jede Sicherungsdiskette als 1-Disk-Pool verwenden und senddie neuesten Snapshots darauf erstellen, wann immer sie auf den neuesten Stand gebracht werden muss?

STW
quelle
5
-1 Trennen / Anhängen von Laufwerken zur Sicherung nicht, verwenden Sie die Sende- / Empfangsbefehle wie von den ZFS-Designern beabsichtigt.
Chris S
2
@ChrisS statt -1 Wie wäre es, eine Antwort mit einigen Zitaten zu schreiben? Es hört sich so an, als ob Sie sagen, dass die einzige Option für Backups ein Online-Pool an einem anderen Ort ist - was gut zu wissen wäre, wenn es wahr ist, aber ich vermute, dass dies nicht der Fall ist.
STW
1
Entschuldigung, ich habe nicht die Absicht, ein arroganter Idiot zu sein, aber Server Fault sollte nur für professionelle Systemadministratoren (ua) gelten. Die Breaking-Mirrors-Methode für Sicherungen ist so völlig unüberschaubar, fehleranfällig und unprofessionell, dass sie nicht als praktikable Sicherungsmethode angesehen werden sollte. Ich schlage vor, dass Sie die beiden Sicherungslaufwerke mit einem beliebigen Dateisystem formatieren und mit dem zfs sendBefehl vollständige oder inkrementelle Sicherungsströme verwenden, die auf den Sicherungsdatenträgern gespeichert sind, oder zfs recveine doppelte Festplatte erstellen. Ich würde wärmstens empfehlen, eine Art Software zu verwenden, um diesen Prozess zu verwalten.
Chris S
Ich denke, Ihre Punkte sind gültig, ich würde es als Antwort positiv bewerten. Ich denke darüber nach, meine Frage neu zu schreiben, um mich weniger auf mein spezifisches Szenario zu konzentrieren (das sich aus einem knappen Budget für einen unkritischen, aber wichtigen internen Server ergibt) als vielmehr auf das Kernstück "Kann ich ein Laufwerk wieder anschließen, ohne dass ein vollständiges erforderlich ist?" belastbar? "
STW

Antworten:

14

Gehen Sie nicht den Weg, das ZFS-Array zu beschädigen, um Festplatten außerhalb des Standorts zu "drehen". Wie Sie gesehen haben, ist die Wiederherstellungszeit hoch und der Resilvering-Prozess liest / überprüft die verwendete Größe des Datasets.

Wenn Sie die Möglichkeit haben, sind Schnappschüsse und das Senden von Daten an ein Remote-System ein sauberer, nicht aufdringlicher Ansatz. Ich nehme an, Sie könnten den Prozess durchlaufen, einen dedizierten Single-Disk-Pool zu haben, darauf zu kopieren und Zpool zu exportieren / importieren ... aber es ist nicht sehr elegant.

ewwhite
quelle
Leider kann ich keinen Snapshot-> Send-Ansatz verwenden, da ich nicht über die Hardware oder Bandbreite verfüge, um einen zweiten ZFS-Server außerhalb des Unternehmens auszuführen. Es scheint jedoch, dass die Verwendung von Offline / Online funktioniert, mit dem Kompromiss, dass der Status als verschlechtert gemeldet wird. Ich werde sehen, wie es für die nächste Woche oder so geht.
STW
1
Verstanden. Das Herausziehen laufender Festplatten aus einem System als Backup ist jedoch keine solide Lösung. Ihr Risiko steigt dabei drastisch an.
ewwhite
Guter Punkt, mein Plan ist es, sie offline zu schalten, sie auszusetzen, ihr Hot-Swap-Fach abzusetzen und ihm dann eine Minute Zeit zu geben, um einen vollständigen Stopp zu gewährleisten, bevor er vollständig gezogen wird
STW
1
Können Sie einen zweiten Server vor Ort betreiben (oder sogar ein zweites ZFS-Array auf demselben Server)? Legen Sie Ihre Hotswap-Schächte hinein, synchronisieren Sie sie mit dem Hauptschacht und drehen Sie dann das gesamte Backup-ZFS-Array als Einheit in den Server hinein / aus ihm heraus.
Dan spielt am Feuer
11

Nach weiteren Experimenten habe ich eine faire Lösung gefunden, die jedoch einen erheblichen Kompromiss mit sich bringt. Festplatten, die entfernt offline, aber nicht getrennt wurden, können später nur mit einer inkrementellen Auslöseoperation wieder online geschaltet werden (" Wenn ein Gerät online geschaltet wird, werden alle Daten, die in den Pool geschrieben wurden, mit dem neu verfügbaren Gerät neu synchronisiert. "). In meinen Tests verkürzt sich die Auslösezeit für einen 3-Platten-Spiegel von 28 Stunden auf etwas mehr als 30 Minuten mit etwa 40 GB Datendelta.

Der Nachteil ist, dass jeder Pool mit einer Offline-Festplatte als beeinträchtigt gekennzeichnet wird. Vorausgesetzt, es gibt noch mindestens zwei Online-Festplatten (in einem gespiegelten Pool), ist dies effektiv eine Warnung - Integrität und Redundanz bleiben erhalten.

Wie andere bereits erwähnt haben, ist dieser Gesamtansatz alles andere als ideal - das Senden von Snapshots an einen Remote-Pool wäre weitaus geeigneter, in meinem Fall jedoch nicht möglich.

Zusammenfassend lässt sich sagen, dass Sie Folgendes empfehlen würden, wenn Sie eine Festplatte aus einem Pool entfernen und später wieder hinzufügen müssen, ohne dass eine vollständige Ausfallsicherung erforderlich ist:

  • offline die Festplatte im Pool: zpool offline pool disk
  • Drehen Sie das Laufwerk herunter (wenn es physisch gezogen werden soll): hdparm -Y /dev/thedisk
  • Lassen Sie den Pool in einem verschlechterten Zustand, während das Laufwerk ausgeschaltet ist
  • So fügen Sie die Festplatte wieder zum Pool hinzu: zpool online pool disk

Und da dies noch nicht getestet wurde, besteht das Risiko, dass der Delta-Resilvering-Vorgang nicht genau ist. Im "Live" -Pool und / oder auf den Offline-Festplatten können Probleme auftreten. Ich werde aktualisieren, wenn mir das passiert, aber vorerst mit diesem Ansatz experimentieren.

STW
quelle
1
Wenn der Resilver Datenfehler einführt, werden diese im Laufe der Zeit oder nach einem Zpool-Scrub automatisch behoben.
The-Wabbit
Ich habe den Wert eines Peelings erkannt. Ich warte bis nach einem erfolgreichen Scrub offline und entferne die Sicherungsdiskette
STW
2
Nur ein kurzes Update: Im vergangenen Jahr hat dieser Ansatz gut genug funktioniert. Die monatlichen Wiederherstellungstests der Offsite-Sicherung waren erfolgreich und konsistent. Das Drehen eines Arrays (anstelle einer einzelnen Festplatte) ist besser, um eine Redundanzstufe in der Offsite-Kopie bereitzustellen, und ich würde dies nach Möglichkeit empfehlen. Insgesamt ist dies immer noch ein hackiger Ansatz und birgt ein gewisses Risiko, bietet jedoch eine einigermaßen sichere und kostengünstige Offsite-Sicherung unserer Daten.
STW
Ich würde gegen das Drehen aller Laufwerke im Array argumentieren, da der Transport sie alle langsam beschädigen kann. Ich würde die Rotation nicht durchführen, selbst wenn die Laufwerke vor Ort bleiben würden.
Costin Gușă
2

Update am 15. Oktober 2015: Heute habe ich den zpool splitBefehl entdeckt, der einen neuen Pool (mit einem neuen Namen) von einem vorhandenen Pool trennt. splitist viel sauberer als offlineund detach, da beide Pools dann auf demselben System existieren (und separat gesäubert werden können). Der neue Pool kann auch sauber (und ordnungsgemäß) sein, export[ed]bevor er vom System getrennt wird.

(Mein ursprünglicher Beitrag folgt unten.)

Warnung! Verschiedene Kommentare auf dieser Seite deuten darauf hin, dass zpool detachein Laufwerk möglich ist (oder sein könnte) , und schließen Sie das Laufwerk dann wieder an und greifen Sie auf die darin enthaltenen Daten zu.

Gemäß diesem Thread (und meinem eigenen Experiment) werden jedoch zpool detachdie "Pool-Informationen" vom getrennten Laufwerk entfernt. Mit anderen Worten, a detachist wie eine schnelle Neuformatierung des Laufwerks . Nachdem sich detachmöglicherweise noch viele Daten auf dem Laufwerk befinden, ist es praktisch unmöglich , das Laufwerk erneut bereitzustellen und die Daten als verwendbares Dateisystem anzuzeigen.

Folglich scheint es mir detachdestruktiver als destroy, da ich glaube zpool import, zerstörte Pools wiederherstellen zu können!

A detachist nicht eine umount, noch eine zpool export, noch eine zpool offline.

Wenn ich in meinen Experimenten zuerst zpool offlineein Gerät und dann zpool detachdasselbe Gerät verwende, vergisst der Rest des Pools, dass das Gerät jemals existiert hat. Da das Gerät selbst jedoch offline[d]zuvor war detach[ed], wird das Gerät selbst niemals über das Gerät informiert detach. Daher verfügt das Gerät selbst weiterhin über seine Poolinformationen und kann auf ein anderes System und dann import[ed](in einem herabgesetzten Zustand) verschoben werden .

Zum zusätzlichen Schutz detachkönnen Sie das Gerät sogar nach dem offlineBefehl, jedoch noch vor der Ausgabe des detachBefehls, physisch vom Stromnetz trennen .

Ich hoffe, dass ich dies offlinedann verwenden detachund dann importverarbeiten kann, um meinen Pool zu sichern. Wie beim Originalplakat plane ich die Verwendung von vier Laufwerken, zwei in einem konstanten Spiegel und zwei für monatliche, rotierende Offsite- (und Offline-) Backups. Ich werde jedes Backup überprüfen, indem ich es auf einem separaten System importiere und bereinige, bevor ich es außerhalb des Standorts transportiere. Im Gegensatz zum Originalposter macht es mir nichts aus, das gesamte Sicherungslaufwerk jeden Monat neu zu schreiben. Tatsächlich bevorzuge ich komplette Umschreibungen, um frische Teile zu erhalten.

mpb
quelle
0

Haben Sie auf demselben Computer versucht, einen neuen Pool mit den beiden Laufwerken in einem Spiegel zu erstellen? Erstellen Sie als Nächstes einen Snapshot in Ihrem Arbeitspool und senden Sie diesen Snapshot an den neuen Pool. Wiederholen Sie diesen Vorgang. Der nächste Snapshot-Sendevorgang erfolgt inkrementell. Dies ist nicht dasselbe wie beim "Senden von Daten an ein Remote-System", da dies ein Pool innerhalb desselben Systems / Servers / Computers ist. Mit diesem Setup können Sie weiterhin Zpool Split / Offline / Trennen / Anhängen anwenden, dies jedoch nur im zweiten (Kopier-) Pool und nicht im Quellpool.

Sojaayix
quelle