RAID10構築手順の記録

前提

RedHatLinuxで、4つの1TBのHDDを追加し、以下のようにHDDが認識している状態から構築開始する。

/dev/sdc
/dev/sdd
/dev/sde
/dev/sdf

パーティション準備

以下コマンドを実行して、それぞれにパーティションタイプ0xfdのパーティションを作成する

# fdisk /dev/sdc
# fdisk /dev/sdd
# fdisk /dev/sde
# fdisk /dev/sdf

作成されるパーティションは以下4つ。

/dev/sdc1
/dev/sdd1
/dev/sde1
/dev/sdf1

RAID10作成

dmesgを見るとsdc,sddがひとつのSATAコントローラで認識され、sde,sdfがひとつのSATAコントローラで認識されていた。
RAIDSATAコントローラをまたいでRAID1を組むようにsdcとsde,sddとsdfのペアにする。

# mdadm --create /dev/md0 -v --raid-devices=4 --level=raid10 /dev/sdc1 /dev/sde1 /dev/sdd1 /dev/sdf1

参考:引数のパーティションの順番とRAIDの構成内容(1,2番目と3,4番目がそれぞれRAID1を構成している)
http://www.23ch.info/test/read.cgi/linux/1168487758/ の 628 より以下引用

628 :login:Penguin:2008/01/30(水) 23:34:24 id:x5QwYMj+
mdのoffsetとnear試しました(冗長性)

ディスクは全部4台構成(全て2G)

mdadm --create /dev/md0 --level=raid10 --layout=n2 --raid-devices=4 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
md0のサイズは4G、利用可能率50%
sdb、sdc、sdd、sde1つをVMから見えなくする→問題なし
sdb、sdcをVMから見えなくする→アレイ崩れる
sdb、sddをVMから見えなくする→問題なし
sdb、sdeをVMから見えなくする→問題なし
sdc、sddをVMから見えなくする→問題なし
sdc、sdeをVMから見えなくする→問題なし
sdd、sdeをVMから見えなくする→アレイ崩れる
結果:1台障害は100%問題なし、2台目障害は1/3の確率でアウト
  やっぱり1台目と2台目、3台目と4台目でRAID1だったようです
wikiの書き込みから推定するに、下の図のようなレイアウト(左側から1台目、2台目・・・)
1 1 2 2
3 3 4 4
5 5 6 6
7 7 8 8

RAID構築が完了するのを確認する

状態は以下コマンドで確認できる。(完了した状態の出力です)
自分の場合は4時間ほどかかった。

# cat /proc/mdstat
Personalities : [raid10]
md0 : active raid10 sdf1[3] sdd1[2] sde1[1] sdc1[0]
1953519872 blocks 64K chunks 2 near-copies [4/4] [UUUU]

unused devices:

# mdadm --detail --scan
ARRAY /dev/md0 level=raid10 num-devices=4 UUID=9cd90b3f:eaafc5c2:62808126:9f17bf5d

# mdadm --detail /dev/md0
/dev/md0:
Version : 00.90.03
Creation Time : Sun Jun 8 17:48:44 2008
Raid Level : raid10
Array Size : 1953519872 (1863.02 GiB 2000.40 GB)
Device Size : 976759936 (931.51 GiB 1000.20 GB)
Raid Devices : 4
Total Devices : 4
Preferred Minor : 0
Persistence : Superblock is persistent

Update Time : Sun Jun 8 22:30:37 2008
State : clean
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0

Layout : near=2, far=1
Chunk Size : 64K

UUID : 9cd90b3f:eaafc5c2:62808126:9f17bf5d
Events : 0.2

Number Major Minor RaidDevice State
0 8 33 0 active sync /dev/sdc1
1 8 65 1 active sync /dev/sde1
2 8 49 2 active sync /dev/sdd1
3 8 81 3 active sync /dev/sdf1

/etc/mdadm.conf 作成

/etc/mdadm.confを作成して編集。

# vim /etc/mdadm.conf

編集内容は以下。

# cat /etc/mdadm.conf
MAILADDR root
DEVICE partitions

次に、mdadm -D --scan の出力結果を末尾に追加。

# mdadm -D --scan >> /etc/mdadm.conf

最終的に以下のようになる。(最後の行は各マシンごとに「mdadm -D --scan」の出力内容により変化する)

# cat /etc/mdadm.conf
MAILADDR root
DEVICE partitions
ARRAY /dev/md0 level=raid10 num-devices=4 UUID=9cd90b3f:eaafc5c2:62808126:9f17bf5d

ここで「DEVICE partitions」がポイントになるらしい。
以下 /proc/partitions を参照して動作するようになるので、RAIDを構成するパーティションが変わってもRAIDを認識してくれる。
「DEVICE /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1」でも動作はするが、RAIDを構成するパーティションが変わった場合にRAIDを認識しなくなる可能性がある。

# cat /proc/partitions
major minor #blocks name

8 0 293057352 sda
8 1 293049666 sda1
8 16 8028160 sdb
8 17 200781 sdb1
8 18 6795495 sdb2
8 19 1028160 sdb3
8 32 976762584 sdc
8 33 976760001 sdc1
8 48 976762584 sdd
8 49 976760001 sdd1
8 64 976762584 sde
8 65 976760001 sde1
8 80 976762584 sdf
8 81 976760001 sdf1
9 0 1953519872 md0

参考:
http://www.obenri.com/_raid_create/create_mdadm.html

RAID10が構成できたのを確認し、/dev/mdをformat

# mkfs -j /dev/md0
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
244203520 inodes, 488379968 blocks
24418998 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
14905 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

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

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

/dev/mdをmountして使用

自分はRAIDにLABELを付けて管理してます。

# e2label /dev/md0 /RAID10-4TB

# vim /etc/fstab

で/etc/fstabの末尾に以下を追加

# tail -n1 /etc/fstab
LABEL=/RAID10-4TB /raid10 ext3 defaults 0 2

あとは普通にmountできます。

# mount /raid10
# df
Filesystem 1K-ブロック 使用 使用可 使用% マウント位置
/dev/sdb2 6582636 4679572 1563292 75% /
/dev/sdb1 194442 10644 173759 6% /boot
tmpfs 255432 0 255432 0% /dev/shm
/dev/sda1 288451232 224791336 49007416 83% /usbhdd/20080225-300G
/dev/md0 1922866224 200168 1824990064 1% /raid10

ちなみにこのLinuxはUSBから起動してます。
こんどはこの2TB使って何しようかなー。
最終的には仮想マシン環境にする予定だけど、それまではいろいろ遊んでみるつもり。