PVE の ZFS アレイで故障したハードディスクを交換する

広告

以前組んだあの奇妙な PVE サーバーなのだが、最近デフォルトの ZFS Pool が Degraded になっていることに気づいた。

見るからに一台のハードディスクが壊れている。

広告

RaidZ1 で組んでいるので 1 台の故障は許容される。理屈の上では 1 台交換すれば済む話だ。

photo_2024-11-25_17-13-00.jpg

ドキュメントや他の人の経験を調べたところ、基本の手順はこんな感じ。

  • まず元のディスクをオフラインにする
  • 新しいディスクを差す
  • zpool replace で元のディスクを置き換える
  • 新しいディスクでデータを再構築する
  • 交換完了

今はすでに Degraded の状態で、これは Offline と同じ性質なので、offline の操作は要らない。もしディスクにエラーがあるだけで完全に Degrade していないなら、手動で先にオフラインにする必要がある。

zpool offline poolname XXXXXXXX

まずは新しいディスクを調達しないと。この PVE サーバー自体が骨董品なので、ディスクの部品番号を調べたら 581311-001 だった。メルカリで探すと出品者がわんさか出てくる。大半はサーバーを解体した転売屋だ。ディスクへの要求は高くない、しばらく持てばいい。交渉して 30 元で 1 台買った。

photo_2024-11-25_17-14-18.jpg

次に問題になるのが、壊れたディスクの位置を特定すること。自分はディスクを 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 時間で再構築が終わった。

これでディスク交換は完了。

Screenshot From 2024-11-25 17-16-59.png

最後に言っておきたいのは、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

本家 plumz.me でこの記事にコメントする

コメントは中国語の本家サイトで受け付けています。このミラーは閲覧専用です。

目次