Loading...

2023-12-13(水) 15:00

🔧 Raspberry Piで動かしているUbuntuがemergency modeになった時の対処方法

RaspberryPiUbuntu
Raspberry Piで動かしているUbuntuがemergency modeになり起動できなくなった時に復旧までに必要だった作業を解説します。

目次

前提と注意事項

この記事では以下を前提としています。また、この記事の内容は非常にピンポイントな環境での解説になるため、本記事の内容がそのまま役に立つ可能性は低いことをご了承ください。

  • emergency mode になった Ubuntu のバージョンは 22.04
  • この Ubuntu は元々 SD カードにインストールして動かしていたものを、外付けの HDD にクローンしてそこから起動させているもの
  • この記事では、根本的な問題の原因の究明や、対処方法の詳しい説明は行っていません。

この記事のゴール

RasberryPi に USB 接続している HDD にインストールした Ubuntu が、起動しても emergency mode に入ってしまう状態から通常起動できるように修正することがこの記事のゴールです。 emergency mode に入ると、Ubuntu を起動した時に以下のように画面に表示されるのみになります。

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 キーを押下してログインします。

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):

コマンド操作を受け付けるようになるので以下のようにjournalctlコマンドを実行します。

emergency modeになった時のUbuntu
$ journalctl -xb

すると私の場合は以下のようなエラーが出力されました。

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 のファイルが見つからないということがわかります。

brcm/brcmfmac43455-sdio.raspberrypi,4-model-b.binというファイルをロードできていないため、Raspberry Pi の firmware 関係に問題があることがわかります。 そこで/lib/firmware/brcmを確認します。

/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 を作成します。

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の出力結果
$ mount -a
mount: /boot/firmware: Can't find LABEL=system-boot.

そこで、/etc/fstabを確認すると以下のようになっていました。

/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の出力結果
$ 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を以下のように修正します。

/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 になりました。
各自の状況によって異なる部分が多いため、この記事の内容がそのまま使える可能性は低いかもしれませんが、メモとして残します。