- 1 RAIDとは?
- 2 検証環境
- 3 パッケージのインストール
- 4 RAIDデバイスの作成
- 5 RAID環境の構築手順
- 6 RAID環境の削除手順
- 7 ディスクの交換手順
- 8 ミラーリングの動作確認
- Z 参考情報
1 RAIDとは?
RAID(Redundant Arrays of Independent DISK)は複数のハードディスクを連結して、1台の仮想的なディスクを構築する技術です。冗長化や高速化を目的に使用します。ここでは、RAID1の環境構築、削除を試してみます。
RAIDレベル | 概要 |
---|---|
RAID 0(ストライピング) | 最低2台のディスクが必要。書き込みを複数のディスクに分散する。アクセスの高速化が目的。冗長構成がないため耐障害性なし |
RAID 1(ミラーリング) | 最低2台のディスクが必要。2台以上のディスクに同じデータを書き込む。1台が故障しても他のディスクで稼働可能 |
RAID 4 | RAID 0にパリティを追加 |
RAID 5 | 最低3台のディスクが必要。書き込みを複数のディスクに分散する。パリティも複数ディスクに分散。1台が故障しても他のディスクのパリティを使ってデータ復旧が可能 |
RAID 10 | 複数のRAID 1を組み合わせてRAID0を構成する。冗長性と高速化の両立が目的 |
2 検証環境
CentOS版数は以下のとおりです。
[root@server ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core)
カーネル版数は以下のとおりです。
[root@server ~]# uname -r 3.10.0-1160.el7.x86_64
3 パッケージのインストール
mdadmパッケージをインストールします。
[root@server ~]# yum -y install mdadm
版数を確認します。
[root@server ~]# mdadm --version mdadm - v4.1 - 2018-10-01
4 RAIDデバイスの作成
RAID環境構築の練習をお手軽にするため、使用するデバイスをループバックデバイスで作成します。
4.1 ファイルの作成
ループバックデバイスとして使うファイル(500M)を2つ作成します。なお、ddコマンドの使い方は、ddコマンドの使い方 - hana_shinのLinux技術ブログを参照してください。
[root@server ~]# dd if=/dev/zero of=disk1.img bs=1024 count=512000 [root@server ~]# dd if=/dev/zero of=disk2.img bs=1024 count=512000
作成したファイルを確認します。
[root@server ~]# ls -lh disk* -rw-r--r--. 1 root root 500M 2月 23 19:32 disk1.img -rw-r--r--. 1 root root 500M 2月 23 19:32 disk2.img
4.2 ループバックデバイスの作成
ループバックデバイスを作成します。なお、losetupコマンドの使い方は、losetupコマンドの使い方 - hana_shinのLinux技術ブログを参照してください。
[root@server ~]# losetup -f /root/disk1.img [root@server ~]# losetup -f /root/disk2.img
作成したループバックデバイスを確認します。
[root@server ~]# losetup -l NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE /dev/loop0 0 0 0 0 /root/disk1.img /dev/loop1 0 0 0 0 /root/disk2.img
4.3 パーティションタイプ(fd00)の設定
作成したループバックデバイスにパーティションタイプを設定します。
/dev/loop0、/dev/loop1に対して、fd00を設定します。下記の★印が入力した内容です。
[root@server ~]# gdisk /dev/loop0 GPT fdisk (gdisk) version 0.8.10 Partition table scan: MBR: not present BSD: not present APM: not present GPT: not present Creating new GPT entries. Command (? for help): n ★ Partition number (1-128, default 1): First sector (34-1023966, default = 2048) or {+-}size{KMGTP}: Last sector (2048-1023966, default = 1023966) or {+-}size{KMGTP}: Current type is 'Linux filesystem' Hex code or GUID (L to show codes, Enter = 8300): fd00 ★ Changed type of partition to 'Linux RAID' Command (? for help): w ★ Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING PARTITIONS!! Do you want to proceed? (Y/N): y ★ OK; writing new GUID partition table (GPT) to /dev/loop0. Warning: The kernel is still using the old partition table. The new table will be used at the next reboot. The operation has completed successfully.
/dev/loop0のパーティションタイプを確認します。FD00になっていることがわかります。
[root@server ~]# gdisk -l /dev/loop0 -snip- Number Start (sector) End (sector) Size Code Name 1 2048 1023966 499.0 MiB FD00 Linux RAID
/dev/loop1のパーティションタイプを確認します。FD00になっていることがわかります。
[root@server ~]# gdisk -l /dev/loop1 -snip- Number Start (sector) End (sector) Size Code Name 1 2048 1023966 499.0 MiB FD00 Linux RAID
5 RAID環境の構築手順
次の手順にしたがって、RAID1環境を構築してみます。
Continue creating array?に対して、yと入力します。
[root@server ~]# mdadm -C /dev/md0 -l1 -n2 /dev/loop0 /dev/loop1 mdadm: partition table exists on /dev/loop0 mdadm: partition table exists on /dev/loop0 but will be lost or meaningless after creating array mdadm: Note: this array has metadata at the start and may not be suitable as a boot device. If you plan to store '/boot' on this device please ensure that your boot-loader understands md/v1.x metadata, or use --metadata=0.90 mdadm: partition table exists on /dev/loop1 mdadm: partition table exists on /dev/loop1 but will be lost or meaningless after creating array Continue creating array? y ★ mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started.
RAIDデバイスの状態を確認します。/dev/loop1のstateがactive syncになっていることがわかります。
[root@server ~]# mdadm -D /dev/md0 /dev/md0: Version : 1.2 Creation Time : Wed Feb 23 19:45:57 2022 Raid Level : raid1 Array Size : 510976 (499.00 MiB 523.24 MB) Used Dev Size : 510976 (499.00 MiB 523.24 MB) Raid Devices : 2 Total Devices : 2 Persistence : Superblock is persistent Update Time : Wed Feb 23 19:46:00 2022 State : clean Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 Consistency Policy : resync Name : server:0 (local to host server) UUID : 3479298c:3190d1cd:8cdc260a:8cdb934a Events : 17 Number Major Minor RaidDevice State 0 7 0 0 active sync /dev/loop0 1 7 1 1 active sync /dev/loop1
作成したRAIDデバイスにxfsファイルシステムを作成します。
[root@server ~]# mkfs.xfs /dev/md0 Discarding blocks...Done. meta-data=/dev/md0 isize=512 agcount=4, agsize=31936 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0, sparse=0 data = bsize=4096 blocks=127744, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal log bsize=4096 blocks=855, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0
マウントポイントを作成します。
[root@server ~]# mkdir /raid
作成したマウントポイントにRAIDデバイスをマウントします。
[root@server ~]# mount /dev/md0 /raid
[root@server ~]# df -hT /raid ファイルシス タイプ サイズ 使用 残り 使用% マウント位置 /dev/md0 xfs 496M 26M 471M 6% /raid
設定ファイルを作成します。
[root@server ~]# mdadm -Esv > /etc/mdadm.conf
作成した設定ファイルを確認します。
[root@server ~]# cat /etc/mdadm.conf ARRAY /dev/md/0 level=raid1 metadata=1.2 num-devices=2 UUID=3479298c:3190d1cd:8cdc260a:8cdb934a name=server:0 devices=/dev/loop1,/dev/loop0
6 RAID環境の削除手順
[root@server ~]# umount /raid
[root@server ~]# mdadm -S /dev/md0 mdadm: stopped /dev/md0
[root@server ~]# mdadm -D /dev/md0 mdadm: cannot open /dev/md0: No such file or directory
スーパブロックの内容をゼロクリアします。
[root@server ~]# mdadm --misc --zero-superblock /dev/loop0 /dev/loop1
ループバックデバイスを削除します。
[root@server ~]# losetup -d /dev/loop0 [root@server ~]# losetup -d /dev/loop1
7 ディスクの交換手順
5.1でRAID1の環境を作成した後、次の手順にしたがって、ディスクを交換してみます。
7.1 不良マークの設定(-f)
"-f"は不良マークをつけるオプションです。不良マークをつけることで、ディスクを故障状態にします。
[root@server ~]# mdadm --manage /dev/md0 -f /dev/loop1 mdadm: set /dev/loop1 faulty in /dev/md0
RAIDデバイスの状態を確認します。/dev/loop1のstateがfaultyになっていることがわかります。
[root@server ~]# mdadm -D /dev/md0 /dev/md0: Version : 1.2 Creation Time : Wed Feb 23 19:45:57 2022 Raid Level : raid1 Array Size : 510976 (499.00 MiB 523.24 MB) Used Dev Size : 510976 (499.00 MiB 523.24 MB) Raid Devices : 2 Total Devices : 2 Persistence : Superblock is persistent Update Time : Wed Feb 23 19:53:23 2022 State : clean, degraded Active Devices : 1 Working Devices : 1 Failed Devices : 1 Spare Devices : 0 Consistency Policy : resync Name : server:0 (local to host server) UUID : 3479298c:3190d1cd:8cdc260a:8cdb934a Events : 19 Number Major Minor RaidDevice State 0 7 0 0 active sync /dev/loop0 - 0 0 1 removed 1 7 1 - faulty /dev/loop1
7.2 故障ディスクの切り離し(-r)
”-r”は、RAIDからディスクを切り離すオプションです。
[root@server ~]# mdadm --manage /dev/md0 -r /dev/loop1 mdadm: hot removed /dev/loop1 from /dev/md0
RAIDデバイスの詳細状態を確認します。/dev/loop1のstateがremovedになっていることがわかります。
[root@server ~]# mdadm -D /dev/md0 /dev/md0: Version : 1.2 Creation Time : Wed Feb 23 19:45:57 2022 Raid Level : raid1 Array Size : 510976 (499.00 MiB 523.24 MB) Used Dev Size : 510976 (499.00 MiB 523.24 MB) Raid Devices : 2 Total Devices : 1 Persistence : Superblock is persistent Update Time : Wed Feb 23 19:54:48 2022 State : clean, degraded Active Devices : 1 Working Devices : 1 Failed Devices : 0 Spare Devices : 0 Consistency Policy : resync Name : server:0 (local to host server) UUID : 3479298c:3190d1cd:8cdc260a:8cdb934a Events : 20 Number Major Minor RaidDevice State 0 7 0 0 active sync /dev/loop0 - 0 0 1 removed
7.3 新しいディスクの作成
ループバックデバイスに使うファイルを作成します。
[root@server ~]# dd if=/dev/zero of=disk3.img bs=1024 count=512000
ループバックデバイスを作成します。
[root@server ~]# losetup -f /root/disk3.img
パーティションタイプを設定します。
[root@server ~]# gdisk /dev/loop2
7.4 ディスクの追加(-a)
"-a"は、ディスクをRAIDに追加するオプションです。/dev/loop2のstateがactive syncになっていることがわかります。
[root@server ~]# mdadm --manage /dev/md0 -a /dev/loop2 mdadm: added /dev/loop2
RAIDデバイスの詳細状態を確認します。/dev/loop2のstateがactive syncになっていることがわかります。
[root@server ~]# mdadm -D /dev/md0 /dev/md0: Version : 1.2 Creation Time : Wed Feb 23 19:45:57 2022 Raid Level : raid1 Array Size : 510976 (499.00 MiB 523.24 MB) Used Dev Size : 510976 (499.00 MiB 523.24 MB) Raid Devices : 2 Total Devices : 2 Persistence : Superblock is persistent Update Time : Wed Feb 23 19:59:37 2022 State : clean Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 Consistency Policy : resync Name : server:0 (local to host server) UUID : 3479298c:3190d1cd:8cdc260a:8cdb934a Events : 39 Number Major Minor RaidDevice State 0 7 0 0 active sync /dev/loop0 2 7 2 1 active sync /dev/loop2
8 ミラーリングの動作確認
ミラーリングの動作確認をしてみます。
まず、5.1にしたがって、RAID 1の環境を構成します。そして、RAIDデバイスにテストデータを書き込みます。
[root@server ~]# echo 12345 > /raid/test.txt [root@server ~]# cat /raid/test.txt 12345
/dev/loop1に不良マークをつけて、故障状態にします。
[root@server ~]# mdadm --manage /dev/md0 -f /dev/loop1 mdadm: set /dev/loop1 faulty in /dev/md0
RAIDから/dev/loop1を切り離します。
[root@server ~]# mdadm --manage /dev/md0 -r /dev/loop1 mdadm: hot removed /dev/loop1 from /dev/md0
新規ディスクを作成します。
[root@server ~]# dd if=/dev/zero of=disk3.img bs=1024 count=512000 [root@server ~]# losetup -f /root/disk3.img [root@server ~]# gdisk /dev/loop2
RAIDに新規ディスクを追加します。
[root@server ~]# mdadm --manage /dev/md0 -a /dev/loop2 mdadm: added /dev/loop2
RAIDの状態を確認します。/dev/loop1が切り離され、/dev/loop2が追加されたことがわかります。
[root@server ~]# mdadm -D /dev/md0 /dev/md0: Version : 1.2 Creation Time : Wed Feb 23 20:04:56 2022 Raid Level : raid1 Array Size : 510976 (499.00 MiB 523.24 MB) Used Dev Size : 510976 (499.00 MiB 523.24 MB) Raid Devices : 2 Total Devices : 2 Persistence : Superblock is persistent Update Time : Wed Feb 23 20:08:44 2022 State : clean Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 Consistency Policy : resync Name : server:0 (local to host server) UUID : de9b1a76:5665f2cd:a9c25959:bbad8834 Events : 49 Number Major Minor RaidDevice State 0 7 0 0 active sync /dev/loop0 2 7 2 1 active sync /dev/loop2
RAIDから/dev/loop0を切り離します。
[root@server ~]# mdadm --manage /dev/md0 -f /dev/loop0 mdadm: set /dev/loop0 faulty in /dev/md0 [root@server ~]# mdadm --manage /dev/md0 -r /dev/loop0 mdadm: hot removed /dev/loop0 from /dev/md0
/dev/loop0が切り離され、/dev/loop2だけが残っていることがわかります。
[root@server ~]# mdadm -D /dev/md0 /dev/md0: Version : 1.2 Creation Time : Wed Feb 23 20:04:56 2022 Raid Level : raid1 Array Size : 510976 (499.00 MiB 523.24 MB) Used Dev Size : 510976 (499.00 MiB 523.24 MB) Raid Devices : 2 Total Devices : 1 Persistence : Superblock is persistent Update Time : Wed Feb 23 20:09:59 2022 State : clean, degraded Active Devices : 1 Working Devices : 1 Failed Devices : 0 Spare Devices : 0 Consistency Policy : resync Name : server:0 (local to host server) UUID : de9b1a76:5665f2cd:a9c25959:bbad8834 Events : 54 Number Major Minor RaidDevice State - 0 0 0 removed 2 7 2 1 active sync /dev/loop2
RAIDデバイスに書き込んだテストデータを読み出します。テストデータが読めることがわかります。
[root@server ~]# cat /raid/test.txt 12345
Z 参考情報
私が業務や記事執筆で参考にした書籍を以下のページに記載します。
Linux技術のスキルアップをしよう! - hana_shinのLinux技術ブログ