前提と注意事項
この記事では以下を前提としています。また、この記事の内容は非常にピンポイントな環境での解説になるため、本記事の内容がそのまま役に立つ可能性は低いことをご了承ください。
- emergency mode になった Ubuntu のバージョンは 22.04
- この Ubuntu は元々 SD カードにインストールして動かしていたものを、外付けの HDD にクローンしてそこから起動させているもの
- この記事では、根本的な問題の原因の究明や、対処方法の詳しい説明は行っていません。
この記事のゴール
RasberryPi に USB 接続している HDD にインストールした Ubuntu が、起動しても emergency mode に入ってしまう状態から通常起動できるように修正することがこの記事のゴールです。 emergency mode に入ると、Ubuntu を起動した時に以下のように画面に表示されるのみになります。
You are in emergency mode. After logging in, type "journalctl -xb" to view system logs, "systemctl reboot" to reboot, "systemctl default" or "exit" to boot into default mode.
Press Enter for maintenance
(or press Control-D to continue):
原因を確認する
emergency mode のメッセージにも表示されている通り、まずはjournalctl
コマンドを使ってエラーを確認します。
以下のように emergency mode に入っている時にまず Enter キーを押下してログインします。
You are in emergency mode. After logging in, type "journalctl -xb" to view system logs, "systemctl reboot" to reboot, "systemctl default" or "exit" to boot into default mode.
Press Enter for maintenance
(or press Control-D to continue):
コマンド操作を受け付けるようになるので以下のようにjournalctl
コマンドを実行します。
$ journalctl -xb
すると私の場合は以下のようなエラーが出力されました。
[ 10.298172] brcmfmac mmc1:0001:1: Direct firmware load for brcm/brcmfmac43455-sdio.raspberrypi,4-model-b.bin failed with error -2
エラー内容から、firmware のファイルが見つからないということがわかります。
firmware の symlink を作成する
brcm/brcmfmac43455-sdio.raspberrypi,4-model-b.bin
というファイルをロードできていないため、Raspberry Pi の firmware 関係に問題があることがわかります。
そこで/lib/firmware/brcm
を確認します。
$ ls /lib/firmware/brcm
brcmfmac43455-sdio.Al-CM2565M.txt
brcmfmac43455-sdio.bin
brcmfmac43455-sdio.bin.distrib
bremfmac43455-sdio raspberrypi,3-model-b-plus.txt.distrib
bremfmac43455-sdio.raspberrypt, 4-compute-nodule. txt
# 省略
上記のように出力されますが、私の場合は確かにbrcmfmac43455-sdio.raspberrypi,4-model-b.bin
というファイルが存在していませんでした。
そこで以下を実行して symlink を作成します。
$ ln -s ../cypress/cyfmac43455-sdio.bin brcmfmac43455-sdio.raspberrypi,4-model-b.bin
これで再起動すると、emergency mode に入ってしまうもののjournalctl
では firmware 関連のエラーが出力されなくなりました。
HDD のマウントを確認する
色々と確認していたところ、mount
コマンドを実行するとそもそも Raspberry Pi に USB 接続している HDD がマウントされていないことがわかりました。
$ mount -a
mount: /boot/firmware: Can't find LABEL=system-boot.
そこで、/etc/fstab
を確認すると以下のようになっていました。
LABEL=writable / ext4 discard,x-systemd.growfs 0 1
LABEL=system-boot /boot/firmware vfat defaults 0 1
上記の中のLABEL=system-boot
が存在せずマウントできていないようです。
そこで、一度fdisk
コマンドを実行して Raspberry Pi に接続している HDD を確認します。
$ fdisk -l
... 省略
Disk /dev/sda: 465.76 GiB, 500107862016 bytes, 976773168 sectors
Disk model: 2115
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0xcd1c5413
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 526335 524288 256M c W95 FAT32 (LBA)
/dev/sda2 526336 976773167 976246832 465.5G 83 Linux
... 省略
上記から、Raspberry Pi に接続している HDD は/dev/sda
であり、ブートは/dev/sda1
からになっていることを確認できます。(Boot
にアスタリスクがついている)
そこで、/etc/fstab
を以下のように修正します。
LABEL=writable / ext4 discard,x-systemd.growfs 0 1
/dev/sda1 /boot/firmware vfat defaults 0 1
これで再起動すると emergency mode から脱出できました。
まとめ
Raspberry Pi で使っている Ubuntu を SD カードから HDD に移行した時に emergency mode になりました。
各自の状況によって異なる部分が多いため、この記事の内容がそのまま使える可能性は低いかもしれませんが、メモとして残します。