mdadmによるRAID1の設定
Debian 13.xで2台のディスクからRAID1を作成し、ext4ファイルシステムを
/srv/dataへ永続的にマウントする。
| 項目 | 値 |
|---|---|
| OS | Debian 13.x |
| 1台目のディスク | /dev/sdb |
| 2台目のディスク | /dev/sdc |
| メンバーパーティション | /dev/sdb1、/dev/sdc1 |
| RAIDレベル | RAID1 |
| MDデバイス | /dev/md0 |
| ファイルシステム | ext4 |
| マウントポイント | /srv/data |
/dev/sdbと/dev/sdcのパーティションテーブル、ファイルシステム、既存のRAIDメタデータは消去される。OSディスクやデータを残すディスクがこの名前で認識されている場合は実行しない。
1. 対象ディスクを確認する
Section titled “1. 対象ディスクを確認する”ディスクのモデル、シリアル番号、容量、ファイルシステム、マウント先を確認する。
lsblk -o NAME,PATH,SIZE,TYPE,FSTYPE,MOUNTPOINTS,MODEL,SERIALsudo fdisk -l /dev/sdb /dev/sdc/dev/sdbと/dev/sdcがRAID専用の空ディスクであり、どのパーティションもマウントされていないことを確認する。
既存のMDアレイも確認する。
cat /proc/mdstat/dev/md0が既に存在する場合は、この手順の名前と重複するため続行しない。
2. 必要なパッケージをインストールする
Section titled “2. 必要なパッケージをインストールする”sudo apt updatesudo apt install mdadm parted3. RAID用パーティションを作成する
Section titled “3. RAID用パーティションを作成する”次の操作により、/dev/sdbと/dev/sdcに存在する署名とパーティションテーブルを消去する。
sudo wipefs --all /dev/sdbsudo wipefs --all /dev/sdc各ディスクへGPTパーティションテーブルと、ディスク全体を使うRAID用パーティションを作成する。
sudo parted --script /dev/sdb \ mklabel gpt \ mkpart primary 1MiB 100% \ set 1 raid onsudo parted --script /dev/sdc \ mklabel gpt \ mkpart primary 1MiB 100% \ set 1 raid onset 1 raid onは、GPTのパーティション種別をLinux RAIDとして記録する。MDメタデータそのものは次のmdadm --createで書き込まれるため、アレイ作成の必須条件ではない。パーティションの用途をOSや管理ツールから識別できるようにするため設定する任意の指定である。
カーネルが新しいパーティションを認識するまで待ち、結果を確認する。
sudo udevadm settlelsblk -o NAME,PATH,SIZE,TYPE,FSTYPE /dev/sdb /dev/sdc/dev/sdb1と/dev/sdc1が存在し、ほぼ同じ容量であることを確認する。
新しいパーティションと同じ位置に残っている古いファイルシステムやRAIDの署名を消去する。この操作により、以前のパーティション内容は利用できなくなる。
sudo wipefs --all /dev/sdb1sudo wipefs --all /dev/sdc14. RAID1アレイを作成する
Section titled “4. RAID1アレイを作成する”sudo mdadm --create /dev/md0 \ --level=1 \ --raid-devices=2 \ --metadata=1.2 \ --name=data \ /dev/sdb1 /dev/sdc1--level=1と--raid-devices=2は、2つのメンバーを持つRAID1として作成するために必要である。--metadata=1.2はDebian 13のmdadmで既定となるメタデータ形式を明示する任意指定、--name=dataはメタデータへアレイ名を保存する任意指定である。
確認を求められた場合は、対象が/dev/sdb1と/dev/sdc1であることを再確認してyesを入力する。
アレイの状態を確認する。
cat /proc/mdstatsudo mdadm --detail /dev/md0作成直後はresyncが表示される。アレイはresync中でも使用できる。完了までの進捗を監視する場合は、任意で次のコマンドを実行する。
watch -n 2 cat /proc/mdstatCtrl+Cで監視を終了する。resync完了後は[2/2] [UU]となり、mdadm --detailのStateがcleanになる。
5. ファイルシステムを作成してマウントする
Section titled “5. ファイルシステムを作成してマウントする”/dev/md0上にある既存のファイルシステムは、この操作で上書きされる。
sudo mkfs.ext4 -L data_raid1 /dev/md0sudo install -d -o root -g root -m 755 /srv/datasudo mount /dev/md0 /srv/datafindmnt /srv/datadf -hT /srv/data書き込みを確認する。
echo 'RAID1 write test' | sudo tee /srv/data/raid-test.txtsudo cat /srv/data/raid-test.txt6. アレイを起動時に組み立てる
Section titled “6. アレイを起動時に組み立てる”アレイからmdadm.confへ記録するARRAY行を生成する。
sudo mdadm --detail --brief /dev/md0表示されたARRAY行を、/etc/mdadm/mdadm.confへ1回だけ追加する。
メンバー側のMDメタデータだけでもアレイを検出できるが、ARRAY行にMDアレイUUIDと名前を記録すると、起動時に同じアレイを意図したMDデバイスとして組み立てやすくなる。--detail --brief /dev/md0は指定したアレイだけを設定行の形式で表示する。--detail --scanは/proc/mdstatにある全アレイを表示するため、複数アレイがある場合はそのまま追記しない。
sudoedit /etc/mdadm/mdadm.conf追加後、同じMDアレイUUIDを持つARRAY行が重複していないことを確認する。
grep '^ARRAY ' /etc/mdadm/mdadm.confルートファイルシステムなど、通常のルートファイルシステムをマウントする前に必要なアレイへ設定を反映する場合は、任意でinitramfsを更新する。
sudo update-initramfs -u7. ファイルシステムを起動時にマウントする
Section titled “7. ファイルシステムを起動時にマウントする”ファイルシステムUUIDを確認する。
sudo blkid /dev/md0TYPE="ext4"と表示された行のUUIDを使用し、/etc/fstabへ次の形式で追加する。
UUID=<blkidで確認したext4のUUID> /srv/data ext4 defaults 0 2sudoedit /etc/fstab現在のマウントを解除し、fstabだけで再マウントできることを確認する。
sudo umount /srv/datasudo mount -afindmnt /srv/datasudo cat /srv/data/raid-test.txt8. 故障メンバーを交換する
Section titled “8. 故障メンバーを交換する”ここでは/dev/sdb1が故障し、交換ディスクが/dev/sddとして認識されたものとする。実際のデバイス名は、モデルとシリアル番号を使って確認する。
lsblk -o NAME,PATH,SIZE,TYPE,FSTYPE,MOUNTPOINTS,MODEL,SERIALsudo mdadm --detail /dev/md0まだアクティブな/dev/sdb1を交換する場合は、故障状態にしてから取り外す。
sudo mdadm /dev/md0 --fail /dev/sdb1sudo mdadm /dev/md0 --remove /dev/sdb1cat /proc/mdstatsudo mdadm --detail /dev/md0[2/1] [U_]または[2/1] [_U]とdegradedが表示されることを確認する。
交換ディスク/dev/sddの既存データを消去し、RAID用パーティションを作成する。この操作により/dev/sddの既存データは失われる。
sudo wipefs --all /dev/sddsudo parted --script /dev/sdd \ mklabel gpt \ mkpart primary 1MiB 100% \ set 1 raid onsudo udevadm settlesudo wipefs --all /dev/sdd1交換パーティションが既存のRAIDメンバー以上の容量であることを確認する。
lsblk -b -o NAME,PATH,SIZE,TYPE /dev/sdc /dev/sdd交換パーティションをアレイへ追加する。
sudo mdadm /dev/md0 --add /dev/sdd1watch -n 2 cat /proc/mdstatrecoveryの完了後、[2/2] [UU]とcleanへ戻ったことを確認する。
sudo mdadm --detail /dev/md0sudo cat /srv/data/raid-test.txtメンバー交換ではMDアレイUUIDとext4のUUIDは変わらないため、mdadm.confとfstabのUUIDは変更しない。
9. 再起動後に確認する
Section titled “9. 再起動後に確認する”sudo reboot再起動後、アレイとマウントを確認する。
cat /proc/mdstatsudo mdadm --detail /dev/md0findmnt /srv/datasudo cat /srv/data/raid-test.txt/dev/md0がcleanかつ[UU]であり、/srv/dataからテストファイルを読めることを確認する。
10. 監視と定期checkを確認する
Section titled “10. 監視と定期checkを確認する”mdmonitor.serviceの状態を確認する。
systemctl status mdmonitor.serviceメール通知を使う場合は、/etc/mdadm/mdadm.confへ実際に受信できる宛先を1つ設定する。
MAILADDR admin@example.com設定後にサービスを再起動し、任意でテストイベントを送る。テストを実行する前に、このホストから指定した宛先へメールを配送できることを確認する。
sudo systemctl restart mdmonitor.servicesudo mdadm --monitor --scan --oneshot --test定期check用timerを確認する。
systemctl list-timers mdcheck_start.timer mdcheck_continue.timermdcheck_start.timerが無効で、定期checkを利用する場合は有効化する。
sudo systemctl enable --now mdcheck_start.timercheckの実行中は/proc/mdstatへ進捗が表示される。完了後の不一致数は次のファイルで確認する。
cat /proc/mdstatcat /sys/block/md0/md/mismatch_cnt-
mdadm(8) — Debian Manpages
--create、--fail、--remove、--addと状態確認。 -
mdadm.conf(5) — Debian Manpages
ARRAY行と起動時のアレイ検出。 -
Debian SoftwareRAID RAID1、ファイルシステム、
mdadm.conf、initramfsの構成例。