下準備
GA-G31M-ES2L rev1.1というマザーボードにceleronE1200を載せたものに
HDDを2基載せてgmirrorでRAID1にしていたのだけど、容量が足りなくなったのとRAID1はもったいないという事でRAID5にしてみることにした。*1
gmirrorはraid5はまだらしいので、zfsを試してみることに。
HDDを2台追加で購入。
今RAID1にしている1台を予備にして、1台を再構築、3台でraid5を組む計画。
で、このマザーボードSATAIIポート*2が0から3まであって、それぞれが順番にadに割当たってくれたら良いのに、どうやら違うらしい。
BIOSでみると0と1がマスター2と3がスレーブになっている。
FreeBSDが認識するとad4がSATA0 ad5がSATA3 ad6がSATA1 ad7がSATA2になるらしい。
どのHDDが物理的にどれなのかちゃんとわかっておかないと後で事故の元になるので、ケーブルに番号を振って*3HDDがケースに刺さってる順番にad4~6が並ぶ様にした。
並べ替えたところでgmirrorで組んでたRAID1のHDDがad6とad7になったので、ここでad6をgmirrorからはずす*4
gmirror remove -v gm0 ad6 (gm0からad6を外す) gmirror forget gm0 (1台だけだとDEGRADEDになるので構成を忘れさせる) gmirror status Name Status Components mirror/gm0 COMPLETE ad7
となったのを確認して、いよいよ目的のzfsへ
zfsに挑戦
http://www.seichan.org/wiki/index.php?FreeBSD-ZFS
こちらを参考に/etc/rc.confに
zfs_enable="YES"
を付け加えて
/etc/rc.d/zfs start
したらzfs.koとopensolaris.koがロードされた。
WARNING: ZFS is considerd to be an experimental feature in FreeBSD.
とか出たけど、気にしない*1
raid5の様なものを作る
zfsはHDDの束をRAIDアレイではなくストレージプールと言うらしい。
で、RAID5相当のものは単一パリティのraidzという事になるらしい。
RAID5と比べて、データとパリティのどちらかが未更新の時にHDDがクラッシュするとRAIDとして致命的な不整合が起こらないようになっているらしい*2
zfsのストレージプールを操るコマンドはzpool
zpool create zpool raidz ad4 ad5 ad6
でzfsのストレージプールを作って早速マウントだーと思ったら、なんかすでに/zpoolとかに勝手にマウントされてるorz
zfsをマウントする
df Filesystem 1K-blocks Used Avail Capacity Mounted on 中略 /dev/mirror/gm0s1 473015558 424415312 10759002 98% /data zpool 959688064 10553088 949134976 1% /zpool
zfsはどうやらマウントポイントをファイルシステムの中に記憶しててfstabとかmountコマンドとかとは別管理になっているらしい。
zfsコマンドを使ってマウントポイントをzfsに教えてあげる仕組みの様だ。
一応# umount /zpoolとかやるとアンマウントされた
ストレージプールから好きなだけパーティションを切り分けてquotaとかかけて管理するというのをやりたいので、さっき作ったzpoolは一旦消して*3
zpool create -m none zpool raidz ad4 ad5 ad6
とした。*4
これでどこにもマウントされないストレージプールができた。
好きな場所にマウントする。
zfsコマンドを使う。
zfs create -o mountpoint=/data zpool/data
これでraidzのストレージプールを使う/dataができた。
ついでに
zfs create -o mountpoint=/data/ftp -o quota=1G zpool/data/ftp
/data/ftpは1GBの容量制限付の場所というdisk quotaも簡単にできる。