LoginSignup
7
6

More than 3 years have passed since last update.

Raspberry PiをUSBブートさせる[Ubuntu Server 20.04(LTS)で]

Posted at

以下の情報は2021年3月に書かれたものです。

余ったHDDを見つけたので、せっかくなのでUSBブートさせました。 Ubuntuのチュートリアルを見た感じものすごく簡単にできそうだったので。

で、Ubuntu server 20.04(LTS)を手順通りインストールしたけれど、なぜかUbuntuサーバー20.04の起動がうまくいかない。ちなみに、下の記事に書かれている通りUbuntu Desktop 20.10ではうまくいきました。

色々調べた結果、下の記事の手順ならうまくいったので共有します。どうやらブートにはカーネルの解凍が必要みたいです。上記の記事ではsudo apt updatesudo apt upgradeで起動しなくなる現象はカーネルの未解凍が原因と思われます(下の記事によるとアップデートするたびに解凍が必要になるとのこと)。なので、下の手順ではブートの際カーネルを解凍するスクリプトを追加しています。なお、下記の手順の実行は自己責任でお願いします。また、細かい箇所は理解していない部分も多いので詳しくは下記の元ネタを参照してください。

なお、以下のサイト(英語)でも同様の手順で行なっているので参考にしてください。

日本語でほぼ同じ手法を行なった方がいたので、以下リンクを共有しておきます

材料

ハード

機種 備考
HD-LC1.0U3-BKD 2021年現在は中古のみ。電源付きだからか今のところ動作は安定していますAmazon
Raspberry Pi 4B 4Bでしか確認していませんが、おそらく他のラズパイでも可
SDカード ブートローダーとファームウェアを更新するのに必要

ソフト

ソフト名 バージョン
Ubuntu 20.04.2 LTS (64bit)

UbuntuかRaspberry Pi OSをSDカードに書き込む(省略可)

別の記事で解説したいるので、それを参照してください。元々UbuntuかRaspberry Pi OSをインストールしたSDカードがあればそれを使用してください。OSがインストールされたSDカードをRaspberry Piにさします。

ブートローダーを更新する

Raspberry PiにはEEPROMというメモリがあり、そこにbootloaderが入っています。Raspberry Pi 4BでUSBブートをするにはbootloaderのパージョンを2020-09-03以降にする必要があります。

元ネタはRaspbianを使っていますが、実はUbuntuでもeeprom設定を変更するパッケージをインストールすればbootloaderを更新できます。詳しくはUbuntuのチュートリアルを参照してください。Ubuntu上での手順としては以下の通りです。

# パッケージのインストール
$ sudo apt install rpi-eeprom
# bootloaderのパージョンを確認
$ sudo vcgencmd bootloader_version
Sep  3 2020 13:11:43
version c305221a6d7e532693cc7ff57fddfc8649def167 (release)
timestamp 1599135103
update-time 0
capabilities 0x00000000

UbuntuイメージをSSDかHDDに書き込む

別の記事解説しているので、それを参照してください。基本的にはSDカードに対して行うことをSSDやHDDに対して実行します。

Ubuntuを書き込んだSSD/HDDをマウントする

まず、SDカードをラズパイにさしてラズパイを起動します。ラズパイの起動を確認後、Ubuntuの設定を書き換えるためにSSD/HDDをラズパイにつなげます。

lsbkでUbuntuをインストールしたドライブが認識されているか確認します。

$ lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0         7:0    0  48.9M  1 loop /snap/core18/1949
loop1         7:1    0  48.9M  1 loop /snap/core18/1990
loop2         7:2    0  61.6M  1 loop /snap/lxd/19040
loop3         7:3    0  28.1M  1 loop /snap/snapd/11115
loop4         7:4    0  61.7M  1 loop /snap/lxd/19206
loop5         7:5    0    27M  1 loop /snap/snapd/11043
sda           8:0    0 931.5G  0 disk 
├─sda1        8:1    0   256M  0 part 
└─sda2        8:2    0   2.8G  0 part 
mmcblk0     179:0    0  58.2G  0 disk 
├─mmcblk0p1 179:1    0   256M  0 part /boot/firmware
└─mmcblk0p2 179:2    0    58G  0 part /

元ネタでは以下のディレクトリをアンマウントと指示されていたが、今回使用したSDカードはUbuntuを使用したので必要ないかもしれない。

$ sudo umount /media/pi/writable
umount: /media/pi/writable: no mount point specified.
$ sudo umount /media/pi/system-boot
umount: /media/pi/system-boot: no mount point specified.

ディレクトリを作成してubuntuをマウントする。

$ sudo mkdir /mnt/boot
$ sudo mkdir /mnt/writable
$ sudo mount /dev/sda1 /mnt/boot
$ sudo mount /dev/sda2 /mnt/writable
$ lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0         7:0    0  48.9M  1 loop /snap/core18/1949
loop1         7:1    0  48.9M  1 loop /snap/core18/1990
loop2         7:2    0  61.6M  1 loop /snap/lxd/19040
loop3         7:3    0  28.1M  1 loop /snap/snapd/11115
loop4         7:4    0  61.7M  1 loop /snap/lxd/19206
loop5         7:5    0    27M  1 loop /snap/snapd/11043
sda           8:0    0 931.5G  0 disk 
├─sda1        8:1    0   256M  0 part /mnt/boot
└─sda2        8:2    0   2.8G  0 part /mnt/writable
mmcblk0     179:0    0  58.2G  0 disk 
├─mmcblk0p1 179:1    0   256M  0 part /boot/firmware
└─mmcblk0p2 179:2    0    58G  0 part /

色々セットアップする

/mnt/boot/mnt/writableの中のファイルを書き換える必要があるが、正直面倒臭い。

元ネタではそのためのスクリプトを用意してくれていて、それを実行するだけでよい。ただし、公式の手順ではないので、ブートできなくなったら自己責任でお願いします。2021年3月現在だと以下のスクリプトはバージョン20.04.2に対応しています。

sudo curl https://raw.githubusercontent.com/TheRemote/Ubuntu-Server-raspi4-unofficial/master/BootFix.sh | sudo bash

以上のコマンドを実行し終えたら、アンマウントします。

sudo umount /mnt/boot
sudo umount /mnt/writable

元ネタでは手動で設定する方法も解説している。そこまで翻訳する気力はなかったので、リンク先を読んでください。

日本語でほぼ同じ手法を行なった方がいたので、以下リンクを共有しておきます

(参考)bootloader設定を変更する

上でもうまくいかなかった場合、以下の手順も試してください。多分いらないです。

ブートの順番を指定してUSBでブートを行うように変更します。

まず、ブートローダーの設定を書き出します。

sudo apt install rpi-eeprom
sudo vcgencmd bootloader_config > bootconf.txt

bootconf.txtを開くとBOOT_ORDER0xf41になっているか確認します。なっていなければ、 0xf41に変更します。意味としてはSDカードを何回かトライしたあとUSB Bootを試せと指示しています。

BOOT_ORDER=0xf41

あとは書き換えたテキストファイルをbinファイルにしてeepromをアップデートします。

$ rpi-eeprom-config --out pieeprom-new.bin --config bootconf.txt /lib/firmware/raspberrypi/bootloader/critical/pieeprom-2020-09-03.bin
$ sudo rpi-eeprom-update -d -f ./pieeprom-new.bin

再起動します。

sudo reboot
7
6
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
7
6