RAIDは複数台のHDDまたはSSDを一つのディスクとして,取り扱う技術です.
RAIDの目的は,「ディスクアクセスの高速化」または「データ信頼性の向上」,もしくはその両方です.
本記事では,HDD2台のRAID1を構築する手順を示します.
デバイスはそれぞれ/dev/sda
と/dev/sdb
です.
デバイスの準備
まずは,RAID用のパーティションを作成します
ディスクを削除し,新しいパーティションを作成
今回使用するHDDは16TBです.容量が2TB以上のため,parted
を使用して,新たなパーティションを作成します.
まずは,1台目のHDD(/dev/sda
)のGPTパーティションを作成します.
手順は下記の通りです.
mklabel gpt
でGPT化mkpart ext4 0% 100%
でディスク全体をext4でフォーマットset 1 raid on
でRAIDフラグを設定
parted /dev/sda
GNU Parted 3.4
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel gpt
Warning: The existing disk label on /dev/sda will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? y
(parted) mkpart ext4 0% 100%
(parted) p
Model: ATA TOSHIBA MG08ACA1 (scsi)
Disk /dev/sda: 16.0TB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 16.0TB 16.0TB ext4
(parted) set 1 raid on
(parted) p
Model: ATA TOSHIBA MG08ACA1 (scsi)
Disk /dev/sda: 16.0TB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 16.0TB 16.0TB ext4 raid
(parted) quit
/dev/sdb
も同様に行います.
この段階で,/dev/sda1
および/dev/sdb2
のパーティションが作成されています.
RAID構築
ここからソフトウェアRAIDを構築します
ここで紹介するRAIDレベルはRAID1ですが,RAID0などの他のRAIDレベルでも同様の手順で構築できます.
ソフトウェアRAIDの構築とその管理を行うソフトウェアである “mdadm” を用います.
mdadmのインストール
まずmdadmのインストールを行います.
インストール方法はOSに応じて下記のとおりです.
・Ubuntu/Debian系
apt install mdadm
・CentOS/RHEL系
yum install mdadm
RAIDの構築
下記コマンドで,RAIDを構築します.
mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sda1 /dev/sdb1
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
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
--level=
で,RAIDレベルを指定します.
RAIDの状態を確認
cat /proc/mdstat
でRAIDの状態を確認できます.
cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md0 : active (auto-read-only) raid1 sdb1[1] sda1[0]
15625745408 blocks super 1.2 [2/2] [UU]
resync=PENDING
bitmap: 114/117 pages [456KB], 65536KB chunk
unused devices: <none>
また,さらに詳細な情報を確認するにはmdadm --datail <device>
で確認できます.
mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : ---------------------
Raid Level : raid1
Array Size : 15625745408 (14901.87 GiB 16000.76 GB)
Used Dev Size : 15625745408 (14901.87 GiB 16000.76 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Intent Bitmap : Internal
Update Time : ---------------------
State : clean, resyncing (PENDING)
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Consistency Policy : bitmap
Name : localhost:0 (local to host localhost)
UUID : ********:********:********:********6
Events : 131
Number Major Minor RaidDevice State
0 8 1 0 active sync /dev/sda1
1 8 17 1 active sync /dev/sdb1
フォーマット
次に,ディスクを使用可能にするためにフォーマットを行います.(下記コマンドでは,ext4でフォーマット)
mkfs -t ext4 /dev/md0
mke2fs 1.46.2 (28-Feb-2021)
Creating filesystem with 3906436352 4k blocks and 488304640 inodes
Filesystem UUID: ********-********-********-********
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000, 214990848, 512000000, 550731776, 644972544, 1934917632,
2560000000, 3855122432
Allocating group tables: done
Writing inode tables: done
Creating journal (262144 blocks):
done
Writing superblocks and filesystem accounting information:
done
現段階でデバイスを確認すると,md0
が作成されており,ブロックタイプがraid1
を表示されます.
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 14.6T 0 disk
└─sda1 8:1 0 14.6T 0 part
└─md0 9:0 0 14.6T 0 raid1
sdb 8:16 0 14.6T 0 disk
└─sdb1 8:17 0 14.6T 0 part
└─md0 9:0 0 14.6T 0 raid1
マウント
作成したRAIDディスクをマウントし,使用可能な状態にします.
今回は/mnt/raid1
をマウント先とします.
mkdir -p /mnt/raid1
mount -t ext4 /dev/md0 /mnt/raid1
下記のようにMounted on
にマウント先が表示されれば正常に動作しています.
df -h
Filesystem Size Used Avail Use% Mounted on
...
/dev/md0 15T 28K 14T 1% /mnt/raid1
再起動時に自動でマウント
再起動を行うとマウント設定がリセットされます.
再度手動で設定を行うのは面倒なため,再起動時に自動でマウントする設定を行います.
/etc/fstab
の末尾に下記のように設定を記述します.
/etc/fstab
...
/dev/md0 /mnt/raid1 ext4 defaults 0 0
再起動時の注意点
ここ重要
再起動時に/dev/md0
が/dev/md127
に勝手に変更されます.
デバイス名が変更されるとマウントに失敗するため,デバイス名の変更を防ぐ必要があります.
現在のRAID設定をmdadmの設定ファイル(/etc/mdadm/mdadm.conf
)に記述します.
mdadm --detail --scan /dev/md0 >> /etc/mdadm/mdadm.conf
上記コマンドでは,mdadm --detail --scan <device>
でデバイスの詳細設定を出力し,そのまま設定ファイルに追記しています.
mdadm --detail --scan <device>
では,下記のような情報が出力されます.
mdadm --detail --scan /dev/md0
ARRAY /dev/md0 metadata=1.2 name=localhost:0 UUID=********:********:********:********
下記コマンドで,記述した設定を反映します.
update-initramfs -u
RAID設定を解除する方法
RAID構築後にRAID設定を削除したい場合,下記コマンドです.
mdadm --misc --stop /dev/md0
mdadm --misc --zero-superblock /dev/sda1
mdadm --misc --zero-superblock /dev/sdb1
リビルド
念のため,HDDが破損した際のリビルドの練習をしておきましょう
HDDが破損した場合,新しいHDDに変更してRAIDを再構築する必要があります.
ここでは,HDDを強制的に引き抜き破損した状態を再現しました.
一つ目のディスクのステータスがremoved
と表示されていることが確認できます.
mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : ---------------------
Raid Level : raid1
Array Size : 15625745408 (14901.87 GiB 16000.76 GB)
Used Dev Size : 15625745408 (14901.87 GiB 16000.76 GB)
Raid Devices : 2
Total Devices : 1
Persistence : Superblock is persistent
Intent Bitmap : Internal
Update Time : ---------------------
State : clean, degraded
Active Devices : 1
Working Devices : 1
Failed Devices : 0
Spare Devices : 0
Consistency Policy : bitmap
Name : localhost:0 (local to host localhost)
UUID : ********:********:********:********
Events : 4594
Number Major Minor RaidDevice State
- 0 0 0 removed
1 8 17 1 active sync /dev/sdb1
新しいデバイスを追加します.
mdadm --manage /dev/md0 --add /dev/sda1
mdadm: re-added /dev/sda1
デバイスを追加すると,spare rebuilding
と表示され,自動的にリビルドされます.
mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : ---------------------
Raid Level : raid1
Array Size : 15625745408 (14901.87 GiB 16000.76 GB)
Used Dev Size : 15625745408 (14901.87 GiB 16000.76 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Intent Bitmap : Internal
Update Time : ---------------------
State : clean, degraded, recovering
Active Devices : 1
Working Devices : 2
Failed Devices : 0
Spare Devices : 1
Consistency Policy : bitmap
Rebuild Status : 0% complete
Name : localhost:0 (local to host localhost)
UUID : ********:********:********:********
Events : 4597
Number Major Minor RaidDevice State
0 8 1 0 spare rebuilding /dev/sda1
1 8 17 1 active sync /dev/sdb1
進捗率は下記のように表示されるので,100%になるまで待ちます.
...
Rebuild Status : 11% complete
...
16TBもあるので,1日弱かかりました.
終了すると,statusがactiveと表示されます.
mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : ---------------------
Raid Level : raid1
Array Size : 15625745408 (14901.87 GiB 16000.76 GB)
Used Dev Size : 15625745408 (14901.87 GiB 16000.76 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Intent Bitmap : Internal
Update Time : ---------------------
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Consistency Policy : bitmap
Name : localhost:0 (local to host localhost)
UUID : ********:********:********:********
Events : 20189
Number Major Minor RaidDevice State
0 8 1 0 active sync /dev/sda1
1 8 17 1 active sync /dev/sdb1
最後に
本記事では,LinuxにおけるソフトウェアRAIDの設定を紹介しました.
ソフトウェアRAIDは,RAIDカードが不要のため安価というメリットがありますが,信頼性の面ではハードウェアRAIDが圧倒的に勝っています.
より信頼性の高いシステムを構築する際にはRAIDカードを利用したハードウェアRAIDを推奨します.
手頃なRAIDはソフトウェアRAID
安全なものはハードウェアRAID
RAID構築可能なマザーボードもありますが,マザーボードが破損したら修復できないため,かなり危険です.仕組み上,同機種のマザーボードに交換すれば修復が可能なはずですが,出荷ロットによって不具合が起こる可能性が高いです.