概要
RAID-Z2を構成しているディスクが壊れたので、交換しようとしたら思いのほかえらく苦労した話。
自分はこれで治りましたが、実行はあくまで自己責任でお願いします。
環境: Ubuntu(16.04) ZFS on Linux
本題
zfs statusしたら/dev/sdfがお亡くなりになっていた。
AmazonのPrimeNowでHDDを購入。こういう時にスペアを用意していなくても2時間で届くのは本当に便利。
ちなみに、3TB x 6で組んでいるのだけど、今後増やしていこうと6TBのHDDを購入した。
それでもって/dev/sdfのシリアル番号を/dev/disk/by-idで確認しつつ交換。本来は最初から/dev/disk/by-idで設定しておけば良かったのだけど組んだ時には知らなかったのでご容赦を。
満を持して、replaceしてみる
1 2 3 4 |
# zfs replace tank /dev/sdf /dev/disk/by-id/xxxxxx invalid vdev specification use '-f' to override the following errors: /dev/sdf does not contain an EFI label but it may contain partition |
エラーが出た。
この記事を参考に、gptラベルを設定して再チャレンジ。
1 2 |
# zfs replace tank /dev/sdf /dev/disk/by-id/xxxxxx cannot label 'sdf': try using parted(8) and then provide a specific slice: "-4" |
またエラーが出た。
githubに全く同じエラーメッセージのissueがあったので、書いてある通りにしてもだめだった。
https://github.com/zfsonlinux/zfs/issues/1028
再起動してみたりを繰り返していたのだけど、sdfのことを忘れてもらうためにダミーファイルを挟んでやったらうまくいった。
1 2 3 4 5 6 |
# dd if=/dev/zero of=/root/dummy count=0 bs=65536 seek=167772160 # zpool replace tank /dev/sdf /root/dummy # zpool offline tank /root/dummy # zpool detach tank /dev/sdf # zpool replace tank /root/dummy /dev/disk/by-id/xxxxx # zpool detach tank /root/dummy |
zpool offline tank /root/dummyを急いで実行しないと本当にresilverされてしまうので気を付けてください。
/root/dummyはスパースファイルなので実際に10TBもの容量を食うことはありませんが、それ以下の容量のパーティションにも設置はできます。当然offlineにしないと膨れて恐ろしいことになると思います。
ダミーのファイルを使ったりしていて結構綱渡りな方法だと思いますので繰り返しになりますが自己責任で実行してください。
RAID-Z2だったのでまだ心に余裕がありましたが、RAID-Z1ならパニックでしたね、これ…。