ラズパイ(Raspberry Pi 4 Model B)をSSDブートにする(備忘録)

Raspberry Pi 4 Model B をSSDドライブから起動する備忘録 Raspberry Pi (ラズパイ)

    【目次】

  1. なぜ今さらラズパイか、そしてSSDブートにすることにしたのか
  2. 使ったもの
  3. Raspberry Pi 4 Model B 全部入りセットの紹介
  4. ラズパイ公式サイトから Raspberry Pi Imager アプリのダウンロード
  5. なぜかSSDからラズパイの起動ができない。その原因とは…
  6. micro SDカードの設定
  7. パソコンとSSH接続するための秘密鍵、公開鍵を作成する
  8. SSDの設定
  9. まとめ

7.パソコンとSSH接続するための秘密鍵、公開鍵を作成する

次に、SSDブートする前に、ラズパイをパソコンでリモート制御するためのSSH設定前処理をしていきます。

ImagerでSSDに焼き込む前にSSH設定を済ませておけば、格段に楽です。
私は最初、SSH設定せずに起動したら、ラズパイ側の設定が鬼のように面倒で、めちゃめちゃ労力かかりました。
ですから、事前に済ませておきます。

7-1: ラズパイとパソコンをSSH接続しなければならない理由

私は一昨年からラズパイを本格的に使用し始めたのですが、今までの設定でお分かりの通り、ラズパイ本体のみの操作はとても面倒です。
やはり、パソコンのVSCodeという素晴らし過ぎるエディタを使ってリモート制御したいですよね。
特に今回はラズパイのメジャーOSであるRasbianを使わずに、Ubuntu Serverを使うことが目的なので、VSCodeでリモート制御するためにSSH接続しなければならないのです。
SSH接続では、初回にパスフレーズを入力してログインできれば、後はパスワード不要でスラスラと作業できます。しかもデータを暗号化してくれるので安心ですね。

SSHとはSecure Shellの略らしく、パスワード認証と公開鍵認証があります。そして、通信データは全て暗号化されるのです。
パスワード認証よりも公開鍵認証の方が安全性は高く、個人的にはとても扱いやすいため、今回は公開鍵認証方式を使います。

公開鍵認証については、ド素人の私が過去にこのブログでSSLの件で扱ったことがあるので、こちらの記事を参照してみてください。
暗号化方式についてはSSLとほぼ同じなので、参考になるかもしれません。よくできた仕組みです。

7-2: 秘密鍵、公開鍵をパソコンで作成する

SSH接続用の秘密鍵、公開鍵を作成します。
Windows 10 パソコンで説明します。

Windows 10以降の場合、コマンドプロンプトで秘密鍵や公開鍵を作成するツールが予めインストールされているみたいです。

まず、自分のユーザー名フォルダに.sshフォルダを作成しておきます。
パスは
C:¥Users¥自分のユーザー名
です。

(図320)

C:¥Users¥自分のユーザー名¥.sshフォルダ作成

C:¥Users¥自分のユーザー名¥.sshフォルダ作成

次に下図の様にWindowsのコマンドプロンプトを起動します。
そして、
cd .ssh
と入力して、.sshフォルダに移動しておきます。
CDコマンドはChange Directory という意味です。

(図321)

Windowsコマンドプロンプト

Windowsコマンドプロンプト

次に、秘密鍵と公開鍵を生成するコマンドを打ちます。

ssh-keygen -t ed25519 -f raspi_key -C ""

(図322)

ssh-keygen -t ed25519 -f raspi_key -C "" コマンド

ssh-keygen -t ed25519 -f raspi_key -C “” コマンド

このコマンドの意味については、以下のサイトを参考にさせていただきました。

https://atmarkit.itmedia.co.jp/ait/articles/1908/02/news015.html

コマンドオプションの -t は、鍵の暗号化形式を決めます。
ed25519 は、現状では最強の暗号化形式だそうです。

-f はファイルを指定します。ここではraspi_keyとしました。
-C はコメントを指定しますが、””とするとコメントを削除するそうです。

そして、Enterを押すと、下図の様にパスフレーズを聞いてきますので、長めで出来るだけ複雑な任意のパスワードを入力します。(※パスワードを入力しても文字は表示されません)

(図323)

ssh-keygenコマンド後のパスフレーズ入力

ssh-keygenコマンド後のパスフレーズ入力

次に、もう一度同じパスワードを入力します。

(図324)

ssh-keygenコマンド後の2回目パスフレーズ入力

ssh-keygenコマンド後の2回目パスフレーズ入力

すると、下図の様になり、
秘密鍵ファイル: raspi_key
公開鍵ファイル: raspi_key.pub
が生成されました。

(図325)

秘密鍵、公開鍵の生成完了

秘密鍵、公開鍵の生成完了

では、エクスプローラーで.sshフォルダを見てみると、以下のようになっていると思います。

(図326)

エクスプローラーで秘密鍵、公開鍵ファイルの確認

エクスプローラーで秘密鍵、公開鍵ファイルの確認

以上、WindowsパソコンでのSSH用秘密鍵、公開鍵の生成方法でした。

8.SSDの設定

では、次に、SSDに先ほど説明したRaspberry Pi ImagerでUbuntu Serverをインストールしていきます。

因みに、先に説明しましたが、最新版(たぶん2021年以降のロット)のRaspberry Pi 4B ならばSDカードインストールは省いて、ここからインストールすれば良いと思われます。

8-1: SSDにImagerでUbuntu Serverをインストールする

今回使ったRaspberry Pi Imagerのバージョンはv1.7.3です。バージョンが変わると使い方も多少変わるのでご了承ください。
Windows 10で説明します。

今回使ったUSB-SSDは、先にも紹介しましたが、Amazonで購入したものです。

まず、パソコンにSSDをUSBポートに挿し込みます。
内容をエクスプローラーで見ると、下図の様に表示されると思います。

(図350-0)

新品SSDの内容をエクスプローラーで見た様子

新品SSDの内容をエクスプローラーで見た様子

これらのファイルはImagerでフォーマットすると全て消去されます。

まず、ダウンロードしたImagerをパソコンで起動し、下図の様に「OSを選ぶ」をクリックします。

(図350)

Raspberry Pi Imager でOSを選ぶ

Raspberry Pi Imager でOSを選ぶ

すると、下図の様になり、「Other general-purpose OS」をクリックします。

(図351)

Other general-purpose OSを選択

Other general-purpose OSを選択

次に、下図の様にUbuntuをクリックします。

(図352)

Ubuntuを選択

Ubuntuを選択

次に、先にmicro SDカードでのUbuntu Serverインストールと同じOSの
Ubuntu Server 22.04.01 LTS(64-bit)
を選択し、Enterを押します。

(図353)

Ubuntu Server 22.04.01 LTS(64-bit)を選択

Ubuntu Server 22.04.01 LTS(64-bit)を選択

次に、「ストレージを選ぶ」をクリックします。

(図354)

ストレージを選ぶ

ストレージを選ぶ

下図の様に、予めパソコンのUSBポートに挿し込んでおいたSSDを選択します。

(図355)

次に、下図の様に歯車アイコンをクリックします。

(図356)

歯車アイコンを選択

歯車アイコンを選択

次に下図の様に「ホスト名」にチェックを入れ、先ほどmicro SDカードのところで入力したホスト名と同じ名前にしておきます。

(図357)

ホスト名を入力

ホスト名を入力

次に、micro SDカードのところで説明したものと異なることをやります。
それは、SSH設定です。

まず、先ほど紹介しましたが、SSH用の秘密鍵、公開鍵を作成したフォルダを開き、公開鍵の方をテキストエディタで開きます。拡張子が .pub となっているものですので、間違えないでください。

(図358-0-1)

拡張子.pub のファイル(公開鍵)をテキストエディタで開く

拡張子.pub のファイル(公開鍵)をテキストエディタで開く

下図ではサクラエディタで開いたものです。
このssh-ed25519 xxxxx……… となっているところ1行まるまるコピーしておきます。改行のコピーは不要です。

(図358-0-2)

拡張子.pubファイルをテキストエディタで開き、1行をコピーする

拡張子.pubファイルをテキストエディタで開き、1行をコピーする

次にImagerに戻り、下図の様に「SSHを有効化する」にチェックを入れます。
そして、「公開鍵認証のみ許可する」を選択し、下図のように先ほどコピーした公開鍵のテキストを貼り付けます。

(図358-1)

SSH設定で公開鍵認証のみ有効にし、公開鍵テキストを貼り付け

SSH設定で公開鍵認証のみ有効にし、公開鍵テキストを貼り付け

次に、下にスクロールして、下図の様に「ユーザー名とパスワードを設定する」にチェックを入れ、SDカードで設定したものと同じユーザー名とパスワードにします。

(図359)

ユーザー名とパスワードを入力

ユーザー名とパスワードを入力

あとはSDカードのところで説明したものと同じですが、下図の様に「ロケール設定をする」にチェックを入れ、タイムゾーンをAsia/Tokyoにし、キーボードレイアウトにjpと入力します。

(図360)

ロケール設定

ロケール設定

「永続的な設定」ではとりあえず、下図の様にすればOKです。
そうしたら、「保存」をクリックします。

(図361)

永続的な設定

永続的な設定

これでImagerの設定は全て終了したので、下図の様に「書き込む」をクリックします。

(図362)

書き込むをクリック

書き込むをクリック

すると、下図の様にSSDのデータが完全に削除されますがよろしいですか?と聞いてくるので、「はい」をクリックします。

(図362-2)

SSD内データ消去されるメッセージは「はい」

SSD内データ消去されるメッセージは「はい」

すると、SSDに書き込みが始まります。
12分くらいかかりました。

(図362-3)

SSDメモリにOSイメージを書き込み中

SSDメモリにOSイメージを書き込み中

SDカードの時と同様、下図の様なメッセージが出ますが、すべてキャンセルします。

(図363)

Windowsのメッセージは全てキャンセル

Windowsのメッセージは全てキャンセル

書き込みが完了すると、下図の様になるのでImagerを閉じてOKです。

(図363-2)

SSDへの書き込み完了

SSDへの書き込み完了

ところで、SSDの内容がどうなっているか見たかったので、SSDを抜いて、再度USBポートに挿し込んで、ドライブ全体のプロパティを見てみました。
すると、下図の様になっていました。

(図364)

SSDメモリの容量を確認したら、明らかに少なすぎる!

SSDメモリの容量を確認したら、明らかに少なすぎる!

あれ?
250GBのSSDのはずが、たった252MBしかありませんね。

実は、後にラズパイ側でトータル容量を確認すると、ちゃんと250GBありましたので、心配無用です。
どうやら、Imagerでパーティションが分けられてフォーマットされており、252MBはブートローダ専用の領域のようです。

8-2: ラズパイ本体をSSDから起動し、apt full-upgrade する

ようやくここまで来ました。
ラズパイ本体のUSBポートにSSDを挿し込み、ディスプレイとキーボードとLANケーブルを接続し、ACアダプターの電源を入れます。

すると、下図の様にSSDのアクセスランプが点きました!!!
やったぜぃ!

(図380)

ラズパイ4BのUSBポートに挿したSSDのアクセスランプ点灯!

ラズパイ4BのUSBポートに挿したSSDのアクセスランプ点灯!

すると、ディスプレイのコマンドラインが進行し、下図の様にSSHキーが表示されて、コマンドラインが停止します。
先ほど設定したSSHは成功したようです。

(図381)

SSD起動成功!

SSD起動成功!

次に、Enterを押して、ログイン名とパスワードを入力します。

(図382)

SSD起動し、ログインパスワード入力

SSD起動し、ログインパスワード入力

すると、下図の様になって、無事にSSDからLinuxコマンドラインが起動しました。

(図383)

SSDログインOK。コマンドプロンプト状態

SSDログインOK。コマンドプロンプト状態

ここで、SSDのトータル容量を確認してみたいと思います。
以下のコマンドを打ちます。

df -h --total

すると、下図のようになりました。

(図384)

df -h --total コマンド

df -h –total コマンド

/dev/sda1
というのが、ブートローダ(ファームウェア)の領域(パーティション)で、
/dev/sda2
が、実際にデータを保存する領域だそうです。
先ほどWindowsのプロパティで確認した、ブートローダの252MBとほぼ合っていますね。
そして、トータル232GBあることで安心しました。

では、今度はmicro SDカードのところでやったように、ファームウェアをアップデートします。

以下のコマンドを打ちます。

sudo apt update

(図385)

sudo apt update

sudo apt update

次に、以下のコマンドを打ちます。

sudo apt full-upgrade

すると、下図の所で停止するので、Yキーを打ちます。

(図386)
sudo apt full-upgrade

5~10分くらい経過して、インストール終了すると、下図の様になるのでEnterを押します。

(図387)

sudo apt full-upgrade完了

sudo apt full-upgrade完了

すると、下図の様になるので、とりあえずこのまま<OK>にカーソルを持っていきEnterを押します。

(図388)

<OK>→Enter

<OK>→Enter

すると、下図の様になります。

(図389)

コマンドプロンプト状態

コマンドプロンプト状態

次に、このアップデートを有効にするために再起動します。
以下のコマンドを打ちます。

sudo reboot

パスワードも入力します。

(図390)

sudo reboot

sudo reboot

すると、再起動し、以下の画面になったらログインします。

(図391)

再起動後、ログイン

再起動後、ログイン

これでファームウェアがアップデートされました。

(図392)

アップデート完了

アップデート完了

ここで、ブートローダのバージョンを確認しておきます。

vcgencmd bootloader_version

すると、下図の様になって、結局バージョンは変わらずでした。

(図393)

ブートローダのバージョン確認

ブートローダのバージョン確認

因みに、SSDの容量がどう変化したのか気になったので確かめてみます。
以下のコマンドです。

df -h --total

すると、下図のようになりました。

(図394)

ファームウェアアップデート前と後のSSD容量比較

ファームウェアアップデート前と後のSSD容量比較

このように、apt full-upgrade する前と後では、ブートローダの容量がかなり変化してしまいました。
full-upgradeする前は30%使用だったのに、upgrade後は59%になっていました。
おいおい、このまま定期的にupgradeすると、パンパンになるんではないかい?
まぁブートローダくらいならそんなに容量は食わないと思いますが、結局はラズパイ公式が決めたパーティションなので、心配無用だと思います。

ふぅ・・・

これでようやくラズパイのSSD起動設定が完了しました。
ESP32に比べてとても面倒で、長い時間かかりました…。
最近流通しているラズパイならば、デフォルトでUSBブートができるはずで、もっと楽にできると思います。

以上、Raspberry Pi 4B のSSDブート方法の紹介でした。

まとめ

2020年12月以前のRaspberry Pi 4B は、デフォルトではSSDブートできず、micro SDでブートしてから、raspi-configでUSBブートに変えて、SSDブートするという手間のかかるものでした。

このブログ記事を書く前は何度も回りくどい方法でインストールやり直しましたが、3回くらいやるとある程度やり方が分ってきましたね。その分、えらい時間浪費しましたが…。

これでmicro SDでのラズパイ運用の不安が無くなり、思う存分データを読み書き出来そうです。

次回はラズパイをパソコンのVSCodeでリモート接続する設定を記事にする予定です。

というわけで、今回はここまでです。
ではまた…。

コメント

  1. 匿名 より:

    2023年投稿としては、始まりしか読んでいませんが、Ubuntuを選んだ理由や、インストール方法は、古い情報だと思います。

    • mgo-tec mgo-tec より:

      匿名さん

      記事をご覧いただきありがとうございます。
      記事中でもタイトルでも言っておりますが、この記事は自分用の備忘録です。
      Ubuntuを選んだ理由は私個人の理由なのです。他の方々には別のOSの方が良いかも知れません。
      インストール方法は記事中でも述べていますが、確かに古い情報です。
      今はimagerで簡単にSSDドライブブートできるということは知っております。
      記事を読んでいただけると分かると思いますが、私の使ったラズパイは2020年頃に購入したもので、それをSSDに換装するのが面倒だったというわけです。

      • 匿名 より:

        >> 私の使ったラズパイは2020年頃に購入したもので、それをSSDに換装するのが面倒だったというわけです。
        SSDに換装ってなんのことです?

        • mgo-tec mgo-tec より:

          よく読んで下さいました。
          記事に書いてある通りですが、まぁ、私の文章は日本語になっていないとよく言われます。
          (日本人じゃないかも…)

  2. 匿名 より:

    ドライブドライブ笑

    • mgo-tec mgo-tec より:

      匿名さん

      うれしいですね。記事をまた読んで下さって感謝です。
      確かに誤った表現でしたので、記事を修正しました。
      ありがとうございました。
      因みに、間違いかどうかChat GPTに聞いてみました。

      一般的には間違いではないけど、厳密には冗長ということみたいっすね。
      いずれにしても、わざわざ教えて頂き、ありがとうございました。
      m(_ _)m

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