« 2008年6月 | トップページ | 2008年9月 »

2008年8月の1件の記事

2008年8月30日 (土)

簡単おためし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)

« 2008年6月 | トップページ | 2008年9月 »