ネイティブZFSを使用して、Ubuntu Server 13.04 64ビットを実行しています。私は4台のハードドライブで構成されたzpoolを持っていますが、そのうち1台が昨日死亡しましたが、現在はnotがOSまたはBIOSによって認識されています。
残念ながら、次の再起動後にのみ問題が発生したため、ドライブラベルがなくなっており、公式の指示 here および here を使用してディスクを交換することはできません。
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
死んだドライブのラベルがシステムにもう存在しないためです。また、上記のコマンドを試して、ドライブのラベルへのパスを無効にしました。
「ゴースト」ディスクを交換するにはどうすればよいですか?
この夜、無限に掘り下げた後、私は最終的に解決策を見つけました。簡単な答えは、zpool
コマンドでディスクのGUID(ドライブを切断した後も保持されます)を使用できるということです。
長い答え:GUIDを取得しましたzdb
コマンドを使用して、次の出力を取得しました
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のマンページで、zdb
コマンドでzpool
を介して取得したディスクのGUIDを使用できることは、この情報を含めるといいでしょう。
編集
zdb
コマンドの下のdurvalで指摘されているように、何も出力されない場合があります。次に、使用しようとすることがあります
zdb -l /dev/<name-of-device>
デバイスに関する情報を明示的にリストします(すでにシステムにない場合でも)。
問題は、ディスクがデバイスではなく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秒遅れていました...
@Marcus:あなた自身の質問に対するこの素晴らしい答えを投稿してくれてありがとう、それは私を大いに助けてくれました。
先日、私はあなたに興味があるかもしれないひねりを見つけました(そして、将来的にグーグルでここに来る他の人):この同じエラーのためにプールからドロップされた(そして「UNAVAIL」とマークされた)キャッシュデバイスがありました(ZFS-8000-4J、「ラベルが見つからないか無効です」)、オフライン/削除/交換を試みると、まったく同じ「no such device in pool」メッセージで失敗しました。
しかし、私があなたのソリューションを適用しようとしたとき、プレーンな「zdb」(引数なし)はnotをリストしました。
掘り下げた後、「zdb -l/dev/DEVICENAME」にGUID(プールレコードからではなく、デバイスから直接取得)がリストされ、そのGUIDを使用していることがわかりました。 _交換を行うことができました(実際には、「zpool offline」に続いて「zpool remove」、次に「zpool add」を実行し、完全に機能しました)。
私は同様の問題がありました:
ドライブは、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
これをやると、FreeNASがreplace
コマンドを実行しなくても解決したように見えますが、システムがそれを認識しない場合は、次のコマンドで1つのデバイスを別のデバイスに置き換える必要があります。
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
zpool status
コマンドから取得されました。