USBブートに対応していない Raspberry Pi 4 を USB ストレージから起動する(microSD併用・その2)


USBブートに対応していない Raspberry Pi 4 を USB ストレージから起動する(microSD併用・その2)

【追記】Raspberry Pi OSが標準で対応しました

本家Raspberry Pi OSのアップデートにより、USBストレージから起動できるようになっています。
こちらの方法でアップデートしてください。
また、64bit版Raspberry Pi OSはこちらです。

これはなに

  • せっかく高性能なRasPi4を、読み書きの速いUSB3.0のUSBメモリから起動したい。
  • USBブートに対応していない Raspberry Pi を USB ストレージから起動する(microSD併用)方法は、お手軽な方法だ。 しかしbootcode.bin がハードウエアに依存するため、すべてのバージョンの Raspberry Pi で動作するわけではない。
  • 具体的には、Raspberry Pi 4 は対応しない。また、公式では RaspBerry Pi 4 の USB ブートは未対応。
  • より汎用的に「microSDを併用してUSBストレージから起動する」方法を整理し、Raspberry Pi 4 を USB から起動する。

ポイント

  • boot 領域として microSD カードを FAT32 、セクタサイズ 512byte でフォーマットする。
  • microSD カード内の cmdline.txtに、以下のいずれかを指定して USB 機器から起動する。
    • boot=/dev/sda2
    • boot=LABEL=rootfs
    • boot=partuuid
  • ポイントは、microsdカードの cmdline.txt に、どの領域から起動するか記述することです。

  • USB3.0 機器の場合、相性の可能性あり

  • パーティションサイズの調整

    • 小さい容量の microSDカードというのも、だんだん入手できなくなってきた。
    • 大容量のカードでを使う場合、parted、resize2fs でパーティションを小さくする。
    • Win32 Disk Imager で読み込むときに、下記にチェックすれば、小さい img で済む。

参考

手順

具体的な作業手順です。

Raspberry Piのモデルを確認する

$ cat /proc/device-tree/model
Raspberry Pi 4 Model B Rev 1.1

Raspberry Pi 4 MODEL B Rev 1.1 は 公式ではまだ USB ブートに対応していません。

Raspbian の準備(通常どおり)

  • microSD カード(目的の Raspbain を書き込める範囲で、できるだけ容量の小さいもの)に Raspbian を通常通り書き込む。
  • 書き込んだ microSD で Raspberry Pi を起動する。初回起動時に UUID がランダムに書き換わるため。
  • 起動したらログインし、念のため UUID と PARTUUID を blkid コマンドで確認しておく。 2019-09-26-raspbian-buster-full の場合、一例として以下のようになった。
$ blkid
/dev/mmcblk0p1: LABEL_FATBOOT="boot" LABEL="boot" UUID="9F2D-0578" TYPE="vfat" PARTUUID="5e3da3da-01"
/dev/mmcblk0p2: LABEL="rootfs" UUID="efc2ea8b-042f-47f5-953e-577d8860de55" TYPE="ext4" PARTUUID="5e3da3da-02"

起動用(rootfs) USB 機器にコピーする

Win32DiskImagerを用いて、microSD カードを起動したい USB 機器にコピーする。
動作確認のためだけなら、microSDをUSBリーダーに入れるだけでも良い。

boot 用 microsd カードの準備する

小さい容量のmicroSDカードを準備する。
FAT32、セクタサイズ 512 byte でフォーマットする。ラベルは microsd とする(他でも構いません)。
上記の起動用 USB機器の、FAT32でwindowsから読める領域のファイルを、ファイルコピーする。

Raspberry Pi 4 を起動する

小さい容量のmicroSDと USB 機器をRaspberry Piにセットする。起動すると、以下のようになる。

$ blkid
/dev/mmcblk0p1: LABEL="microsd" UUID="1CD0-AD85" TYPE="vfat" PARTUUID="17869b7d-01"
/dev/sda1: LABEL_FATBOOT="boot" LABEL="boot" UUID="9F2D-0578" TYPE="vfat" PARTUUID="5e3da3da-01"
/dev/sda2: LABEL="rootfs" UUID="efc2ea8b-042f-47f5-953e-577d8860de55" TYPE="ext4" PARTUUID="5e3da3da-02"/dev/mmcblk0p1: 

$ df (関係ない箇所を省略)
ファイルシス   1K-ブロック    使用  使用可 使用% マウント位置
/dev/root          7311288 6385676  547024   93% /
/dev/sda1           258095   53703  204392   21% /boot
/dev/mmcblk0p1     1925120   54124 1870996    3% /media/username/1CD0-AD85

8GBのmicroSDを用いたので、コピーしたUSBメモリーの領域も8GBのままだ。お望みなら sudo raspi-config で拡張できる。parted で拡張できる。
起動に用いた2GBのmicroSDは、自動的に/media/username/にマウントされている。
/etc/fstabを編集して、microSD が /boot にマウントされるように修正しておく。

$ sudo nano /etc/fstab
PARTUUID=17869b7d-01  /boot           vfat    defaults          0       2

まとめ

ポイントは、microsdカードの cmdline.txt に、どの領域から起動するか記述するだけです。