重複したプール名を持つ ZFS Linux プールの回復/インポート

重複したプール名を持つ ZFS Linux プールの回復/インポート

今日、既存の Linux zpool に 3 番目のミラーを追加しようとして、非常に愚かなことをしてしまいましたbackup。数年に一度ディスクを交換する以外は、ZFS での管理作業はほとんど行っていないので、2、3 の間違いを犯したとだけ言っておきます。そして、それを修正しようとして、プールを再作成するというオンライン アドバイスを誤って読み、 という名前の新しいプールを作成してしまい、backup既存のプールを破壊してしまいました。(はい、-f文句を言われた後にそのオプションを使用しました。はい、私は馬鹿です。これで、二度とそんなことはしないことがわかりました。次に進みましょう。)

オンラインで読んだbackupところによると、私が「作成した」元のプールはおそらく回復不可能だそうです。でも、名前の由来はbackup理由があって付けられたものなので、まあいいでしょう。このプールには、15 年ほど前のバックアップが主に保管されています。ただし、元に戻せたら便利なもの (一時的に移動した不要なデータ) がいくつかあり、そのボリュームにあったバックアップ設定に関係して、再度設定するのに数日かかるものもあります (今では、それらのものを別の場所にバックアップする必要があることがわかっているので、これは学習になります)。

しかし、バックアップのバックアップはあります。数か月前にシステムの別のアップグレード (OS のアップグレードも含む) 中に取り外したドライブの 3 番目のミラーを今日交換しました。そのドライブは実際には故障していませんでしたが、古く、いくつかの不良セクタが蓄積し始めていたため、破損するのを待つよりも、そのときに取り外したほうがよいと考えました。

とにかく、その古いドライブはまだあるので、それをシステムに戻して、そこからプール データを回復できると考えました。失われるのは、過去数か月のバックアップ データだけです。さて、そのドライブのプールを正式にエクスポートしたことは一度もありません。その後 OS をアップグレードしたので、そのドライブが自動的に検出されるとは思っていませんでした。(いくつかのドライブを移動したので、同じ SATA ポートに接続されているかどうかはわかりません。)

しかし、zpool importコマンドは何も自動的に見つけないようです。いくつかのオプションを試してみると、プールzpool importの 2 番目のバージョン (現在は破棄されています) が表示されますbackupが、これは他の 2 つのドライブに誤って作成した空のプールです。

この 3 番目のディスクのデータを読み取る方法についてアドバイスをいただけますか? 私の記憶の限りでは、数か月前にケースから取り出す前は、ZFS プールのミラーとして完全に機能し、最新の状態でした。特に、次の点が挙げられます。

  1. 破棄されたプールが存在するという事実は、backupこの古いプールを検出して回復/インポートする機能に潜在的に干渉しているのでしょうか? それを回避する方法はありますか?
  2. サーバーにはまだ古い OS インストールが残っており、古いディスクを使用していたときに実行されていたものと思われます。ZFS プールが検出されるかどうかを確認するために、そこから起動してみましたが、検出されませんでした。(繰り返しますが、ドライブが同じ場所に接続されていない可能性があります。) しかし、その古いプールのメタデータや ID 番号など、このドライブ上の完全なミラーを ZFS に強制的にインポートするために使用できる可能性のあるものを含む、取得できる ZFS ログ ファイルやその他のものはありますか?
  3. 最初の 2 つのディスク上のプールがコマンドによって破壊されたと仮定していますcreate -f。ただし、最初のプールを直接回復する方法をご存知の方がいらっしゃれば、非常に助かります。
  4. ZFS が古い 3 番目のミラーを ZFS プール ディスクとして検出しない他の理由はありますか? もしそうなら、他に何か提案はありますか? 試すことができる他の回復ツールはありますか?

ご協力やご提案をいただければ幸いです。

zdb -l /dev/sdb1編集:これは3番目のドライブからの出力です

------------------------------------
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 

これを正しく解釈していれば、ステータス 0 はプールがそのままであることを意味します。しかし、プールの GUID を使用してインポートしようとしてもzpool import 3936176493905234028、「インポートできません... 使用可能なプールがありません」というエラーが表示されます。(pool_guid を使用する必要があると思いますが、guid と top_guid も使用してみましたが、何も機能していないようです。)

編集2: このプールがアクティブだった元の OS から zpool.cache ファイルを回復して試したところzpool import -c zpool.cache、次のようになりました:

   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

これはある程度予想通りです。これらは、作成コマンドによってプールが上書きされた 2 つのディスクです。ただし、sdb1 は潜在的なドライブとしてリストされていません。おそらく、ディスクを取り出した後にプールから削除したためです。それでも、sdb1 には古いミラー データの完全なコピーがあると思いますし、zdb もそれに同意しています。なぜインポートされないのでしょうか。

関連情報