PVE の ZFS アレイで故障したハードディスクを交換する
以前組んだあの奇妙な PVE サーバーなのだが、最近デフォルトの ZFS Pool が Degraded になっていることに気づいた。
見るからに一台のハードディスクが壊れている。
RaidZ1 で組んでいるので 1 台の故障は許容される。理屈の上では 1 台交換すれば済む話だ。

ドキュメントや他の人の経験を調べたところ、基本の手順はこんな感じ。
- まず元のディスクをオフラインにする
- 新しいディスクを差す
- zpool replace で元のディスクを置き換える
- 新しいディスクでデータを再構築する
- 交換完了
今はすでに Degraded の状態で、これは Offline と同じ性質なので、offline の操作は要らない。もしディスクにエラーがあるだけで完全に Degrade していないなら、手動で先にオフラインにする必要がある。
zpool offline poolname XXXXXXXX
まずは新しいディスクを調達しないと。この PVE サーバー自体が骨董品なので、ディスクの部品番号を調べたら 581311-001 だった。メルカリで探すと出品者がわんさか出てくる。大半はサーバーを解体した転売屋だ。ディスクへの要求は高くない、しばらく持てばいい。交渉して 30 元で 1 台買った。

次に問題になるのが、壊れたディスクの位置を特定すること。自分はディスクを 1 台ずつ個別に Raid0 で作って HBA の代わりにしているので、よくあるコマンドラインでシリアル番号を読む方法は効かない。電源を切って Raid カードの画面に入り、Raid カードが作った Raid 番号の順番を PVE の番号に対応させるのがいい。例えばこれなら PVE では 5 台目のディスクで、Raid カードでも 5 台目。サーバーの Slot を調べれば 5 台目の位置が特定できる。新しいディスクに交換すればいい。
新しいディスクに交換したら再起動してシステムに入る。認識されているのが確認できるので Raid0 を作成し、PVE に入って元のディスクを Wipe すれば、zpool で replace できる。基本的には元の disk-id を入力するだけでいい。
zpool replace poolname XXXXXXXX NEWXXXXXXX
replace 後は再構築の進捗が見える。遅いこともあるが、自分のところはどんどん速くなって、だいたい 10 時間で再構築が終わった。
これでディスク交換は完了。

最後に言っておきたいのは、RaidZ1 はやはりリスクがあるということ。1 台の故障は許容するが、ディスクの異常に気づいたらすぐに対処すべきで、放置しちゃダメだ。交換して再構築している最中(再構築が長引くこともある、下手すると何日もかかる)にもう 1 台もたまたま壊れたら、それで終わりだからな。
参考: https://www.rockylinux.cn/notes/diy-nas-series-32-zfs-storage-pool-failure-and-recovery.html https://tomjamescn.github.io/post/2019-06-13-zfs-replace-bad-disk/ https://pve.proxmox.com/wiki/ZFS:_Tips_and_Tricks#Replacing_a_failed_disk_in_the_root_pool
コメントは中国語の本家サイトで受け付けています。このミラーは閲覧専用です。