« 高専祭 | トップページ | ZFS (raidz2)でのデグレード→リビルド確認 »

2008年6月22日 (日)

FreeBSDでZFSを導入してみる

今まで、Dell CERC/SATA 1.5/6ch RAIDカードを使ってRAID5のディスクアレイを組んでいました。特に不満もなく今まで使ってきたのですが、最近どうもこのコントローラが不安定。壊れかけのようです。

こういうときはとっととRAIDカードを交換するのが定石なのですが、困ったことに今使っているRAIDカード、もともとDELLのサーバのオプション(しかもオークションで入手)なので、同じ物は簡単に手に入りません。

こうなるとハードウェアRAIDの困ったところ、もうそのまま復旧はあきらめるしかありません(実際はこのRAIDカード、AdaptecのOEMなので、AdaptecのRAIDカード買ってくればたぶん大丈夫なんだけれどもね)。本当はこういうときに備えて、同一カードを交換用として準備すべきなんだけれども、いかんせん個人では難しいですよね。

まぁ、ちょうど今のアレイも容量がいっぱいいっぱいだったので、いい機会と思い、新しくディスクアレイを構築することにしました。今回の件でハードウェアRAIDはやめて完全ソフトウェアRAIDとすることで方針は決定(どーせお家サーバなので、性能はソフトウェアで十分)。

また、現状はRAID5ですが、今ならRAID6だろう、ということで、冗長化はRAID6に決定。

さて、方針が決まればどうやってそれを実現するかですが、

  • ZFS (Solaris, FreeBSD)
  • raid456.ko (Linux) ?

のどちらかしか選択肢はないようです。さすがRAID6。

で、ぐぐってみると、raid456はあんまりいい評判がないのです。というか、情報自体が少ない。対してZFSの方は、さすが商用だけあって、なかなかのものらしい。となれば、ZFSしか残らないわけですよ。

あとは、OpenSolarisかFreeBSDか、どっちかで組む、ということになるのですが、今使っているのがFreeBSDなので、FreeBSDでやってみる事に決定。バージョンを7.0に上げないといけないけど…

というわけで、ここからが本題。ZFS on FreeBSD 7.0-RELEASEの構築。

7.0-RELEASEに上げるのは本稿の目的から外れるので、さくっと省略。

で、今あるRAID5アレイのファイルをバックアップ。これは1TBのHDDを用意してコピーしただけ。

そしたら、今使っているRAIDカードと、それにつながっているHDDを全交換。もうRAIDコントローラの載ったカードじゃなくてもいいので、単なるSATA拡張カードAOC-SAT2-MV8と、500GB HDD×6台を搭載。

atacontrolで見てみると、こんな感じ。

# 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 <ST3500630AS/3.AAK> Serial ATA II
    Slave:       no device present
ATA channel 3:
    Master:  ad6 <ST3500320AS/SD15> Serial ATA II
    Slave:       no device present
ATA channel 4:
    Master:  ad8 <ST3500320AS/SD15> Serial ATA II
    Slave:       no device present
ATA channel 5:
    Master: ad10 <ST3500320AS/SD15> Serial ATA II
    Slave:       no device present
ATA channel 6:
    Master: ad12 <ST3500320AS/SD15> Serial ATA II
    Slave:       no device present
ATA channel 7:
    Master: ad14 <ST3500320AS/SD15> Serial ATA II
    Slave:       no device present
ATA channel 8:
    Master:      no device present
    Slave:       no device present
ATA channel 9:
    Master:      no device present
    Slave:       no device present
ATA channel 10:
    Master: ad20 <ST3250820AS/3.AAE> Serial ATA II
    Slave:       no device present
ATA channel 11:
    Master: ad22 <ST3250820AS/3.AAE> Serial ATA II
    Slave:       no device present
ATA channel 12:
    Master: ad24 <ST3320620AS/3.AAK> Serial ATA II
    Slave:       no device present
ATA channel 13:
    Master: ad26 <ST3320620AS/3.AAE> Serial ATA II
    Slave:       no device present

なんかすごいことになっています。ad20~ad26は今まで使っていた(これからも使うけど)/や/homeなどが入っているディスク。ad4~ad14までが新しくつないだディスク。ad4~ad14の6台を使ってZFSでRAID6のアレイを組みます。

まずは、ZFSのカーネルモジュールzfs.koのロード…と思ったけれども、何もしなくても、必要なときに勝手に読み込まれるみたい。なので、ちゃっちゃと進んじゃいます。

ZFSについての詳しい説明は他に譲る(参考資料参照)として、結果的には次の順で作業します。

  1. ストレージプールの作成
  2. ファイルシステムの作成

以上です。とってもシンプルです。実際の作業もシンプルです。実際の作業は次のようになります。

ストレージプールの作成は、今回RAID6とするのでraidz2を明示して

# zpool create zpool0 raidz2 /dev/ad4 /dev/ad6 /dev/ad8 /dev/ad10 /dev/ad12 /dev/ad14

これだけでおしまい。zpool statusコマンドで見てみると、

# zpool status
  pool: zpool0
state: ONLINE
scrub: none requested
config:


        NAME        STATE     READ WRITE CKSUM
        zpool0      ONLINE       0     0     0
          raidz2    ONLINE       0     0     0
            ad4     ONLINE       0     0     0
            ad6     ONLINE       0     0     0
            ad8     ONLINE       0     0     0
            ad10    ONLINE       0     0     0
            ad12    ONLINE       0     0     0
            ad14    ONLINE       0     0     0


errors: No known data errors

このように、zpool0というストレージプールができていることが分かります。この時点で、/zpool0にすでにマウントされてしまうのでそのまま使えるっぽいのだけど…

# mount
/dev/mirror/gm0s1a on / (ufs, local)
devfs on /dev (devfs, local)
/dev/mirror/gm0s1e on /tmp (ufs, local, soft-updates)
/dev/mirror/gm0s1f on /usr (ufs, NFS exported, local, soft-updates)
/dev/mirror/gm0s1d on /var (ufs, local, soft-updates)
/dev/mirror/gm1s1d on /home (ufs, local, soft-updates, acls)
procfs on /proc (procfs, local)
zpool0 on /zpool0 (zfs, local)
devfs on /var/named/dev (devfs, local)

次に、ファイルシステムの作成(?)をおこないます。今回は、zpool0から/backupと/recを切り出します。zfsコマンドで、マウントポイントを明示して、

# zfs create -o mountpoint=/backup zpool0/backup
# zfs create -o mountpoint=/rec zpool0/rec

これもこれだけでおしまい。手応え無し。(^^;)

# mount
/dev/mirror/gm0s1a on / (ufs, local)
devfs on /dev (devfs, local)
/dev/mirror/gm0s1e on /tmp (ufs, local, soft-updates)
/dev/mirror/gm0s1f on /usr (ufs, NFS exported, local, soft-updates)
/dev/mirror/gm0s1d on /var (ufs, local, soft-updates)
/dev/mirror/gm1s1d on /home (ufs, local, soft-updates, acls)
procfs on /proc (procfs, local)
zpool0/backup on /backup (zfs, local)
zpool0/rec on /rec (zfs, NFS exported, local)
zpool0 on /zpool0 (zfs, local)
devfs on /var/named/dev (devfs, local)

以上、完了。ちなみに、dfしてみると、

# df  -H
Filesystem            Size    Used   Avail Capacity  Mounted on
/dev/mirror/gm0s1a    520M    315M    164M    66%    /
devfs                 1.0k    1.0k      0B   100%    /dev
/dev/mirror/gm0s1e    260M     27M    212M    11%    /tmp
/dev/mirror/gm0s1f    154G    5.7G    136G     4%    /usr
/dev/mirror/gm0s1d    4.2G    1.4G    2.4G    38%    /var
/dev/mirror/gm1s1d    242G    177G     46G    79%    /home
procfs                4.1k    4.1k      0B   100%    /proc
zpool0/backup         769G     56G    713G     7%    /backup
zpool0/rec            1.9T    1.2T    713G    63%    /rec
zpool0                713G    131k    713G     0%    /zpool0
devfs                 1.0k    1.0k      0B   100%    /var/named/dev

てな感じ。ちょっとわかりにくい…

あとは、起動時にZFSのファイルシステムを自動でマウントするように、/etc/rc.confへzfs_enable="YES"を入れておく。これでおしまい。

まぁ、とりあえずZFSは拍子抜けするぐらい簡単に使えちゃうって事で。

参考資料:

|

« 高専祭 | トップページ | ZFS (raidz2)でのデグレード→リビルド確認 »

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: FreeBSDでZFSを導入してみる:

« 高専祭 | トップページ | ZFS (raidz2)でのデグレード→リビルド確認 »