Raspberry Pi3 USBデバイスからブートする方法

USBデバイスからブート

2017年9月、Raspberry Pi3をUSBデバイスからブートすることができました。

これまでの Raspberry Piは、マイクロSDカードからブートし SDカード上のLinux OSを起動していました。ブート可能なデバイスは、マイクロSDカードのみでした。

しかし、Raspberry Pi3からはUSB大容量デバイスからブートするモードが実装されました。

Raspberry Pi3 USB Boot

Raspberry Pi3 USB Boot

USBブートモードとは

公式サイトに「PI 3 BOOTING PART I: USB MASS STORAGE BOOT BETA」という説明がありました。

Pi3 USB Boot

Pi3 USB Boot

 

When we originally announced the Raspberry Pi 3, we announced that we’d implemented several new boot modes.
The first of these is the USB mass storage boot mode, and we’ll explain a little bit about it in this post; stay tuned for the next part on booting over Ethernet tomorrow. We’ve also supplied a boot modes tutorial over on the Raspberry Pi documentation pages.

Note: the new boot modes are still in beta testing and use the “next” branch of the firmware. If you’re unsure about using the new boot modes, it’s probably best to wait until we release it fully.

【要約】

最初にラズベリーパイ3を発表したとき、新しいブートモードをいくつか実装したことを発表しました。
これらのうちの最初のものはUSB大容量ストレージ ブートモードです。この記事ではこれについて少し説明します。
将来のイーサネットで起動する次の役割については、乞うご期待。

また、Raspberry Piのドキュメントページでブートモードのチュートリアルも提供しています。

注:新しいブートモードはまだベータテスト中で、ファームウェアの “次の”ブランチを使用します。新しいブートモードを使用するかどうか不明な場合は、完全にリリースするまで待つことをお勧めします。

 

Raspberry Pi3では、いくつかの新しいブートモード(USBブート、NETブートなど)を実装したと書かれています。この新しいブートモードは、ベータテスト中と注意書きがありますが、試してみようと思います。


What is a mass storage device?

The USB specification allows for a mass storage class which many devices implement, from the humble flash drive to USB attached hard drives. This includes micro SD readers, but generally it refers to anything you can plug into a computer’s USB port and use for file storage.

【要約】

大容量記憶装置とは何ですか?

USB仕様は、小さなフラッシュドライブからUSB接続のハードドライブまで、多くのデバイスが実装する大容量記憶クラスを可能にします。これにはマイクロSDリーダーが含まれますが、一般にコンピューターのUSBポートに接続してファイルストレージに使用できるものを指します。

新しいブートモードは、ファイルストレージ用のUSB仕様デバイスからブート可能らしいです。Linux OSを書き込んだSDカードをUSB接続のSDカードリーダーに装着すると、USBからブートできそうです。


We haven’t enabled this boot mode by default, because we first wanted to check that it worked as expected. The boot modes are enabled in One-Time Programmable (OTP) memory, so you have to enable the boot mode on your Pi 3 first. This is done using a config.txt parameter.

Instructions for implementing the mass storage boot mode, and changing a suitable Raspbian image to boot from a flash drive, can be found here.

【要約】

このブートモードは、デフォルトでは有効になっていません。なぜなら、最初に期待どおりに動作しているかどうかをチェックしたいからです。
ブートモードはワンタイムプログラマブル(OTP)メモリで有効になっているため、まずPi3でブートモードを有効にする必要があります。これは、config.txtパラメーターを使用して行われます。
マスストレージブートモードを実装し、適切なRaspbianイメージを変更してフラッシュドライブからブートする方法については、 こちら をご覧ください。

OTP(One-Time Programmable) memoryとは、一度だけ書き込み可能なメモリです。メモリ内のヒューズを焼き切ってデータを書き換えるようなメモリです。
このメモリに書き込むことにより、新しいブートモードが有効になります。


 

Are there any bugs / problems?

There are a couple of known issues:

【要約】

バグや問題はありますか?

いくつかの既知の問題があります:

ベータテスト中ということで、バグや既知の問題がありUSBブートできないデバイスがあるそうです。

OTPを書き換えるので一度試すと元に戻れない状態になりますが、この新しいブートモードを試してみます。

USBブートモードを有効にする方法

公式サイトに「HOW TO BOOT FROM A USB MASS STORAGE DEVICE ON A RASPBERRY PI 3」という説明がありました。

How To Boot USB

How To Boot USB

 

This tutorial explains how to boot your Raspberry Pi 3 from a USB mass storage device such as a flash drive or USB hard disk. Be warned that this feature is experimental and does not work with all USB mass storage devices. See this blog post from Gordon Hollingworth for an explanation of why some USB mass storage devices don’t work, as well as some background information.

PROGRAM USB BOOT MODE

Before a Raspberry Pi 3 will boot from a mass storage device, it needs to be booted from an SD card with a config option to enable USB boot mode. This will set a bit in the OTP (One Time Programmable) memory in the Raspberry Pi SoC that will enable booting from a USB mass storage device. Once this bit has been set, the SD card is no longer required. Note that any change you make to the OTP is permanent and cannot be undone.

【要約】

このチュートリアルでは、フラッシュドライブやUSBハードディスクなどのUSB大容量ストレージデバイスからRaspberry Pi 3を起動する方法について説明します。この機能は実験的なものであり、すべてのUSB大容量記憶装置では機能しないことに注意してください。なぜいくつかのUSB大容量記憶装置が動作しない理由と、いくつかの背景情報については、Gordon Hollingworthのこのブログ記事を参照してください。

Raspberry Pi 3が大容量記憶装置から起動する前に、USBブートモードを有効にするためのconfigオプション付きのSDカードから起動する必要があります。これにより、USB大容量ストレージデバイスからの起動を可能にするRaspberry Pi SoCのOTP(ワンタイムプログラマブル)メモリにビットが設定されます。このビットが設定されると、SDカードは不要になります。OTPに加えた変更は永続的で、元に戻すことはできません。

この新しいブートモードは、実験的なもので機能しない場合があると書いてあります。

このブートモードを有効にするために、Raspberry Pi SoCのOTPメモリにビットを設定します。OTPは一度だけ書き込み可能なメモリなので、加えた変更は永続的で元に戻すことはできません。

さて、覚悟して新しいブートモードを試してみます。


【 手順.1 】/boot/config.txt の最後に「program_usb_boot_mode=1」の行を追加します。

【 手順.2 】OTPビットを確認します。「17:1020000a」です。

$ vcgencmd otp_dump | grep 17:
17:1020000a

【 手順.3 】リブートします。

$ sudo reboot

【 手順.4 】OTPビットを確認します。「17:1020000a → 17:3020000a」に変化し、OTPビットは正常にプログラムされました。

vcgencmd otp_dump | grep 17:
17:3020000a

【 手順.5 】/boot/config.txt の「program_usb_boot_mode=1」の行を削除します。

【 手順.6 】シャットダウンします。

$ sudo shutdown -h now

USBブートモードを試す(その1)

USBハードディスクはすぐに準備できなかったので、取り急ぎUSBカードリーダーでテストします。

Raspbian Stretchをインストールしたもう1台のRaspberry Pi3のマイクロSDカードを外します。このマイクロSDカードをUSBカードリーダーに装着してUSBポートに接続します。

USB SD Card Reader

USB SD Card Reader

電源を投入するとうまくブートしたように見えますが、なにか変です。

$ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description:    Raspbian GNU/Linux 8.0 (jessie)
Release:        8.0
Codename:       jessie

Raspbian jessie が起動しています。今までSDカードで使用していたバージョンのOSです。

lsblkコマンドで物理ディスクの一覧を確認しました。

$ lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda          8:0    1 14.7G  0 disk
├sda1        8:1    1 41.8M  0 part /media/pi/boot
└sda2        8:2    1 14.7G  0 part /media/pi/037616fd-28fe-4652-8248-2042ea30b
mmcblk0     179:0    0 14.4G  0 disk
├mmcblk0p1  179:1    0   63M  0 part /boot
└mmcblk0p2  179:2    0 14.4G  0 part /

USB接続のSDカードは、デバイス sda として認識しています。
しかし、「/boot」と「/」はデバイス mmcblk0 のSDカードをマウントしています。
この結果から、USBブートではなくSDカードからブートしたことになります。

USBブートモードの設定に失敗したのでしょうか?
それとも、USBカードリーダーのSDカードからのブートはできないのでしょうか?

USBブートモードを試す(その2)

気を取り直して、確認を続けます。

SDブートとUSBブートの優先順はどうなっているのでしょうか? 公式サイトのドキュメントからはこの記述を見つけることができませんでした。

SDカードを抜いて、USBデバイスだけにして実験します。電源を投入すると、数秒間待った後にブートが始まりました。

起動したOSを確認します。

$ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description:    Raspbian GNU/Linux 9.1 (stretch)
Release:        9.1
Codename:       stretch

Raspbian stretch が起動しました。

lsblkコマンドで物理ディスクの一覧を確認しました。

$ lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda     8:0    1 14.7G  0 disk
├sda1   8:1    1 41.8M  0 part /boot
└sda2   8:2    1 14.7G  0 part /

「/boot」と「/」はデバイス sda のUSBデバイスをマウントしています。

USBデバイスのブートに成功しました。

SDブートとUSBブートの優先順は、「SD > USB」ということが確認できました。

新しいブートモードは、SDカードを装着しているとSDブートし、そうでない場合はUSBブートします。

まとめ

Raspberry Pi3の新しいブートモードを試しました。

この新しいブートモードを有効にするために、OTPメモリを書き換えました。一度書き換えると、元に戻すことはできませんが心配は不要です。

SDカードが最優先のデバイスなので、従来と同じようにSDカードからブートできます。SDカードが無い場合は、USBデバイスからブートすることができます。

今回は、USB接続のSDカードリーダーからブートしたのですが、USB HDDやUSB SSDなどで実験してみたいと思います。