今まで、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についての詳しい説明は他に譲る(参考資料参照)として、結果的には次の順で作業します。
- ストレージプールの作成
- ファイルシステムの作成
以上です。とってもシンプルです。実際の作業もシンプルです。実際の作業は次のようになります。
ストレージプールの作成は、今回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は拍子抜けするぐらい簡単に使えちゃうって事で。
参考資料:
最近のコメント