2013年12月2日月曜日

mdadmを使ったソフトウェアRAID1+0の実装。

mdadmを使って、RAID1+0を実装する

今回、RAIDレベル1+0(RAID10)の実装に伴い、事前にHDDを4台追加してあります。[sdb, sdc, sdd, sde]
これらの追加されたHDDのパーティションの作成などは割愛しています。(`・ω・´)
構築は、VMware上にインストールされたUbuntu12.x系で行っています。

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    20971519    10484736   fd  Linux raid autodetect
/dev/sdc1            2048    20971519    10484736   fd  Linux raid autodetect
/dev/sdd1            2048    20971519    10484736   fd  Linux raid autodetect
/dev/sde1            2048    20971519    10484736   fd  Linux raid autodetect

RAIDレベル1+0でRAIDアレイの作成を行います。 (チャンクサイズなどは必要に応じて指定して下さい)

root@ubuntu:~# mdadm --create /dev/md0 -v --raid-devices=4 --level=raid10 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
mdadm: layout defaults to n2
mdadm: layout defaults to n2
mdadm: chunk size defaults to 512K
mdadm: size set to 10476032K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

次に、作成したRAIDアレイのデバイスが表示されているか、現在のRAIDの状態を確認して下さい。

root@ubuntu:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid10 sde1[3] sdd1[2] sdc1[1] sdb1[0]
      20952064 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]
      [=>...................]  resync =  5.7% (1200000/20952064) finish=1.3min spee

unused devices: <none>

root@ubuntu:~# mdadm --detail --scan
ARRAY /dev/md0 metadata=1.2 name=ubuntu:0 UUID=cd5e56a7:01b542d3:db3247f7:a58d628c
root@ubuntu:~# mdadm --detail /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Mon Dec  2 01:55:53 2013
     Raid Level : raid10
     Array Size : 20952064 (19.98 GiB 21.45 GB)
  Used Dev Size : 10476032 (9.99 GiB 10.73 GB)
   Raid Devices : 4
  Total Devices : 4
    Persistence : Superblock is persistent

    Update Time : Mon Dec  2 01:58:02 2013
          State : clean
 Active Devices : 4
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 0

         Layout : near=2
     Chunk Size : 512K

           Name : ubuntu:0  (local to host ubuntu)
           UUID : cd5e56a7:01b542d3:db3247f7:a58d628c
         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
       3       8       65        3      active sync   /dev/sde1

mdadm.confの編集

RAID設定ファイルの編集(デバイス情報の追加)
UUID値をmdadmの設定ファイル(mdadm.conf)に追記します。
青い文字部分が追記した設定です。

root@ubuntu:~# vi /etc/mdadm/mdadm.conf
# mdadm.conf
#
# Please refer to mdadm.conf(5) for information about this file.
#

# by default (built-in), scan all partitions (/proc/partitions) and all
# containers for MD superblocks. alternatively, specify devices to scan, using
# wildcards if desired.
#DEVICE partitions containers
DEVICE partitions

# auto-create devices with Debian standard permissions
CREATE owner=root group=disk mode=0660 auto=yes

# automatically tag new arrays as belonging to the local system
HOMEHOST <system>

# instruct the monitoring daemon where to send mail alerts
MAILADDR root

# definitions of existing MD arrays
ARRAY /dev/md0 level=raid10 num-devices=4 UUID=cd5e56a7:01b542d3:db3247f7:a58d628c

# This file was auto-generated on Sun, 01 Dec 2013 22:09:40 -0800
# by mkconf $Id$

"/etc/mdadm/mdadm.conf" 書込み

root@ubuntu:~# cat /proc/partitions
major minor  #blocks  name

  11        0    2868704 sr0
   8        0   10485760 sda
   8        1    9436160 sda1
   8        2          1 sda2
   8        5    1046528 sda5
   8       16   10485760 sdb
   8       17   10484736 sdb1
   8       32   10485760 sdc
   8       33   10484736 sdc1
   8       64   10485760 sde
   8       65   10484736 sde1
   8       48   10485760 sdd
   8       49   10484736 sdd1
   9        0   20952064 md0

ファイルシステムの作成

ファイルシステムの作成を行います。(例ではext4で作成しています)

root@ubuntu:~# mkfs.ext4 /dev/md0
mke2fs 1.42 (29-Nov-2011)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=128 blocks, Stripe width=256 blocks
1310720 inodes, 5238016 blocks
261900 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=0
160 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done


マウントディレクトリの作成とマウントの実行

今回はマウント先のディレクトリを/mnt/raid10aとしました。
以下の例では、デバイスのUUID値をblkidで取得し、作成したディレクトリへのマウント情報を/etc/fstabに書き込んでいます。
(vi以下は、青い文字部分が追記した設定です。)

root@ubuntu:~# mkdir /mnt/raid10a
root@ubuntu:~# blkid /dev/md0
/dev/md0: UUID="c276a9d0-32bb-02fe-7776-c61e52b7298a" UUID_SUB="4331c2dd-3f62-f9e8-YPE="linux_raid_member"
root@ubuntu:~# vi /etc/fstab

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc /proc           proc    nodev,noexec,nosuid      0       0
# / was on /dev/sda1 during installation
UUID=09ebc0d6-a6ed-4fe6-a4be-78c8a0985708  /               ext4    errors=remount-ro        0       1
# swap was on /dev/sda5 during installation
UUID=f30c3f89-ba4b-4987-afbe-dcdeb4388414 none             swap    sw                       0       0
# /mnt/raid10a was on /dev/md0 during installartion
UUID=ead6f8d1-83ad-4bb9-9ccc-204f72746728 /mnt/raid10a     ext4    errors=remount-ro        0       0
# /media/floppy0 was on /dev/fd0 during installation
/dev/fd0 /media/floppy0   auto    rw,user,noauto,exec,utf8 0       0

"/etc/fstab" 書込み


root@ubuntu:~# mount -a

mount -aコマンドを実行し、作成したfstabファイルをもとにマウントを実行しています。
マウント時にエラーが発生した場合は、fstabの設定情報を再度確認して下さい。
(デバイスを削除してやり直す場合はこちら)



最終確認

最後にdfコマンドでディスクを確認して終了とします。(*´ω`*)お疲れ様でした。

root@ubuntu:~# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       8.8G  1.1G  7.3G  13% /
udev            493M   12K  493M   1% /dev
tmpfs           201M  352K  201M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            502M     0  502M   0% /run/shm
/dev/md0         20G   44M   19G   1% /mnt/raid10a

/dev/md0 20G 44M 19G 1% /mnt/raid10aが、今回作成したRAID10のデバイスです。



ネストされたデバイスの削除

RAID10のネストされたデバイスを順に停止・解除している例。

root@ubuntu:~# mdadm --misc --stop /dev/md2
mdadm: stopped /dev/md2
root@ubuntu:~# mdadm --misc --stop /dev/md0
mdadm: stopped /dev/md0
root@ubuntu:~# mdadm --misc --stop /dev/md1
mdadm: stopped /dev/md1
root@ubuntu:~# mdadm --misc --zero-superblock /dev/sdb1
root@ubuntu:~# mdadm --misc --zero-superblock /dev/sdc1
root@ubuntu:~# mdadm --misc --zero-superblock /dev/sdd1
root@ubuntu:~# mdadm --misc --zero-superblock /dev/sde1
root@ubuntu:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
unused devices: <none>

RAID10のネストされたデバイスを先に停止させようとしてエラーとなっている例。c(・ω・`c⌒っ わたしがやりました。

root@ubuntu:~# mdadm --misc --stop /dev/md0
mdadm: Cannot get exclusive access to /dev/md0:Perhaps a running process, mounted filesystem or active volume group?
root@ubuntu:~# mdadm --misc --stop /dev/md1
mdadm: Cannot get exclusive access to /dev/md1:Perhaps a running process, mounted filesystem or active volume group?