NetBSD8でお試しで使ってたまにクラッシュしつつ、 NetBSD9から本格的に使い出して、もう2年ほどはノートラブルで来ている。 個人的感覚としては、NetBSDでも十分に安定している。そのおかげで バックアップも NVMMでの仮想ホストに対するディスク供給もしやすくてサーバ運用のしやすさが 格段に上がった。
FreeBSDでははるか前から使っているので、ストレージの差し替えだとか 何回も経験しているのだが、NetBSDはやっと「そろそろ交換か」、 といった時期に差し掛かっている。そこで本稿の結論、
NetBSDではzpoolのデバイスにRAIDframeを噛まして使え
である。
理由: NetBSDのzpoolは物理デバイス名でしか探しに行かないから。
HDD(SSD)が不調になって、新たに追加したり、 ケーブルを差し直して、違う番号がついてしまったときにzpoolが 構成ディスクを探さずにプールがインポートされない。 えてしてマザーボードのSATAコネクタの順番は組み立てるときには見るかもしれないが 組んでしまってあとからストレージを追加するときには 適当に空いているところに挿すので、wd0だったものがwd1にずれてしまうことが たまにある。するとzpoolがインポートできずハマる。 /etc/zfs/zpool.cacheをバイナリ書き換えしてデバイス名をずれたものに すればインポートできるが焦った状態ではやりたくない作業である。
対してNetBSD RAIDframe のほうはRAID構成要素のIDを見て wd* が別の番号になってしまってもちゃんと検出してAUTOCONFIGしてくれる。 よって、「デバイス名の固定化」をRAIDframeに任せて、その上でzpoolを 構築するとよい。
こんなディスク構成だと仮定する。
wd0 | 起動ディスク1 |
---|---|
wd1 | 起動ディスク2 |
wd2 | zpoolその1にしたい |
wd3 | zpoolその2にしたい |
ストーリーとしては、wd0とwd1をRAID-1で幸せに使っているところに 「ZFSで入れるかあ」とwd2とwd3を足した。これもミラーにして安心生活。 と、行きたいところだがそうは行かない。wd1が壊れて認識しなくなると wd2がwd1に、wd3がwd2にずれてしまってzpoolが認識されなくなる。 罠ざんしょ? はい、ずれないように事前に手を打っておこう。
wd2とwd3それぞれ単体のRAIDにする。ここでは
wd2 | → | raid2 |
wd3 | → | raid3 |
で作ってみる。流れとしては
となる。
: GPTパーティション作成 gpt create wd2; gpt create wd3 gpt add -a8k -t raid -l zp0 wd2 gpt add -a8k -t raid -l zp1 wd3 : RAIDframe設定ファイル作成 cat>raid2.conf <<EOF START array # numRow numCol numSpare 1 1 0 START disks NAME=zp0 START layout # sectPerSU SUsPerParityUnit SUsPerReconUnit RAID_level_1 128 1 1 0 START queue fifo 100 EOF : これを s/zp0/zp1/ して raid3.conf にする。 sed 's/zp0/zp1/' raid2.conf > raid3.conf : raidデバイスを作る raidctl -C raid2.conf raid2 raidctl -C raid3.conf raid3 raidctl -I 2023010600 raid2 raidctl -I 2023010601 raid3 raidctl -A yes raid2 raidctl -A yes raid3 : 確認 raidctl -s raid2 raidctl -s raid3 : それぞれ Autoconfig: yes になっているかよく見る
ここまで作ったら念の為、システムリブートして raid2 と raid3 ができるか確認したほうがよい。 うまくできないときは、
いずれかで、後者の場合は gpt type -T frame でつけ直せる。
あとはいつもどおり。
zpool create mirror raid2 raid3
すぐにシステムリブートしてzpoolができるか確認する。
気になる場合は、SATAケーブルを差し替えて、wd[0-3]の 順番がぐちゃぐちゃになるようにして試してみるとよい。 うまく行くはず。RAIDframeばんざい。
ちなみに、zfsでなければNetBSDはGPTラベル名で操作できるので たとえばGPTラベルを datadisk0 とかにしておいて、
newfs NAME=datadisk0
とかしたり、fstabにNAME=datadisk0とか書いたりできるので ストレージの順番が変わっても大丈夫。zfsでもたとえばこんなふうに できるといいのになあ。
: ↓実際はできない(2023-01-06現在)
zpool create pool0 mirror NAME=m0 NAME=m1
RAIDframeばんざい。