LoginSignup
14
18

More than 5 years have passed since last update.

Linux Software RAID をコマンドラインから組んでみる

Last updated at Posted at 2017-07-20

ソフトウェアRAIDを構成する ( mdadm )

前提

基本的に、使用するディスクは、同じメーカー、同じ型番、同じ容量、同じロットのディスクがよい。
そこまで気にしないなら、同じメーカーで同じ型番、容量のものを選んでおけばいいと思う。

使用するコマンド

cat /proc/mdstat
mdadm --add /dev/md0 /dev/sdb1
mdadm --create /dev/md0 --level=raid0 --raid-device=3 /dev/sdb1 /dev/sdc1 /dev/sdd1
mdadm --detail /dev/md0
mdadm --detail --scan > /etc/mdadm.conf
mdadm --fail /dev/md0 /dev/sdb1
mdadm --misc --stop /dev/md0
mdadm --misc --zero-superblock /dev/sdb1 /dev/sdc1 /dev/sdd1
mdadm --remove /dev/md0 /dev/sdb1

使用したディスク

同型のものを3本使用。

[root@localhost ~]# hdparm -I /dev/sdb

/dev/sdb:

ATA device, with non-removable media
        Model Number:       OCZ-VERTEX3
        Serial Number:      OCZ-9RIXRBFQ611CG1Q7
        Firmware Revision:  2.15
        Transport:          Serial, ATA8-AST, SATA 1.0a, SATA II Extensions, SATA Rev 2.5, SATA Rev 2.6, SATA Rev 3.0
Standards:
        Used: unknown (minor revision code 0x0110)
        Supported: 8 7 6 5
        Likely used: 8
Configuration:
        Logical         max     current
        cylinders       16383   16383
        heads           16      16
        sectors/track   63      63
        --
        CHS current addressable sectors:   16514064
        LBA    user addressable sectors:  117231408
        LBA48  user addressable sectors:  117231408
        Logical  Sector size:                   512 bytes
        Physical Sector size:                   512 bytes
        Logical Sector-0 offset:                  0 bytes
        device size with M = 1024*1024:       57241 MBytes
        device size with M = 1000*1000:       60022 MBytes (60 GB)
        cache/buffer size  = unknown
        Nominal Media Rotation Rate: Solid State Device
Capabilities:
        LBA, IORDY(can be disabled)
        Queue depth: 32
        Standby timer values: spec'd by Standard, no device specific minimum
        R/W multiple sector transfer: Max = 16  Current = 16
        Advanced power management level: 254
        DMA: mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 udma4 udma5 *udma6
             Cycle time: min=120ns recommended=120ns
        PIO: pio0 pio1 pio2 pio3 pio4
             Cycle time: no flow control=120ns  IORDY flow control=120ns
Commands/features:
        Enabled Supported:
           *    SMART feature set
                Security Mode feature set
           *    Power Management feature set
           *    Write cache
                Look-ahead
           *    Host Protected Area feature set
           *    WRITE_BUFFER command
           *    READ_BUFFER command
           *    NOP cmd
           *    DOWNLOAD_MICROCODE
           *    Advanced Power Management feature set
                Power-Up In Standby feature set
           *    SET_FEATURES required to spinup after power up
           *    48-bit Address feature set
           *    Mandatory FLUSH_CACHE
           *    FLUSH_CACHE_EXT
           *    SMART error logging
           *    SMART self-test
           *    General Purpose Logging feature set
           *    WRITE_{DMA|MULTIPLE}_FUA_EXT
           *    64-bit World wide name
           *    IDLE_IMMEDIATE with UNLOAD
                Write-Read-Verify feature set
           *    WRITE_UNCORRECTABLE_EXT command
           *    {READ,WRITE}_DMA_EXT_GPL commands
           *    Segmented DOWNLOAD_MICROCODE
           *    Gen1 signaling speed (1.5Gb/s)
           *    Gen2 signaling speed (3.0Gb/s)
           *    Gen3 signaling speed (6.0Gb/s)
           *    Native Command Queueing (NCQ)
           *    Host-initiated interface power management
           *    Phy event counters
           *    unknown 76[14]
           *    unknown 76[15]
           *    DMA Setup Auto-Activate optimization
                Device-initiated interface power management
           *    Software settings preservation
           *    SMART Command Transport (SCT) feature set
           *    SCT Data Tables (AC5)
           *    DOWNLOAD MICROCODE DMA command
           *    SET MAX SETPASSWORD/UNLOCK DMA commands
           *    WRITE BUFFER DMA command
           *    READ BUFFER DMA command
           *    Data Set Management TRIM supported (limit 1 block)
           *    Deterministic read data after TRIM
Security:
        Master password revision code = 65534
                supported
        not     enabled
        not     locked
        not     frozen
        not     expired: security count
        not     supported: enhanced erase
        2min for SECURITY ERASE UNIT.
Logical Unit WWN Device Identifier: 5e83a97e8aeb67f6
        NAA             : 5
        IEEE OUI        : e83a97
        Unique ID       : e8aeb67f6
Checksum: correct

環境

[root@localhost ~]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 6.9 (Santiago)

[root@localhost ~]# uname -a
Linux spkrnish-011091 4.1.12-94.3.9.el6uek.x86_64 #2 SMP Fri Jul 14 20:16:11 PDT 2017 x86_64 x86_64 x86_64 GNU/Linux

1. ディスクの準備

fdiskコマンドでパーティションを作成する。
パーティションのタイプは、fd ( Linux raid 自動検出 ) に設定する。

[user@localhost ~]$ su -

[root@localhost ~]# fdisk /dev/sdb

警告: DOS互換モードは廃止予定です。このモード (コマンド 'c') を止めることを
      強く推奨します。 and change display units to
         sectors (command 'u').

コマンド (m でヘルプ): p

ディスク /dev/sdb: 60.0 GB, 60022480896 バイト
ヘッド 255, セクタ 63, シリンダ 7297
Units = シリンダ数 of 16065 * 512 = 8225280 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0x0006ee62

デバイス ブート      始点        終点     ブロック   Id  システム

コマンド (m でヘルプ): n
コマンドアクション
   e   拡張
   p   基本パーティション (1-4)
p
パーティション番号 (1-4): 1
最初 シリンダ (1-7297, default 1):
Using default value 1
Last シリンダ, +シリンダ数 or +size{K,M,G} (1-7297, default 7297):
Using default value 7297

コマンド (m でヘルプ): t
選択した領域 1
16進数コード (L コマンドでコードリスト表示): fd
領域のシステムタイプを 1 から fd (Linux raid 自動検出) に変更しました

コマンド (m でヘルプ): p

ディスク /dev/sdb: 60.0 GB, 60022480896 バイト
ヘッド 255, セクタ 63, シリンダ 7297
Units = シリンダ数 of 16065 * 512 = 8225280 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0x0006ee62

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/sdb1               1        7297    58613121   fd  Linux raid 自動検出

コマンド (m でヘルプ): w
パーティションテーブルは変更されました!

ioctl() を呼び出してパーティションテーブルを再読込みします。
ディスクを同期しています。

/dev/sdc, /dev/sdd も同様にパーティションを作成する。


mdadmコマンドでraidデバイスを作成

ここでは、raid5で構築する。

[root@localhost ~]# mdadm --create /dev/md0 --level=raid5 --raid-device=3 /dev/sdb1 /dev/sdc1 /dev/sdd1
mdadm: /dev/sdc1 appears to contain an ext2fs file system
       size=58613120K  mtime=Thu Jan  1 09:00:00 1970
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

raidデバイスをフォーマット

ここでは、EXT4 でフォーマットする。

[root@localhost ~]# mke2fs -t ext4 /dev/md0
mke2fs 1.43-WIP (20-Jun-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=128 blocks, Stripe width=256 blocks
7323648 inodes, 29289984 blocks
1464499 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
894 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, 7962624, 11239424, 20480000, 23887872

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

raid構成の確認

[root@localhost ~]# cat /proc/mdstat
Personalities : [raid0] [raid6] [raid5] [raid4]
md0 : active raid5 sdd1[3] sdc1[1] sdb1[0]
      117159936 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [UU_]
      [==>..................]  recovery = 13.9% (8154752/58579968) finish=4.1min speed=200057K/sec

unused devices: <none>

...

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

unused devices: <none>

完了


raid構成情報を/etc/mdadm.confに出力

[root@localhost ~]# cat /etc/mdadm.conf
cat: /etc/mdadm.conf: そのようなファイルやディレクトリはありません

[root@localhost ~]# mdadm --detail --scan > /etc/mdadm.conf

[root@localhost ~]# cat /etc/mdadm.conf
ARRAY /dev/md0 metadata=1.2 name=localhost:0 UUID=f49a8674:13777e43:4f3eaade:7aeb9fe6

[root@localhost ~]# mdadm --detail /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Fri Jul 21 07:41:29 2017
     Raid Level : raid5
     Array Size : 117159936 (111.73 GiB 119.97 GB)
  Used Dev Size : 58579968 (55.87 GiB 59.99 GB)
   Raid Devices : 3
  Total Devices : 3
    Persistence : Superblock is persistent

    Update Time : Fri Jul 21 07:46:27 2017
          State : clean
 Active Devices : 3
Working Devices : 3
 Failed Devices : 0
  Spare Devices : 0

         Layout : left-symmetric
     Chunk Size : 512K

           Name : localhost:0  (local to host localhost)
           UUID : f49a8674:13777e43:4f3eaade:7aeb9fe6
         Events : 20

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

再起動後に自動マウントさせるため、マウントポイントを設定

[root@localhost ~]# ls -l /
合計 93
dr-xr-xr-x.   2 root root  4096  7月 15 10:19 2017 bin
dr-xr-xr-x.   5 root root  4096  7月 21 07:00 2017 boot
drwxr-xr-x.  20 root root  3920  7月 21 07:41 2017 dev
drwxr-xr-x.  64 root root  4096  7月 21 07:56 2017 etc
drwxr-xr-x.   3 root root  4096 11月  1 17:47 2011 home
dr-xr-xr-x.   8 root root  4096  5月 31 10:24 2017 lib
dr-xr-xr-x.   8 root root 12288  7月 15 14:49 2017 lib64
drwx------.   2 root root 16384  5月 31 10:22 2017 lost+found
drwxr-xr-x.   2 root root  4096 11月  1 17:47 2011 media
drwxr-xr-x.   5 root root  4096  7月 15 11:12 2017 mnt
drwxr-xr-x.   2 root root  4096 11月  1 17:47 2011 opt
dr-xr-xr-x. 118 root root     0  7月 21 07:18 2017 proc
dr-xr-x---.   3 root root  4096  7月 15 09:49 2017 root
dr-xr-xr-x.   2 root root 12288  7月 15 14:49 2017 sbin
drwxr-xr-x.   7 root root     0  7月 21 07:18 2017 selinux
drwxr-xr-x.   2 root root  4096 11月  1 17:47 2011 srv
dr-xr-xr-x.  13 root root     0  7月 21 07:59 2017 sys
drwxrwxrwt.   3 root root  4096  7月 21 07:19 2017 tmp
drwxr-xr-x.  13 root root  4096  5月 31 10:23 2017 usr
drwxr-xr-x.  18 root root  4096  5月 31 10:24 2017 var

[root@localhost ~]# mkdir /raid

[root@localhost ~]# vi /etc/fstab
...
/dev/md0                     /raid                   ext4    defaults        0 0
...

再起動

[root@localhost ~]# reboot

マウント確認

[root@localhost ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
                       45G  2.7G   40G   7% /
tmpfs                 3.5G     0  3.5G   0% /dev/shm
/dev/sda1             477M  215M  233M  48% /boot
/dev/mapper/VolGroup-lv_home
                      4.3G  8.9M  4.0G   1% /home
/dev/md0              110G   60M  105G   1% /raid  <=== raid5なのでディスク2本分のサイズ

異常時の確認

ディスク1本をフェイルさせる

[root@localhost ~]# mdadm --fail /dev/md0 /dev/sdc1
mdadm: set /dev/sdc1 faulty in /dev/md0

[root@localhost ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdb1[0] sdd1[3] sdc1[1](F) <=== sdc1がfaultとなっている
      117159936 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [U_U]

unused devices: <none>

異常ディスクを除去する

[root@localhost ~]# mdadm --remove /dev/md0 /dev/sdc1
mdadm: hot removed /dev/sdc1 from /dev/md0

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

unused devices: <none>

フェイルさせたディスクを再パーティショニング

[root@localhost ~]# mdadm --misc --zero-superblock /dev/sdc1

[root@localhost ~]# fdisk /dev/sdc

警告: DOS互換モードは廃止予定です。このモード (コマンド 'c') を止めることを
      強く推奨します。 and change display units to
         sectors (command 'u').

コマンド (m でヘルプ): p

ディスク /dev/sdc: 60.0 GB, 60022480896 バイト
ヘッド 255, セクタ 63, シリンダ 7297
Units = シリンダ数 of 16065 * 512 = 8225280 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0x0008de53

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/sdc1               1        7297    58613121   fd  Linux raid 自動検出

コマンド (m でヘルプ): d
選択した領域 1

コマンド (m でヘルプ): p

ディスク /dev/sdc: 60.0 GB, 60022480896 バイト
ヘッド 255, セクタ 63, シリンダ 7297
Units = シリンダ数 of 16065 * 512 = 8225280 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0x0008de53

デバイス ブート      始点        終点     ブロック   Id  システム

コマンド (m でヘルプ): n
コマンドアクション
   e   拡張
   p   基本パーティション (1-4)
p
パーティション番号 (1-4): 1
最初 シリンダ (1-7297, default 1):
Using default value 1
Last シリンダ, +シリンダ数 or +size{K,M,G} (1-7297, default 7297):
Using default value 7297

コマンド (m でヘルプ): t
選択した領域 1
16進数コード (L コマンドでコードリスト表示): fd
領域のシステムタイプを 1 から fd (Linux raid 自動検出) に変更しました

コマンド (m でヘルプ): p

ディスク /dev/sdc: 60.0 GB, 60022480896 バイト
ヘッド 255, セクタ 63, シリンダ 7297
Units = シリンダ数 of 16065 * 512 = 8225280 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0x0008de53

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/sdc1               1        7297    58613121   fd  Linux raid 自動検出

コマンド (m でヘルプ): w
パーティションテーブルは変更されました!

ioctl() を呼び出してパーティションテーブルを再読込みします。
ディスクを同期しています。

raidデバイスに(仮)新ディスクを追加する

[root@localhost ~]# mdadm --add /dev/md0 /dev/sdc1
mdadm: added /dev/sdc1

[root@localhost ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdc1[4] sdb1[0] sdd1[3]
      117159936 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [U_U]
      [>....................]  recovery =  1.5% (918840/58579968) finish=6.2min speed=153140K/sec

unused devices: <none>

...

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

unused devices: <none>

交換完了。
この時、raidデバイスのUUIDは変わっていない。


[root@localhost ~]# mdadm --detail --scan
ARRAY /dev/md0 metadata=1.2 spares=1 name=localhost:0 UUID=f49a8674:13777e43:4f3eaade:7aeb9fe6

raidを解体

[root@localhost ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
                       45G  2.7G   40G   7% /
tmpfs                 3.5G     0  3.5G   0% /dev/shm
/dev/sda1             477M  230M  218M  52% /boot
/dev/mapper/VolGroup-lv_home
                      4.3G  8.9M  4.0G   1% /home
/dev/md0              110G   60M  105G   1% /raid

[root@localhost ~]# umount /raid

[root@localhost ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
                       45G  2.7G   40G   7% /
tmpfs                 3.5G     0  3.5G   0% /dev/shm
/dev/sda1             477M  230M  218M  52% /boot
/dev/mapper/VolGroup-lv_home
                      4.3G  8.9M  4.0G   1% /home

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

[root@localhost ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
unused devices: <none>

[root@localhost ~]# mdadm --misc --zero-superblock /dev/sdb1 /dev/sdc1 /dev/sdd1

[おわり]

14
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
18