Raspbian USB Boot

本記事について
-------------

本記事は公式サイトの [USB mass storage device boot](https://www.raspberrypi.org/documentation/hardware/raspberrypi/bootmodes/msd.md) の英文記事を非公式に日本語訳したものです。

USB ブートモードが有効な機種について
---------------------------------

USB 大容量ストレージブートは、 Raspberry Pi 3B, 3B +, 3A + と 2B v1.2 でのみ使用できます。

このチュートリアルでは、フラッシュドライブや USB ハードディスクなどの USB 大容量ストレージデバイスから Raspberry Pi を起動する方法について説明します。この機能は実験的なものであり、すべての USB 大容量ストレージデバイスで機能するわけではないことに注意してください。一部のUSB 大容量ストレージデバイスが機能しない理由の説明、およびいくつかの背景情報については、 Gordon Hollingworth の [このブログ投稿](https://www.raspberrypi.org/blog/pi-3-booting-part-i-usb-mass-storage-boot/) を参照してください。

USB ブートモードの設定
---------------------

Raspberry Pi 3A + および 3B + は、変更なしで USB から起動できますが、 Raspberry Pi 3A および 3B では、USBブートビットを OTP メモリに(1 度だけプログラム的に)設定する必要があります。 Raspberry Pi 3A + または 3B + を使用している場合は、次のセクションに進んでください。

USB ブートビットを有効にするには、 USB ブートモードを有効にする設定オプションを使用して、 Raspberry Pi 3 を SD カードから起動する必要があります。

このビットが設定されると、 SD カードは不要になります。 OTP に加えた変更は永続的なものであり、元に戻すことはできません。

Raspbian または Raspbian Lite を実行している任意の SD カードを使用して、 OTP ビットをプログラムできます。このような SD カードがない場合は、通常の方法で Raspbian または Raspbian Lite をインストールできます。 [イメージのインストール](https://www.raspberrypi.org/documentation/installation/installing-images/README.md) を参照してください。

まず、最新のブートファイルで ``/boot`` ディレクトリを準備します(Raspbian / Raspbian Lite の 2017-04-10 リリース以降を使用している場合、この手順は不要です)。

```bash
$ sudo apt update && sudo apt full-upgrade
```

次に、下記のコードで USB ブートモードを有効にします。

```bash
echo program_usb_boot_mode=1 | sudo tee -a /boot/config.txt
```

これにより、 ``program_usb_boot_mode = 1`` が ``/boot/config.txt`` の最後に追加されます。 ``sudo reboot`` を実行して Raspberry Pi を再起動し、 OTP が次のようにプログラムされていることを確認します。

```bash
$ vcgencmd otp_dump | grep 17:
17:3020000a
```

出力 ``0x3020000a`` が表示されていることを確認します。そうでない場合、 OTP ビットは正常にプログラムされていません。この場合、プログラミング手順をもう一度実行してください。ビットがまだ設定されていない場合、これは Pi ハードウェア自体の障害を示している可能性があります。

必要に応じて、 ``config.txt`` から ``program_usb_boot_mode`` 行を削除して、 SD カードを別の Raspberry Pi に挿入しても USB ブートモードがプログラムされないようにすることができます。 ``config.txt`` の最後に空白行がないことを確認してください。たとえば、コマンド ``sudo nano /boot/config.txt`` を実行して nano エディターを起動し、 ``config.txt`` を編集できます。

USB 大容量ストレージデバイスの準備
-------------------------------

Raspbian の 2017-04-10 リリース以降、 SD カードの場合と同様に、オペレーティングシステムイメージを USB デバイスに直接コピーすることにより、動作中の Raspbian システムを USB 大容量ストレージデバイスにインストールできます。この手順を実行するには、USB大容量記憶装置に対応するドライブを選択して、 [ここ](https://www.raspberrypi.org/documentation/installation/installing-images/README.md) の指示に従ってください。

USB 大容量ストレージデバイスのイメージングが完了したら、コンピューターから取り外して Raspberry Pi に挿入します。

USB 大容量ストレージデバイスから Raspberry Pi を起動する
-----------------------------------------------------

USB 大容量ストレージデバイスを Raspberry Pi に接続し、 Pi の電源を入れます。 5 〜 10 秒後、 Raspberry Pi が起動し、接続されたディスプレイにレインボースプラッシュ画面が表示されます。

USB ブートビットが設定されている場合、 USB ブートが機能するために SD カードを Raspberry Pi に挿入する必要はありません。

ブートに失敗する場合
------------------

SD カードを Raspberry Pi に挿入して電源を入れます。 USB 大容量ストレージデバイスを Raspberry Pi に接続し、以下の操作を試してください。

```bash
sudo mount /dev/sda2 /mnt
sudo mount /dev/sda1 /mnt/boot
```

``/mnt/boot/cmdline.txt`` の root パラメータの値を ``/dev/sda2`` に変更します。

```bash:/mnt/boot/cmdline.txt
console=serial0,115200 console=tty1 root=/dev/sda2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles
```

``/mnt/etc/fstab`` を編集します。 ``/boot`` を ``/dev/sda1`` 、 ``/`` を ``/dev/sda2`` に変更します。

```bash:/mnt/etc/fstab
proc            /proc           proc    defaults          0       0
/dev/sda1  /boot           vfat    defaults          0       2
/dev/sda2  /               ext4    defaults,noatime  0       1
# a swapfile is not a swap partition, no line here
#   use  dphys-swapfile swap[on|off]  for that
```

raspbian をシャットダウンし、 USB 大容量ストレージデバイスを接続したまま、 SD カードだけを Raspberry Pi から抜きます。再度 Raspberry Pi の電源を入れて少し待つと raspbian が起動します。