0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[Raspberry Pi OS Lite] M.2 SSDへのOSの移行と「Unable to find root filesystem」エラー解消法

Last updated at Posted at 2024-12-23

はじめに

Raspberry Piのストレージとして一般的に使用されるSDカードは, 長期間使用すると故障しやすいという弱点があります. そのため, 耐久性やパフォーマンスの向上を目的として, SSDやUSBデバイスを用いた起動方法が広く採用されています.

デスクトップ版のRaspberry Pi OSでは, 標準で提供される「SD Card Copier」を使用してデータを簡単に移行できます. しかし, CLIであるLite版のOSでは, 別の方法が必要となります.

この記事では, Argon ONE M.2 CaseとM.2 SATA SSDを使用し, rpi-cloneを用いてデータを移行し, Raspberry Pi LiteをSSDから起動させる手順を解説します.

また, 移行中に遭遇した

(initramfs) Unable to find root filesystem

というエラーの原因と, その解決方法について解説します.

エラーの原因:

SSDの起動に必要なファイルの中に, SDカードのPARTUUIDがそのまま残っていたことが原因でした. これを正しいPARTUUIDに訂正することで解決できました.

Argon ONE M.2 Caseとは?

  • フルサイズHDMIポートを2つ搭載
  • 電源管理モードを搭載
  • 赤外線リモコン(IR)サポート内蔵
  • M.2 SATA SSDに対応(Key-BおよびKey B&M対応)
  • Raspberry Pi 4の高速ブートと大容量ストレージを実現
  • UASP対応により、高速なデータ転送が可能
  • 伝統的なmicroSDカードに比べて、高速な起動時間と大容量ストレージを提供

翻訳引用: Argon ONE M.2販売ページ
他にもGPIOピンが使えるなど, Raspberry Piの機能を拡張できるケースです.

1. rpi-cloneのインストール

まず, rpi-cloneをインストールします.
この時点では, SDカードから起動させています.

sudo apt install -y git
git clone https://github.com/billw2/rpi-clone.git
cd rpi-clone
sudo cp rpi-clone rpi-clone-setup /usr/local/sbin

2. SSDにデータ移行

まず, データを移行する前にデバイス名を確認します.
この時点でも, SDカードから起動させています.

SSDを接続し, 以下コマンドを実行します.

lsblk

出力例:

NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda           8:0    0 119.2G  0 disk 
|-sda1        8:1    0   512M  0 part 
`-sda2        8:2    0  28.5G  0 part 
mmcblk0     179:0    0    29G  0 disk 
|-mmcblk0p1 179:1    0   512M  0 part /boot/firmware
`-mmcblk0p2 179:2    0  28.5G  0 part /

今回はSDカードから起動しているため, mmcblk0がSDカードのデバイス名であることがわかります.
同様に, sdaはSSDのデバイス名であることがわかります.


それでは, rpi-cloneを使ってSSDにOSを移行していきます.

sudo rpi-clone sda

実行途中で以下のように聞かれるので, "yes"を入力します.

Do you want to initialize the destination disk /dev/sda? (yes/no): yes

データ移行が完了すると,

Hit Enter when ready to unmount the /dev/sda partitions...

と出るのでenterを押します. これで移行完了です.

3. 正しいPARTUUIDへの書き換え

手順2までの状態でSSDから起動すると,

(initramfs) Unable to find root filesystem

というエラーが出てしまいます.

その原因は, SSDの起動に必要なファイルの中に, SDカードのPARTUUIDがそのまま残っていることでした.

そのため, 以下でファイルの中身を書き換えていきます.
※この時点でも, SDカードから起動しています.

まず, 以下のコマンドで, それぞれの正しいPARTUUIDを確認します.

sudo blkid

出力例:

PARTUUIDなどの値は環境によって異なりますので, 適宜ご自身の環境に合わせてください.

/dev/mmcblk0p1: LABEL_FATBOOT="bootfs" LABEL="bootfs" UUID="SDCARD-ABCD" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="SDCARD-01"
/dev/mmcblk0p2: LABEL="rootfs" UUID="sdcard-0a-1234" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="SDCARD-02"
/dev/sda2: LABEL="rootfs" UUID="ssd-0a-1234" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="SSD-02"
/dev/sda1: LABEL_FATBOOT="bootfs" LABEL="bootfs" UUID="SSD-1234" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="SSD-01"

3-1. sda1のファイル編集

次に, sda1をマウントします

sudo mount /dev/sda1 /mnt
cd /mnt/

以下でcmdline.txtの内容を参照すると,

cat cmdline.txt

以下のようになっています.

console=serial-sample console=tty1 root=PARTUUID=SDCARD-02 rootfstype=ext4 fsck.repair=yes rootwait cfg80211.ieee80211_regdom=JP

このPARTUUIDは先ほど$ blkidで確認したSDカードのPARTUUIDになってしまっています.
この値をSSDのPARTUUIDであるSSD-02に書き換えます.

対応したPARTUUIDは, blkidコマンドの出力結果を比較し, LABELTYPEを基に探すと見つけやすいです.

sudo nano cmdline.txt 

PARTUUIDの部分をSSDのPARTUUIDに書き換えます.

console=serial-sample console=tty1 root=PARTUUID=SSD-02 rootfstype=ext4 fsck.repair=yes rootwait cfg80211.ieee80211_regdom=JP

変更前後を比較すると, 以下の通りになります.

-console=serial-sample console=tty1 root=PARTUUID=SDCARD-02 rootfstype=ext4 fsck.repair=yes rootwait cfg80211.ieee80211_regdom=JP
+console=serial-sample console=tty1 root=PARTUUID=SSD-02 rootfstype=ext4 fsck.repair=yes rootwait cfg80211.ieee80211_regdom=JP

これでsda1について書き換えが完了しました.
アンマウントします.

cd && sudo umount /mnt/

ここでcdコマンドを実行しないと, target is busyというエラーが出てしまうので注意してください.
(僕はハマりましたTT)

3-2. sda2のファイルの編集

先ほどと同じようにマウントします.

sudo mount /dev/sda2 /mnt
cd /mnt/

問題のファイルを確認します.

cat /etc/fstab 

以下のような中身になっていると思います.

proc            /proc           proc    defaults          0       0
PARTUUID=SDCARD-01  /boot/firmware  vfat    defaults          0       2
PARTUUID=SDCARD-02  /               ext4    defaults,noatime  0       1
# a swapfile is not a swap partition, no line here
#   use  dphys-swapfile swap[on|off]  for that

ここでも, 先ほどと同じ用にSDカードのPARTUUIDが書かれています.


書き換える前に, もう一度PARTUUIDを確認します.

blkid

出力結果

/dev/mmcblk0p1: LABEL_FATBOOT="bootfs" LABEL="bootfs" UUID="SDCARD-ABCD" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="SDCARD-01"
/dev/mmcblk0p2: LABEL="rootfs" UUID="sdcard-0a-1234" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="SDCARD-02"
/dev/sda2: LABEL="rootfs" UUID="ssd-0a-1234" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="SSD-02"
/dev/sda1: LABEL_FATBOOT="bootfs" LABEL="bootfs" UUID="SSD-1234" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="SSD-01"

nanoでファイルを編集します.

nano /etc/fstab

vfatext4にそれぞれ対応しているPARTUUIDを書き換えていきます.

proc            /proc           proc    defaults          0       0
PARTUUID=SSD-01  /boot/firmware  vfat    defaults          0       2
PARTUUID=SSD-02  /               ext4    defaults,noatime  0       1
# a swapfile is not a swap partition, no line here
#   use  dphys-swapfile swap[on|off]  for that

変更前後を比較すると, 以下の通りになります.


proc            /proc           proc    defaults          0       0
-PARTUUID=SDCARD-01  /boot/firmware  vfat    defaults          0       2
+PARTUUID=SSD-01  /boot/firmware  vfat    defaults          0       2
-PARTUUID=SDCARD-02  /               ext4    defaults,noatime  0       1
+PARTUUID=SSD-02  /               ext4    defaults,noatime  0       1
# a swapfile is not a swap partition, no line here
#   use  dphys-swapfile swap[on|off]  for that

書き換え完了です.

最後に, アンマウントします.

cd && sudo umount /mnt/

これで, SSDから起動することが可能になりました.

おわりに

データを移行する方法はddコマンドなど様々な方法がありますが, rpi-cloneはシンプルでわかりやすかったです.
この経験でPARTUUIDというものが存在していることやRaspberry Piの内部の仕組みについて知ることができ, 少し詳しくなることができました.

参考文献 

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?