FreeBSD で RAID を組んでみた

February 17th, 2008 by naoya | Filed under day.

家のサーバには、けっこう消えては困るデータが増えてきたので、FreeBSD で RAID を組んでみようと思い立ちました。

僕は以前、ハードウェア RAID (IDE) を使っていたことがあったので、今後もハードウェア RAID(SATA) にしてみようと思いました。コストパフォーマンスのいいハードウェア RAID カードがないかと調べてみたところ、玄人志向の <a href=”http://www.kuroutoshikou.com/products/serialata/sata2ri2-pciefset.html”>SATA2RI2</a>を購入しました。

早速マシンに RAID カードを装着して、BIOS 上から RAID1 を組みました。その後、FreeBSD をインストールしたのですが、ad4 と ad6 といったデバイス(普通は、ar0 が見つかるはず)しか検出されませんでした。おかしいなと思って調べてみたところ、このカードは FreeBSD では対応していないことが分かりました。僕は、てっきりハードウェア RAID なら OS は関係ないと思いこんでいたので、失敗してしました。

仕方がないので、ハードウェア RAID カードを装着したままの状態で、FreeBSD 上でソフトウェア RAID を設定してみました。FreeBSD のソフトウェア RAID は、ataraid と gmirror という二つの選択肢があるようです。僕は、gmirror を選択してみました。

gmirror の設定手順は、次のとおりです。FreeBSD は、/dev/ad4 にインストールしてある状態で、ミラー用のハードディスクは /dev/ad6 になります。

  1. FreeBSD のインストール CD から、Fixit モードで起動する(Fixit モードで起動するには、別の Live filesystem CD が必要)
  2. Fixit モードで起動したら、順番に次のコマンドを実行する
  3. chroot /dist
  4. kldload geom_mirror
  5. exit
  6. gmirror label -v gm0 /dev/ad4
  7. gmirror insert -v gm0 -b round-robin /dev/ad6(ここで、データの同期が始まる、500GB だと 1 時間程度かかる)
  8. gmirror status  や gmirror list で、同期が完了したことを確認する
  9. mount /dev/mirror/gm0s1a /mnt
  10. sed -i bak /s/ad4/mirror\\/gm0/ /mnt/etc/fstab
  11. echo ‘geom_mirror_load=”YES”‘ >> /mnt/boot/loader.conf
  12. あとは、Fixit モードを終了して、再起動して正しく gm0 からブートできることを確認する

なぜか、ハードウェア RAID カード を装着したままの状態だと、gm0 からブートすることができななかったので、ハードウェア RAID カードをはずして対策しました。安いハードウェア RAID カードはあまり信頼できないという情報もあったので、個人用途などのサーバではソフトウェア RAID がよさそうですね。
gmirror の man はなぜかないので、<a href=”http://man.cx/gmirror(8)”>このページ</a>などで確認することができます。gmirro では、-b オプションで読み込むときの負荷分散アルゴリズムを設定することができます。実験結果が、<a href=”http://www.muranet.jp/~mura/blosxom.cgi/bsd/raidtest.html”>mur’s blog</a> に公開されていたので、とても参考になりました。

以前、会社の開発用 Linux  サーバにはソフトウェア RAID を組んでいたのですが、片方のハードディスクが壊れたことがありました。そのときは、ソフトウェア RAID だったので片方のハードディスクを交換するだけで助かったことがありました。ハードディスクは、消耗品なので、特にサーバは RAID を設定しておくことをおすすめします。

Leave a Reply