下準備

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

*1:zfs化して結局4台HDDがあって2台分の容量だからもったいない度は変わらない様な気もするけど、実質1台余分が出た計算だから良いとおもう。

*2:以下SATA

*3:どのポートに刺さってるか確認用

*4:-vをremoveの前につけてしまって動かなくてアレー?ってなったorz

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も簡単にできる。


*1:駄目ならgmirrorで使ってたHDDからデータを救い出す計画

*2:久しぶりに買ったUNIXmagazine2009Winter号に書いてあった

*3:zpool destroy zpoolであっけなく消える

*4:2009/03/08オプションの順番を間違えていたので書き直した