====== FreeBSD 14でPortsのOpenZFSを使う ======
===== 試した環境 =====
* FreeBSD 14.3-RELEASE-p2
* [[https://www.freshports.org/filesystems/openzfs/|filesystem/openzfs]], [[https://www.freshports.org/filesystems/openzfs-kmod/|filesystem/openzfs-kmod]] 2.3.3
===== 手順 =====
pkgでfilesystem/openzfsをインストールする。自動でopenzfs-kmodもインストールされる。
# pkg install openzfs
(略)
Message from openzfs-kmod-2.3.3.1403000,1:
--
Amend /boot/loader.conf as follows to use this module:
- change zfs_load="YES" to NO
- change opensolaris_load="YES" to NO
- add openzfs_load="YES"
- (for ARM64) add cryptodev_load="YES"
=====
Message from openzfs-2.3.3,1:
--
Ensure that any zfs-related commands, such as zpool, zfs, as used in scripts
and in your terminal sessions, use the correct path of /usr/local/sbin/ and
not the /sbin/ commands provided by the FreeBSD base system.
Consider setting this in your shell profile defaults!
メッセージにあるとおり、使用するカーネルモジュールをports側に変更する。
# use port's ZFS
zfs_load="NO"
openzfs_load="YES"
''opensolaris_load="NO"''も必要ってことだけど、元々書いてない場合は特になくても問題ないと思われる。ZFSを使う場合は基本書くことになっているが、''zfs_load="YES"''なら自動で読み込まれるので、実は明記しなくても大丈夫だったりする。
続いて、各種ZFSコマンドが''/usr/local/sbin''の方が優先的に使われるように''PATH''変数設定をいじる。これはシェルによって違うので割愛。設定せずともフルパスで指定してやれば問題ない。
その後rebootすると、ports側のカーネル拡張が使われていることがわかる。
# kldstat
Id Refs Address Size Name
1 21 0xffffffff80200000 1f41500 kernel
2 1 0xffffffff82142000 6048d0 openzfs.ko ★これ
3 1 0xffffffff833f9000 4250 ichsmb.ko
4 1 0xffffffff833fe000 2178 smbus.ko
5 1 0xffffffff83401000 430c virtio_console.ko
6 1 0xffffffff83406000 3560 fdescfs.ko
''zfs version''でコマンドとカーネル拡張のバージョンを確認できる。
$ /usr/local/sbin/zfs version
zfs-2.3.3-1
zfs-kmod-2.3.3-1
$ /sbin/zfs version
zfs-2.2.7-FreeBSD_ge269af1b3
zfs-kmod-2.3.3-1
基本、ZFSは下位互換性が保たれてるハズなので、間違って古いZFSコマンドを使っても致命的に壊れる、みたいなことはないと思う。多分。
ただしカーネルが入ってる起動用プール、要はzrootのプールバージョンを上げたり、新機能を使う場合は注意が必要と思われる。FreeBSDはシステムのZFSモジュールとは別に、ブートローダーにもZFSを持ってて、こっちの実装は最小限だったりして、新プール&新機能との互換性がない可能性があるので。