mdadmコマンドあれこれ
mdadmコマンドを使ったソフトウェアRAIDの作成方法に関して
備忘録も兼ねて書いてみることします。
といいつつ、自宅にはそんなに沢山ハードディスクは転がっていないので、
再びループバックデバイスを使って、ローカルディスク上に環境を作る方法で行います。
事前準備
ループバックデバイスを用意しておくことにします。
loop7まで用意しておきます。
# dd if=/dev/zero of=loop1.img bs=1024 count=100000 # losetup /dev/loop1 loop1.img # dd if=/dev/zero of=loop2.img bs=1024 count=100000 # losetup /dev/loop2 loop2.img # dd if=/dev/zero of=loop3.img bs=1024 count=100000 # losetup /dev/loop3 loop3.img # dd if=/dev/zero of=loop4.img bs=1024 count=100000 # losetup /dev/loop4 loop4.img # dd if=/dev/zero of=loop5.img bs=1024 count=100000 # losetup /dev/loop5 loop5.img # dd if=/dev/zero of=loop6.img bs=1024 count=100000 # losetup /dev/loop6 loop6.img # dd if=/dev/zero of=loop7.img bs=1024 count=100000 # losetup /dev/loop7 loop7.img
RAIDのモードをいろいろ試す
いろいろやってみます。
リニアモード
複数のハードディスクパーティションを論理的にひとつのパーティションにします。
あんまり使うことはないかもしれません。
下は2つのパーティションをリニアモードで設定した例です。
# mdadm --create /dev/md1 -l linear -n 2 /dev/loop1 /dev/loop2 mdadm: array /dev/md1 started.
設定した直後の「/proc/mdstat」です。
# cat /proc/mdstat
Personalities : [linear]
md1 : active linear loop2[1] loop1[0]
199808 blocks 64k rounding
unused devices: <none>
ファイルシステムを作成してマウントしてみます。
2つのイメージファイルをまとめたので、約200MBの容量になっています。
# mkfs.ext3 /dev/md1
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
50000 inodes, 199808 blocks
9990 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67371008
25 block groups
8192 blocks per group, 8192 fragments per group
2000 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 35 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
# mount /dev/md1 /mnt
# df -k
Filesystem 1K-ブロック 使用 使用可 使用% マウント位置
/dev/sda3 5734416 3146188 2292232 58% /
/dev/sda1 101086 17055 78812 18% /boot
tmpfs 257652 0 257652 0% /dev/shm
/dev/md1 193495 5664 177841 4% /mnt
RAID0
RAID0を組む例です。
# mdadm --create /dev/md1 -l raid0 -n 2 /dev/loop1 /dev/loop2 mdadm: array /dev/md1 started.
設定した直後の「/proc/mdstat」です。
# cat /proc/mdstat
Personalities : [linear] [raid0]
md1 : active raid0 loop2[1] loop1[0]
199808 blocks 64k chunks
unused devices: <none>
ファイルシステムを作成してマウントします。
# mkfs.ext3 /dev/md1
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
50000 inodes, 199808 blocks
9990 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67371008
25 block groups
8192 blocks per group, 8192 fragments per group
2000 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 26 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
# mount /dev/md1 /mnt
# df -k
Filesystem 1K-ブロック 使用 使用可 使用% マウント位置
/dev/sda3 5734416 3146200 2292220 58% /
/dev/sda1 101086 17055 78812 18% /boot
tmpfs 257652 0 257652 0% /dev/shm
/dev/md1 193495 5664 177841 4% /mnt
RAID1
今度はRAID1(ミラーリング)です。
# mdadm --create /dev/md1 -l raid1 -n 2 /dev/loop1 /dev/loop2 mdadm: array /dev/md1 started.
設定した直後の「/proc/mdstat」です。
# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 loop2[1] loop1[0]
99904 blocks [2/2] [UU]
unused devices: <none>
同様にファイルシステムを作成してマウントします。
# mkfs.ext3 /dev/md1
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
25064 inodes, 99904 blocks
4995 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67371008
13 block groups
8192 blocks per group, 8192 fragments per group
1928 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 22 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
# mount /dev/md1 /mnt
# df -k
Filesystem 1K-ブロック 使用 使用可 使用% マウント位置
/dev/sda3 5734416 3144708 2293712 58% /
/dev/sda1 101086 17055 78812 18% /boot
tmpfs 257652 0 257652 0% /dev/shm
/dev/md1 96732 5664 86073 7% /mnt
RAID5
同様にRAID5です。
# mdadm --create /dev/md1 -l raid5 -n 3 /dev/loop1 /dev/loop2 /dev/loop3 mdadm: array /dev/md1 started.
設定した直後の「/proc/mdstat」です。
# cat /proc/mdstat
Personalities : [raid1] [raid6] [raid5] [raid4]
md1 : active raid5 loop3[2] loop2[1] loop1[0]
199808 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]
unused devices: <none>
ファイルシステムを作成してマウントします。
# mkfs.ext3 /dev/md1
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
50000 inodes, 199808 blocks
9990 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67371008
25 block groups
8192 blocks per group, 8192 fragments per group
2000 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729
Writing inode tables: done
Creating journal (4096 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.
# mount /dev/md1 /mnt
# df -k
Filesystem 1K-ブロック 使用 使用可 使用% マウント位置
/dev/sda3 5734416 3146352 2292068 58% /
/dev/sda1 101086 17055 78812 18% /boot
tmpfs 257652 0 257652 0% /dev/shm
/dev/md1 193495 5664 177841 4% /mnt
RAID6
続いてRAID6です。
# mdadm --create /dev/md1 -l raid6 -n 4 /dev/loop1 /dev/loop2 /dev/loop3 /dev/loop4 mdadm: array /dev/md1 started.
設定した直後の「/proc/mdstat」です。
# cat /proc/mdstat
Personalities : [raid1] [raid6] [raid5] [raid4] [raid10]
md1 : active raid6 loop4[3] loop3[2] loop2[1] loop1[0]
199808 blocks level 6, 64k chunk, algorithm 2 [4/4] [UUUU]
ファイルシステムを作成してマウントします。
# mkfs.ext3 /dev/md1
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
50000 inodes, 199808 blocks
9990 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67371008
25 block groups
8192 blocks per group, 8192 fragments per group
2000 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 31 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
# mount /dev/md1 /mnt
# df -k
Filesystem 1K-ブロック 使用 使用可 使用% マウント位置
/dev/sda3 5734416 3146364 2292056 58% /
/dev/sda1 101086 17055 78812 18% /boot
tmpfs 257652 0 257652 0% /dev/shm
/dev/md1 193495 5664 177841 4% /mnt
RAID10
RAID10です。
# mdadm --create /dev/md1 -l raid10 -n 4 /dev/loop1 /dev/loop2 /dev/loop3 /dev/loop4 mdadm: array /dev/md1 started.>||
設定した直後の「/proc/mdstat」です。
# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4] [raid10]
md1 : active raid10 loop4[3] loop3[2] loop2[1] loop1[0]
199808 blocks 64K chunks 2 near-copies [4/4] [UUUU]
unused devices: <none>
ファイルシステムを作ってマウントします。
#mkfs.ext3 /dev/md1
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
50000 inodes, 199808 blocks
9990 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67371008
25 block groups
8192 blocks per group, 8192 fragments per group
2000 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 25 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
# mount /dev/md1 /mnt
# df -k
Filesystem 1K-ブロック 使用 使用可 使用% マウント位置
/dev/sda3 5734416 3146428 2291992 58% /
/dev/sda1 101086 17055 78812 18% /boot
tmpfs 257652 0 257652 0% /dev/shm
/dev/md1 193495 5664 177841 4% /mnt
スペアデバイスについて
スペアデバイスの設定も出来るわけです。「-x」オプションで指定すればOK
下はRAID5でスペアを1つとした場合です。
# mdadm --create /dev/md1 -l raid5 -n 3 /dev/loop1 /dev/loop2 /dev/loop3 -x 1 /dev/loop4 mdadm: array /dev/md1 started.
スペアデバイスとした「/dev/loop4」に対して(S)マークがついてます。
# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md1 : active raid5 loop3[2] loop4[3](S) loop2[1] loop1[0]
199808 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]
unused devices: <none>
RAIDデバイスの詳細は「mdadm --misc -D [デバイス名]」で表示されます。
# mdadm --misc -D /dev/md1
/dev/md1:
Version : 0.90
Creation Time : Sun Oct 10 08:15:31 2010
Raid Level : raid5
Array Size : 199808 (195.16 MiB 204.60 MB)
Used Dev Size : 99904 (97.58 MiB 102.30 MB)
Raid Devices : 3
Total Devices : 4
Preferred Minor : 1
Persistence : Superblock is persistent
Update Time : Sun Oct 10 08:17:14 2010
State : clean
Active Devices : 3
Working Devices : 4
Failed Devices : 0
Spare Devices : 1
Layout : left-symmetric
Chunk Size : 64K
UUID : 8cbf7a7b:73ef83cc:36ba3bbe:9568c19c
Events : 0.2
Number Major Minor RaidDevice State
0 7 1 0 active sync /dev/loop1
1 7 2 1 active sync /dev/loop2
2 7 3 2 active sync /dev/loop3
3 7 4 - spare /dev/loop4
デバイスの取り外し
ディスクする必要が出てきたなどで、デバイスを交換する場合は、まず「-f」オプションで不良マークをつけます。
その後、「-r」オプション該当するデバイスを取り外します。
再度追加する場合は「-a」オプションです。
ちなみに今回はOSの再起動が発生しないことを前提にやっています。
OS起動時に再度RAIDデバイスを有効にするには「/etc/mdadm.conf」などに設定が必要になります。
(こちらはまた折を見てまとめてみようと思います)
さて、下の例は先ほどスペアデバイスを1つ含めたRAID5の例です。
不良マークを付けたタイミングでスペアデバイスが有効になり、同期がかかっています。
# mdadm --manage /dev/md1 -f /dev/loop2
mdadm: set /dev/loop2 faulty in /dev/md1
# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md1 : active raid5 loop3[2] loop4[3] loop2[4](F) loop1[0]
199808 blocks level 5, 64k chunk, algorithm 2 [3/2] [U_U]
[=>...................] recovery = 9.1% (9728/99904) finish=0.4min speed=3242K/sec
unused devices: <none>
# mdadm --misc -D /dev/md1
/dev/md1:
Version : 0.90
Creation Time : Sun Oct 10 08:15:31 2010
Raid Level : raid5
Array Size : 199808 (195.16 MiB 204.60 MB)
Used Dev Size : 99904 (97.58 MiB 102.30 MB)
Raid Devices : 3
Total Devices : 4
Preferred Minor : 1
Persistence : Superblock is persistent
Update Time : Sun Oct 10 09:07:25 2010
State : clean, degraded, recovering
Active Devices : 2
Working Devices : 3
Failed Devices : 1
Spare Devices : 1
Layout : left-symmetric
Chunk Size : 64K
Rebuild Status : 45% complete
UUID : 8cbf7a7b:73ef83cc:36ba3bbe:9568c19c
Events : 0.4
Number Major Minor RaidDevice State
0 7 1 0 active sync /dev/loop1
3 7 4 1 spare rebuilding /dev/loop4
2 7 3 2 active sync /dev/loop3
4 7 2 - faulty spare /dev/loop2
取り外します。
# mdadm --manage /dev/md1 -r /dev/loop2
mdadm: hot removed /dev/loop2
# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md1 : active raid5 loop3[2] loop4[1] loop1[0]
199808 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]
unused devices: <none>
# mdadm --misc -D /dev/md1
/dev/md1:
Version : 0.90
Creation Time : Sun Oct 10 08:15:31 2010
Raid Level : raid5
Array Size : 199808 (195.16 MiB 204.60 MB)
Used Dev Size : 99904 (97.58 MiB 102.30 MB)
Raid Devices : 3
Total Devices : 3
referred Minor : 1
Persistence : Superblock is persistent
Update Time : Sun Oct 10 09:52:01 2010
State : clean
Active Devices : 3
Working Devices : 3
Failed Devices : 0
Spare Devices : 0
Layout : left-symmetric
Chunk Size : 64K
UUID : 8cbf7a7b:73ef83cc:36ba3bbe:9568c19c
Events : 0.12
Number Major Minor RaidDevice State
0 7 1 0 active sync /dev/loop1
1 7 4 1 active sync /dev/loop4
2 7 3 2 active sync /dev/loop3
「/dev/loop5」を代わりに追加します。
# mdadm --manage /dev/md1 -a /dev/loop5
mdadm: added /dev/loop5
# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md1 : active raid5 loop5[3](S) loop3[2] loop4[1] loop1[0]
199808 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]
unused devices: <none>
# mdadm --misc -D /dev/md1
/dev/md1:
Version : 0.90
Creation Time : Sun Oct 10 08:15:31 2010
Raid Level : raid5
Array Size : 199808 (195.16 MiB 204.60 MB)
Used Dev Size : 99904 (97.58 MiB 102.30 MB)
Raid Devices : 3
Total Devices : 4
Preferred Minor : 1
Persistence : Superblock is persistent
Update Time : Sun Oct 10 09:52:01 2010
State : clean
Active Devices : 3
Working Devices : 4
Failed Devices : 0
Spare Devices : 1
Layout : left-symmetric
Chunk Size : 64K
UUID : 8cbf7a7b:73ef83cc:36ba3bbe:9568c19c
Events : 0.12
Number Major Minor RaidDevice State
0 7 1 0 active sync /dev/loop1
1 7 4 1 active sync /dev/loop4
2 7 3 2 active sync /dev/loop3
3 7 5 - spare /dev/loop5
結構気軽に試せるので、いろいろやってみるのも面白いと思います。
今日はこんな所で。