CentOS 5 では、ZFS on Linux が使えない (ビルドできない) ので、zfs-fuse を使うよりないのですが、マルチブート環境で、CentOS 6 と共用したいため、そのための設定方法メモです。
zfs-fuse のほうが zpool および zfs のバージョンが低いので、CentOS 6 に ZFS on Linux を導入した環境で、次のようにバージョンを指定してストレージプールを作成すれば、マルチブートで共用できるようになります。
# zpool create -o ashift=12 -o version=23 -O version=4 tank1 /dev/disk/by-id/scsi-SATA_External_Disk_0AL25744_6000092__0_S-part1
# fdisk -u -l /dev/sdd | grep sdd1
/dev/sdd1 2048 125045423 62521688 83 Linux
ここで、ashift=12 は AFT 対応 HDD (物理セクタサイズが 4K の HDD) の場合に指定すると効果があるパラメータですが、zfs-fuse 付属の zpool コマンドでは指定できません。また、上記のようにパーティションを切っている場合は、先頭セクタ番号が 8 の倍数になるように調整しておく必要があります。
ベンチマーク結果を参考に載せておきます。
まず、CentOS 6 + ZFS on Linux 0.6.0-rc11 の場合です。
# uname -a
Linux xxxx 2.6.32-279.11.1.el6.x86_64 #1 SMP Tue Oct 16 15:57:10 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
# zpool get guid tank1
NAME PROPERTY VALUE SOURCE
tank1 guid 4585092805656841166 local
# zpool status
pool: tank1
state: ONLINE
status: The pool is formatted using an older on-disk format. The pool can
still be used, but some features are unavailable.
action: Upgrade the pool using 'zpool upgrade'. Once this is done, the
pool will no longer be accessible on older software versions.
scan: none requested
config:
NAME STATE READ WRITE CKSUM
tank1 ONLINE 0 0 0
scsi-SATA_External_Disk_0AL25744_6000092__0_S-part1 ONLINE 0 0 0
errors: No known data errors
# bonnie++ -u root -d /tank1
...
Version 1.96 ------Sequential Output------ --Sequential Input- --Random-
Concurrency 1 -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP
xxxx 15464M 161 99 60368 12 35164 9 371 94 96024 10 807.8 26
Latency 99022us 443ms 1407ms 332ms 546ms 1067ms
Version 1.96 ------Sequential Create------ --------Random Create--------
xxxx -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
files /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP
16 9314 91 +++++ +++ 24604 97 9976 95 +++++ +++ 9474 98
Latency 48790us 741us 505us 53719us 128us 1094us
1.96,1.96,xxxx,1,1350830603,15464M,,161,99,60368,12,35164,9,371,94,96024,10,807.8,26,16,,,,,9314,91,+++++,+++,24604,97,9976,95,+++++,+++,9474,98,99022us,443ms,1407ms,332ms,546ms,1067ms,48790us,741us,505us,53719us,128us,1094us
次に、CentOS 5 + zfs-fuse-0.6.9_p1-6.20100709git.el5.1 のデータです。
# uname -a
Linux xxxx 2.6.18-308.11.1.el5 #1 SMP Tue Jul 10 08:48:43 EDT 2012 x86_64 x86_64 x86_64 GNU/Linux
# zpool get guid tank1
NAME PROPERTY VALUE SOURCE
tank1 guid 4585092805656841166 default
# zpool status
pool: tank1
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
tank1 ONLINE 0 0 0
disk/by-id/scsi-SATA_External_Disk_0AL25744_6000092__0_S-part1 ONLINE 0 0 0
errors: No known data errors
# bonnie++ -u root -d /tank1
...
Version 1.96 ------Sequential Output------ --Sequential Input- --Random-
Concurrency 1 -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP
xxxx 15424M 24 11 32019 5 24308 6 2379 98 103178 7 496.0 9
Latency 506ms 1381ms 1627ms 10573us 609ms 999ms
Version 1.96 ------Sequential Create------ --------Random Create--------
xxxx -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
files /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP
16 5648 12 11300 10 5469 7 5038 12 12881 14 7092 12
Latency 28879us 1700us 3875us 54328us 1760us 2040us
1.96,1.96,xxxx,1,1351439162,15424M,,24,11,32019,5,24308,6,2379,98,103178,7,496.0,9,16,,,,,5648,12,11300,10,5469,7,5038,12,12881,14,7092,12,506ms,1381ms,1627ms,10573us,609ms,999ms,28879us,1700us,3875us,54328us,1760us,2040us
使用機材は、ThinkPad T510 Core i7 M620 2.67G + SAMSUNGの2008年製造の古い SSD 64G (eSATA 接続) です。
2012-11-10追記
わたしの利用範囲では、ZFS on Linux の性能は十分であると感じますが、FreeBSD のほうが上だと聞きますので、試しに同じマシン(ThinkPad T510)にマルチブート環境を作って、同じボリュームを import して、bonnie++ で計測してみました。
# uname -a
FreeBSD xxxx 9.0-RELEASE FreeBSD 9.0-RELEASE #0: Tue Jan 3 07:46:30 UTC 2012 root@farrell.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC amd64
# bonnie++ -u root -d /tank1
...
Version 1.96 ------Sequential Output------ --Sequential Input- --Random-
Concurrency 1 -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP
xxxx 16G 173 99 53620 9 33313 5 425 90 138720 7 876.5 8
Latency 46882us 4175ms 3542ms 513ms 590ms 782ms
Version 1.96 ------Sequential Create------ --------Random Create--------
xxxx -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
files /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP
16 29261 88 +++++ +++ 32398 97 23195 97 +++++ +++ 12962 98
Latency 13252us 132us 126us 26767us 102us 7513us
1.96,1.96,xxxx,1,1352526856,16G,,173,99,53620,9,33313,5,425,90,138720,7,876.5,8,16,,,,,29261,88,+++++,+++,32398,97,23195,97,+++++,+++,12962,98,46882us,4175ms,3542ms,513ms,590ms,782ms,13252us,132us,126us,26767us,102us,7513us
# zpool get all tank1
NAME PROPERTY VALUE SOURCE
...
tank1 guid 4585092805656841166 local
...
# zpool status
pool: tank1
state: ONLINE
status: The pool is formatted using an older on-disk format. The pool can
still be used, but some features are unavailable.
action: Upgrade the pool using 'zpool upgrade'. Once this is done, the
pool will no longer be accessible on older software versions.
scan: none requested
config:
NAME STATE READ WRITE CKSUM
tank1 ONLINE 0 0 0
ada2s1 ONLINE 0 0 0
errors: No known data errors
確かに各数字を見比べてみると、全般的に FreeBSD 9.0 のほうが、少し性能が上に見えました。
もしも、NAS 専用サーバを作るのであれば、FreeBSD や FreeNAS というものは、良い選択肢なのかもなと思いました。
余談:FreeBSD は、過去何回かインストールした経験があったのですが、拡張パーティションにはインストールできないということを、すっかり忘れており(たぶん、以前同じようにハマったと思いました)、結構な手間・時間がかかってしまいました。たぶん、ほとんど起動しないだろうというのに。。
なお、FreeBSD 10 に向けて、ZFS の性能向上の取り組みがあるらしいので、リリースされたら、また測ってみたいなと思っています。