少し前に、Root on ZFS が壊れた。
正確には壊れたんじゃ無くてブートしなくなってしまった。
海外にも同じことを言ってる人が沢山おるけど、結論は出てない感じ。
多くは、/boot を移動してから tar で書き戻すと治ると言う例が多い。中にはシャーシをいれかえると治ったとか、色々。
こう言うことがあるからRoot FSはUFSを使ってる人も多い。
でも流れはRoot on ZFSだよねと言うことで少し突っ込んで調べた。
ZFSはマニュアルマウントしてます。
古い機械なので、BIOS使ってます。
こうなると決して治りません。ZFSが壊れたわけじゃ無いのでimrortできてデータは救えます。ブート出来ないだけです。
結論は割と簡単な理由だった。
1本が4TBなのでGPTを使っている。ここが勘違いの源だった。GPTはもちろん4TB対応していて普通に使えます。ただ重要なのは、 MBRの上位互換だと言う事実です。何処が継承されてしまうかと言うと、BIOSを使う場合はブートローダーが、ディスクの頭から2T以内に無いといけない部分。
GBTは管理テーブルを使用領域の最後に数バイト書いて更新する。最後の、位置はBIOSからのレポートでINT13しか無いので、正しいとは限らない。管理テーブルを見失うとブート出来なくなる。
一方UEFIブートは、APIが実装されてるから回避出来るらしい。UEFIのマシンがないから試せない。
見失うと何やってもも治らないから再インストールしかない。ブートローダーは壊れやすいから、ストライピングディスクには置かない方が良いとも言われてる。故障率は倍になるそうだ。
現在は、gptzfsbootの置いてある /boot を別のZFSプールにおいて/xxxにマウントした。
後は、ln /xxx/boot . とリンクをしてから chflag
した。
最初は、zroot しか自動でimportされないから、ブートが途中で止まる。そのまま、指示のまま sh
に入って、 zpool import -f xxx でimportできる。
あとは、exitすればマルチユーザーでブートされる。2回目以降は、普通にimportされる。