2006.12.16 刻はZFSの鼓動を見る。。 ZFS は FreeBSD 本体には組み込まれておらず, 使用するためには準備 作業が必要になります。作業している pjd 氏によれば http://lists.freebsd.org/pipermail/freebsd-fs/2006-November/002385.html パッチをダウンロードして当ててコンパイルしてインストールして…と あります。実際にはいくつか罠があって, その分を考慮した手順を以下 に示します。なお FreeBSD 7-current での話となります。 src/sys/kern/kern_synch.c#1.284 の変更が必要のようで, おそらくは 6-stable で動かないと思われます。 1. パッチのダウンロード http://blog.ninth-nine.com/archives/zfs_20061117+.tar.bz2 pjd 氏のパッチ相当のものですが, 以下の点に考慮して再構築した ものとなります。 a. 継続して make update を行った後でも, パッチ当て作業を最小 限にするためにパッチとアーカイブに分離。 b. 普通にコンパイルすると発生する問題(memset が見付からないエ ラー)に対応するための対策を仕込んである。 # cd /usr/src # tar xf zfs_20061117+.tar.bz2 # patch -p0 < DIFF.Makefile.inc1 # patch -p0 < DIFF.share-mk-bsd.libnames.mk # patch -p0 < DIFF.sys-modules-Makefile # patch -p0 < DIFF.sys-sys-filio.h # patch -p0 < DIFF.sys-sys-kernel.h # patch -p0 < DIFF.sys-sys-mutex.h # patch -p0 < DIFF.sys-vm-vm_kern.c なお, この状態で make update した後でも, patch コマンドでパッ チを当てるだけで済むようになっています。 2. kernel configuration の修正 現時点でわかっているのは, INVARIANTS と INVARIANT_SUPPORT が必 要です。もしかしたら他にも必要なオプションがあるかもしれません が, よくわかっていません:-)。 3. あとは普通に make world kernel 作業後 zpool, zfs コマンドと zfs.ko カーネルモジュールがインスト ールされます(他にも関連ライブラリ等が入りますが)。使用するために は kldload zfs します。 現時点でわかっている問題点としては 1. カーネルコンフィギューレーションで zfs を組み込めない 関連ファイルを調整すればできますが, 現時点ではそこまでやる価 値は無いでしょう:-)。 2. /boot/loader.conf に zfs_load="YES" を書いてはいけない 初期化部分の作り込みの問題か, すぐに panic してしまいます。仮 りに 1 で組み込んでたら目も当てられない状態になってたことでし ょう:-)。とりあえず今後の課題ということで (私がやるわけではな いけど)。 3. mount -a できない:-) zpool import <ストレージプール> しますが, panic すると(export できないので) import しっ放しと言われてマウントできません。 そういう時は zpool import -f <ストレージプール> となります。 pjd 氏の話では zfs mount -a と zfs volinit するようにあります が, なんのことやら:-)。 shutdown 時に umount することと合わせ て, 運用面でどうしなければならないかは検討しないとあかんでし ょう(ひとごとモード)。 4. マニュアルがインストールされない:-) 簡単な usage が表示されるので, 後は口コミで使おう:-)。 とりあえず簡単に試すならファイル作って, mdconfig して, zpool create すること。Solaris だとファイル相手に zpool create できる ようですが, FreeBSD では geom provider が必須と言われてできませ んでした。まぁ mdconfig するだけなので実害はありませんが:-)。 # kldload zfs # dd if=/dev/zero of=/var/tmp/0.img bs=1m count=512 # dd if=/dev/zero of=/var/tmp/1.img bs=1m count=512 # dd if=/dev/zero of=/var/tmp/2.img bs=1m count=512 # dd if=/dev/zero of=/var/tmp/3.img bs=1m count=512 # mdconfig -a -t vnode -f /var/tmp/0.img md0 # mdconfig -a -t vnode -f /var/tmp/1.img md1 # mdconfig -a -t vnode -f /var/tmp/2.img md2 # mdconfig -a -t vnode -f /var/tmp/3.img md3 # zpool create zsample raidz22 md0 md1 md2 md3 この状態で /zsample にマウントされています。 # zpool list zsample NAME SIZE USED AVAIL CAP HEALTH ALTROOT zsample 1.97G 226K 1.97G 0% ONLINE - # df -h /zsample Filesystem Size Used Avail Capacity Mounted on zsample 972M 32K 972M 0% /zsample 512MB のディスク 4 台分ということで, 約 2GB の storage サイズが 存在しますが, RAIDZ2(RAID6) が構成されたため, 使用できるサイズは 1GB になります。 # zpool status zsample pool: zsample state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM zsample ONLINE 0 0 0 raidz2 ONLINE 0 0 0 md0 ONLINE 0 0 0 md1 ONLINE 0 0 0 md2 ONLINE 0 0 0 md3 ONLINE 0 0 0 errors: No known data errors なお ZFS における umount は zpool export <ストレージプール> で, mount は zfs import <ストレージプール> になります。 # zpool export zsample # zpool list no pools available # zpool import zsample # zpool list NAME SIZE USED AVAIL CAP HEALTH ALTROOT zsample 1.97G 226K 1.97G 0% ONLINE - 参考文献 http://lists.freebsd.org/pipermail/freebsd-fs/2006-November/002385.html http://blog.ninth-nine.com/diary/20061212.txt Written by 重村法克