ハードウェア 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 )
これに、ADAPTEC の SAS<->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 の通りに行った。
その後、手順通りにデバイスドライバを入れようとしたけど、
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 を構築する。
# 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: