3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Bhyve で胃袋を掴まれる話

Last updated at Posted at 2023-12-15

それは昼下がりに突然やってきたトラブル:

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 が消えたと思うんですよね.

     zpool import -f -R {{/tmp/mnt}} 
    で 普通にインストールされた FreeBSD であれば zroot/ROOT/default が rootfs として設定されていますが、これは恐らく事故防止のためだと思うのですが、 見えなくなって焦ります。まあ、よく探せばマウントまでいけます・・・
  • 長い運用期間の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のゲストでトラブルにならないんでしょうが、そういうことは最初から設定しておいたほうが安全では???という気になります。

  • そもそも、りかいもせず注意深く管理していない私が悪いんですが!
3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?