簡単おためしZFS@FreeBSD
高専BSDユーザーグループ(KosenBUG)のBOFが仙台でありました。そこでFreeBSD上でZFSを使う様子を実演したのですが、結構好評だったので、やったことをまとめておきます。
とりあえずZFSを簡単に試してみる、というコンセプトなので、HDDなどの準備が無くても大丈夫なように、mdデバイス(要はRAM Disk)を使って試してみます。とりあえず、4つデバイスを用意してみましょう(サイズは、1つのデバイスが64MB以上無いとZFSでは使えないので、それ以上にしておく)。
# mdconfig -a -t malloc -s 100m
md0
# mdconfig -a -t malloc -s 100m
md1
# mdconfig -a -t malloc -s 100m
md2
# mdconfig -a -t malloc -s 100m
md3
# mdconfig -l
md0 md1 md2 md3
とりあえずこれで100MBのRAM Diskが4つ(md0~md3)できたので、こいつを使ってZFSのストレージプール(ZFSのファイルシステムを切り出す元となるHDDのかたまりのようなもの)を構成してみます。とりあえずストレージプールの名前をkbugpooolとすると、
# zpool create kbugpool md0 md1 md2 md3
これだけで作れます。作った領域は、(デフォルトでは)勝手に/の下にマウントされます。
# zpool status kbugpool
pool: kbugpool
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
kbugpool ONLINE 0 0 0
md0 ONLINE 0 0 0
md1 ONLINE 0 0 0
md2 ONLINE 0 0 0
md3 ONLINE 0 0 0
errors: No known data errors
# df -H kbugpool
Filesystem Size Used Avail Capacity Mounted on
kbugpool 367M 0B 367M 0% /kbugpool
zpool createの引数として単純にデバイスファイル名を並べると、単純に領域が連結されます(すなわちRAID0 / JBODみたいなもの)。もちろん、この状態でどれかのディスクに障害が起きると、データが失われちゃいます。
それじゃあんまりなので、いわゆるRAID10の構成にしてみます。今作ったkbugpoolを一度削除して、
# zpool destroy kbugpool
今度はmirror指定を加えて作ってみます。
# zpool create kbugpool mirror md0 md1 mirror md2 md3
`mirror'指示の後ろに書いたデバイス同士でデータがミラーリングされます。ここではmd0とmd1、md2とmd3とでそれぞれミラーリング(RAID1)されます。それらを連結(RAID0)するので、結局RAID10の完成です。
# zpool status kbugpool
pool: kbugpool
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
kbugpool ONLINE 0 0 0
mirror ONLINE 0 0 0
md0 ONLINE 0 0 0
md1 ONLINE 0 0 0
mirror ONLINE 0 0 0
md2 ONLINE 0 0 0
md3 ONLINE 0 0 0
errors: No known data errors
# df -H kbugpool
Filesystem Size Used Avail Capacity Mounted on
kbugpool 167M 0B 167M 0% /kbugpool
ミラーリングしているので、最初の例の約半分の容量になっています。
とりあえず障害対策はできました。でも、時代はRAID6でしょう。もちろんZFSでもできます。ZFSではraidz2指定をすることによりRAID6相当の構成が作れます。とりあえずさっき作ったストレージプールを消して、
# zpool destroy kbugpool
raidz2で作ってみます。
# zpool create kbugpool raidz2 md0 md1 md2 md3
コマンドはこれだけ。
# zpool status kbugpool
pool: kbugpool
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
kbugpool ONLINE 0 0 0
raidz2 ONLINE 0 0 0
md0 ONLINE 0 0 0
md1 ONLINE 0 0 0
md2 ONLINE 0 0 0
md3 ONLINE 0 0 0
errors: No known data errors
# df -H kbugpool
Filesystem Size Used Avail Capacity Mounted on
kbugpool 166M 131k 166M 0% /kbugpool
パリティで2台分の容量を使用するので、4台構成の場合RAID10の例と容量は変わっていませんが、RAID6になっています。
さて、ここまででストレージプールの作成は終了。今度はファイルシステムをストレージプールから切り出してみます。
たとえば、dataとbackupの2つのファイルシステムを作成するには、
# zfs create kbugpool/data
# zfs create kbugpool/backup
これだけです。デフォルトでは、ストレージプールがマウントされたディレクトリの下にマウントされます。
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
kbugpool 206K 158M 31.4K /kbugpool
kbugpool/backup 26.9K 158M 26.9K /kbugpool/backup
kbugpool/data 26.9K 158M 26.9K /kbugpool/data
# df -H /kbugpool /kbugpool/data /kbugpool/backup
Filesystem Size Used Avail Capacity Mounted on
kbugpool 166M 0B 166M 0% /kbugpool
kbugpool/data 166M 0B 166M 0% /kbugpool/data
kbugpool/backup 166M 0B 166M 0% /kbugpool/backup
もちろん、オプションでマウント先は変えられます。他にも、最低限確保しておく容量や最大容量制限(Quota)など、たくさん指定できるオプションがあります。
以上、簡単ZFS体験でした。
最後に後始末。
# zpool destroy kbugpool
# mdconfig -d -u 3
# mdconfig -d -u 2
# mdconfig -d -u 1
# mdconfig -d -u 0
| 固定リンク
| コメント (0)
| トラックバック (0)
最近のコメント