読者です 読者をやめる 読者になる 読者になる

Carpe Diem

備忘録。https://github.com/jun06t

ソフトウェアRAID を構築する

VMware 上の CentOSソフトウェアRAIDを構築します。 ソフトウェアRAIDハードウェアRAIDよりも負荷が高いですが、勉強する上では手軽です。 方針としては /dev/sda - システム /dev/sdb - RAID用ディスク /dev/sdc - RAID用ディスク /dev/sdd - RAID用ディスク として、sdb ~ sdd を使ってRAID5を構築します。 RAID用ディスク作成 VMの設定画面から追加します。 raid01.png HDDの追加 raid02.png 容量は10G程度にします。もっと多くてもできますが、RAIDの構築に時間がかかるので今回は少なめで。 raid03.png これを3回程繰り返して、 sdb - sdd のディスクを用意します。 raid04.png 追加したら再起動してデバイスを認識させます。再起動すると
$ ls /dev/sd*
/dev/sda  /dev/sda1  /dev/sda2  /dev/sda3  /dev/sdb  /dev/sdc  /dev/sdd
と新たに sdb - sdd デバイスが追加されます。 ◆追加したディスクのパーティション作成 sdb - sdd をそれぞれ以下のとおりにパーティションを作成します。
# fdisk /dev/sdb

このディスクのシリンダ数は 17365 に設定されています。
間違いではないのですが、1024 を超えているため、以下の場合
に問題を生じうる事を確認しましょう:
1) ブート時に実行するソフトウェア (例. バージョンが古い LILO)
2) 別の OS のブートやパーティション作成ソフト
   (例. DOS FDISK, OS/2 FDISK)

コマンド (m でヘルプ): n // n で新しいパーティションを作成
コマンドアクション
   e   拡張
   p   基本領域 (1-4)
p // p でprimary diskに
領域番号 (1-4): 1 // sd*1を作成
最初 シリンダ (1-17365, default 1): // デフォルト値で良いのでEnter
Using default value 1
終点 シリンダ または +サイズ または +サイズM または +サイズK (1-17365, default 17365): // デフォルト値で良いのでEnter
Using default value 17365

コマンド (m でヘルプ): t // t でパーティション・タイプを変更する。一覧は l で表示できる
Selected partition 1
16進数コード (L コマンドでコードリスト表示): fd // fd でタイプを RAID に
領域のシステムタイプを 1 から fd (Linux raid 自動検出) に変更しました

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

ioctl() を呼び出して領域テーブルを再読込みします。
ディスクを同期させます。
RAID構築 mdadm コマンドで RAID アレイを作成します。 /dev/sdb1, /dev/sdc1, /dev/sdd1 の 3個のパーティションを使って、RAID レベル 5 の RAID アレイ /dev/md0 を作成。
# mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sd[bcd]1
RAID の状態を確認します。
# cat /proc/mdstat
a) 構築中の場合
Personalities : [raid6] [raid5] [raid4] 
md0 : active raid5 sdd1[3] sdc1[1] sdb1[0]
      20947968 blocks level 5, 512k chunk, algorithm 2 [3/2] [UU_]
      [>....................]  recovery =  1.4% (261668/17781632) finish=13.3min speed=21805K/sec
b) 完了した時
Personalities : [raid6] [raid5] [raid4] 
md0 : active raid5 sdd1[3] sdc1[1] sdb1[0]
      20947968 blocks level 5, 512k chunk, algorithm 2 [3/3] [UUU]
構築したRAIDの設定を保存しておきます。
# mdadm --detail --scan >> /etc/mdadm.conf
RAIDをフォーマット /dev/md0 に EXT3 ファイルシステムを作成します。
# mkfs -t ext3 /dev/md0
◆マウントして確認 /data にマウントする設定にします。まずマウント先を作成。
# mkdir /data
設定します。
# vi /etc/fstab
tmpfs           /dev/shm         tmpfs   defaults        0 0
devpts          /dev/pts         devpts  gid=5,mode=620  0 0
sysfs           /sys             sysfs   defaults        0 0
proc            /proc            proc    defaults        0 0
/dev/md0        /data            ext3    defaults        1 2 // 追加
マウントします。
# mount -a
確認します。
# df -l
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda3             16307112   2365528  13113220  16% /
tmpfs                   957344         0    957344   0% /dev/shm
/dev/sda1               297485     37173    244952  14% /boot
/dev/md0              20618876    176196  19395284   1% /data
10G のHDD3つで RAID5 なので 20G で合ってます。 ダミーファイルを作ってみると
# dd if=/dev/zero of=testfile bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.163935 s, 640 MB/s
# df -l
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda3             16307112   2365528  13113220  16% /
tmpfs                   957344         0    957344   0% /dev/shm
/dev/sda1               297485     37173    244952  14% /boot
/dev/md0              20618876    278700  19292780   2% /data
確かに容量が変化して書き込めることが確認できます。 ◆HDDを1つ削除しても動作するか確認 SELinux を disabled にしておかないと面倒なことになるので注意 VMwareの設定から1つディスクを削除します。 raid05.png VMだと再起動しないとディスク増減の変更が認識されないかもしれないです。 ステータスを確認すると確かに減ってます。
# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdc1[1] sdb1[0]
      20947968 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [UU_]
ですが先ほどのようにファイルを作成したりしても、問題なくディスクの読み書きができることを確認できます。 ◆新たにHDDを追加してRAIDが再構築されるか確認 新たにVMの設定画面からHDDを追加します。 HDDの削除、再追加で /dev/sdd が新しくなりました。 追加した後、先ほどと同様にパーティションを作成します。 /dev/sdd1 ができます。 そののち、以下のコマンドで /dev/md0 に追加します。
# mdadm --add /dev/md0 /dev/sdd1
以下のコマンドで再構築しているのが確認できます。完了したらRAIDの修復完了です。
# cat /proc/mdstat
ソース: CentOSでソフトウェアRAIDの構築 Linuxでmdadmを使ったソフトウェアRAIDの構築・管理メモ Linux fdiskコマンドでパーティションを作成する 容量指定のダミーファイルを作成したい mdadmによるRAIDの修復