SDカード不要? 「Raspberry Pi 4」をUSBブートさせる方法について

ブログ

2019年6月に発売された「Raspberry Pi 4」は、当初はmicroSDからの起動にしか対応しておらず、USBブートができませんでした。

一応2019年内からUSB起動させる方法は模索されていて、あちこちで手順が公開されているものの、割と面倒だったり、時期によって手順が異なったりと、決してとっつきやすいとは言えませんでした。

しかし現在ではブートローダ(EEPROM)のバージョンによっては特に作業せずともUSBメモリやUSB SSDから起動できたりします

なのにいまだに昔の手順書ばかりが出回っている上、作業するにしてもシンプルな方法が全然表に出ていないので、改めて周知しておこうというのがこの記事の趣旨となります。

スポンサーリンク

なぜUSBブート?

これは単純な話で「高速性」と「耐久性」です。

microSDは頑張っても100MB/s程度までしか出ず、頻繁な書き込み/読み出しが発生すると加速度的に壊れやすくなります。
センサーからの情報を大量に収集して、メモリに読み出して集計して、結果を再び書き込んで…ってのを繰り返すと、早ければ数か月程度で壊れるようです。

USBブートができればUSBメモリはもちろん、USB SSDを使うこともできるので、300~400MB/sの高速な転送速度と、PCと同等のストレージ耐久性を獲得できるわけです。

準備

準備するものは以下となります。

・Raspberry Pi 4 本体
・USBメモリまたはUSB SSD
・Raspberry Pi Imager
・OSイメージ
・microSD(オプション)

Raspberry Pi 4 本体

まずこれがないと始まりません。

USBメモリ

USBメモリは、がじぇっとりっぷは本番用には出っ張りの少ない小型のものを選んでいます。

とはいえ最初はアクセスランプが付いているものを選んだ方が無難です。
USBブートできていない場合は電源を入れてもアクセスランプが点灯しないので一目でわかります。

Raspberry Pi Imager

「Raspberry Pi Imager」は、Raspberry Piが公式に提供している、OSイメージの書き込みソフトです。
Windows / Mac / Linux(deb形式) / Raspberry Pi OS のマルチプラットフォーム対応なので、だいたいの環境で使えます。

Raspberry Pi OS – Raspberry Pi
From industries large and small, to the kitchen table tinkerer, to the classroom coder, we make computing accessible and affordable for everybody.

OSイメージ

「Raspberry Pi Imager」はOSイメージのダウンロードまでやってくれますが、何度も試す場合は先にイメージファイルだけダウンロードしておくと便利です。

Operating system images – Raspberry Pi
From industries large and small, to the kitchen table tinkerer, to the classroom coder, we make computing accessible and affordable for everybody.

OSイメージは、32bit版は上記公式リンクからダウンロードが可能です。なお、ダウンロードしたファイルはそのまま使えるので、解凍する必要はありません。
8GBモデルの場合、32bit版だとメモリが十全に使えないので、下記の64bit版を使用します。通常版とLite版が用意されています。

※記事執筆時点では64bit版はベータ版となっています。

Index of /raspios_arm64/images
Index of /raspios_lite_arm64/images

microSD(オプション)

古い時期に製造された「Raspberry Pi 4」だとブートローダがUSBブート非対応バージョンなことがあります。
その場合は手間ですが、一度microSDから起動してブートローダを最新バージョンに更新する必要があります。

Raspberry Pi Imager

「Raspberry Pi Imager」の使い方は、OSイメージと対象ストレージを指定して書き込むだけと、非常にシンプルです。

▲起動するとこんな画面が表示されます。

見た感じでも直感的に使えそうなことが分かります。

▲”CHOOSE OS”ではRaspberry Pi OSのほか、UbuntuやRetro Piなどサードパーティ製も選べます。

事前にダウンロードしたOSイメージを使用する場合は”Use custom”を選択します。

▲書き込むメディアを選びます。

▲OSイメージと書き込み先が間違ってなければ”WRITE”をクリックすると書き込みが始まります(データが消えるよと注意が表示されます)。

ブートローダの確認

まずはmicroSDもUSBメモリも挿さずに、起動します。

するとこんな画面が表示されます。注目は上から2行目の”bootloader“です。
ここの日付が2020年12月以降であれば、USBブートができると思います(※)。

※2020年12月11日のアップデートでUSBブートに正式対応したのでそれ以降のバージョンであれば出来るとは思うものの、当該バージョンでは未検証のため断言はできません。

起動

ブートローダがUSBブート対応バージョンであれば、そのままUSBメモリないしはUSB SSDを挿して電源を入れれば5分ほどで起動します。

がじぇっとりっぷの環境(4GBモデル)では、32bit版、64bit版ともにデスクトップ画面まで確認しています。
起動したのであればこれより下は見る必要はありません。お疲れさまでした。

起動しなかった場合

上記手順で起動しなかった場合はブートローダがUSBブート非対応の古いバージョンである可能性があります。
その場合はmicroSDから起動し、ブートローダを更新する必要があります。

方法その1(簡単)

「Raspberry Pi Imager」でブートローダのアップデートメディア(microSD)を作ります。

“CHOOSE OS” → “Misc utility Images” → “Bootloader” → “SD Card Boot”を選択します。
あとはmicroSDに”WRITE”して、起動させるだけです。

緑の画面が表示され、緑のLEDが点滅していたら更新完了です(勝手に電源が切れたりはしません)。
手動で電源を落とし、microSDを抜いて(※)、USBメモリ/SSDから起動するか確認してください。

起動したのであれば方法その2は不要です。お疲れさまでした。

※デフォルトではmicroSD優先となっているので、microSDを挿したままだとブートローダ更新処理が実行されるだけです。

2021年6月24日追記:上の画像でUSBに刺さっているのはワイヤレスマウスの受信部です。USBメモリから更新しているような誤解を招くようで申し訳ありません。

方法その2(ちょっと面倒)

方法その2は、一度microSDでRaspberry Pi OSを起動させ、コマンドでブートローダを更新する方法です。
Raspberry Pi OSのインストール(というほどのことでもありませんが)については省略します。

ブートローダの確認

現在のブートローダのバージョン(というか更新日付)を確認します。

pi@raspberrypi:~ $ vcgencmd bootloader_version
Sep  3 2020 13:11:43
version c305221a6d7e532693cc7ff57fddfc8649def167 (release)
timestamp 1599135103
update-time 0
capabilities 0x00000000

ちなみにSSH接続する場合は、標準のuser/passは以下のようになっています。

user:pi
pass:raspberry

Raspberry Pi OSの場合、SSHは左上の”メニュー” → “設定” → “Raspberry Piの設定” → “インターフェース”で、SSHの項目を有効にすることで使えるようになります。

ブートローダの更新

ブートローダはいわゆる”いつものおまじない”では更新されないため、ひと手間加えて更新します。

pi@raspberrypi:~ $ sudo apt update
pi@raspberrypi:~ $ sudo apt upgrade

更新できるブートローダを確認

pi@raspberrypi:~ $ ls /lib/firmware/raspberrypi/bootloader/stable/
pieeprom-2020-04-16.bin  pieeprom-2020-09-03.bin  pieeprom-2021-02-16.bin  vl805-000137ad.bin
pieeprom-2020-06-15.bin  pieeprom-2020-12-11.bin  pieeprom-2021-03-18.bin  vl805-000138a1.bin
pieeprom-2020-07-16.bin  pieeprom-2021-01-11.bin  pieeprom-2021-04-29.bin
pieeprom-2020-07-31.bin  pieeprom-2021-01-16.bin  recovery.bin
pi@raspberrypi:~ $ 

最新のバージョンに更新します。

pi@raspberrypi:~ $ sudo rpi-eeprom-update -d -f /lib/firmware/raspberrypi/bootloader/stable/pieeprom-2021-04-29.bin 
*** INSTALLING /lib/firmware/raspberrypi/bootloader/stable/pieeprom-2021-04-29.bin  ***
BOOTFS /boot
EEPROM update pending. Please reboot to apply the update.

一旦再起動して更新されたか確認する。

pi@raspberrypi:~ $ reboot 
pi@raspberrypi:~ $ vcgencmd bootloader_version
Apr 29 2021 17:11:25
version c2f8c388c4ee37ad709ace403467d163e8dd91ce (release)
timestamp 1619712685
update-time 1621276419
capabilities 0x0000001f

USBブートに対応したか確認

pi@raspberrypi:~ $ sudo raspi-config 

“Advanced Options” → “Boot Order” で “USB Boot” の項目があればUSBブートに対応していることになります。

USBから起動する

ブートローダがUSBブート対応バージョンに更新されていれば、USBメモリ/SSDから起動できるようになります。
電源を切り、miceoSDを抜いて、USBメモリ/SSDから起動しましょう。

ただし、初回は内部であれこれセットアップが行われるため、5分ほど時間がかかります。
なかなかデスクトップ画面が表示されずに不安になりますが、上記画像のように起動処理が行われていることを確認できれば、大丈夫です。

無事に起動できたでしょうか?
お疲れさまでした。

関連リンク

コメント

  1. 匿名 より:

    USBブート方法の研究の初期にEEPROM関連の話が出てきてから文鎮化が嫌で追いかけるのを諦めていました。
    知りたいことが全部書いてあってすっごく助かりました。

  2. 匿名 より:

    詳しくないので教えてください。
    方法その1(簡単) について
    ここでは「USBを優先にBOOTさせる」のが目的です。

    方法その1(簡単) の2-3行目を転記
    “CHOOSE OS” → “Misc utility Images” → “Bootloader” → “SD Card Boot”を選択します。
    電源を落とし、microSDを抜いて、USBメモリ/SSDを挿して起動するか確認してください。

    2行目で選択すべきは “SD Card Boot” ではなく “USB BOOT” ではありませんか?
    もっとも3行目の通りmicroSDを抜いてUSBメモリのみ挿して起動すれば同じことか。

    記事内容が求めていたもので非常に助かっています。
    これから実行するにあたって気になりましたので確認まで。

    • がじぇっとりっぷ より:

      コメントありがとうございます。
      画像で刺さっているのはUSBメモリではなく、ワイヤレスマウスの受信部です。分かりにくくて申し訳ありません。

      まず前提として、USBブート非対応のバージョンでは、microSDからしか起動できず、USBメモリでブートローダのアップデートメディアを作成しても反応しません。

      実際にやっていることは
      1.microSDからブートローダのアップデート(なので“SD Card Boot”を選択)
      2.microSDを抜いて、OS入りのUSBメモリから起動
      となります。

      1.でやっているのはPCでいうところのBIOSアップデートみたいなことと思ってください。

      ちなみにmicroSDとUSBメモリを両方挿していたら、デフォルトではmicroSDが優先されます。
      $ sudo raspi-config → “Advanced Options” → “Boot Order” で優先順位を変更できます。

  3. 匿名 より:

    コメント失礼します
    ラズベリーパイ4 4GB model B を使っているのですが、SDカードでの起動がなぜだかできなくなってしまいこのサイトへ行きつきました。SDスロットが壊れているかも、と思いUSBからのブートを試してみたいと思っています。
    microSDもUSBも差さずに起動、(HDMIと電源だけさして起動)を試してみたのですがこの記事のような画面になりません。なにかやり方が間違っているのかSDスロット以外にどこか壊れているのか
    分かる範囲でいいので回答お待ちしております。

    • がじぇっとりっぷ より:

      コメントありがとうございます。

      画面が出ないということは電源周りの故障、HDMI出力周りの故障、ブートローダの故障、SoCの故障、メモリの故障などが疑われます。
      結局は一つ一つ考えられる可能性をつぶしていくしかありません。

      電源LEDが点灯していない場合は電源入力周りの故障の可能性が高いです。電源に使っているUSBケーブルが断線しかかっている可能性もあります。
      映像出力はお持ちであればGPIOやMIPI-DSI接続のディスプレイで確認できます。ディスプレイやHDMIケーブル側に問題がある可能性もあります。
      ブートローダの場合は更新すれば治る可能性もあります(が、画面が出ないのであれば期待薄かも)。
      SoCやメモリの場合は…買い直すか交換した方が早いです。購入ショップで保証期間を確認しましょう。

タイトルとURLをコピーしました