f99aq8ove's blog

自宅サーバを FreeBSD 10.3 から 11.0 にアップグレードして起動しなくなってから復活するまで

tag: FreeBSD
09 January 2017

FreeBSD 11.0 にアップデートしたら起動しなくなった

自宅サーバのアップデートをサボっていたら、security update の提供が終了してしまったので、慌ててアップデートしました。

FreeBSD 10.1 から 10.2

10.2 から 10.3

満を持して 10.3 から 11.0

ということで、見事にアップデートに失敗して起動しなくなってしまいました。

この時画面に表示されていたエラーメッセージを抜粋するとこんな感じ。

Solaris: NOTICE: Cannot find the pool label for ‘tank’
Mounting from ifs:tank/root failed with error 5.

Loader variables:
  vfs.root.mountfrom="zfs:tank/root"

Manual root filesystem specification:
  <fstype>:<device> [options]
(snip)

mountroot>

何らかの原因で zfs pool “tank” が mount 出来なくなったようでした。

復旧を試みる

エラーメッセージにもあるように、/boot/loader.conf に vfs.root.mountfrom="zfs:tank/root" と指定してあるので、とりあえずそこら辺をいじってみます。

まず、single user mode にすら入れなくて困ったので、 FreeBSD 11.0-RELEASE Announcement で頒布されているメモリースティック版インストーラーイメージをダウンロードして、リンク先に記載の dd コマンドで usb memory stick に書き込みます。

usb memory stick を挿してマシンをリセットすると、無事 installer が起動したので、shell メニューを選択して shell に入ります。

boot パーティションだけは ufs にしてあって、boot 時に zfs をルートにマウントし直す構成にしてあったので、ls /dev して boot パーティションはどれだったか迷いつつ mount しました。

で、/boot/loader.conf を色々いじった結果なのですが、vfs.root.mountfrom は問題無かったようで、以下が怪しかったのでコメントアウトしました。

if_msk_load="YES"
hw.pci.enable_msi="0"
hw.pci.enable_msix="0"

(多分、本当に問題だったのは下の2つ)

セーブして再起動したら、エラーが変わりました。

ドライブ名が変わっているんですが

次に出たエラーは明快で、/etc/fstab に記載してある swap と boot パーティションのドライブが見つからないというものでした。 確認すると、確かにドライブ名が変わっていました…。

ということで、zfs プールを import して /etc/fstab を修正して再起動。

めでたく起動しました!

ネットワーク不調

起動したのは良かったのですが、時間が立つと msk0 が、watchdog timeout で通信できなくなる現象が発生しました。

Jan  3 14:15:27 server msk0: watchdog timeout

そもそも msi, msix を 0 にしていたのは、この対策のためだったのですが、FreeBSD 11.0 でもこの事象は発生するみたいでした。

なので、適当にぐぐってみたところ、

hw.msk.msi_disable="1"

という設定があるらしいので、その設定に変更して解決しました。

Related Posts