Wiederherstellen/Importieren eines ZFS-Linux-Pools mit doppeltem Poolnamen

Wiederherstellen/Importieren eines ZFS-Linux-Pools mit doppeltem Poolnamen

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, backupwodurch der bestehende Pool zerstört wurde. (Ja, ich habe die -fOption 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 backupPool, den ich „erstellt“ habe, wahrscheinlich nicht wiederherstellbar. Was irgendwie in Ordnung ist, denn er hat backupeinen 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 importBefehl scheint nicht automatisch etwas zu finden. Beim Herumspielen mit einigen Optionen zpool importwird die (jetzt zerstörte) zweite Version des backupPools 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:

  1. Beeinträchtigt die Tatsache, dass ein zerstörter Pool aufgerufen wird, backupmöglicherweise die Fähigkeit, diesen alten Pool zu erkennen und zu versuchen, ihn wiederherzustellen/zu importieren? Gibt es einen Weg, das zu umgehen?
  2. 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?
  3. Ich gehe einfach mal davon aus, dass mein Pool auf den ersten beiden Platten durch den create -fBefehl 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.
  4. 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?

verwandte Informationen