2006.12.12 刻はZFSの鼓動を見る。たぶん。 すっかり忘れてた ZFS (Zettabyte File System)を評価してみる。 FreeBSD 上で実装される read/write が可能なファイルシステムとして は久々のものしれない(XFS はまだちょっと…)。正直, 吐血しまくり。 というか, 鼻血ぶー状態というか…。ここまで凄いとは思わんかったし, 思ったよりも安定している。少なくともさっさと panic するものと思 ってかなぁ〜り警戒したたけど, 簡単な負荷では落ちないみたい。 細かな御題目については参考文献を読んでもらうとして, 試してみて実 感したのは(まぁ文献でも紹介されてるけど), 1. Storage Pool のおかげで, 従来のようなパーティショニングが不要。 今までしこしこ disklabel 書いてた(とは言え sysinstall にやらせ てたと思いますが:-)のが馬鹿らしくなります。必要な量を必要な分 Storage Pool から確保します。おそらく最低容量の設定等, 他の領 域に影響与えない仕組みもあるでしょう(たぶん zfs set reservation)。 今まで /usr や /var や /home をどう切ろうかなんて考えてたのが 不要になります。まぁ /usr 等で使えるほど安定してるかは不明で すが:-)。 2. Storage Pool のおかげで, ストレージの構成を気にしなくてよい。 RAID1 (ミラーリング)されたストレージを newfs して…なんて気に しないどころか, 後から構成変更(RAID1+0 とか)があっても, 動的 に FS に反映される(容量が増えるなど)。というかメンテ不要。 このあたり geom(4) と growfs(8) を駆使すれば, 容量を増やす方向で のみ, なんとかなるかもしれない。 でも ZFS はこのあたりを一発で設 定できる仕組みになってるので, めっちゃくちゃ管理が楽。それどころ か, 普通ならあり得ない構成変更ができる (RAID5 で 3 本から 4 本に *動的に*増やすなど)。 試してみた構成としては, Ultra80 18GB (IBM DNES-318350W) の SCSI ディスクに /home/ncvs, /home/gnats を作ってみました。もともと このディスクには UFS でそれを収納してたのですが, 下記のようにし て運用していました。 # newfs /dev/da0 # mount -t ufs /dev/da0 /devel # mkdir /devel/ncvs /devel/gnats # mount -t nullfs /devel/ncvs /home/ncvs # mount -t nullfs /devel/gnats /home/gnats これが ZFS の場合 # zpool create -m /devel zdevel da0 # zfs create -o mountpoint=/home/ncvs zdevel/ncvs # zfs create -o mountpoint=/home/gnats zdevel/gnats で済みます。newfs, mount, mkdir を一発で実行という…。若干セマン ディクスは変わるので, 上記と全く同じわけではありませんが…。とい うのも /devel には /devel/ncvs と /devel/gnats は見えません:-)。 # df -h : zdevel 17G 16K 17G 0% /devel zdevel/ncvs 17G 124M 17G 1% /home/ncvs zdevel/gnats 17G 16K 17G 0% /home/gnats # mount : zdevel on /devel (zfs, local) zdevel/ncvs on /home/ncvs (zfs, local) zdevel/gnats on /home/gnats (zfs, local) # ls -alF /devel total 2 drwxr-xr-x 2 root wheel 2 Dec 12 00:22 ./ drwxr-xr-x 32 root wheel 1024 Dec 12 00:22 ../ もちろん構成以後は zfs mount -a で一発マウントしてくれるし, 容量 計算(パーティショニングとしての)不要だし, 足りないと思ったら後か ら増やすもよし, 圧縮させるもよし。と。 とりあえず実験してて分かったこととしては, 1. 出たパッチそのままではコンパイルできない。 (後日) 2. /boot/loader.conf に zfs_load="YES" すると起動時に死ぬ。 3. zpool と zfs の 2 つのコマンドがある。似たようで違うから注意 しよう:-)。 4. 最低 64MB 必要だそうだ(/dev/md1 でテストしたときやられた:-)。 # zpool create zsample /dev/md1 cannot create 'zsample': one or more devices is less than the minimum size (64M) 5. ワーキングがある程度の広さが無いとダメな気がする。少なくとも /dev/md1 で試したときには非常に遅かった。今(/dev/da0)では遅 い感じが無い。 6. 当然(?)というか df の結果とは一致しないので zfs list を駆使 する必要がある。 7. 圧縮するならそこそこ空き領域が必要だよ。 # zfs set compression=on zsample cannot set property for 'zsample': out of space 参考文献 http://blogs.sun.com/yappri/entry/zfs_intro http://blogs.sun.com/okazaki/entry/solaris_zfs%E3%82%92%E8%A9%A6%E3%81%97%E3%81%A6%E3%81%BF%E3%81%BE%E3%81%97%E3%81%9F http://www.opensolaris.org/os/community/zfs/docs/zfs_last.pdf http://solaris-user.com/zfs/solaris11_b27_zfs.html Written by 重村法克