A certain engineer "COMPLEX"

Raspberry Pi 3をUSBからブートする (失敗)

Introduction


前回、SDカードを使ってマウス、キーボード、ディスプレイなしでRaspberry Pi 3のセットアップを完了。
でも、SDカードって信用できないのね。
USBメモリのがまだましって感じ。
USBメモリのが扱いやすいしね。

あんな小さい筐体に32GBや64GBとか狂気の沙汰やで。

今回は下記を参考にしてセットアップしました。
有益な情報ありがとうございます。

Raspberry Pi 3をUSB(HDD)だけ(SD不要)で動かす | 純規の暇人趣味ブログ
「Raspberry PiをUSB(HDD)で起動させる」というやり方は既にあります。しかし、これは単にデータ(OS)の部分をHDDに移しただけであり、依然としてブートローダとなるSDカ...

用意するもの


  • USBメモリ

以上。

ファームウェア更新


新しいファームでないとUSBブートはできない模様。

下記のブログによれば、安易に後述のコマンドで更新するのは非推奨の模様。

Raspberry Pi のファームウェアのアップデート
Raspberry Pi の最新ファームウェアは、Raspbian から rpi-update コマンドでアッ…

再起動後、下記の結果になることを確認。

USBにパーティションを作成


USBを差し込みます。
当然、この後フォーマットするからデータが消えます。
差し込んだ後、下記のコマンドで、Deviceに差し込んだUSBが表示されていることを確認。

/dev/sdaにデバイスがあることが確認できたので、下記のコマンドでパーティションを作成します。
しかし、sudo fdisk -lでデバイスが使用中になってしまった模様。
なので、再起動します。

再起動後、再度コマンドを実施。

上記によって、/dev/sda1/dev/sda2が作成されます。
続いて、フォーマット

SDカードの複製


SDカードに全データが入っている状態なので、USBにコピーします。
rsyncで複製ができる模様。

次に、フォーマットした領域をマウントします。
Linuxは直接デバイスにアクセスするのにmountが必要なので面倒。
いや、Windowsも背後でExplorerに表示するために、ドライブという形でマウントはしているんですけど...

下記は、/mnt/target/mnt/target/bootを作成し、そこにそれぞれ/dev/sda2/dev/sda2をマウントします。
その後、rsyncでコピーを開始します。

ブート情報の編集


参考ページの手順だと上手くいきませんでしたので、頑張って調べました。

まず、デバイスを一意に識別するPARTUUIDを調べます。
これにより、デバイスファイル名が変わっても安心。

次に/mnt/target/boot/cmdline.txtを確認します。
cmdline.txtは、起動時にLinux Kernelに渡されるコマンド引数を記述したテキストとのこと。

root=PARTUUID=85d563bf-02になっているのを修正する必要があります。
そこで先ほどのblkidで調べたPARTUUIDを調べます。
USBメモリのext4になっているPARTUUIDはa40eeb1f-02になります。

続いて、/mnt/target/etc/fstabを確認します。

fstabfile system tableの略らしい。
起動時にmountに読み込まれるコマンドになります。

PARTUUID=85d563bfはSDカードを指しています。
これをa40eeb1fに置換すれば、全部変換できそうです。

以上より、下記のコマンドでファイルを書き換えます。
当然、上述のPARTUUIDは環境依存ですので適宜書き換えてください。

ちなみに、sedはテキストとかの文字列を編集したりするコマンド。
String Editorの略だと思っていたら、Stream Editorの略らしい。
-i.bakで拡張子bakで編集前のファイルのバックアップを取ってからi(in place)を実行します。

再起動


アンマウントして再起動します。
再起動と言っても、一度SDカードを抜く必要があるので、電源を落とします。

電源が落ちたら、SDカードを抜いて、電源プラグを差し直します。
するとまた勝手に起動します。

起動しない(゚д゚)

なんでやねん。
最新版はダメなのか、USBメモリがダメなのか、原因は不明。
とりあえず今回はここまで。

2 thoughts on “Raspberry Pi 3をUSBからブートする (失敗)

  1. 通りすがり

    > Linuxは直接デバイスにアクセスするのにmountが必要なので面倒。

    直接デバイスにアクセスするなら、マウントする必要ないけど。
    デバイスファイルを直接叩けば良い。

    1. Takuya Takeuchi Post author

      デバイス上にディレクトリ掘ったりするのにも、mountが不要なんですか?
      初めて聞きました、目から鱗です。
      mkdir /dev/sda1/test
      とかすればいいんですか?

コメントを残す

メールアドレスが公開されることはありません。

%d人のブロガーが「いいね」をつけました。