お知らせ!! 「jpcmoh.myds.me」から「mohlog.com」へ変更しました
PR
Linuxをつかおう!!

Raspberry pi(ラズパイ)をRAID1から起動-ブート用microSDカード不要編

アイキャッチ ラズパイ完全RAID1 Linuxをつかおう!!
記事内に広告が含まれています。
スポンサーリンク

はじめに

以前の記事で、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)
created by Rinker
Raspberry Pi
¥12,700 (2025/10/28 13:15:21時点 Amazon調べ-詳細)

手順としては、

  • 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

上記結果から、
microSDカードのデバイス名は、/dev/mmcblk0 とわかります。
また、SSDのデバイス名は、/dev/nvme0n1/dev/nvme1n1 になります。

microSDカードのパーティション情報の作成

以下コマンドでmicroSDカードのパーティション情報を sd.info というファイル名で書き出します。

コマンド:パーティション情報の書き出し
sudo sfdisk -d /dev/mmcblk0 > sd.info

sd.infoを編集します。

コマンド:sd.infoの編集
sudo nano sd.info

赤字部分を削除します。

お使いの環境によって、赤字部分は変化していると思います。
label-id:は重複していると、デバイスの認識に支障をきたすため、削除します。
/dev/mmcblk0p2 行の sizeの赤字部分 は、SSDでは容量いっぱいまでつかいたいため、削除しておきます。
こうすることで、つぎからの作業で自動的にlabel-idは任意のもの、2番めのパーティションはSSDの容量いっぱいまで使われます。

SSDにパーティション情報をコピー

2台のSSDに、パーティション情報をコピーします。

1台め

コマンド:パーティション情報をnvme0n1へコピー
sudo sfdisk /dev/nvme0n1 < sd.info

2台めも同様に

コマンド:パーティション情報をnvme1n1へコピー
sudo sfdisk /dev/nvme1n1 < sd.info

SSD2台で、RAID1構成、フォーマット

ここでは、ブートパーティションを、/dev/md0
ルートパーティションを、/dev/md1
としてRAID1を構成します。

ブートパーティションを、/dev/md0 RAID1として作成

コマンド:/dev/md0 RAID1構成
sudo mdadm --create /dev/md0 --metadata=0.90 --level=raid1 --raid-devices=2 /dev/nvme0n1p1 /dev/nvme1n1p1

ポイントは、--metadata=0.90 を指定することです。

ルートパーティションを、/dev/md1 RAID1として作成

コマンド:/dev/md1 RAID1構成
sudo mdadm --create /dev/md1 --level=raid1 --raid-devices=2 /dev/nvme0n1p2 /dev/nvme1n1p2

こちらは、--metadata の指定は不要です。

同期状態の確認

RAID1を作成すると、すぐに2つのSSDの同期が始まります。
同期状態をみるには、以下コマンドを実行します。

コマンド:RAID同期状態の確認
cat /proc/mdstat

上記実行結果では、md0はすでに同期が完了しており、md1は同期中であることがわかります。

/dev/md0、/dev/md1のフォーマット

/dev/md0は、FAT32(vfat)で、
/dev/md1は、ext4 で
フォーマットします。

コマンド:/dev/md0をFAT32(vfat)でフォーマット
sudo mkfs -t vfat /dev/md0
コマンド:/dev/md1をext4でフォーマット
sudo mkfs -t ext4 /dev/md1

RAIDボリュームの登録

デバイスファイル名/dev/md0や/dev/md1は、起動ごとに変わってしまう可能性があるので、変わらないように固定します。
mdadm --detail --scanコマンドにより現在有効なRAIDが全てリストアップされるので、それを設定ファイル/etc/mdadm/mdadm.confに追記するという方法で固定(登録)します。

コマンド:RAIDボリュームの登録
sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf

RAIDから起動するための設定1

initramfsイメージの作成

起動時にRAIDが使用できるinitiramfs (initial ram file system)のイメージを作成します。
まずは、/etc/initramfs-tools/modulesを編集します。

コマンド:/etc/initramfs-tools/modulesの編集
sudo nano /etc/initramfs-tools/modules

このファイルの最後に、以下の3行を追加します。

initiramfs (initial ram file system)のイメージを作成します。

コマンド:initiramfs (initial ram file system)のイメージを作成
sudo update-initramfs -u

RAID1ボリュームにmicroSDカードをコピー

/dev/md0にmicroSDカードの /boot/firmware をコピー

/dev/md0を/mnt/md0にマウントして、読み書き出きるようにしてから、cpコマンドでコピーします。

コマンド:/dev/md0にmicroSDカードの /boot/firmware をコピー
# /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コマンドでコピーします。

コマンド:/dev/md1にmicroSDカードの /をコピー
sudo dd if=/dev/mmcblk0p2 of=/dev/md1 bs=32M conv=noerror,sync status=progress

ファイルシステムのチェック

コマンド:ファイルシステムのチェック
sudo e2fsck -f -y /dev/md1

パーティションサイズの拡張

コマンド:パーティションサイズの拡張
sudo resize2fs -p /dev/md1

RAIDから起動するための設定2

cmdline.txtの設定

起動時にRAIDボリューム/dev/md1 を / とするよう設定します。microSDカードの/boot/firmware/cmdline.txtではなく、RAIDボリューム/dev/md0 内の cmdline.txt を編集します。

コマンド:cmdline.txt の編集
sudo nano /mnt/md0/cmdline.txt

fstabの更新

起動時にRAIDボリューム

  • /dev/md0 が、/boot/firmware に、
  • /dev/md1 が、/ に

マウントされるように設定します。
ここでも編集すべきは、SDカード内の/etc/fstabではなく、RAIDボリューム/dev/md1 内のfstabを編集します。

コマンド: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

シャットダウン-microSDカード取り出し-SSD RAIDから起動

microSDカードを取り出すため、いったんシャットダウンします。

コマンド:シャットダウン
sudo shutdown -h now

microSDカードを取り外し、起動します。
その後、デバイスのマウント状況を確認します。

コマンド:ディバイス名確認
df -h

RAIDの状態を確認します。

コマンド:ディバイス名確認
cat /proc/mdstat

これで完了です。

スポンサーリンク

おわりに

この方法で、完全RAID1起動が出きるようになりました。
ご参考に。

コメント

タイトルとURLをコピーしました