Ich verwende einen ZFS-Pool, der aus zwei gespiegelten Festplatten besteht. Um Offsite-Backups in Gang zu bringen, habe ich zwei weitere Festplatten gekauft.
Mein ursprünglicher Plan war es, die Offsite-Sicherung zu erstellen, indem ich eine dritte Festplatte an den Spiegel anschließe, darauf warte, dass ZFS stabilisiert wird, dann das Laufwerk abtrenne und es außerhalb des Standorts trage. Dies funktioniert gut genug, aber ich war überrascht, dass es jedes Mal, wenn eine Festplatte angeschlossen wird , einen vollständigen Resilver ausführt (ich habe gelesen und möglicherweise missverstanden, dass jeder Anhang zu einem inkrementellen oder Delta-Resilver führen würde). Dies führt dazu, dass Backups länger dauern als akzeptabel.
Meine Anforderungen sind eine Offsite-Kopie meines Zpools und all seiner Schnappschüsse, die ich täglich drehen kann. Dies bedeutet, dass das Resilvering höchstens 24 Stunden dauern muss - derzeit ist es fast so weit, aber unsere Pläne, unseren Pool zu vergrößern, werden ihn über diesen Zeitraum hinausschieben.
Wie kann ich Offsite-Backups aufbewahren, für die kein vollständiger Resilvering-Vorgang erforderlich ist? Sollte ich auf meinen Sicherungslaufwerken ein anderes Dateisystem verwenden (z. B. ein Image exportieren, anstatt es in den ZFS-Pool aufzunehmen)? Sollte ich die Backups in einem separaten Pool haben und neue Snapshots an sie senden, wenn sie erstellt werden?
Antworten:
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
unddetach
verwendet jedochonline
undoffline
. 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 einenDEGRADED
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 istIch
zfs offline
die Festplatte, die entfernt werden wird. Nachdem es offline war, musste ichhdparm -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 eineOFFLINE
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.
quelle
Warum sendet zfs Ihre Snapshots nicht an einen Remote-ZFS-Computer? Ich benutze dafür ein einfaches Bash-Skript:
quelle
Ich habe ein Tool namens snapdump erstellt , mit dem Sie inkrementelle Speicherauszüge Ihrer zfs-Datasets in einem fremden (nicht zfs) Dateisystem erstellen können. Snapdump unterstützt auch die Wiederherstellung einer inkrementellen Snapshot-Kette mit einem einzigen Befehl.
quelle