ZFS Root on GPTで構築したFreeBSD 8.1-RELEASE環境を8.2-RELEASEにアップグレードする

FreeBSD 8.2-RELEASEが無事にリリースされたので、ZFS Root on GPTで構築したおうちサーバを8.2-RELEASEにアップグレードした。起動できなくなって涙目でFixitのお世話になると思ってたら、案外簡単で拍子抜け。bootcodeを新しくすることを忘れなければ、まず問題は起こらない。

FreeBSD 8.1-RELEASEから8.2-RELEASEへのアップグレード

アップグレードはfreebsd-update(8)を使った。FreeBSD 8.2-RELEASE Announcementに書いてあるとおりの手順でOK。

# freebsd-update upgrade -r 8.2-RELEASE
# freebsd-update install
# shutdown -r now
# freebsd-update install
# shutdown -r now

ZpoolとZFSのアップグレード

FreeBSD 8.2-RELEASEになって、ZpoolとZFSのバージョンがそれぞれ15と4にあがってるから、既存のpoolとzfsをアップグレードする。
まずはZpoolからアップグレードする。

# zpool upgrade -a

ZFS Rootから起動していた場合、こんなかんじで親切に警告してくれる。

If you boot from pool 'zroot', don't forget to update boot code.
Assuming you use GPT partitioning and da0 is your boot disk
the following command will do it:

     gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 da0

というわけで、da0のところを自分の環境に合わせて修正して、bootcodeを新しくする。FreeBSD 8.1-RELEASEでGPTなHDDにZFSでRootを確保してそこからbootする - mteramotoの日記の手順で構築した環境なら、ad0、ad1、ad3が対象となる。

# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ad0
# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ad1
# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ad3

次はZFSをアップグレードする。

# zfs upgrade -a

ファイルシステムの状態によっては、しばらく時間がかかるので気長に待つべし。
ちなみにzpool、ZFSのバージョンごとの更新内容は、upgradeコマンドに-vオプションをつけると表示できる。今回の更新では、ZFS内部でuser/group毎のquotaが使えるようになっている。

> zpool upgrade -v
This system is currently running ZFS pool version 15.

The following versions are supported:

VER  DESCRIPTION
---  --------------------------------------------------------
 1   Initial ZFS version
 2   Ditto blocks (replicated metadata)
 3   Hot spares and double parity RAID-Z
 4   zpool history
 5   Compression using the gzip algorithm
 6   bootfs pool property
 7   Separate intent log devices
 8   Delegated administration
 9   refquota and refreservation properties
 10  Cache devices
 11  Improved scrub performance
 12  Snapshot properties
 13  snapused property
 14  passthrough-x aclinherit
 15  user/group space accounting

> zfs upgrade -v
The following filesystem versions are supported:

VER  DESCRIPTION
---  --------------------------------------------------------
 1   Initial ZFS filesystem version
 2   Enhanced directory entries
 3   Case insensitive and File system unique identifer (FUID)
 4   userquota, groupquota properties