Ich habe heute etwas sehr Dummes gemacht, als ich versuchte, einem bestehenden Linux-Zpool mit dem Namen einen dritten Mirror hinzuzufügen backup
. Es genügt zu sagen, dass ich ein paar Fehler gemacht habe, weil ich mit meinem ZFS nicht wirklich viel Admin-Arbeit mache, außer alle paar Jahre die Festplatten auszuwechseln. Und beim Versuch, sie zu korrigieren, habe ich den Online-Ratschlag, den Pool neu zu erstellen, falsch gelesen und einen neuen Pool mit dem Namen erstellt, backup
wodurch der bestehende Pool zerstört wurde. (Ja, ich habe die -f
Option verwendet, nachdem sie sich beschwert hatte. Ja, ich bin ein Idiot. Jetzt weiß ich, dass ich das nie wieder tun darf. Machen wir weiter.)
Nach dem, was ich online gelesen habe, ist mein ursprünglicher backup
Pool, den ich „erstellt“ habe, wahrscheinlich nicht wiederherstellbar. Was irgendwie in Ordnung ist, denn er hat backup
einen Grund, warum er so heißt – er beherbergt hauptsächlich meine Backups der letzten 15 Jahre. Es gibt jedoch ein paar Dinge, die ich gerne wieder hätte (einige nicht unbedingt notwendige Daten, die ich vorübergehend dorthin verschoben hatte), und ein paar Dinge, die ich ein paar Tage brauchen werde, um sie wieder einzurichten, weil sie mit den Backup-Einstellungen zu tun haben, die auf diesem Volume gespeichert waren. (Jetzt weiß ich, dass ich das Zeug woanders sichern muss, also wird das eine Lernerfahrung sein.)
Aber ich habe eine Sicherungskopie meiner Sicherungen – ich habe heute ein drittes Spiegelbild für ein Laufwerk ausgetauscht, das ich vor ein paar Monaten bei einem anderen Upgrade meines Systems (zusammen mit einem Betriebssystem-Upgrade) entfernt hatte. Dieses Laufwerk ist zwar nicht wirklich ausgefallen, aber es war alt und hatte begonnen, ein paar fehlerhafte Sektoren anzusammeln, also dachte ich, ich könnte es genauso gut gleich herausnehmen, anstatt zu warten, bis es beschädigt wird oder so.
Jedenfalls habe ich das alte Laufwerk noch, also dachte ich, ich könnte es einfach wieder in mein System einstecken und die Pooldaten von dort wiederherstellen. Mir würden nur die Backup-Daten der letzten paar Monate fehlen. Nun, ich hatte den Pool auf diesem Laufwerk nie offiziell exportiert oder so. Und ich habe mein Betriebssystem inzwischen aktualisiert, also habe ich nicht damit gerechnet, dass es das Laufwerk automatisch erkennt. (Ich weiß nicht, ob es an denselben SATA-Anschluss angeschlossen ist oder nicht, da ich einige Laufwerke verschoben habe.)
Aber der zpool import
Befehl scheint nicht automatisch etwas zu finden. Beim Herumspielen mit einigen Optionen zpool import
wird die (jetzt zerstörte) zweite Version des backup
Pools angezeigt, aber das ist nur der leere Pool, den ich versehentlich auf zwei anderen Laufwerken erstellt habe.
Irgendwelche Ratschläge, wie ich versuchen könnte, die Daten auf dieser dritten Festplatte zu lesen? Soweit ich mich erinnern kann, war es ein perfekt funktionierendes und aktuelles Spiegelbild des ZFS-Pools, bevor ich es vor einigen Monaten aus dem Gehäuse gezogen habe. Insbesondere:
- Beeinträchtigt die Tatsache, dass ein zerstörter Pool aufgerufen wird,
backup
möglicherweise die Fähigkeit, diesen alten Pool zu erkennen und zu versuchen, ihn wiederherzustellen/zu importieren? Gibt es einen Weg, das zu umgehen? - Ich habe immer noch die alte Betriebssysteminstallation auf meinem Server, die, wie ich glaube, lief, als ich die alte Festplatte verwendet habe. Ich habe versucht, sie zu booten, nur um zu sehen, ob sie den ZFS-Pool erkennt, aber das hat sie nicht. (Auch hier gilt, dass das Laufwerk möglicherweise nicht an derselben Stelle angeschlossen ist.) Aber gibt es ZFS-Protokolldateien oder andere Dinge, die ich möglicherweise abrufen kann und die Metadaten zu diesem alten Pool oder die ID-Nummer oder etwas enthalten, mit dem ich ZFS möglicherweise zwingen könnte, einen intakten Spiegel auf diesem Laufwerk zu importieren?
- Ich gehe einfach mal davon aus, dass mein Pool auf den ersten beiden Platten durch den
create -f
Befehl zerstört wurde. Aber wenn jemand eine Idee hat, wie ich den ersten Pool direkt dort wiederherstellen könnte, wäre das natürlich super. - Gibt es einen anderen Grund, warum ZFS den alten dritten Spiegel nicht als ZFS-Pool-Datenträger erkennt? Wenn ja, haben Sie andere Vorschläge? Andere Wiederherstellungstools, die ich ausprobieren kann?
Vielen Dank für jede Hilfe oder jeden Vorschlag.
EDIT: Hier ist die Ausgabe von zdb -l /dev/sdb1
(das ist das dritte Laufwerk)
------------------------------------
LABEL 0
------------------------------------
version: 5000
name: 'backup'
state: 0
txg: 0
pool_guid: 3936176493905234028
errata: 0
hostid: 8323329
hostname: [omitted]
top_guid: 14695910886267065742
guid: 17986383713788026938
vdev_children: 1
vdev_tree:
type: 'mirror'
id: 0
guid: 14695910886267065742
whole_disk: 0
metaslab_array: 34
metaslab_shift: 33
ashift: 12
asize: 1000197324800
is_log: 0
create_txg: 4
children[0]:
type: 'disk'
id: 0
guid: 17914838236907067293
path: '/dev/sdd1'
whole_disk: 0
DTL: 143
create_txg: 4
children[1]:
type: 'disk'
id: 1
guid: 17986383713788026938
path: '/dev/sdb1'
whole_disk: 0
DTL: 141
children[2]:
type: 'disk'
id: 2
guid: 1683783279473519399
path: '/dev/sdc1'
whole_disk: 0
DTL: 145
create_txg: 4
features_for_read:
com.delphix:hole_birth
com.delphix:embedded_data
create_txg: 0
labels = 0 1 2 3
Wenn ich das richtig interpretiere, bedeutet Status 0, dass der Pool intakt sein sollte. Aber wenn ich versucht habe, sogar mit der Pool-GUID zu importieren zpool import 3936176493905234028
, erhalte ich die Fehlermeldung „Importieren nicht möglich … kein solcher Pool verfügbar“. (Ich gehe davon aus, dass ich die Pool-GUID verwenden sollte, aber ich habe auch versucht, die GUID und die Top-GUID zu verwenden, und nichts scheint zu funktionieren.)
EDIT2: Ich habe die Datei zpool.cache vom ursprünglichen Betriebssystem wiederhergestellt, auf dem dieser Pool aktiv war, und es versucht zpool import -c zpool.cache
, was Folgendes ergab:
pool: backup
id: 3936176493905234028
state: UNAVAIL
status: One or more devices contains corrupted data.
action: The pool cannot be imported due to damaged devices or data.
see: http://zfsonlinux.org/msg/ZFS-8000-5E
config:
backup UNAVAIL insufficient replicas
mirror-0 UNAVAIL insufficient replicas
sdd1 FAULTED corrupted data
sdc1 FAULTED corrupted data
Was einigermaßen zu erwarten ist. Dies sind die beiden Festplatten, bei denen der Pool durch meinen Befehl „Erstellen“ überschrieben wurde. Allerdings wird sdb1 dort nicht als mögliches Laufwerk aufgeführt – wahrscheinlich, weil ich es aus dem Pool entfernt habe, nachdem ich die Festplatte herausgenommen hatte. Trotzdem glaube ich, dass ich eine intakte Kopie alter gespiegelter Daten auf sdb1 habe, und zdb stimmt dem zu. Warum wird es nicht importiert?