zpoolで死んだディスクを交換する


31

ネイティブZFSを使用して、Ubuntu Server 13.04 64ビットを実行しています。私は1つが昨日死亡し、今しているの4つのハードドライブから成るのzpoolていないもうOSやBIOSによって認識されているが。

残念ながら、次の再起動後にのみ問題が発生したため、ドライブラベルがなくなっており、ここここの公式の指示に従ってディスクを交換することはできません。

zpool status hermes -x

プリント

root@zeus:~# zpool status hermes -x
  pool: hermes
 state: DEGRADED
status: One or more devices could not be used because the label is missing or
        invalid.  Sufficient replicas exist for the pool to continue
        functioning in a degraded state.
action: Replace the device using 'zpool replace'.
   see: http://zfsonlinux.org/msg/ZFS-8000-4J
  scan: scrub repaired 0 in 2h4m with 0 errors on Sun Jun  9 00:28:24 2013
config:

        NAME                         STATE     READ WRITE CKSUM
        hermes                       DEGRADED     0     0     0
          raidz1-0                   DEGRADED     0     0     0
            ata-ST3300620A_5QF0MJFP  ONLINE       0     0     0
            ata-ST3300831A_5NF0552X  UNAVAIL      0     0     0
            ata-ST3200822A_5LJ1CHMS  ONLINE       0     0     0
            ata-ST3200822A_3LJ0189C  ONLINE       0     0     0

errors: No known data errors

私はすでにドライブを新しいものと交換しました(ラベルが付いています/dev/disk/by-id/ata-ST3500320AS_9QM03ATQ

コマンドのいずれか

zpool replace hermes /dev/disk/by-id/ata-ST3300831A_5NF0552X /dev/disk/by-id/ata-ST3500320AS_9QM03ATQ
zpool offline hermes /dev/disk/by-id/ata-ST3300831A_5NF0552X
zpool detatch hermes /dev/disk/by-id/ata-ST3300831A_5NF0552X

失敗する

root@zeus:~# zpool offline hermes /dev/disk/by-id/ata-ST3300831A_5NF0552X
cannot offline /dev/disk/by-id/ata-ST3300831A_5NF0552X: no such device in pool

死んだドライブのラベルがシステムにもう存在しないためです。また、ドライブのラベルへのパスを無効にするために上記のコマンドを試しました。

「ゴースト」ディスクを交換するにはどうすればよいですか?

回答:


38

この夜、無限に掘り下げた後、私は最終的に解決策を見つけました。簡単な答えは、zpoolコマンドでディスクのGUID(ドライブを切断しても保持される)を使用できるということです。

長い答え:zdb次の出力を与えたコマンドを使用してディスクのGUIDを取得しました

root@zeus:/dev# zdb
hermes:
    version: 28
    name: 'hermes'
    state: 0
    txg: 162804
    pool_guid: 14829240649900366534
    hostname: 'zeus'
    vdev_children: 1
    vdev_tree:
        type: 'root'
        id: 0
        guid: 14829240649900366534
        children[0]:
            type: 'raidz'
            id: 0
            guid: 5355850150368902284
            nparity: 1
            metaslab_array: 31
            metaslab_shift: 32
            ashift: 9
            asize: 791588896768
            is_log: 0
            create_txg: 4
            children[0]:
                type: 'disk'
                id: 0
                guid: 11426107064765252810
                path: '/dev/disk/by-id/ata-ST3300620A_5QF0MJFP-part2'
                phys_path: '/dev/gptid/73b31683-537f-11e2-bad7-50465d4eb8b0'
                whole_disk: 1
                create_txg: 4
            children[1]:
                type: 'disk'
                id: 1
                guid: 15935140517898495532
                path: '/dev/disk/by-id/ata-ST3300831A_5NF0552X-part2'
                phys_path: '/dev/gptid/746c949a-537f-11e2-bad7-50465d4eb8b0'
                whole_disk: 1
                create_txg: 4
            children[2]:
                type: 'disk'
                id: 2
                guid: 7183706725091321492
                path: '/dev/disk/by-id/ata-ST3200822A_5LJ1CHMS-part2'
                phys_path: '/dev/gptid/7541115a-537f-11e2-bad7-50465d4eb8b0'
                whole_disk: 1
                create_txg: 4
            children[3]:
                type: 'disk'
                id: 3
                guid: 17196042497722925662
                path: '/dev/disk/by-id/ata-ST3200822A_3LJ0189C-part2'
                phys_path: '/dev/gptid/760a94ee-537f-11e2-bad7-50465d4eb8b0'
                whole_disk: 1
                create_txg: 4
    features_for_read:

私が探していたGUID 15935140517898495532

root@zeus:/dev# zpool offline hermes 15935140517898495532
root@zeus:/dev# zpool status
  pool: hermes
 state: DEGRADED
status: One or more devices has been taken offline by the administrator.
        Sufficient replicas exist for the pool to continue functioning in a
        degraded state.
action: Online the device using 'zpool online' or replace the device with
        'zpool replace'.
  scan: scrub repaired 0 in 2h4m with 0 errors on Sun Jun  9 00:28:24 2013
config:

        NAME                         STATE     READ WRITE CKSUM
        hermes                       DEGRADED     0     0     0
          raidz1-0                   DEGRADED     0     0     0
            ata-ST3300620A_5QF0MJFP  ONLINE       0     0     0
            ata-ST3300831A_5NF0552X  OFFLINE      0     0     0
            ata-ST3200822A_5LJ1CHMS  ONLINE       0     0     0
            ata-ST3200822A_3LJ0189C  ONLINE       0     0     0

errors: No known data errors

その後

root@zeus:/dev# zpool replace hermes 15935140517898495532 /dev/disk/by-id/ata-ST3500320AS_9QM03ATQ
root@zeus:/dev# zpool status
  pool: hermes
 state: DEGRADED
status: One or more devices is currently being resilvered.  The pool will
        continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
  scan: resilver in progress since Sun Jun  9 01:44:36 2013
    408M scanned out of 419G at 20,4M/s, 5h50m to go
    101M resilvered, 0,10% done
config:

        NAME                            STATE     READ WRITE CKSUM
        hermes                          DEGRADED     0     0     0
          raidz1-0                      DEGRADED     0     0     0
            ata-ST3300620A_5QF0MJFP     ONLINE       0     0     0
            replacing-1                 OFFLINE      0     0     0
              ata-ST3300831A_5NF0552X   OFFLINE      0     0     0
              ata-ST3500320AS_9QM03ATQ  ONLINE       0     0     0  (resilvering)
            ata-ST3200822A_5LJ1CHMS     ONLINE       0     0     0
            ata-ST3200822A_3LJ0189C     ONLINE       0     0     0

errors: No known data errors

再同期が完了した後、すべてが再び正常に機能しました。zpoolのマンページでzdbzpoolコマンドで取得したディスクのGUIDを使用できるということは、この情報を含めるといいでしょう。

編集

以下のdurvalで指摘されているように、zdbコマンドは何も出力しない場合があります。次に、使用しようとすることがあります

zdb -l /dev/<name-of-device>

デバイスに関する情報を明示的にリストします(すでにシステムにない場合でも)。


次に-n-gスイッチを使用してaddを実行する前に、スイッチも同様にuuidを取得します。
ブライアントーマス

おかげで、これは非常に役に立ちました。Webをざっと見て回ると、zdbから情報を収集するための情報が見つかりませんでした。
xamox

私は何週間も探していましたが、ついにこの答えがうまくいきました。しかし、zpool status(sdabのような名前)によってリストされたID は/dev/disk/by-id(クレイジーな長いID名)のパスとは異なりました。しかしls -la /dev/disk/by-id、それらはすべてへのリンクであることが明らかに/dev/...なったため、UNAVAIL(およびその後オフライン)ディスクを指しているものが見つかり、これらの手順を正常に完了できました。現在、それは回復しています。ありがとうございました!
マット

GUIDを取得する別のより短い方法zpool status -gは、各デバイスのGUIDを使用してステータスを表示することです。また、@ Mattの場合zpool status -L、長い/dev/disk/by-id名前の代わりに基本的なデバイス名を使用してステータスを表示します。
-StarNamer

あなたはあなたのソリューションで戻ってくる本当のMVPです。これは私のために働いた。
extracrispy

3

問題は、ディスクがデバイスではなくIDによって参照されることです。

動作する回避策は次のとおりです。

ln -s /dev/null /dev/ata-ST3300831A_5NF0552X
zpool export hermes
zpool import hermes
zpool status
# note the new device name that should appear here
zpool offline hermes xxxx
zpool replace hermes xxxx /dev/disk/by-id/ata-ST3500320AS_9QM03ATQ

編集:私は30秒遅れていました...


ありがとう。行方不明のドライブへの空のリンクを作成しようとしていましたが、それは言い続けましたno such device in pool
マーカス

私の提案は、あなたがしたこととほとんど同じです。唯一の違いは、デバイスGUIDを取得する方法です。/ dev / null(空のリンクとは異なる)へのシンボリックリンクを作成し、プールをエクスポート/インポートすると、次のように表示されますzpool status
jlliagre

この方法を使用して、実際に「欠陥」ドライブを交換せずにオンラインに戻すことができました(そのため、スキップofflineしてreplaceステップを実行しました)。nullリンクを削除した後、プールをもう一度インポートしました。たぶんそれはドライブラベルの問題だったのでしょうか?実際、ドライブ名は同じままでした。その後、完全にスクラブしましたが、エラーは見つかりませんでした。
セラーノ

2

@Marcus:あなた自身の質問に対するこの素晴らしい答えを投稿してくれてありがとう、それは私を大いに助けてくれました。

先日、私はあなたに興味があるかもしれないひねりを見つけました(そして、将来ここでグーグルに来る他の人):この同じエラーのためにプールからドロップされた(そして「UNAVAIL」とマークされた)キャッシュデバイスがありました(ZFS-8000-4J、「ラベルが見つからないか無効です」)、オフライン/削除/交換を試みると、まったく同じ「プールにそのようなデバイスはありません」というメッセージが表示されて失敗しました。

しかし、私があなたのソリューションを適用しようとしたとき、プレーンな「zdb」(引数なし)はデバイスをリストしませんでした

掘り下げた後、「zdb -l / dev / DEVICENAME」にGUIDがリストされていることがわかり(プールレコードからではなく、デバイスから直接取得)、そのGUIDを使用して置換を行うことができました(実際に「zpool offline」に続いて「zpool remove」、次に「zpool add」が完全に機能しました)。


ありがとう!あなたのコメントを参照して、私自身の受け入れられた答えにヒントを追加しました。
マーカス

私にとっては、zdb -l /dev/...常に「ラベルの開梱に失敗しました」と表示されていました。
マット

0

私は同様の問題がありました:

BIOSに登録されなくなった(完全に死んだ)ようにドライブが故障しました。でzpool statusあることが示されたUNAVAILABLE

私はで同様の容量のドライブを入れて、私は新しいようにそれを割り当てることに成功しspareたことINUSEと、ドライブを再同期化。しかし、それは実際にはzpoolの一部ではなく、むしろいつか再び現れると思って、プールに失われたドライブの記憶がありました。

解決策は、最初に不足しているドライブをzpoolからドロップすることでした。

[root@hactar ~]# zpool detach hactar_data /dev/gptid/87410b00-adb0-11e6-9193-00241d738094  

次に、マークされたドライブをドロップしspare-1 INUSEます。

[root@hactar ~]# zpool detach hactar_data /dev/gptid/f2089b59-2654-11e5-8d99-00241d738094

これを実行すると、replaceコマンドを実行しなくてもFreeNASが認識したように見えますが、システムがそれを認識しない場合、次のコマンドでデバイスを別のデバイスに置き換える必要があります。

zpool replace {your_poolname} {drive to be replaced} {new drive to take its place}

例えば:

zpool replace hactar_data /dev/gptid/87410b00-adb0-11e6-9193-00241d738094 /dev/gptid/87410b00-adb0-11e6-9193-00241d
738094
  • gptidsは私のzpool statusコマンドから来ました。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.