はじめに
以前の記事で、Raspberry pi(ラズパイ)をRAID1から起動する方法を紹介しました。
この時は、最初のブート領域(/boot/firmware)をRAID1化することができず、その部分をmicroSDカードにのこしたままとしていました。
今回、最初のブート領域(/boot/firmware)をRAID1化することに成功しましたので、ここで紹介します。
実現するためのポイント
最初のブート領域(/boot/firmware)をRAID1化するポイントは、mdadmでRAID1を構成するときに、metadata=0.90 を指定することです。
mdadmでは何も指定しないと、metadata=1.2 となりますが、そうした場合、RAID1の先頭にメタデータが構成されて、FAT32として認識できず、起動できません。
metadata=0.90 を指定すれば、ブート領域(/boot/firmware)を認識でき、起動できるようになります。
実現手順
今回使用機器、OSは以下のとおりです。
- Raspberry Pi 5 8GB版
- ケース&NVMeデュアルHAT:PIRONMAN5 MAX
- M.2 SSD:MOMNET MT34 256GB、EDILOCA EN600PRO 256GB
いずれも、M.2 PCIe3.0 x4 2280サイズSSD
注:Pironman 5 MAXでは、SSDに相性があります。詳細は発売元の説明ページをご覧ください。 - microSDカード :16GB・・・RAID1起動設定後は不要
- OS:Raspberry Pi OS Release 1 Oct 2025 -- Debian ver 13(trixie)
手順としては、
- microSDカードへのRaspberryPi OSのインストール
- microSDカードからの起動
- mdadmのインストール
- SSDのパーティショニング
- SSD2台で、RAID1構成
- RAIDから起動するための設定1
- RAID1ボリュームにmicroSDカードをコピー
- RAIDから起動するための設定2
となりますが、mdadmのインストールまでは、前回の記事を参照ください。
ここでは、SSDのパーティショニングから説明します。
SSDのパーティショニング
Raspberry Pi OSの起動メディアのパーティションは、FAT32の第1パーティションとext4の第2パーティション2つのパーティションで構成されています。
FATの第1パーティションをmicroSDカードと同じ容量にするのが面倒なので、今回はmicroSDカードのパーティション情報をSSDにコピーする方法をとります。
microSDカードのディバイス名確認
lsblk
$ lsblk Enter
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 2G 0 loop
sr0 11:0 1 1024M 0 rom
mmcblk0 179:0 0 14.8G 0 disk
├─mmcblk0p1 179:1 0 512M 0 part /boot/firmware
└─mmcblk0p2 179:2 0 14.3G 0 part /
zram0 254:0 0 2G 0 disk [SWAP]
nvme0n1 259:0 0 238.5G 0 disk
nvme1n1 259:2 0 238.5G 0 disk
上記結果から、
microSDカードのデバイス名は、/dev/mmcblk0 とわかります。
また、SSDのデバイス名は、/dev/nvme0n1、/dev/nvme1n1 になります。
microSDカードのパーティション情報の作成
以下コマンドでmicroSDカードのパーティション情報を sd.info というファイル名で書き出します。
sudo sfdisk -d /dev/mmcblk0 > sd.infosd.infoを編集します。
sudo nano sd.info赤字部分を削除します。
label: dos
label-id: 0x8e604369
device: /dev/mmcblk0
unit: sectors
sector-size: 512
/dev/mmcblk0p1 : start= 16384, size= 1048576, type=c
/dev/mmcblk0p2 : start= 1064960, size= 30051328, type=83
お使いの環境によって、赤字部分は変化していると思います。
label-id:は重複していると、デバイスの認識に支障をきたすため、削除します。
/dev/mmcblk0p2 行の sizeの赤字部分 は、SSDでは容量いっぱいまでつかいたいため、削除しておきます。
こうすることで、つぎからの作業で自動的にlabel-idは任意のもの、2番めのパーティションはSSDの容量いっぱいまで使われます。
SSDにパーティション情報をコピー
2台のSSDに、パーティション情報をコピーします。
1台め
sudo sfdisk /dev/nvme0n1 < sd.info結果
$ sudo sfdisk /dev/nvme0n1 < sd.info Enter
Disk /dev/nvme0n1: 238.47 GiB, 256060514304 bytes, 500118192 sectors
Disk model: EDILOCA EN600Pro 256GB
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: B17B33DE-37AD-448E-BC3F-C8AD985B4D08
Old situation:
>>> Script header accepted.
>>> Script header accepted.
>>> Script header accepted.
>>> Script header accepted.
>>> Created a new DOS (MBR) disklabel with disk identifier 0x53dbce52.
/dev/nvme0n1p1: Created a new partition 1 of type 'W95 FAT32 (LBA)' and of size 512 MiB.
/dev/nvme0n1p2: Created a new partition 2 of type 'Linux' and of size 238 GiB.
/dev/nvme0n1p3: Done.
New situation:
Disklabel type: dos
Disk identifier: 0x53dbce52
Device Boot Start End Sectors Size Id Type
/dev/nvme0n1p1 16384 1064959 1048576 512M c W95 FAT32 (LBA)
/dev/nvme0n1p2 1064960 500118191 499053232 238G 83 Linux
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
2台めも同様に
sudo sfdisk /dev/nvme1n1 < sd.infoSSD2台で、RAID1構成、フォーマット
ここでは、ブートパーティションを、/dev/md0
ルートパーティションを、/dev/md1
としてRAID1を構成します。
ブートパーティションを、/dev/md0 RAID1として作成
sudo mdadm --create /dev/md0 --metadata=0.90 --level=raid1 --raid-devices=2 /dev/nvme0n1p1 /dev/nvme1n1p1ポイントは、--metadata=0.90 を指定することです。
結果
$ sudo mdadm --create /dev/md0 --metadata=0.90 --level=raid1 --raid-devices=2 /dev/nvme0n1p1 /dev/nvme1n1p1 Enter
To optimalize recovery speed, it is recommended to enable write-indent bitmap, do you want to enable it now? [y/N]? y Enter
mdadm: array /dev/md0 started.
ルートパーティションを、/dev/md1 RAID1として作成
sudo mdadm --create /dev/md1 --level=raid1 --raid-devices=2 /dev/nvme0n1p2 /dev/nvme1n1p2こちらは、--metadata の指定は不要です。
結果
$ sudo mdadm --create /dev/md1 --level=raid1 --raid-devices=2 /dev/nvme0n1p2 /dev/nvme1n1p2 Enter
To optimalize recovery speed, it is recommended to enable write-indent bitmap, do you want to enable it now? [y/N]? y Enter
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/N]? y Enter
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.
同期状態の確認
RAID1を作成すると、すぐに2つのSSDの同期が始まります。
同期状態をみるには、以下コマンドを実行します。
cat /proc/mdstat結果
$ cat /proc/mdstat Enter
Personalities : [raid1]
md1 : active raid1 nvme1n1p2[1] nvme0n1p2[0]
249394496 blocks super 1.2 [2/2] [UU]
[=>...................] resync = 8.4% (21102336/249394496) finish=18.7min speed=203067K/sec
bitmap: 1/1 pages [16KB], 65536KB chunk
md0 : active raid1 nvme1n1p1[1] nvme0n1p1[0]
524224 blocks [2/2] [UU]
bitmap: 0/1 pages [0KB], 65536KB chunk
unused devices: <none>
上記実行結果では、md0はすでに同期が完了しており、md1は同期中であることがわかります。
/dev/md0、/dev/md1のフォーマット
/dev/md0は、FAT32(vfat)で、
/dev/md1は、ext4 で
フォーマットします。
sudo mkfs -t vfat /dev/md0sudo mkfs -t ext4 /dev/md1RAIDボリュームの登録
デバイスファイル名/dev/md0や/dev/md1は、起動ごとに変わってしまう可能性があるので、変わらないように固定します。
mdadm --detail --scanコマンドにより現在有効なRAIDが全てリストアップされるので、それを設定ファイル/etc/mdadm/mdadm.confに追記するという方法で固定(登録)します。
sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf結果
$ sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf Enter
ARRAY /dev/md0 metadata=0.90 UUID=6d4a9523:e0894bfa:910c2b8e:90eb6512
ARRAY /dev/md1 metadata=1.2 UUID=8a99e430:06844071:967ebdd7:834a90bf
RAIDから起動するための設定1
initramfsイメージの作成
起動時にRAIDが使用できるinitiramfs (initial ram file system)のイメージを作成します。
まずは、/etc/initramfs-tools/modulesを編集します。
sudo nano /etc/initramfs-tools/modulesこのファイルの最後に、以下の3行を追加します。
追加する3行
raid1
md_mod
ext4
initiramfs (initial ram file system)のイメージを作成します。
sudo update-initramfs -u結果
$ sudo update-initramfs -u Enter
update-initramfs: Generating /boot/initrd.img-6.12.47+rpt-rpi-v8
'/boot/initrd.img-6.12.47+rpt-rpi-v8' -> '/boot/firmware/initramfs8'
update-initramfs: Generating /boot/initrd.img-6.12.47+rpt-rpi-2712
'/boot/initrd.img-6.12.47+rpt-rpi-2712' -> '/boot/firmware/initramfs_2712'
RAID1ボリュームにmicroSDカードをコピー
/dev/md0にmicroSDカードの /boot/firmware をコピー
/dev/md0を/mnt/md0にマウントして、読み書き出きるようにしてから、cpコマンドでコピーします。
# /mnt/md0ディレクトリ作成
sudo mkdir /mnt/md0
# raid /dev/md0 を /mnt/md0 にマウント
sudo mount /dev/md0 /mnt/md0
# microSDカード内の/boot/firmwareにあるファイルをコピー
sudo cp -r /boot/firmware/* /mnt/md0/dev/md1にmicroSDカードの /(ルート)をコピー
こちらは、ddコマンドでコピーします。
sudo dd if=/dev/mmcblk0p2 of=/dev/md1 bs=32M conv=noerror,sync status=progressファイルシステムのチェック
sudo e2fsck -f -y /dev/md1結果
$ sudo e2fsck -f -y /dev/md1 Enter
e2fsck 1.47.2 (1-Jan-2025)
rootfs: recovering journal
Clearing orphaned inode 16326 (uid=0, gid=0, mode=0100644, size=3063072)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Free blocks count wrong (1932728, counted=1932727).
Fix? yes
Free inodes count wrong (800617, counted=800616).
Fix? yes
rootfs: ***** FILE SYSTEM WAS MODIFIED *****
rootfs: 137784/938400 files (0.1% non-contiguous), 1823689/3756416 blocks
パーティションサイズの拡張
sudo resize2fs -p /dev/md1結果
$ sudo resize2fs -p /dev/md1 Enter
resize2fs 1.47.2 (1-Jan-2025)
Resizing the filesystem on /dev/md1 to 62348624 (4k) blocks.
The filesystem on /dev/md1 is now 62348624 (4k) blocks long.
RAIDから起動するための設定2
cmdline.txtの設定
起動時にRAIDボリューム/dev/md1 を / とするよう設定します。microSDカードの/boot/firmware/cmdline.txtではなく、RAIDボリューム/dev/md0 内の cmdline.txt を編集します。
sudo nano /mnt/md0/cmdline.txt変更箇所:赤字部分
旧:console=serial0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles
新:console=serial0,115200 console=tty1 root=/dev/md1 rootfstype=ext4 fsck.repair=yes rootdelay=5 rootwait quiet splash plymouth.ignore-serial-consoles
fstabの更新
起動時にRAIDボリューム
- /dev/md0 が、/boot/firmware に、
- /dev/md1 が、/ に
マウントされるように設定します。
ここでも編集すべきは、SDカード内の/etc/fstabではなく、RAIDボリューム/dev/md1 内のfstabを編集します。
# /mnt/md1ディレクトリ作成
sudo mkdir /mnt/md1
# raid /dev/md0 を /mnt/md0 にマウント
sudo mount /dev/md1 /mnt/md1
# fstab を編集
sudo nano /mnt/md1/etc/fstab変更箇所:赤字部分
旧:
PARTUUID=8e604369-01 /boot/firmware vfat defaults 0 2
PARTUUID=8e604369-02 / ext4 defaults,noatime 0 1
新:
/dev/md0 /boot/firmware vfat defaults 0 2
/dev/md1 / ext4 defaults,noatime 0 1
シャットダウン-microSDカード取り出し-SSD RAIDから起動
microSDカードを取り出すため、いったんシャットダウンします。
sudo shutdown -h nowmicroSDカードを取り外し、起動します。
その後、デバイスのマウント状況を確認します。
df -h
$ df -h Enter
Filesystem Size Used Avail Use% Mounted on
udev 3.9G 0 3.9G 0% /dev
tmpfs 1.6G 15M 1.6G 1% /run
/dev/md1 235G 6.7G 217G 3% /
tmpfs 4.0G 464K 4.0G 1% /dev/shm
tmpfs 5.0M 48K 5.0M 1% /run/lock
tmpfs 1.0M 0 1.0M 0% /run/credentials/systemd-journald.service
tmpfs 4.0G 16K 4.0G 1% /tmp
/dev/md0 512M 81M 431M 16% /boot/firmware
tmpfs 807M 272K 806M 1% /run/user/1000
tmpfs 1.0M 0 1.0M 0% /run/credentials/serial-getty@ttyAMA10.service
tmpfs 1.0M 0 1.0M 0% /run/credentials/getty@tty1.service
RAIDの状態を確認します。
cat /proc/mdstat
$ cat /proc/mdstat Enter
Personalities : [raid1] [raid0] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 nvme0n1p1[0] nvme1n1p1[1]
524224 blocks [2/2] [UU]
bitmap: 0/1 pages [0KB], 65536KB chunk
md1 : active raid1 nvme1n1p2[1] nvme0n1p2[0]
249394496 blocks super 1.2 [2/2] [UU]
bitmap: 1/1 pages [16KB], 65536KB chunk
これで完了です。
おわりに
この方法で、完全RAID1起動が出きるようになりました。
ご参考に。







コメント