さていよいよ最終的にはでかいRAID 6のアレイに育てるアレイを作ります。まず外したアレイのメンバだった2.0TBのディスクを全体で1つパーティションを切ります。(全体なので切らなくてもいいような気もしますが、これより大きいディスクでサイズをあわせやすくするために一応切っておきます。)そして3.0TBのディスクはシステム部分が入っているとはいえ2.0TB以上あまっているので、ここに同じサイズのパーティションを作成しました。
(parted) unit b
(parted) print
Model: ATA WDC WD30EZRX-00D (scsi)
Disk /dev/sde: 3000592982016B
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Number Start End Size File system Name Flags
1 1048576B 537919487B 536870912B ext4 raid
2 537919488B 275415826431B 274877906944B raid
3 275415826432B 2275813621759B 2000397795328B raid
(parted) select /dev/sdf
Using /dev/sdf
(parted) print
Model: ATA WDC WD20EARX-00P (scsi)
Disk /dev/sdf: 2000398934016B
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Number Start End Size File system Name Flags
1 1048576B 2000398843903B 2000397795328B raid
このように1バイト単位まで同じです。さていよいよ「ディスク2本のRAID 5」は作れるのか!?
# mdadm --create /dev/md5 --level=5 --raid-devices=2 /dev/sde3 /dev/sdf1
mdadm: /dev/sdf1 appears to be part of a raid array:
level=raid1 devices=2 ctime=Tue Jan 1 10:32:54 2013
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md5 started.
# cat /proc/mdstat
Personalities : [raid0] [raid1] [raid6] [raid5] [raid4]
md5 : active raid5 sdf1[2] sde3[0]
1953381888 blocks super 1.2 level 5, 512k chunk, algorithm 2 [2/1] [U_]
[>....................] recovery = 0.1% (3436876/1953381888) finish=389.9min speed=83342K/sec
むむっ、拍子抜けするぐらい普通に作れたんですけどw あ、小さい領域で実験してからにすべきだったか・・・。しかも2.0TB2本で389分ということは、6本全部構成し終わったらresyncに1200分、つまり20時間かかる計算!?w
というわけで、20時間待って失敗は悲しいので、小さい領域で実験してみることにしました。まずは4つパーティションを用意します。
(parted) unit gib
(parted) mkpart primary 1 2
(parted) mkpart primary 2 3
(parted) mkpart primary 3 4
(parted) mkpart primary 4 5
(parted) set 1 raid on
(parted) print
モデル: ATA M4-CT128M4SSD2 (scsi)
ディスク /dev/sdd: 119GiB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos
番号 開始 終了 サイズ タイプ ファイルシステム フラグ
1 1.00GiB 2.00GiB 1.00GiB primary raid
2 2.00GiB 3.00GiB 1.00GiB primary raid
3 3.00GiB 4.00GiB 1.00GiB primary raid
4 4.00GiB 5.00GiB 1.00GiB primary raid
違うマシンでやったのでロケールが日本語になってますがご容赦を。さてパーティションは切れたので早速RAID 5のアレイを作ってみます。実際と同様に2台です。
# mdadm --create /dev/md0 --level=5 --raid-devices=2 /dev/sdd1
/dev/sdd2
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
# cat /proc/mdstat
Personalities : [raid1] [raid0] [raid6] [raid5] [raid4]
md0 : active raid5 sdd2[2] sdd1[0]
1047552 blocks super 1.2 level 5, 512k chunk, algorithm 2 [2/1] [U_]
[====>................] recovery = 24.1% (253736/1047552) finish=0.1min
speed=84578K/sec
# mkfs.ext4 /dev/md0
# mount /dev/md0 /mnt/tmp
ファイルシステムも作ってマウントしました。念のためということでそこにランダムなデータのファイルを作り、それを別のパーティションにもコピーしておきます。
# dd if=/dev/urandom of=random.dat count=1800000
$ cp /mnt/tmp/random.dat .
さあ準備はできたのでいよいよ1パーティション壊してみましょう。まずは fail にしてから remove です。
# mdadm --fail /dev/md0 /dev/sdd2
mdadm: set /dev/sdd2 faulty in /dev/md0
# cat /proc/mdstat
Personalities : [raid1] [raid0] [raid6] [raid5] [raid4]
md0 : active raid5 sdd2[2](F) sdd1[0]
1047552 blocks super 1.2 level 5, 512k chunk, algorithm 2 [2/1] [U_]
# mdadm --remove /dev/md0 /dev/sdd2
mdadm: hot removed /dev/sdd2 from /dev/md0
# cat /proc/mdstat
Personalities : [raid1] [raid0] [raid6] [raid5] [raid4]
md0 : active raid5 sdd1[0]
1047552 blocks super 1.2 level 5, 512k chunk, algorithm 2 [2/1] [U_]
無事抜けました。この状態でも degraded ですが動いている(はず)。さっきコピーしておいたファイルとマウントしているところにあるファイルを比べてみると
$ diff random.dat /mnt/tmp/random.dat
$
おお、問題なさそうですね!念のためその外したディスクは別のデータで上書きしてみます。
# mkfs.ext4 /dev/sdd2
# mount /dev/sdd2 /mnt/tmp2
# ls /mnt/tmp2/
lost+found
$ diff random.dat /mnt/tmp/random.dat
$
やはり問題はないです。すばらしい。
さていよいよ本題のRAID 6への変換です。
先ほど外したパーティションを戻してから、さらに2つのパーティションを追加します。
# umount /mnt/tmp2
# mdadm --add /dev/md0 /dev/sdd2
mdadm: added /dev/sdd2
# cat /proc/mdstat
Personalities : [raid1] [raid0] [raid6] [raid5] [raid4]
md0 : active raid5 sdd2[2] sdd1[0]
1047552 blocks super 1.2 level 5, 512k chunk, algorithm 2 [2/1] [U_]
[=============>.......] recovery = 68.6% (720256/1047552) finish=0.0min
speed=102893K/sec
# mdadm --add /dev/md0 /dev/sdd[34]
mdadm: added /dev/sdd3
mdadm: added /dev/sdd4
# cat /proc/mdstat
Personalities : [raid1] [raid0] [raid6] [raid5] [raid4]
md0 : active raid5 sdd4[4](S) sdd3[3](S) sdd2[2] sdd1[0]
1047552 blocks super 1.2 level 5, 512k chunk, algorithm 2 [2/2] [UU]
# mdadm --detail /dev/md0
/dev/md0:
Number Major Minor RaidDevice State
0 8 49 0 active sync /dev/sdd1
2 8 50 1 active sync /dev/sdd2
3 8 51 - spare /dev/sdd3
4 8 52 - spare /dev/sdd4
はい。2台追加されてスペアとなっています。これを4台のRAID 6に・・・と思ったらエラーになりました。1台ずつしかできないのかな?とにかく1台ずつ行きます。3台ではまだRAID 6にできないので、まずは3台のRAID 5にします。
# mdadm --grow /dev/md0 --raid-devices=3
mdadm: Need to backup 1024K of critical section..
# cat /proc/mdstat
Personalities : [raid1] [raid0] [raid6] [raid5] [raid4]
md0 : active raid5 sdd4[4] sdd3[3](S) sdd2[2] sdd1[0]
1047552 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
[=====>...............] reshape = 26.1% (273920/1047552) finish=0.4min
speed=30321K/sec
なんか Need to backup... って言われたのでコマンドはrejectされたのかと思いきや普通にRAID 5への変換が行われました。いいねいいね。終わったらいよいよRAID 6への変換です。
# mdadm --grow /dev/md0 --level=6 --raid-devices=4
mdadm: level of /dev/md0 changed to raid6
mdadm: /dev/md0: Cannot grow - need backup-file
mdadm: aborting level change
おお、今度はちゃんとrejectされました。バックアップファイルを指定して再実行です。
# mdadm --grow /dev/md0 --level=6 --raid-devices=4
--backup-file=/home/raid.back
mdadm: level of /dev/md0 changed to raid6
# cat /proc/mdstat
Personalities : [raid1] [raid0] [raid6] [raid5] [raid4]
md0 : active raid6 sdd4[4] sdd3[3] sdd2[2] sdd1[0]
2095104 blocks super 1.2 level 6, 512k chunk, algorithm 18 [4/3] [UUU_]
[>....................] reshape = 1.5% (16384/1047552) finish=2.0min
speed=8192K/sec
すばらしい。うまくいきました。
でもこれってつまり2台追加するときは2回 reshape するってことよね。2.0TBが2台で6時間として、3台は9時間、4台は12時間、5台は15時間、6台が18時間、それぞれ全部やらないといけないということは合計39時間w