Nach vielem Basteln und Experimentieren habe ich eine Lösung gefunden, wenn auch mit einem ziemlich großen Kompromiss.
Zunächst die Optionen, die ich ausschließen musste:
Ein zweiter externer ZFS-Server mit gespiegeltem Pool war aus Kostengründen keine Option. Wäre dies eine Option gewesen, wäre dies bei weitem der beste Ansatz gewesen, ZFS-Senden / Empfangen zu verwenden, um Snapshots an den Remote-Pool zu senden.
Ich habe einen zweiten gespiegelten ZFS-Pool vor Ort, aus dem ich Festplatten entfernen und mit nach Hause nehmen kann. Dies ist praktikabler als die erste Option, aber ich würde den zweiten Pool benötigen, um immer zwei Festplatten vor Ort zu haben (oder um zwei Datenkopien auf einer einzelnen Festplatte vor Ort zu verwenden). Derzeit habe ich vier Festplatten und keinen Platz mehr für eine fünfte auf dem Server. Dies wäre ein fairer Ansatz, aber immer noch nicht ideal.
Verwenden von ZFS zum Anhängen und Trennen, um die Sicherungsdiskette in den gespiegelten Pool hinein und aus diesem heraus zu drehen. Dies funktioniert gut, muss jedoch jedes Mal, wenn die Festplatte hinzugefügt wird, einen vollständigen Resilver ausführen. Das dauert unannehmbar lange und ich konnte mich nicht darauf verlassen.
Meine Lösung ähnelt der Verwendung von attach
und detach
verwendet jedoch online
und offline
. Dies hat den Vorteil, dass ein Delta-Resilvering gegenüber einem vollständigen Resilvering durchgeführt wird. Der Nachteil besteht jedoch darin, dass der Pool immer einen DEGRADED
Status meldet (der Pool verfügt immer über zwei Festplatten; die rotierenden externen Festplatten werden markiert, offline
wenn sie sich im Remote-Speicher und im Resilver befinden, und werden dann online geschaltet wenn sie vor Ort sind).
Ein kurzer Rückblick und ein Überblick über mein Setup:
Ich habe einen ZFS-Server und vier identische Festplatten. ZFS ist so eingerichtet, dass ein gespiegelter Pool verwendet wird. Zwei der vier Festplatten sind ständige Mitglieder dieses Pools. Die anderen beiden Scheiben drehen sich; Einer befindet sich immer im externen Speicher, der andere ist Teil des Pools, um als sofort einsatzbereites Backup zu fungieren.
Wenn es darum geht, die Backups zu drehen:
Ich warte auf einen zfs scrub
Abschluss, um sicherzustellen, dass die Sicherungsdiskette fehlerfrei ist
Ich zfs offline
die Festplatte, die entfernt werden wird. Nachdem es offline war, musste ich hdparm -Y /dev/id
es herunterdrehen. Nach einer Minute entferne ich den Schlitten teilweise (gerade genug, um den Stromausfall sicherzustellen) und gebe ihm dann eine weitere Minute, bevor ich das Laufwerk vollständig ziehe, um sicherzustellen, dass es sich nicht mehr dreht. Die Festplatte wird in einem statischen Beutel und dann in einer Schutzhülle aufbewahrt und befindet sich außerhalb des Standorts.
Ich bringe die andere Offsite-Festplatte mit. Es wird im Hotswap-Fach installiert und dreht sich. Ich verwende zfs online
, um die Festplatte im Pool wiederherzustellen und ein partielles Resilvering zu starten, um sie gleichzeitig zu machen.
Dieses System garantiert, dass ich zu jedem Zeitpunkt zwei ONLINE
Spiegelplatten und eine OFFLINE
Remote-Platte (die gesäubert wurde) habe. Die vierte Festplatte wird entweder ausgelagert oder ist online. Dies hat den Vorteil, dass bei einem Ausfall eines laufenden Laufwerks der Pool wahrscheinlich immer noch aus zwei Online-Festplatten besteht.
Es hat in den letzten Wochen gut funktioniert, aber ich würde dies immer noch als hackigen Ansatz betrachten. Ich werde nachgehen, wenn ich auf größere Probleme stoße.
Update: Nachdem ich ein paar Monate damit gearbeitet habe, habe ich festgestellt, dass das Resilvering in meiner realen Verwendung für das Trennen / Anhängen und Offline / Online dieselbe Zeit benötigt. Bei meinen Tests glaube ich nicht, dass ich ein Scrub ausgeführt habe. Meine Vermutung ist, dass ein Laufwerk, das für ein Scrub offline ist, einen vollständigen Resilver benötigt.