FreeBSD 7.0-RELEASEのときに鳴り物入りで登場(?)したZFSですが、どうも安定性がイマイチだとか、メモリがたくさんないとダメとか、そんな噂もあって、私は試したことがありませんでした。
でも、どうやら、FreeBSD 8.0のamd64版だと、十分実用的なんだそうです。
というわけで、いまさらですが、はじめてZFSを試しに使ってみました。
これ、昔使っていたvinumより、ずっと簡単で、しかも、すごく便利で使いやすいです!
☆
一番信頼性のある情報は何? もちろん、FreeBSD Handbookですね。
FreeBSD Handbook
Chapter 20 File Systems Support
20.2 The Z File System (ZFS)
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/filesystems-zfs.html
それと、上記のページからリンクされていた、ここ。
ZFS Tuning Guide
http://wiki.freebsd.org/ZFSTuningGuide
くれぐれも、こんなブログは参考にしないでくださいね。
ブログに書かれた情報は、それが書かれた時点でのことなので、時間がたつと、もしかすると状況が変わっちゃうこともありますから。
何かをはじめるときのきっかけとしては、お気軽でいいかもしれませんけど…。
☆
使ったOSとハードウェアは、こんな感じ。
FreeBSD 8.0-RELEASE amd64
CPU: Athlon II X4 605e
メモリ 4GB
ハードディスク 1.5TBを4個
FreeBSD HandbookとZFS Tuning Guideを参考にして、
/boot/loader.conf に、以下を追加。
(2009/12/15訂正) よく読んだら、amd64のFreeBSD7.,2以降の場合は、これは不要だと書いてあった。
vm.kmem_size_max="1024M"
vm.kmem_size="1024M"
vfs.zfs.arc_max="100M"
再起動しなくちゃいけないんだろうけど、めんどくさかったので、そのまま。
/etc/rc.confに、以下を追加。
zfs_enable="YES"
んでもって、以下のコマンドを実行。
/etc/rc.d/zfs start
メモリが4GB未満のときはナンタラ機能を無効にするよ、みたいなメッセージが出てたような気もしますが・・・はあ、そうですか。[E:catface]
☆
今回使用するハードディスクドライブの一覧。
# atacontrol list
ATA channel 0:
Master: no device present
Slave: no device present
ATA channel 1:
Master: no device present
Slave: no device present
ATA channel 2:
Master: ad4 <WDC WD15EADS-00P8B0/01.00A01> SATA revision 2.x
Slave: no device present
ATA channel 3:
Master: ad6 <WDC WD15EADS-00P8B0/01.00A01> SATA revision 2.x
Slave: no device present
ATA channel 4:
Master: ad8 <WDC WD15EADS-00P8B0/01.00A01> SATA revision 2.x
Slave: no device present
ATA channel 5:
Master: no device present
Slave: no device present
ATA channel 6:
Master: ad12 <WDC WD15EADS-00P8B0/01.00A01> SATA revision 2.x
Slave: no device present
ATA channel 7:
Master: ad14 <WDC WD15EADS-00P8B0/01.00A01> SATA revision 2.x
Slave: no device present
ad4は、/とか/usrとかで、すでに使っているので、zfs用には、ad6、ad8、ad12、ad14だけを使いました。
一応、FreeBSD Handbookに書いてある順番に試してみて、念のための確認。
ざっくり、こんな感じです。
ad14を1個だけ使って、exampleという名前の「プール」を作る。
# zpool create example /dev/ad14
/exampleというのができていることが確認できる。
# df
普通のファイルシステムと同じように使える。
# cd /example
# touch testfile
# ls -al
gzipでデータ圧縮をするファイルシステムが作れちゃう。[E:happy02]
# zfs create example/compressed
# zfs set compression=gzip example/compressed
圧縮を止めることもできる。
# zfs set compression=off example/compressed
アンマウントする。
# zfs umount example/compressed
# df
マウントする。
# zfs mount example/compressed
# df
mountコマンドでも、マウントされていることを確認できる。
# mount
データを二重化して、信頼性を向上できる。
# zfs create example/data
# zfs set copies=2 example/data
以上のように、試しに作ったものを、全部ごっそりと削除。
# zfs destroy example/compressed
# zfs destroy example/data
# zpool destroy example
ZFSの何が一番すごいか、っていうと、個人的に思うのは、こんなところでしょうか。
- /example と /example/compressed と /example/data の3つのファイルシステムがあるように見えるけど、それぞれに、どれだけの容量を割り当てるのか、指定する必要がない。
- 今までだと、/usrには16GB、/usr/localには32GBを割り当てる、とか指定してた。いわゆる、「パーティションを切る」。
- 使っているうちに容量が足りなくなったら、別のファイルシステムに一部のファイルを追い出して、シンボリックリンクを張っておく、とか苦肉の策をとったりしてた。
- けど、ZFSならそんな必要ない。
- データ圧縮とか、二重化(つまりミラーリング)とかを、自由自在に指定できる。
☆
次に、複数のドライブで試してみました。
# zpool create storage ad6 ad8 ad12 ad14
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
storage 72K 5.35T 18K /storage
# df -h /storage
Filesystem Size Used Avail Capacity Mounted on
storage 5.4T 0B 5.4T 0% /storage
わーい、5.4テラバイトのディスクができちゃった [E:happy01]
# zpool status
pool: storage
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
storage ONLINE 0 0 0
ad6 ONLINE 0 0 0
ad8 ONLINE 0 0 0
ad12 ONLINE 0 0 0
ad14 ONLINE 0 0 0
errors: No known data errors
まあ、これは試してみただけです。削除、と。
# zpool destroy storage
# zpool status
no pools available
# zfs list
no datasets available
☆
ZFSには、RAID-Zという目玉機能があるそうで、今度はそれを試してみました。
こんな感じで、4個のハードディスクドライブを使って、RAID5相当のものを作ってみました(最低3個のドライブからRAID-Zを作れます)。
# zpool create storage raidz ad6 ad8 ad12 ad14
# zpool status
pool: storage
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
storage ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad6 ONLINE 0 0 0
ad8 ONLINE 0 0 0
ad12 ONLINE 0 0 0
ad14 ONLINE 0 0 0
errors: No known data errors
# df -h /storage
Filesystem Size Used Avail Capacity Mounted on
storage 4.0T 0B 4.0T 0% /storage
さっきの容量は5.4TBでしたが、RAID-Zのときはパリティのために1個分の容量がとられるので、4TBしか使えなくなってしまいます。まあ十分ですか。
ためしにportsのファイルを置いてみることにしました。ついでなのでgzip圧縮もしてみます。
# zfs create storage/ports
# zfs set compression=gzip storage/ports
# df -hl
Filesystem Size Used Avail Capacity Mounted on
(一部省略)
storage 4.0T 128K 4.0T 0% /storage
storage/ports 4.0T 128K 4.0T 0% /storage/ports
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
storage 136K 4.00T 28.4K /storage
storage/ports 26.9K 4.00T 26.9K /storage/ports
cvsupの設定ファイルを用意。/storage/portsに、ファイルが置かれるようにします。
# cat /etc/cvsup.ports
*default host=うちのサーバー
*default base=/var/db
*default prefix=/storage
*default release=cvs tag=.
*default delete use-rel-suffix
cvsup(csup)を実行
# csup /etc/cvsup.ports
Connected to うちのサーバー
Updating collection ports-all/cvs
Checkout ports/.cvsignore
Checkout ports/CHANGES
Checkout ports/COPYRIGHT
Checkout ports/GIDs
Checkout ports/KNOBS
Checkout ports/LEGAL
Checkout ports/MOVED
Checkout ports/Makefile
Checkout ports/Mk/bsd.apache.mk
Checkout ports/Mk/bsd.autotools.mk
途中省略
Checkout ports/x11-wm/xmonad-contrib/Makefile
Checkout ports/x11-wm/xmonad-contrib/distinfo
Checkout ports/x11-wm/xmonad-contrib/pkg-descr
Checkout ports/x11-wm/xmonad-contrib/pkg-plist
Finished successfully
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
storage 197M 4.00T 28.4K /storage
storage/ports 197M 4.00T 197M /storage/ports
# du -sh /storage/ports/
206M /storage/ports/
んーと、どうやら206MB、使用中らしいです。
/storage/portsを、普通のファイルシステムへコピーして、ディスク使用量を比較してみますか。
# mkdir /usr/local/tmp
# cd /storage
# tar cf - ports | tar xf - -C /usr/local/tmp/
しばらくかかる
# du -sh /usr/local/tmp/ports/
435M /usr/local/tmp/ports/
えーと、435MB。ということで、たしかに圧縮の効果はあるみたいです。
こんなコマンドで、圧縮率を確認できるんだとか。
# zfs get compressratio
NAME PROPERTY VALUE SOURCE
storage compressratio 2.51x -
storage/ports compressratio 2.51x -
☆
まだあまり試してないですが、このまま使い続けてみます。
マウント場所を変更したり、RAID5以外にも、RAID10やRAID6などもできるみたいだし、スナップショットをとることもできるようだし、・・・機能がてんこもり。
いいかもしれない。
☆
裏話。
ZFSを使う前に、
そういえば、最近、チップセットにRAID機能があるんだったよな~
Intel Matrix RAIDとかいったっけ?
と思いまして・・・
あ、これ、AMDじゃん [E:coldsweats01]
☆
「ザ☆ネットスター! - 12月号 -」を見ました。
これ、ぜんぜん知らなかった。
別に、知ってなくてもいいか、と思った。
■ 関連記事
0 件のコメント:
コメントを投稿