0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

理論と実践で覚えるRAID

0
Posted at

目次

・理論で覚えるRAID
・理論で覚えるRAID

理論で覚えるRAID

RAID...複数ディスクを論理的に合体する仕組み

RAIDは一般的に0~6まであり、かつ10とか50とか表記されたりするので非常に種類が多いように感じますが、実際には大きく分けると

  • 0
  • 1
  • 3,4
  • 5,6

の実質四種類しかないです。

レベル 特性
0 ストライピング=分割
1 ミラーリング=完コピ。データ参照時にはどれか一つのみから
2 存在はしますが使われていないし出題もされないです
3,4 ストライピングに加え、一つのディスクをパリティディスクとすることで、あるディスクのデータが壊れてもほかのディスクから復元することができます。データは
RAID3はパリティをビットまたはバイトごとに管理し、RAID4ではブロックごとに管理します。
→ある程度の耐障害性と容量を持ちます
5,6 RAID5はパリティを各ディスクに分散させます。パリティを含む全データをRAID0する感じです
RAID6はパリティを統制するパリティを設けます。実際には、あるブロックに対するパリティが二つ設けられた状態になります

また、RAIDはネストすることができます。
例えばRAID0をRAID1でミラーリングすることもできますし、RAID1をRAID0ですトライピングすることもできます。
ネストされたRAIDはRAIDxy(RAIDx+y)などと表現されます、RAID50とかに該当します

実践で覚えるRAID

実際にRAIDのメンバディスクを破損させて復旧可能なパターンと復旧不可能なパターンを検証します。

・RAID0
・RAID1
・RAID3,4
・RAID5,6
・RAID10

RAID0

RAID0環境を用意しました

[gura@localhost ~]$ lsblk
NAME               MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINTS
sda                  8:0    0   16G  0 disk
tqsda1               8:1    0  600M  0 part  /boot/efi
tqsda2               8:2    0    1G  0 part  /boot
mqsda3               8:3    0 14.4G  0 part
  tqalmalinux-root 253:0    0 12.8G  0 lvm   /
  mqalmalinux-swap 253:1    0  1.6G  0 lvm   [SWAP]
sdb                  8:16   0    1G  0 disk
mqmd0                9:0    0    2G  0 raid0 /home/gura/tmp
sdc                  8:32   0    1G  0 disk
mqmd0                9:0    0    2G  0 raid0 /home/gura/tmp
sr0                 11:0    1  1.4G  0 rom

sdcをzeroで上書きすると、RAIDが壊れました
image.png
データを消していないsdbをマウントして見てみます

[gura@localhost tmp]$ ls -la
合計 4
drwxr-xr-x.  2 root root    6  5月 12 16:45 .
drwx------. 15 gura gura 4096  5月 12 16:52 ..

再マウントしてもファイルは認識されていません

RAID1

RAID1を建てました

[gura@localhost ~]$ lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINTS
sda             8:0    0   16G  0 disk
tqsda1          8:1    0  600M  0 part  /boot/efi
tqsda2          8:2    0    1G  0 part  /boot
mqsda3          8:3    0 14.4G  0 part
  tqalmalinux-root
  x           253:0    0 12.8G  0 lvm   /
  mqalmalinux-swap
              253:1    0  1.6G  0 lvm   [SWAP]
sdb             8:16   0    1G  0 disk
mqmd0           9:0    0 1022M  0 raid1 /home/gura/tmp
sdc             8:32   0    1G  0 disk
mqmd0           9:0    0 1022M  0 raid1 /home/gura/tmp
sr0            11:0    1  1.4G  0 rom   /run/media/gura/AlmaLinux-9-7-x86_64-dvd

動画ファイルを配置し

[gura@localhost ~]$ ls -l tmp
合計 3768
-rw-r--r--. 1 gura gura 3858260  5月 13 10:56 hts-samp003.mp4

sdcを除去しました。
sdbのみがraidに残っていて、配置したファイルは依然存在します

[gura@localhost ~]$ lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINTS
sda             8:0    0   16G  0 disk
tqsda1          8:1    0  600M  0 part  /boot/efi
tqsda2          8:2    0    1G  0 part  /boot
mqsda3          8:3    0 14.4G  0 part
  tqalmalinux-root
  x           253:0    0 12.8G  0 lvm   /
  mqalmalinux-swap
              253:1    0  1.6G  0 lvm   [SWAP]
sdb             8:16   0    1G  0 disk
mqmd0           9:0    0 1022M  0 raid1 /home/gura/tmp
sr0            11:0    1  1.4G  0 rom   /run/media/gura/AlmaLinux-9-7-x86_64-dvd
[gura@localhost ~]$ ls -l tmp
合計 3768
-rw-r--r--. 1 gura gura 3858260  5月 13 11:56 hts-samp003.mp4

動画ファイルは破損しておらず再生可能でした
image.png

ディスクが一枚でも動いていればいいので同じディスク数では最も可用性が高いですが、ディスクの枚数を増やしても最大容量が増えないデメリットがあります。

RAID3,4

RAID4です

[gura@localhost ~]$ lsblk
NAME               MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINTS
sda                  8:0    0   16G  0 disk
tqsda1               8:1    0  600M  0 part  /boot/efi
tqsda2               8:2    0    1G  0 part  /boot
mqsda3               8:3    0 14.4G  0 part
  tqalmalinux-root 253:0    0 12.8G  0 lvm   /
  mqalmalinux-swap 253:1    0  1.6G  0 lvm   [SWAP]
sdb                  8:16   0    1G  0 disk
mqmd0                9:0    0    2G  0 raid4 /home/gura/tmp
sdc                  8:32   0    1G  0 disk
mqmd0                9:0    0    2G  0 raid4 /home/gura/tmp
sdd                  8:48   0    1G  0 disk
mqmd0                9:0    0    2G  0 raid4 /home/gura/tmp
sr0                 11:0    1  1.4G  0 rom
[gura@localhost ~]$ sudo mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Wed May 13 14:11:39 2026
        Raid Level : raid4
        Array Size : 2093056 (2044.00 MiB 2143.29 MB)
     Used Dev Size : 1046528 (1022.00 MiB 1071.64 MB)
      Raid Devices : 3
     Total Devices : 3
       Persistence : Superblock is persistent

     Intent Bitmap : Internal

       Update Time : Wed May 13 14:15:50 2026
             State : clean
    Active Devices : 3
   Working Devices : 3
    Failed Devices : 0
     Spare Devices : 0

        Chunk Size : 512K

Consistency Policy : bitmap

              Name : localhost.localdomain:0  (local to host localhost.localdomain)
              UUID : 0fb22117:99e9524d:dfed36e6:92cec861
            Events : 19

    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync   /dev/sdb
       1       8       32        1      active sync   /dev/sdc
       3       8       48        2      active sync   /dev/sdd

パリティディスクはsdd(detailで一番下に表示されてるディスク)らしいです

先ほどの動画ファイルを入れます

[gura@localhost ~]$ ls -l tmp
合計 3768
-rw-r--r--. 1 gura gura 3858260  5月 13 14:35 hts-samp003.mp4

sdbを抜きましたが、動画ファイルは健在です。
RAID3,4では一つのディスクが欠けても残りのディスク+パリティからそのデータを求めて動作することができます。

[gura@localhost ~]$ lsblk
NAME               MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINTS
sda                  8:0    0   16G  0 disk
tqsda1               8:1    0  600M  0 part  /boot/efi
tqsda2               8:2    0    1G  0 part  /boot
mqsda3               8:3    0 14.4G  0 part
  tqalmalinux-root 253:0    0 12.8G  0 lvm   /
  mqalmalinux-swap 253:1    0  1.6G  0 lvm   [SWAP]
sdc                  8:32   0    1G  0 disk
mqmd0                9:0    0    2G  0 raid4 /home/gura/tmp
sdd                  8:48   0    1G  0 disk
mqmd0                9:0    0    2G  0 raid4 /home/gura/tmp
sr0                 11:0    1  1.4G  0 rom
[gura@localhost ~]$ ls -l tmp
合計 3768
-rw-r--r--. 1 gura gura 3858260  5月 13 14:35 hts-samp003.mp4

↓number2がmissingになっています

[gura@localhost ~]$ sudo mdadm --detail /dev/md0
[sudo] gura のパスワード:
/dev/md0:
           Version : 1.2
     Creation Time : Wed May 13 14:11:39 2026
        Raid Level : raid4
        Array Size : 2093056 (2044.00 MiB 2143.29 MB)
     Used Dev Size : 1046528 (1022.00 MiB 1071.64 MB)
      Raid Devices : 3
     Total Devices : 3
       Persistence : Superblock is persistent

     Intent Bitmap : Internal

       Update Time : Wed May 13 14:38:28 2026
             State : clean, degraded
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 1
     Spare Devices : 0

        Chunk Size : 512K

Consistency Policy : bitmap

              Name : localhost.localdomain:0  (local to host localhost.localdomain)
              UUID : 0fb22117:99e9524d:dfed36e6:92cec861
            Events : 21

    Number   Major   Minor   RaidDevice State
       -       0        0        0      removed
       1       8       32        1      active sync   /dev/sdc
       3       8       48        2      active sync   /dev/sdd

       0       8       16        -      faulty   missing

新しいディスクを取り付け、md0に追加します

[gura@localhost ~]$ lsblk
NAME               MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINTS
sda                  8:0    0   16G  0 disk
tqsda1               8:1    0  600M  0 part  /boot/efi
tqsda2               8:2    0    1G  0 part  /boot
mqsda3               8:3    0 14.4G  0 part
  tqalmalinux-root 253:0    0 12.8G  0 lvm   /
  mqalmalinux-swap 253:1    0  1.6G  0 lvm   [SWAP]
sdc                  8:32   0    1G  0 disk
mqmd0                9:0    0    2G  0 raid4 /home/gura/tmp
sdd                  8:48   0    1G  0 disk
mqmd0                9:0    0    2G  0 raid4 /home/gura/tmp
sde                  8:64   0    1G  0 disk
mqmd0                9:0    0    2G  0 raid4 /home/gura/tmp
sr0                 11:0    1  1.4G  0 rom
[gura@localhost ~]$ sudo mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Wed May 13 14:11:39 2026
        Raid Level : raid4
        Array Size : 2093056 (2044.00 MiB 2143.29 MB)
     Used Dev Size : 1046528 (1022.00 MiB 1071.64 MB)
      Raid Devices : 3
     Total Devices : 4
       Persistence : Superblock is persistent

     Intent Bitmap : Internal

       Update Time : Wed May 13 14:49:01 2026
             State : clean
    Active Devices : 3
   Working Devices : 3
    Failed Devices : 1
     Spare Devices : 0

        Chunk Size : 512K

Consistency Policy : bitmap

              Name : localhost.localdomain:0  (local to host localhost.localdomain)
              UUID : 0fb22117:99e9524d:dfed36e6:92cec861
            Events : 41

    Number   Major   Minor   RaidDevice State
       4       8       64        0      active sync   /dev/sde
       1       8       32        1      active sync   /dev/sdc
       3       8       48        2      active sync   /dev/sdd

       0       8       16        -      faulty   missing

sdeへのリビルドを確認するためにsdcを撤去してみます。

↓撤去後もファイルが残っていました。

[gura@localhost ~]$ lsblk
NAME               MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINTS
sda                  8:0    0   16G  0 disk
tqsda1               8:1    0  600M  0 part  /boot/efi
tqsda2               8:2    0    1G  0 part  /boot
mqsda3               8:3    0 14.4G  0 part
  tqalmalinux-root 253:0    0 12.8G  0 lvm   /
  mqalmalinux-swap 253:1    0  1.6G  0 lvm   [SWAP]
sdd                  8:48   0    1G  0 disk
mqmd0                9:0    0    2G  0 raid4 /home/gura/tmp
sde                  8:64   0    1G  0 disk
mqmd0                9:0    0    2G  0 raid4 /home/gura/tmp
sr0                 11:0    1  1.4G  0 rom
[gura@localhost ~]$ ls -l tmp
合計 3768
-rw-r--r--. 1 gura gura 3858260  5月 13 14:35 hts-samp003.mp4

ファイルも破損しておらず正常に動作します。
image.png

raid3,4の欠点として、二つ以上のディスクが欠けた場合は動作せず修復することができません。

↓StateがFAILEDになりました

[gura@localhost ~]$ ls -l tmp
合計 3768
-rw-r--r--. 1 gura gura 3858260  5月 13 14:35 hts-samp003.mp4
[gura@localhost ~]$ lsblk
NAME               MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINTS
sda                  8:0    0   16G  0 disk
tqsda1               8:1    0  600M  0 part  /boot/efi
tqsda2               8:2    0    1G  0 part  /boot
mqsda3               8:3    0 14.4G  0 part
  tqalmalinux-root 253:0    0 12.8G  0 lvm   /
  mqalmalinux-swap 253:1    0  1.6G  0 lvm   [SWAP]
sde                  8:64   0    1G  0 disk
mqmd0                9:0    0    2G  0 raid4 /home/gura/tmp
sr0                 11:0    1  1.4G  0 rom
[gura@localhost ~]$ sudo mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Wed May 13 14:11:39 2026
        Raid Level : raid4
        Array Size : 2093056 (2044.00 MiB 2143.29 MB)
     Used Dev Size : 1046528 (1022.00 MiB 1071.64 MB)
      Raid Devices : 3
     Total Devices : 3
       Persistence : Superblock is persistent

     Intent Bitmap : Internal

       Update Time : Wed May 13 15:00:11 2026
             State : clean, FAILED
    Active Devices : 1
   Working Devices : 1
    Failed Devices : 2
     Spare Devices : 0

        Chunk Size : 512K

Consistency Policy : bitmap

              Name : localhost.localdomain:0  (local to host localhost.localdomain)
              UUID : 0fb22117:99e9524d:dfed36e6:92cec861
            Events : 47

    Number   Major   Minor   RaidDevice State
       4       8       64        0      active sync   /dev/sde
       -       0        0        1      removed
       3       8       48        2      faulty   missing

       0       8       16        -      faulty   missing

再起動するとRAIDそのものが壊れました
image.png

RAID5,6

RAID5,6は違いが顕著なので両方作ります
RAID5
RAID5ではパリティが各ディスクに分散されます。パリティの大きさ自体はRAID3,4と変わらないです

[gura@localhost ~]$ lsblk
NAME               MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINTS
sda                  8:0    0   16G  0 disk
tqsda1               8:1    0  600M  0 part  /boot/efi
tqsda2               8:2    0    1G  0 part  /boot
mqsda3               8:3    0 14.4G  0 part
  tqalmalinux-root 253:0    0 12.8G  0 lvm   /
  mqalmalinux-swap 253:1    0  1.6G  0 lvm   [SWAP]
sdb                  8:16   0    1G  0 disk
mqmd0                9:0    0    2G  0 raid5 /home/gura/tmp
sdc                  8:32   0    1G  0 disk
mqmd0                9:0    0    2G  0 raid5 /home/gura/tmp
sdd                  8:48   0    1G  0 disk
mqmd0                9:0    0    2G  0 raid5 /home/gura/tmp
sr0                 11:0    1  1.4G  0 rom   /run/media/gura/AlmaLinux-9-7-x86_64-dvd
[gura@localhost ~]$ sudo mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Wed May 13 15:52:00 2026
        Raid Level : raid5
        Array Size : 2093056 (2044.00 MiB 2143.29 MB)
     Used Dev Size : 1046528 (1022.00 MiB 1071.64 MB)
      Raid Devices : 3
     Total Devices : 3
       Persistence : Superblock is persistent

     Intent Bitmap : Internal

       Update Time : Wed May 13 16:41:19 2026
             State : clean
    Active Devices : 3
   Working Devices : 3
    Failed Devices : 0
     Spare Devices : 0

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : bitmap

              Name : localhost.localdomain:0  (local to host localhost.localdomain)
              UUID : 45845dc7:354c9a86:a07f171c:44c6bfca
            Events : 19

    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync   /dev/sdb
       1       8       32        1      active sync   /dev/sdc
       3       8       48        2      active sync   /dev/sdd

RAID6
通常のパリティともう一つ別のパリティを持ちます通常のパリティはXORですが、RAID6用のパリティは別の計算方法を持ち、通常パリティと連立で計算することで2つ同時のディスク故障に対応することができます。

↓パリティがディスク2本分になるので2GiBの保存容量になっています

[gura@localhost ~]$ lsblk
NAME               MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINTS
sda                  8:0    0   16G  0 disk
tqsda1               8:1    0  600M  0 part  /boot/efi
tqsda2               8:2    0    1G  0 part  /boot
mqsda3               8:3    0 14.4G  0 part
  tqalmalinux-root 253:0    0 12.8G  0 lvm   /
  mqalmalinux-swap 253:1    0  1.6G  0 lvm   [SWAP]
sdb                  8:16   0    1G  0 disk
mqmd0                9:0    0    2G  0 raid6 /home/gura/tmp
sdc                  8:32   0    1G  0 disk
mqmd0                9:0    0    2G  0 raid6 /home/gura/tmp
sdd                  8:48   0    1G  0 disk
mqmd0                9:0    0    2G  0 raid6 /home/gura/tmp
sde                  8:64   0    1G  0 disk
mqmd0                9:0    0    2G  0 raid6 /home/gura/tmp
sr0                 11:0    1  1.4G  0 rom   /run/media/gura/AlmaLinux-9-7-x86_64-dvd
[gura@localhost ~]$ sudo mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Wed May 13 16:54:58 2026
        Raid Level : raid6
        Array Size : 2093056 (2044.00 MiB 2143.29 MB)
     Used Dev Size : 1046528 (1022.00 MiB 1071.64 MB)
      Raid Devices : 4
     Total Devices : 4
       Persistence : Superblock is persistent

     Intent Bitmap : Internal

       Update Time : Wed May 13 16:55:03 2026
             State : clean
    Active Devices : 4
   Working Devices : 4
    Failed Devices : 0
     Spare Devices : 0

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : bitmap

              Name : localhost.localdomain:0  (local to host localhost.localdomain)
              UUID : 5e1b5d21:c373ee79:72eed524:bc8b4f31
            Events : 18

    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync   /dev/sdb
       1       8       32        1      active sync   /dev/sdc
       2       8       48        2      active sync   /dev/sdd
       3       8       64        3      active sync   /dev/sde

ディスクを2本取り除いてみます

[gura@localhost ~]$ lsblk
NAME               MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINTS
sda                  8:0    0   16G  0 disk
tqsda1               8:1    0  600M  0 part  /boot/efi
tqsda2               8:2    0    1G  0 part  /boot
mqsda3               8:3    0 14.4G  0 part
  tqalmalinux-root 253:0    0 12.8G  0 lvm   /
  mqalmalinux-swap 253:1    0  1.6G  0 lvm   [SWAP]
sdb                  8:16   0    1G  0 disk
mqmd0                9:0    0    2G  0 raid6 /home/gura/tmp
sde                  8:64   0    1G  0 disk
mqmd0                9:0    0    2G  0 raid6 /home/gura/tmp
sr0                 11:0    1  1.4G  0 rom   /run/media/gura/AlmaLinux-9-7-x86_64-dvd
[gura@localhost ~]$ sudo mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Wed May 13 16:54:58 2026
        Raid Level : raid6
        Array Size : 2093056 (2044.00 MiB 2143.29 MB)
     Used Dev Size : 1046528 (1022.00 MiB 1071.64 MB)
      Raid Devices : 4
     Total Devices : 4
       Persistence : Superblock is persistent

     Intent Bitmap : Internal

       Update Time : Wed May 13 17:36:17 2026
             State : clean, degraded
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 2
     Spare Devices : 0

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : bitmap

              Name : localhost.localdomain:0  (local to host localhost.localdomain)
              UUID : 5e1b5d21:c373ee79:72eed524:bc8b4f31
            Events : 22

    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync   /dev/sdb
       -       0        0        1      removed
       -       0        0        2      removed
       3       8       64        3      active sync   /dev/sde

       1       8       32        -      faulty   missing
       2       8       48        -      faulty   missing

再起動するとmd127になりましたが。
md127をマウントして参照するとデータは壊れていないことが確認できました

image.png

RAID10

RAID10などはRAIDふたつで別のRAIDを組むことで構成できますが、mdadmなどでは明示的にRAID10であると宣言することもできます。
管理上のしやすさを考えると基本的には後者をとるほううがいいです。

↓set-Aとset-Bに分けられて構成されています

[gura@localhost ~]$ sudo mdadm --raid-devices=4 --level 10 /dev/md0 /dev/sdb /de                                                                                                             v/sdc /dev/sdd /dev/sde
[gura@localhost ~]$ sudo mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Thu May 14 10:03:58 2026
        Raid Level : raid10
        Array Size : 2093056 (2044.00 MiB 2143.29 MB)
     Used Dev Size : 1046528 (1022.00 MiB 1071.64 MB)
      Raid Devices : 4
     Total Devices : 4
       Persistence : Superblock is persistent

     Intent Bitmap : Internal

       Update Time : Thu May 14 10:04:09 2026
             State : clean
    Active Devices : 4
   Working Devices : 4
    Failed Devices : 0
     Spare Devices : 0

            Layout : near=2
        Chunk Size : 512K

Consistency Policy : bitmap

              Name : localhost.localdomain:0  (local to host localhost.localdoma                                                                                                             in)
              UUID : 894c0731:f11b3423:dec64450:5d2c70cd
            Events : 18

    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync set-A   /dev/sdb
       1       8       32        1      active sync set-B   /dev/sdc
       2       8       48        2      active sync set-A   /dev/sdd
       3       8       64        3      active sync set-B   /dev/sde
0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?