mdadmを使用したソフトウェアRaid構築
以下の環境で行う
Ubuntu Server 22.04 LTS
Raid用ストレージはOS用とは別にUSB接続のHDD2台
参考にさせて頂いたのはこれらサイト様
下記コマンドでHDDの認識状況を確認
sudo fdisk -l
自分の環境では「/dev/sdb」と「/dev/sdc」に割り当てられていることを確認
「parted」コマンドを使用し、GPTで全容量を指定したパーティション作成
sudo parted --script /dev/sdb "mklabel gpt"
sudo parted --script /dev/sdc "mklabel gpt"
sudo parted --script /dev/sdb "mkpart primary 0% 100%"
sudo parted --script /dev/sdc "mkpart primary 0% 100%"
続いてパーティションにraidフラグを付与する
付与しないとカーネルにraidアレイとして認識されないらしい
sudo parted --script /dev/sdb "set 1 raid on"
sudo parted --script /dev/sdc "set 1 raid on"
fdiskを使用して下記のようにフラグが立っていることを確認
Device Start End Sectors Size Type
/dev/sdb1 2048 3907028991 3907026944 1.8T Linux RAID
~~
Device Start End Sectors Size Type
/dev/sdc1 2048 3907028991 3907026944 1.8T Linux RAID
「mdadm」を使用してRaidを構築する
sudo mdadm --create /dev/md0 --level=raid1 --raid-devices=2 /dev/sdb1 /dev/sdc1
続けるか問われるので「y」
Continue creating array? y
下記コマンドで同期の状態が確認できる
「Resync」が100%になれば同期完了
$ sudo mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Wed Dec 6 12:53:41 2023
Raid Level : raid1
Array Size : 1953381376 (1862.89 GiB 2000.26 GB)
Used Dev Size : 1953381376 (1862.89 GiB 2000.26 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Intent Bitmap : Internal
Update Time : Wed Dec 6 12:58:08 2023
State : clean, resyncing
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Consistency Policy : bitmap
Resync Status : 1% complete
Name : hoge:0 (local to host hoge)
UUID : ea4e713e:82be639e:88134145:98c2a87c
Events : 53
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 33 1 active sync /dev/sdc1
ext4を指定してフォーマット
$ sudo mkfs -t ext4 /dev/md0
mke2fs 1.46.5 (30-Dec-2021)
Creating filesystem with 488345344 4k blocks and 122093568 inodes
Filesystem UUID: 19990bb6-df17-4688-9989-b9445c4b130d
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000, 214990848
Allocating group tables: done
Writing inode tables: done
Creating journal (262144 blocks): done
Writing superblocks and filesystem accounting information: done
マウント用フォルダを作成し「/dev/md0」をマウントする
sudo mkdir /mnt/raid1
sudo chown -R username:username /mnt/raid1
sudo mount /dev/md0 /mnt/raid1
dfで確認
$ df
Filesystem 1K-blocks Used Available Use% Mounted on
~略~
/dev/md0 1921594568 28 1823909088 1% /mnt/raid1
OK
fstabに追記して再起動時でもマウントするように設定する
作成した「/dev/md0」は勝手に名前が変わることがあるらしいのでUUIDで指定する
$ blkid | grep md
/dev/md0: UUID="19990bb6-df17-4688-9989-b9445c4b130d" BLOCK_SIZE="4096" TYPE="ext4"
これを使用して下記を追記する
$ sudo vim /etc/fstab
+ /dev/disk/by-uuid/19990bb6-df17-4688-9989-b9445c4b130d /mnt/raid1 ext4 defaults 0 0
エラーがないか確認する
sudo mount -a
再起動してもマウントされていることを確認
md127になっていますね
$ df /mnt/raid1
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/md127 1921594568 28 1823909088 1% /mnt
マウントしたフォルダの所有者がrootのため作業ユーザでファイル作成ができない
適切ではない気がするが下記のように対処する
cd /mnt/raid1
sudo chown -R username:username ./
これで作業ユーザの所有になり、再起動後でも編集ができる
…もっと適切な対処はないものか
これらを参考にさせて頂き、HDD故障時の練習を行う
今回は「/dev/sdb1」を故障したものとして練習する
$ sudo mdadm --fail /dev/md127 /dev/sdb1
mdadm: set /dev/sdb1 faulty in /dev/md127
raidアレイの状態を確認する
$ sudo mdadm --detail /dev/md127
〜〜
Number Major Minor RaidDevice State
0 8 33 0 active sync /dev/sdc1
- 0 0 1 removed
1 8 17 - faulty /dev/sdb1
OKのよう
またこの状態でもマウントしたフォルダにアクセスできることを確認
続いて故障扱いした「/dev/sdb1」をアレイから取り除く
$ sudo mdadm --remove /dev/md127 /dev/sdb1
mdadm: hot removed /dev/sdb1 from /dev/md127
取り除いたsdbのパーティションを削除する
$ sudo fdisk /dev/sdb
Command (m for help): d
Selected partition 1
Partition 1 has been deleted.
続いてパーティションテーブルを削除する
$ sudo wipefs -af /dev/sdb
これでHDDが綺麗になったはず
再度HDDのパーティション等の設定を行う
$ sudo parted --script /dev/sdb "mklabel gpt"
$ sudo parted --script /dev/sdb "mkpart primary 0% 100%"
$ sudo parted --script /dev/sdb "set 1 raid on"
作成しなおしたHDD(/dev/sdb1)をアレイに追加する
$ sudo mdadm --add /dev/md127 /dev/sdb1
mdadm: re-added /dev/sdb1
…re-addですって
パーティションを同じように作り直したので同じHDDと認識されたのかな
詳細を確認、同期はできているようですね
$ sudo mdadm --detail /dev/md127
/dev/md127:
Version : 1.2
Creation Time : Wed Dec 6 12:53:41 2023
Raid Level : raid1
Array Size : 1953381376 (1862.89 GiB 2000.26 GB)
Used Dev Size : 1953381376 (1862.89 GiB 2000.26 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Intent Bitmap : Internal
Update Time : Sat Dec 16 09:35:10 2023
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Consistency Policy : bitmap
Name : garnet:0 (local to host garnet)
UUID : ea4e713e:82be639e:88134145:98c2a87c
Events : 3939
Number Major Minor RaidDevice State
0 8 33 0 active sync /dev/sdc1
1 8 17 1 active sync /dev/sdb1