Raspberry Pi 4 Model B で Ubuntu20 を、USB接続のHDD/SSDから起動する方法です。
途中までの設定で microSDカードが必要ですが、最終的には microSDカードは不要になります。
準備
次のものを用意しておきます。
- Raspberry Pi をネットワークにつなげるネットワーク環境とLANケーブル
- Raspberry Pi 4 Model B と ディスプレイ・キーボード
- 電源ケーブルはまだつなげないでください
- ネットワークケーブルをつなげておきます
- HDMIケーブルをディスプレイと接続しておきます。Raspberry Pi 起動時にケーブルがつながっていないと HDMI接続を認識しないためです。
- HDMI端子が2つありますが、どちらにつなげても映ります
- ケースをつけていると、HDMIケーブルの差し込みがあまくなって、HDMI認識しないことがあります
- USB接続の外付けHDD/SSD
- 2GB以上のmicroSDカードと、PCに接続できるカードリーダ
- 最初はmicroSDカードを使って Raspberry Pi を起動しますが、この時の OSイメージファイルが1.8GBのサイズなので、2GB以上の容量が必要です
-
- HDD/SSDから起動できるようになったら、Raspberry Pi から抜いて使用しません
- PC
Raspberry Pi の EEPROM更新
USB接続のHDD/SSDから起動できるように設定します。
microSDカードに Raspberry Pi OS をインストール
まず、PCで作業します。
microSDカードをさしたカードリーダを、PCに接続しておきます。
Raspberry Pi OS のイメージファイルを取得します。
https://downloads.raspberrypi.org/raspios_lite_armhf_latest から Raspberry Pi OS (32-bit) Lite のイメージをダウンロードします。
(いきなりダウンロード開始します)
https://www.raspberrypi.org/downloads/ から Raspberry Pi Imager をダウンロード・実行してインストールします。
Raspberry Pi Imager を起動します。
次のような画面になるので、[CHOOSE OS] を選択します。
下のほうにスクロールして、[Use custom] を選択し、先ほどダウンロードした、Raspberry Pi OS (32-bit) Lite のイメージを指定します。
最初の画面に戻るので、[CHOOSE SD CARD] で microSDカードを指定し、[WRITE] を押します。
これで、microSDカードに Raspberry Pi OS がインストールされました。
EEPROM更新
ここでは Raspberry Pi での作業になります。
microSDカードを Raspberry Pi にさします。
電源ケーブルを Raspberry Pi につなげて、Raspberry Pi を起動します。
起動したらログインします。
Raspberry Pi OS の初期ユーザーは pi 、パスワードは raspberry です。
次のコマンドを実行します。
この作業でアップデートされることにより、EEPROMが更新されます。
sudo apt update sudo apt full-upgrade sudo reboot
再起動してきたら、EEPROM が更新されたか確認します。
次のコマンドを実行します。
2020.11.17時点では、以下のように 2020.9.3版です。
nbsp;vcgencmd bootloader_version Sep 3 2020 13:11:43 version c305ZZ1a6d7e532693cc7ff57fddfc8649def167 (release) timestamp 1599135103
これで、Raspberry Pi の EEPROM更新は完了です。
USB接続の外付けHDD/SSDへの Ubuntuインストール
PCでの作業になります。
次の箇所から、Raspberry Pi の Ubuntuイメージをダウンロードします。
こちらでは Ubuntu 20.04.1 LTS の 64bit版で試しました。
https://ubuntu.com/download/raspberry-pi
PC に USB接続の外付けHDD/SSDをつなげた後、先の手順でも使った Raspberry Pi Imager を起動します。
[CHOOSE OS] で [Use custom] を選択し、先ほどダウンロードした、Ubuntuイメージを指定します。
最初の画面に戻ったら、[CHOOSE SD CARD] で 外付けHDD/SSDを指定し、[WRITE] を押します。
これで、外付けHDD/SSDへの Ubuntuインストールが完了しました。
Ubuntuの設定
Rasyberry Pi での作業になります。
ブート用の設定
Rasyberry Pi で 外付けHDD/SSD から Ubuntuを起動できるように設定します。
Rasyberry Pi に USB接続の外付けHDD/SSDをつなげて、次のコマンドを実行します。
sudo su - mount /dev/sda1 /media cd /media/ dd if=vmlinuz bs=1 | zcat > vmlinux
続けて、vi config.txt を実行して、config.txt を編集します。
[pi4]セクションを次のようにして保存してください。
[pi4] #kernel=uboot_rpi_4.bin max_framebuffers=2 dtoverlay=vc4-fkms-v3d boot_delay kernel=vmlinux initramfs initrd.img followkernel
次のコマンドを実行して、Rasyberry Pi をシャットダウンします。
umount /media /sbin/shutdown -h now
Ubuntu初回起動
Rasyberry Pi から microSDカードを抜いて、Raspberry Pi の電源ケーブルをさしなおします。
外付けHDD/SSD から Ubuntu が起動してきます。
ログインできるようになったら、ログインします。初期ユーザーとパスワードはともに ubuntu です。
初回ログインでパスワード変更を求められますので、パスワードを変更します。
Ubuntuアップデートへの自動対処
これで、外付けHDD/SSD から Ubuntu が起動できるようになりました。
ただし、Ubuntuアップデートで、boot/vmlinuz が更新された場合、先の「ブート用の設定」の手順の
dd if=vmlinuz bs=1 | zcat > vmlinux
を実行しないと、Ubuntuが起動できなくなります。
そこで、アップデートの際に自動的にこれを行うようにします。
rootで次のファイルを作成します。
これは、以下のフォーラムで説明されていた内容です。
RPI4 Direct USB Boot Ubuntu 20.04 – Raspberry Pi Forums
2022.2.27
下記のスクリプトで mount -o remount /boot/firmware/ の行を追加しました。
/boot/firmware/auto_decompress_kernel
#!/bin/bash -e #Set Variables BTPATH=/boot/firmware CKPATH=$BTPATH/vmlinuz DKPATH=$BTPATH/vmlinux mount -o remount /boot/firmware/ #Check if compression needs to be done. if [ -e $BTPATH/check.md5 ]; then if md5sum --status --ignore-missing -c $BTPATH/check.md5; then echo -e "\e[32mFiles have not changed, Decompression not needed\e[0m" exit 0 else echo -e "\e[31mHash failed, kernel will be compressed\e[0m" fi fi #Backup the old decompressed kernel mv $DKPATH $DKPATH.bak if [ ! $? == 0 ]; then echo -e "\e[31mDECOMPRESSED KERNEL BACKUP FAILED!\e[0m" exit 1 else echo -e "\e[32mDecompressed kernel backup was successful\e[0m" fi #Decompress the new kernel echo "Decompressing kernel: "$CKPATH".............." zcat $CKPATH > $DKPATH if [ ! $? == 0 ]; then echo -e "\e[31mKERNEL FAILED TO DECOMPRESS!\e[0m" exit 1 else echo -e "\e[32mKernel Decompressed Succesfully\e[0m" fi #Hash the new kernel for checking md5sum $CKPATH $DKPATH > $BTPATH/check.md5 if [ ! $? == 0 ]; then echo -e "\e[31mMD5 GENERATION FAILED!\e[0m" else echo -e "\e[32mMD5 generated Succesfully\e[0m" fi #Exit exit 0
続けて root で下記を実行します。
echo "DPkg::Post-Invoke {"/bin/bash /boot/firmware/auto_decompress_kernel"; };" > /etc/apt/apt.conf.d/999_decompress_rpi_kernel chmod +x /etc/apt/apt.conf.d/999_decompress_rpi_kernel chmod +x /boot/firmware/auto_decompress_kernel /boot/firmware/auto_decompress_kernel
これで、Ubuntuアップデートの際に、自動的に必要な処理がされます。
参考
Raspberry Pi 4 Model B で USB ブート – Qiita
RPI4 Direct USB Boot Ubuntu 20.04 – Raspberry Pi Forums
Raspberry Pi 4でUSB接続HDDから64ビットUbuntu 20.04.1を起動してみました | 日記というほどでも
コメント
失礼します、あなたのブログ投稿の内容を読んだ後、私はそれが非常に興味深いと思います。 私はラズベリーパイを販売しているAmazonの販売者です。 ラズベリーパイ4のケースの記事を書いてほしい。 弊社はあなたに無料で製品を提供します。 よろしくお願いします