ハードウェア RAID1 と ソフトウェア RAID0 で RAID1+0

ほんとはハードウェア RAID1+0 のストレージを組みたかったのだが、手元にあったRAIDカードは RAID 1/0/1E にしか対応していなかったので、
4台のHDD に対して、 2台ずつ ハードウェアRAID1 し、その2つのアレイを mdadm で RAID0 することで、 RAID1+0 を実現してみた。


用いたのは、2TB の HDD 4台。

裸族のマンション ( http://www.century.co.jp/products/pc/hdd-acce/crmsbk5f.html ) + 地下発電所( http://www.century.co.jp/products/pc/hdd-acce/crchop.html ) でセッティング。

RAID カードは IBM X3550 サーバから取り外した ServeRAID BR10i (MR10i に載せ替えたので不要になったので使い回すことにした)
( http://www-06.ibm.com/systems/jp/x/storage/raid2.shtml )

これに、ADAPTECSAS<->SATA ケーブル ( ACK-I-mSASx4-4SATAx1-SB-1m R / http://www.adaptec.com/ja-JP/products/cables/cables/sas/ ) を刺して、マシンの外にケーブルを出し、裸族のマンションに繋いだ。

ちなみに、マシンは DELL の余り物 (Vostroスリムタワー)。
既にCentOS5.4をインストール済みです。

スリムタワーから伸びたSASケーブルが、むき出しのHDD につながる光景は結構面白くもあります。



RAID カードは PCIe x8 なのだけど、マザーボードには PCIe x16 しかないので、そこに接続。

長さが違うので、当然隙間が出来るのでなんだか不安定な感じがするのだけど、動作には問題ないです。


起動し、RAID initialize が終わると、 Ctrl+T で RAID の管理画面に入れる旨が表示されるで押したところ、なぜかそのままCentOS がブート。
BIOS で BOOT の順番を変えて、 RAID カードを先に起動する設定にしたら管理画面が立ち上がった。

RAID1 の構築は以下の PDF の通りに行った。

http://www-06.ibm.com/jp/domino04/pc/support/Sylphd07.nsf/1e97b730bd4fa8f249256a840020d047/2d39e91d3f5d7ed149257601004361a8/$FILE/x3550M2_x3650M2_RHEL5.3_Install_v01.pdf

その後、手順通りにデバイスドライバを入れようとしたけど、

UNSUPPORTED DISTRO

と怒られうまくいかなかった。

まぁ、動くのでよしとする。

バイス

  • /dev/sda
  • /dev/sdb

で、2台のHDDとして認識されている。

RAID1 を組む前に起動したときは

  • /dev/sda
  • /dev/sdb
  • /dev/sdc
  • /dev/sdd

と、4台のHDDが認識されていたので、それぞれ2台ずつがまとまった感じなのだろう。

これで RAID1 の HDD が2組できた。


これから、mdadm によるソフトウェアRAID0 を構築する。

RAIDバイスファイルの作成

# mknod /dev/md0 b 9 1

パーミッションの作成

# fdisk /dev/sda
デバイスは正常な DOS 領域テーブルも、Sun, SGI や OSF ディスクラベルも
含んでいません
新たに DOS ディスクラベルを作成します。あなたが書き込みを決定するまで、変更は
メモリ内だけに残します。その後はもちろん以前の内容は修復不可能になります。

このディスクのシリンダ数は 243031 に設定されています。
間違いではないのですが、1024 を超えているため、以下の場合
に問題を生じうる事を確認しましょう:
1) ブート時に実行するソフトウェア (例. バージョンが古い LILO)
2) 別の OS のブートやパーティション作成ソフト
   (例. DOS FDISK, OS/2 FDISK)
警告: 領域テーブル 4 の不正なフラグ 0x0000 は w(書き込み)によって
正常になります

コマンド (m でヘルプ): n
コマンドアクション
   e   拡張
   p   基本領域 (1-4)
p
領域番号 (1-4): 1
最初 シリンダ (1-243031, default 1):
Using default value 1
終点 シリンダ または +サイズ または +サイズM または +サイズK (1-243031, default 243031):
Using default value 243031

コマンド (m でヘルプ): t
Selected partition 1
16進数コード (L コマンドでコードリスト表示): fd
領域のシステムタイプを 1 から fd (Linux raid 自動検出) に変更しました

コマンド (m でヘルプ): w
領域テーブルは交換されました!

ioctl() を呼び出して領域テーブルを再読込みします。
ディスクを同期させます。

fdisk /dev/sdb も同様に。
これで /dev/sha1 /dev/sdb1 が作成される。

ようやく RAID0 の構築が可能になった。

# mdadm --create --verbose /dev/md0 --level=0 --raid-devices=2 /dev/sda1 /dev/sdb1

LVM にするので以下のコマンドで、LVMボリュームを作成した。

# pvcreate /dev/md0
  Physical volume "/dev/md0" successfully created
# vgcreate /dev/storage /dev/md0
  Volume group "storage" successfully created
# lvcreate -l 953196 storage
  Logical volume "lvol0" created

最後に ext3 でフォーマット。

# mkfs.ext3 /dev/storage/lvol0
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
488046592 inodes, 976072704 blocks
48803635 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
29788 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
        102400000, 214990848, 512000000, 550731776, 644972544

Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 38 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

あとは、/etc/fstab に以下の内容を追加して、再起動すれば完了。
(もちろん 先に mkdir /storage してある。)
mount しても良いのだけど、次回以降の起動で確実にマウントされるかどうか確認するためにも再起動できるならしておいた方が良いかなと思って reboot した。

/dev/storage/lvol0      /storage                ext3     defaults 0 0


mdstat はこんな感じ。

$ cat /proc/mdstat
Personalities : [raid0]
md0 : active raid0 sdb1[1] sda1[0]
      3904292736 blocks 64k chunks

unused devices: