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
結構気軽に試せるので、いろいろやってみるのも面白いと思います。
今日はこんな所で。