mdadmでソフトウェアRAID を味見

 2013-09-14
そろそろLVMとrsyncでのなんちゃってミラーリングとオサラバしようかな。
 
mdadmはLinuxでのソフトウェアRAIDの実装。
検索してみるといくつか記事も出てくるし悪くはなさそうなので、ちょっと味見してみる。


環境


実機だと機材の用意などが面倒なので仮想環境で行います。いやー便利な世の中になった。
とりあえずVirtualBoxにCentOS6.4をセットアップして、必要なソフトをぶち込みました。
といっても、mdadmを入れるだけ。
 [root@localhost ~]# yum install mdadm
これだけ。
あとはVirtualBoxで仮想のHDDを1GBずつ5個接続した。それぞれ/dev/sd[bcdef]として認識された。
[root@localhost ~]# ls /dev/sd*
/dev/sda /dev/sda1 /dev/sda2 /dev/sdb /dev/sdc
/dev/sdd /dev/sde /dev/sdf


mdadmでRAID5 @HDD3台


まず手始めにHDDを3台使ってRAID5を組む。fdiskで0xfdなパーティションを作成。それぞれ全てのHDDで実施しておく。
[root@localhost ~]# fdisk /dev/sdb
Command (m for help): p

Disk /dev/sdb: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x3af1aaf8

Device Boot Start End Blocks Id System
/dev/sdb1 1 130 1043201 fd Linux raid autodetect

Command (m for help):


パーティションを切ったらさっそくmdadmでRAID領域を作成する。
[root@localhost ~]# mdadm -C /dev/md0 -l5 -n3 -c256 -f /dev/sdb1 /dev/sdc1 /dev/sdd1
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.



[root@localhost ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Sat Sep 14 13:18:49 2013
Raid Level : raid5
Array Size : 2084864 (2036.34 MiB 2134.90 MB)
Used Dev Size : 1042432 (1018.17 MiB 1067.45 MB)
Raid Devices : 3
Total Devices : 3
Persistence : Superblock is persistent

Update Time : Sat Sep 14 13:18:58 2013
State : clean
Active Devices : 3
Working Devices : 3
Failed Devices : 0
Spare Devices : 0

Layout : left-symmetric
Chunk Size : 256K

Name : localhost.localdomain:0 (local to host localhost.localdomain)
UUID : dffbb2dd:a8b56aa5:868e9232:a4d37764
Events : 17

Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 33 1 active sync /dev/sdc1
2 8 49 2 active sync /dev/sdd1



[root@localhost ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdd1[2] sdc1[1] sdb1[0]
2084864 blocks super 1.2 level 5, 256k chunk, algorithm 2 [3/3] [UUU]

unused devices:
-l5 がRAID5を指定、-n3はアレイに使うHDDの台数を指定、-c256はチャンクサイズを256KBに指定、-fの後ろに使用するデバイスファイル名を列挙する。


領域が無事に確保されたら、あとは通常通りファイルシステムを作成してマウントする。
[root@localhost ~]# mkfs.ext3 /dev/md0
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=64 blocks, Stripe width=128 blocks
130304 inodes, 521216 blocks
26060 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=536870912
16 block groups
32768 blocks per group, 32768 fragments per group
8144 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912

Writing inode tables: done
Creating journal (8192 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.


[root@localhost mnt]# mount /dev/md0 /mnt/hoge
[root@localhost mnt]# mount
/dev/mapper/VolGroup-lv_root on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
/dev/md0 on /mnt/hoge type ext3 (rw)


[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
6.5G 927M 5.2G 15% /
tmpfs 250M 0 250M 0% /dev/shm
/dev/sda1 485M 50M 411M 11% /boot
/dev/md0 2.0G 41M 1.9G 3% /mnt/hoge
1GBのHDD3台でRAID5を組んでいるので使用可能な容量は2GBになっている。


問題ないようなので再起動時にもRAID領域が自動的に認識されるように /etc/mdadm.conf を用意しておく。といっても、mdadmの出力をファイルに書いておくくらい。
[root@localhost ~]# mdadm -E --scan
ARRAY /dev/md/0 metadata=1.2 UUID=dffbb2dd:a8b56aa5:868e9232:a4d37764 name=localhost.localdomain:0


[root@localhost ~]# cat /etc/mdadm.conf
DEVICE partitions
ARRAY /dev/md/0 metadata=1.2 UUID=dffbb2dd:a8b56aa5:868e9232:a4d37764 name=localhost.localdomain:0


[root@localhost ~]# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Sat Sep 14 11:56:56 2013
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/VolGroup-lv_root / ext4 defaults 1 1
UUID=bb799be5-4b48-4cdb-9305-ac0fb274e4fc /boot ext4 defaults 1 2
/dev/mapper/VolGroup-lv_swap swap swap defaults 0 0
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 /mnt/hoge ext3 defaults 0 0
これで再起動時にもRAIDが認識されて、マウントまでしてくれる。


アレイにHDDを追加して領域を拡張する RAID5 @HDD4台


新たにHDDを購入してきたというシーンを想定して、アレイにHDDを追加する。
[root@localhost ~]# mdadm --manage /dev/md0 --add /dev/sde1
mdadm: added /dev/sde1


[root@localhost ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sde1[3](S) sdc1[1] sdd1[2] sdb1[0]
2084864 blocks super 1.2 level 5, 256k chunk, algorithm 2 [3/3] [UUU]

unused devices:



[root@localhost ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Sat Sep 14 13:18:49 2013
Raid Level : raid5
Array Size : 2084864 (2036.34 MiB 2134.90 MB)
Used Dev Size : 1042432 (1018.17 MiB 1067.45 MB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent

Update Time : Sat Sep 14 13:45:02 2013
State : clean
Active Devices : 3
Working Devices : 4
Failed Devices : 0
Spare Devices : 1

Layout : left-symmetric
Chunk Size : 256K

Name : localhost.localdomain:0 (local to host localhost.localdomain)
UUID : dffbb2dd:a8b56aa5:868e9232:a4d37764
Events : 18

Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 33 1 active sync /dev/sdc1
2 8 49 2 active sync /dev/sdd1

3 8 65 - spare /dev/sde1
/dev/sde1 が spare としてアレイに追加されたことが分かる。
spareというのは文字からなんとなく分かる通り、故障に備えてスタンバっているスペアのこと。
アレイに属しているものの実際には使用されていない状態なので、使用するにはアレイに組み込む処置が必要。



[root@localhost ~]# mdadm --grow /dev/md0 -n4
mdadm: Need to backup 1536K of critical section..


[root@localhost ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Sat Sep 14 13:18:49 2013
Raid Level : raid5
Array Size : 2084864 (2036.34 MiB 2134.90 MB)
Used Dev Size : 1042432 (1018.17 MiB 1067.45 MB)
Raid Devices : 4
Total Devices : 4
Persistence : Superblock is persistent

Update Time : Sat Sep 14 13:47:50 2013
State : clean, reshaping
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0

Layout : left-symmetric
Chunk Size : 256K

Reshape Status : 20% complete
Delta Devices : 1, (3->4)

Name : localhost.localdomain:0 (local to host localhost.localdomain)
UUID : dffbb2dd:a8b56aa5:868e9232:a4d37764
Events : 41

Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 33 1 active sync /dev/sdc1
2 8 49 2 active sync /dev/sdd1
3 8 65 3 active sync /dev/sde1
/dev/sde1 がアレイに参加したことがわかる。ただし、追加直後はアレイの再構築の処理がしばらく続く(上記のReshape Status : 20% completeを見てもわかる)ので、/proc/mdstat を見て処理の進み具合を眺めるべし。


[root@localhost ~]# cat /proc/mdstat 
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sde1[3] sdc1[1] sdd1[2] sdb1[0]
2084864 blocks super 1.2 level 5, 256k chunk, algorithm 2 [4/4] [UUUU]
[==========>..........] reshape = 51.8% (540928/1042432) finish=0.8min speed=10112K/sec

unused devices:


[root@localhost ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Sat Sep 14 13:18:49 2013
Raid Level : raid5
Array Size : 3127296 (2.98 GiB 3.20 GB)
Used Dev Size : 1042432 (1018.17 MiB 1067.45 MB)
Raid Devices : 4
Total Devices : 4
Persistence : Superblock is persistent

Update Time : Sat Sep 14 13:48:54 2013
State : clean
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0

Layout : left-symmetric
Chunk Size : 256K

Name : localhost.localdomain:0 (local to host localhost.localdomain)
UUID : dffbb2dd:a8b56aa5:868e9232:a4d37764
Events : 49

Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 33 1 active sync /dev/sdc1
2 8 49 2 active sync /dev/sdd1
3 8 65 3 active sync /dev/sde1
再構築が済むと気兼ねなく使用可能になる。


RAID領域の準備が整ったらあとはファイルシステムを伸ばして完了です。
[root@localhost ~]# umount /mnt/hoge
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
6.5G 927M 5.2G 15% /
tmpfs 250M 0 250M 0% /dev/shm
/dev/sda1 485M 50M 411M 11% /boot




[root@localhost ~]# fsck.ext3 -f /dev/md0
e2fsck 1.41.12 (17-May-2010)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/md0: 109/130304 files (0.9% non-contiguous), 18679/521216 blocks

[root@localhost ~]# resize2fs /dev/md0
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/md0 to 781824 (4k) blocks.
The filesystem on /dev/md0 is now 781824 blocks long.


[root@localhost ~]# mount -a
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
6.5G 927M 5.2G 15% /
tmpfs 250M 0 250M 0% /dev/shm
/dev/sda1 485M 50M 411M 11% /boot
/dev/md0 3.0G 41M 2.8G 2% /mnt/hoge
無事に3GBの領域がマウントされました。


HDDの喪失時にどうなるか試してみる RAID5 @HDD5台


まず、RAID5をHDD4台で構成し、もう1台をスペアで待機させた状態にする。
[root@localhost ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Sat Sep 14 13:18:49 2013
Raid Level : raid5
Array Size : 3127296 (2.98 GiB 3.20 GB)
Used Dev Size : 1042432 (1018.17 MiB 1067.45 MB)
Raid Devices : 4
Total Devices : 5
Persistence : Superblock is persistent

Update Time : Sat Sep 14 13:53:16 2013
State : clean
Active Devices : 4
Working Devices : 5
Failed Devices : 0
Spare Devices : 1

Layout : left-symmetric
Chunk Size : 256K

Name : localhost.localdomain:0 (local to host localhost.localdomain)
UUID : dffbb2dd:a8b56aa5:868e9232:a4d37764
Events : 50

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

4 8 81 - spare /dev/sdf1



mdadmコマンドで /dev/sdb1 に故障フラグをたててみる
[root@localhost ~]# mdadm /dev/md0 -f /dev/sdb1
mdadm: set /dev/sdb1 faulty in /dev/md0
[root@localhost ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Sat Sep 14 13:18:49 2013
Raid Level : raid5
Array Size : 3127296 (2.98 GiB 3.20 GB)
Used Dev Size : 1042432 (1018.17 MiB 1067.45 MB)
Raid Devices : 4
Total Devices : 5
Persistence : Superblock is persistent

Update Time : Sat Sep 14 14:28:26 2013
State : clean, degraded, recovering
Active Devices : 3
Working Devices : 4
Failed Devices : 1
Spare Devices : 1

Layout : left-symmetric
Chunk Size : 256K

Rebuild Status : 90% complete

Name : localhost.localdomain:0 (local to host localhost.localdomain)
UUID : dffbb2dd:a8b56aa5:868e9232:a4d37764
Events : 66

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

0 8 17 - faulty spare /dev/sdb1
/dev/sdb1 が faulty になりアレイから外され、代わりに /dev/sdf1 が参加、現在再構築中。ということが分かる。
再構築中も、RAIDの保護は受けられないがファイルシステムとしては使用は可能。怖いけどね。
再構築が終われば、RAIDの保護を受けられる。



次は、mdadmコマンドを使わず、いきなりHDDが消え去ったとする。出来ればOS起動中にHDDを取り外す、というのをやってみたかったがVirtualBoxでどうやればいいのか分からなかったので、とりあえずOSを1度シャットダウンし、HDDを一台外してからOSを立ち上げてみることにした。
mdadm.png NewHardDisk3.vdi を取り外した
[root@localhost ~]# mdadm -D /dev/md0                                                                                     
/dev/md0:
Version : 1.2
Creation Time : Sat Sep 14 13:18:49 2013
Raid Level : raid5
Array Size : 3127296 (2.98 GiB 3.20 GB)
Used Dev Size : 1042432 (1018.17 MiB 1067.45 MB)
Raid Devices : 4
Total Devices : 4
Persistence : Superblock is persistent

Update Time : Sat Sep 14 14:37:58 2013
State : clean
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0

Layout : left-symmetric
Chunk Size : 256K

Name : localhost.localdomain:0 (local to host localhost.localdomain)
UUID : dffbb2dd:a8b56aa5:868e9232:a4d37764
Events : 93

Number Major Minor RaidDevice State
4 8 65 0 active sync /dev/sde1
1 8 33 1 active sync /dev/sdc1
5 8 17 2 active sync /dev/sdb1
3 8 49 3 active sync /dev/sdd1
起動時に多少時間がかかったかな?という感触はあったものの、特になにもせずにOSは起動した。起動後すぐにステータスを見てみたが、すでに再構築は済んでいた。OSの起動中に再構築を待っていたのか? とにかく人の手を借りずに復帰出来ることは分かった。


mdadmのソフトウェアRAIDをお引っ越しさせる


OSの起動が出来なくなった場合、別のマシンに移設して問題なくデータが読めるかどうか?
VirtualBoxで別の仮想マシンを作成しCentOSをセットアップする。既存の仮想マシンのコピーではなく、新規にセットアップした。
そこにmdadmをyumしてHDD4台を接続してみた。
[root@localhost ~]# mdadm -D /dev/md127
/dev/md127:
Version : 1.2
Creation Time : Sat Sep 14 13:18:49 2013
Raid Level : raid5
Array Size : 3127296 (2.98 GiB 3.20 GB)
Used Dev Size : 1042432 (1018.17 MiB 1067.45 MB)
Raid Devices : 4
Total Devices : 4
Persistence : Superblock is persistent

Update Time : Sat Sep 14 14:43:12 2013
State : clean
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0

Layout : left-symmetric
Chunk Size : 256K

Name : localhost.localdomain:0 (local to host localhost.localdomain)
UUID : dffbb2dd:a8b56aa5:868e9232:a4d37764
Events : 93

Number Major Minor RaidDevice State
4 8 65 0 active sync /dev/sde1
1 8 33 1 active sync /dev/sdc1
5 8 17 2 active sync /dev/sdb1
3 8 49 3 active sync /dev/sdd1
すんなり認識された。しかしなぜかデバイスファイル名は /dev/md127 になっている。なんかキモチガワルイので /dev/md0 に戻したい。


[root@localhost ~]# mdadm --stop /dev/md127
mdadm: stopped /dev/md127

[root@localhost ~]# mdadm -A /dev/md0 /dev/sd[bcde]1
mdadm: /dev/md0 has been started with 4 drives.

[root@localhost ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Sat Sep 14 13:18:49 2013
Raid Level : raid5
Array Size : 3127296 (2.98 GiB 3.20 GB)
Used Dev Size : 1042432 (1018.17 MiB 1067.45 MB)
Raid Devices : 4
Total Devices : 4
Persistence : Superblock is persistent

Update Time : Sat Sep 14 14:43:12 2013
State : clean
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0

Layout : left-symmetric
Chunk Size : 256K

Name : localhost.localdomain:0 (local to host localhost.localdomain)
UUID : dffbb2dd:a8b56aa5:868e9232:a4d37764
Events : 93

Number Major Minor RaidDevice State
4 8 65 0 active sync /dev/sde1
1 8 33 1 active sync /dev/sdc1
5 8 17 2 active sync /dev/sdb1
3 8 49 3 active sync /dev/sdd1
mdadm --stop でRAIDを停止させたあと、 /dev/md0 としてアセンブルしてみたところ、なんとか /dev/md0 として入った。

しかし、この後再起動してみるとまた /dev/md127 に戻ってしまった。別の手法が必要だ。


どうやら、 /etc/mdadm.conf にnameやらmetadataやらが書いてあると、場合によっては /dev/md127 にしてしまうクセがあるようだ。これを解決するにはnameやらmetadataやらを除外した /etc/mdadm.conf を用意してやればよい。らしい。
[root@localhost ~]# echo "DEVICE partitions" > /etc/mdadm.conf
[root@localhost ~]# mdadm -E --scan >> /etc/mdadm.conf
[root@localhost ~]# emacs /etc/mdadm.conf
[root@localhost ~]# cat /etc/mdadm.conf
DEVICE partitions
ARRAY /dev/md0 UUID=dffbb2dd:a8b56aa5:868e9232:a4d37764


[root@localhost ~]# df -h
Filesystem Size Used Avail Use% マウント位置
/dev/mapper/VolGroup-lv_root
6.5G 925M 5.2G 15% /
tmpfs 250M 0 250M 0% /dev/shm
/dev/sda1 485M 50M 411M 11% /boot
/dev/md0 3.0G 41M 2.8G 2% /mnt/fuga
再起動しても /dev/md0 として認識されるようになった。



というわけで、mdadmの味見はオワリ。
RAID5の作成、拡張、スペア追加、故障時の動き、引っ越し時の処理など、とりあえず問題無さそうなので、機会を見てLVMからmdadmに移行してみようかなぁ・・・どうしようかな。

 
コメント












管理者にだけ表示を許可する
トラックバック
トラックバックURL:
http://wbbwbb.blog83.fc2.com/tb.php/140-8fe08a1b
≪ トップページへこのページの先頭へ  ≫