nullfs は GENERIC には書かれていない。恐らく、loader.con に追加する必要があると思われる。 また、 nullfs を起動時に使ったことがないのと、linprocfs などと、被る部分があるので uzip fs を用意し、システムを専用に用意し、試験的に試してみる。試運転には qemu を使う。
# cd /mnt/tmp
# dd if=/dev/zero of=ports.md count=1 seek=2499 bs=1M
# mdconfig -a -t vnode -f ports.md
md1
# newfs -U /dev/md1
# mount /dev/md1 /mnt/ufs
# tar -cvf - -C /usr X11R6 local compat | tar -xvf - -C /mnt/ufs
# tar -cvf - -C /var db/pkg | tar -xvf - -C /mnt/ufs
# umount /mnt/ufs
# cd /mnt/tmp
# mkuzip -s 66536 -o ports.uzip ports.md
これで、ports が uzip の完成。qemu ようのルートシステムファイルを別途用意する。ここでは、7-current 用の物で試してみる。
# mdconfig -a -t vnode -f /usr/local/current/current.md
md2
# mount /dev/md2s1a /mnt/current
# vi /mnt/current/etc/fstab
# Device Mountpoint FStype Options Dump Pass#
/dev/ad0s1a / ufs rw 1 1
/dev/ad1.uzips1a /ports ufs ro 0 0
/ports/var/db/pkg /var/db/pkg nullfs ro 0 0
/ports/X11R6 /usr/X11R6 nullfs ro 0 0
/ports/local /usr/local nullfs ro 0 0
/ports/compat /usr/compat nullfs ro 0 0
linprocfs /compat/linux/proc linprocfs rw 0 0
geom_uzip のデバイスは、元のデバイス名に .uzip が付く。スライスやパーティションの記号は .uzip の後に付くようだ。そのため、ad1.uzips1a になっている。
なお、今回の qemu ルートイメージは FreeBSD のベースシステムのみを素で入れただけなので、以下のようにいくつかのディレクトリとリンクを作る必要があった。マウントポイントがないと、mount に失敗する。
# cd /mnt/current/usr
# mkdir X11R6 local compat
# cd ..
# ln -s usr/compat
% cd /usr/local/current
% qemu current.md -hdb /mnt/tmp/ports.zip
問題なく起動に成功。また、すこし、ports のアプリケーションを使ってみたが、何の支障もなく動いた。nullfs を /boot/loader.conf に追加する必要もなかった様だ。
これにより、base system と ports system の分離が出来た。バックアップの対象が /、/usr、/ports と /export になったのである。利点としては、base と ports が別々になったため、アップグレードに万が一失敗しても、restore は base のみでいい。また、その逆も然りである。そして、もう一つ大事なのがbase と ports が分離したため、複数の Release や Current で同一の ports を維持できる点である。
セコメントをする