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

# USBブートに対応していない <font color="Red">Raspberry Pi 4</font> を USB ストレージから起動する（microSD併用・その２）

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

本家Raspberry Pi OSのアップデートにより、USBストレージから起動できるようになっています。
[こちら](https://www.raspberrypi.org/documentation/hardware/raspberrypi/booteeprom.md)の方法でアップデートしてください。
また、64bit版Raspberry Pi OSは[こちら](https://downloads.raspberrypi.org/raspios_arm64/images/)です。

# これはなに





- せっかく高性能なRasPi4を、読み書きの速いUSB3.0のUSBメモリから起動したい。
- [USBブートに対応していない Raspberry Pi を USB ストレージから起動する（microSD併用）](https://qiita.com/masataka55/items/7eb8904ca337167c0c51)方法は、お手軽な方法だ。
しかし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 に、どの領域から起動するか記述することです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176228/70d04618-6606-e546-1f3e-75315607ea01.png)


- USB3.0 機器の場合、相性の可能性あり
- パーティションサイズの調整
 * 小さい容量の microSDカードというのも、だんだん入手できなくなってきた。
 * 大容量のカードでを使う場合、parted、resize2fs でパーティションを小さくする。
 * Win32 Disk Imager で読み込むときに、下記にチェックすれば、小さい img で済む。
 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176228/f69262b1-df04-8d0e-da47-10e24c9e254e.png)




# 参考
- Qiita [Raspberry Pi を USB ストレージから起動する](https://qiita.com/anshi/items/d15d09bf5aae2074b4a2)
- 純規の暇人趣味ブログ [Raspberry PiをUSB(HDD)で起動させる](https://jyn.jp/raspberrypi-usb-boot/#USB)
- Signal Flag "Z" [Raspberry Pi 4でUSB3.0接続のSSDがとても遅い](https://signal-flag-z.blogspot.com/2020/03/raspberry-pi-4usb30ssd.html)

# 手順
具体的な作業手順です。

## 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にセットする。起動すると、以下のようになる。

```bash
$ 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 にマウントされるように修正しておく。

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

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