それは昼下がりに突然やってきたトラブル:
13.2-RELEASE の Bhyveホストにに乗っけている FreeBSD14.0 のサーバ。
14.0p3 が来たんで、えいやっと更新し、ちょいちょいっと再起動・・・
** 何かがおかしい **
ZFS(ZPOOL)のバージョン違いで起動できない!!事故
これは、FreeBSDで長年ZFSと戦ってきた歴戦の勇者(?)にとりそれ自体別に珍しいことでは(?)ないのかもしれませんが、ブート自体に至らないのはちょっと珍しいです。大抵はブートは出来るがマウントが出来ずによたります。そしてブートしてくれているので、single-user モードが使えて、mount出来ない原因を特定できます(パニックになっていなければ解決できます)
- ですが 今回は違います。
ZFS: unsupported feature: com.klarasystems:vdev_zaps_v2
このメッセージも、FreeBSD-MLのアーカイブでは時々出てくるので、珍しくはないのですが13.2以前で問題になっているとされていました。14.0では解決されているはず??ですし、gpart のbootcode サブコマンドで 差し替えてるはずなんですけどね (←これは誤信)
リカバリーやってみる(うまく行ってない編)
-
起動できないFreeBSDのリカバリーはどうやりますか? そうですね。色々あるんですが、まあ手軽なのはInstallイメージがあればそれを機材なりホスト環境なりにツッコんでやれば、とりあえずOS起動も出来、ファイルシステムまでマウントすることは可能(なはず)です(物理的故障、ブートイメージのデータ破壊などでなければ?) Bhyveの環境ですから、インストール用のISOファイルを入手し、""bhyve-vm"" のコマンド vm install ... で起動してやれば良いんです。
-
zpool の import では、rootfs は見えなくなります:これは案外ハマりポイントですが、うっかり rootfs が消えたと思うんですよね.
で 普通にインストールされた FreeBSD であれば zroot/ROOT/default が rootfs として設定されていますが、これは恐らく事故防止のためだと思うのですが、 見えなくなって焦ります。まあ、よく探せばマウントまでいけます・・・zpool import -f -R {{/tmp/mnt}}
-
長い運用期間のbhyveインスタンス(?)であれば古いタイムスタンプ pbmr,gptzfsboot があったりしますが、 md5sum をとれば、最近の14.0-RELEASEの更地に入れた、新しいものと変わらないことが分かります。紛らわしいですね。
-
/boot がマウントできてない以前なので、どうもOS側の問題じゃない感じです?? ということは?? ⇒ bhyveの側に何かある??という話になってきました。
そもそも ホストが 13.2-RELEASE で 14.0-RELEASEのゲストは・・・
- bhyve が VMとして独自に管理されていれば問題ないのですが、bhyveを使う利点は違う kernelバージョンでも安定して動かせる長期運用環境としての起用です。もしkernerl/userland を更新することに問題がなければ、jail くらいの分離度のほうが管理コストが低い。古いOSを後生大事に使うためなので、新しいゲストを入れることは想定してなかったんでしょうね。 userboot.so というbhyveでつかう 第2段のloaderが、ゲスト側のFreeBSD13.2の /bootにあることはある意味で盲点です。
解決: userboot.ko を guest-osバージョンに揃えろ。
- 簡単に言えば、/boot/userboot.ko を新しいものにすればいいってだけだったのです。
* しかし、/boot/userboot.ko を変えてしまうのはちょっとおかしい。bhyveはユーザランドじゃないか。それならば、 /vm/userboot-{{osversion}}.so みたいな配置がいいよね? ということで、 FreeBSD14.0 の/vm/{{guest}}/{{guest}}.conf はこんな修正になります。
loader="bhyveload"
+ bhyveload_loaer="/vm/userboot-14.iso"
結論:bhyve の userboot.ko の扱いは
要するに ホスト側も14.0/15-STABLEくらいにしておけば、14.xのゲストでトラブルにならないんでしょうが、そういうことは最初から設定しておいたほうが安全では???という気になります。
- そもそも、りかいもせず注意深く管理していない私が悪いんですが!