ZFS on Root な FreeBSD を 8.2 から 9.0 にアップグレードしたら起動しなくなった (解決)

FreeBSD-8.2 をメインマシンとして利用している.なんだか楽しそうだったので ZFS on Root の環境を構築したのだが,9.0 ヘアップグレードするときにきっとハマるだろうと思うので,別環境でアップグレード試験をしてみた.(これまで何度となくいきなり本番アップグレードをしてうまく起動できなくて焦った経験があるので)

PC-BSD 8.2 を使って FreeBSD-8.2 をインストールして,そこからアップグレードを試したのだが,案の定,zpool や zfs のアップグレードをしたあと起動できなくなってしまった.FreeBSD-9.0R の USB 起動メモリを使って試行錯誤を繰り返した.

結論としては,PC-BSD 8.2 のインストーラが確保する freebsd-boot パーティションの領域が小さ過ぎて,9.0 用の /boot/gptzfsboot が書き込めないようだ.下記のように freebsd-boot のサイズを128セクタに広げてから bootcode を書き込んでやると無事に成功.(もともとは freebsd-boot が 64セクタになっていたと思う).

# gpart resize -i 1 -s 128 ada0

$ gpart show ada0
=>       34  117210173  ada0  GPT  (55G)
         34        128     1  freebsd-boot  (64k)
        162       1854        - free -  (927k)
       2016  117198848     2  freebsd-zfs  (55G)
  117200864       9343        - free -  (4.6M)

# gpart bootcode -p /boot/gptzfsboot -i 1 ada0

ただ,これは自分の本番環境とは違う構成になってしまっているので,まだ本番環境でアップグレードをして大丈夫という自信がない.本番環境は ZFS on Root なのに何故か下記のような表示になる・・・(謎)

% gpart show

=>       63  500118129  ad0  MBR  (238G)
         63       1985       - free -  (993K)
       2048   24576000    1  !45  (12G)
   24578048     614400    2  !45  (300M)
   25192448  104856688    3  !45  (50G)
  130049136  370069056    4  freebsd  [active]  (176G)

=>        0  370069056  ad0s4  BSD  (176G)
          0  370057216      1  freebsd-ufs  (176G)
  370057216      11840         - free -  (5.8M)