Pandora Pocket

IT系と日常系の備忘録。三日坊主。

追記(2020/06/24)

RaspberryPi 4でも正式にUSBメモリー単体ブートに対応しました。

以下は古い情報になります。

Raspberry Pi 3までは(途中から)MicroSDブートでなくUSBメモリー単体でのブートが可能になってましたが、Raspberry Pi 4は構成が変わったため、現時点でのファームウェアではUSBブートができません。

MicroSDはUSBメモリー以上に劣化が激しいので極力常時利用する際には利用したくない。

そこで、ブートに必要なデータだけをMicroSDに配置し、実際のLinux(今回はRaspbian)をUSBメモリーに配置することで、ブート処理だけMicroSDで行う疑似USBブートを行うようにします。

用意するもの

  • RaspberryPi 4
  • USBメモリー
  • MicroSD
    MicroSDはUSBメモリーの容量よりも少ない容量のものを。8GBのものがベストです。作業の都合大容量なものだと作業に時間がかかります。

パーティションの作成

まずはとりあえずRaspbianをMicroSDに書き込んでブートさせます。今回はRaspberryPiでの作業をSSH経由で行いたいので、boot領域に sshファイルを作成しておきました。

起動したらまず sudo fdisk -l を実行。
実行結果

Raspbianがインストールされている領域は /dev/mmcblk0p2 、ブート領域は /dev/mmcblk0p1 となります。
そしてUSBメモリーは /dev/sda 。 現時点ではUSBメモリーは未フォーマットの状態なので、partedを使って初期化を実施。

sudo parted /dev/sda を実行してから下記のコマンドをそれぞれ実行。

mklabel gpt
y
mkpart primary ext4 0% 100%
p
q

EXT4で全体を初期化するコマンドです。お好みで。

これでファイルを置くための領域として /dev/sda1 が確保されました。

Raspbianの領域をUSBメモリーへコピー

単なるコピーだと特殊なファイルやら権限やらが面倒なので、領域丸ごとddコマンドでコピーします。

コマンド: sudo dd if=/dev/mmcblk0p2 of=/dev/sda1 bs=32M conv=noerror,sync status=progress

空き領域含めて丸ごとコピーするので時間がかかります。

実行したらファイルシステムのチェックを実施。

コマンド:sudo e2fsck -f /dev/sda1

たまに Fix<y>? と聞かれるので、yを実行。

この状態だと領域がMicroSD側のRaspbianのサイズになってしまっているので、resize2fsを実行して拡張。

コマンド:sudo resize2fs /dev/sda1

fstab更新

USBメモリーにRaspbianの領域をコピーしただけではまだUSBブートされないので、ブート対象を切り替える必要があります。

まずはPARTUUIDの確認。

コマンド:ls -l /dev/disk/by-partuuid/

PARTUUIDが分かったところでマウント情報が書かれているfstabを更新します。

まずはUSBメモリーの領域をマウント。

コマンド:sudo mount /dev/sda1 /mnt

そしたらfstabを適当なエディタで開きます。私はvim使うの苦手なのでnanoで。
コマンド:sudo nano /mnt/etc/fstab

開いた段階ではこんな感じ。

ここでルートディレクトリのPARTUUIDをUSBメモリーのPARTUUIDに書き換え。
boot領域のほうは /dev/mmcblk0p1 に書き換えました。これは今後boot領域を別のMicroSDを用いる場合の対応なので、同じMicroSDを使うなら不要。

編集後

cmdline.txt編集

boot領域側のcmdline.txtを編集します。

編集前

PARTUUIDがMicroSDのLinux領域指定になっているので、ここをUSBメモリー側に向くように修正します。

これでUSBブートの準備は完了。

RaspberryPi4を再起動して正常に起動するならOK。

バックアップ

この後Raspbianをいじって初期化したいと思ったときにまたこの作業をするのは面倒なので、作業完了したらイメージを取っておくべき。

どのソフトでもいいですが、USB Image Toolだと空き領域部までイメージを取得しないので便利。

https://www.alexpage.de/usb-image-tool/download/

USB デバイスの内容を、イメージファイルとして丸ごと完全にバックアップしてくれるソフト「USB Image Tool」。
[はてなブックマークで表示]

MicroSDに残してあるboot領域はイメージを取らなくとも、ファイルをバックアップしておけばOK。

参考サイト

Raspberry Piをサーバとして利用すると24時間動かす事になりますが、それにSDカードを利用するのは精神衛生上よろしくない。というわけで、Raspberry PiをUSBデバイス(HDDやSSD)で起動できるようにする方法。
[はてなブックマークで表示]