【STEP-24】でも触れたように、microSDカードには書き込み回数の上限や劣化による寿命があり、エラーが出て起動しなくなる可能性もあります。
そこで、USB接続した外部ストレージからRaspbianを起動することができればと調べていたら、公式サイトに”Program USB Boot Mode”の記事が見つけました。
但し、この機能は未だ実験的なもので、設定を一度、OTP (One Time Programmable) メモリーに書き込んでしまうと、二度とRaspberry Piを元の設定には戻せなくなるそうです。
とは言っても、この機能はRaspberry PiのカードスロットにmicroSDカードが挿入されていない場合のみ、USB接続したストレージからの起動を可能するもので、今まで通りカードスロットにmicroSDカードを挿入すれば無効になるものなので、それほど心配しなくてもよさそうです。
Program USB Boot Modeの有効化
「Program USB Boot Mode」を有効にするには、設定ファイル”/boot/config.txt”を編集します。
「LXTerminal」を起動し、コマンド”sudo nano“で”/boot/config.txt”を開きます。
sudo nano /boot/config.txt
「GNU nano」画面が開くので、「↓」キーでカーソルを最終行まで移動します。
カーソルが最終行にきたら「Enter」キーで 1行空けて、次のように入力します。
# Enable usb boot program_usb_boot_mode=1
入力してから「Ctrl」+「O」キーを押すと、画面下に「書き込むファイル: /boot/config.txt」が表示されるので、「Enter」キーを押します。
「59行を書き込みました」との表示が出たら、「Ctrl」+「X」キーを押して「GNU nano」画面を閉じます。
設定ファイル”config.txt”に設定を書き込んでも、未だ設定は有効になっていません。
コマンド”vcgencmd“で、OTP (One Time Programmable) メモリーの現在の設定を確認します。
vcgencmd otp_dump | grep 17:
返された”17:1020000a”は、「Program USB Boot Mode」が無効であることを表します。
コマンド”poweroff”で、シャットダウンします。
poweroff
Raspbianがシャットダウンして、Raspberry PiのLED「ACT ( 緑 ) 」の点滅が終わり、「PWR ( 赤 ) 」のみが点灯した状態になったことを確認してから、電源を落とします。
Raspberry Piの電源が一度、完全に落ちてから、再び電源を入れてRaspbianを起動します。
「LXTerminal」を起動して、コマンド”vcgencmd“で、OTPメモリーの設定を確認します。
vcgencmd otp_dump | grep 17:
返された”17:3020000a”は、「Program USB Boot Mode」が有効であることを表します。
設定を一度、OTP (One Time Programmable) メモリーに書き込んでしまえば、「Program USB Boot Mode」の設定は無用なので、再び、コマンド”sudo nano“で”/boot/config.txt”を開きます。
sudo nano /boot/config.txt
開いた「GNU nano」画面でカーソルを最終行に送り、行頭に”#”を入力してコメントアウトします。
#
入力したら「Ctrl」+「O」キーで上書きし、「Enter」→「Ctrl」+「X」キーで画面を閉じます。
“exit”で、「LXTerminal」を閉じます。
exit
外部ストレージへのRaspbianのインストール
SSDのUSBコネクタをRaspberry PiのUSB端子に挿入すると、「リムーバブルメディアの挿入」画面が開くので、「キャンセル」ボタンをクリックします。
タスクバー左端のメニューアイコンから「アクセサリ」→「SD Card Copier」をクリックして開きます。
「SD Card Copier」画面の項目「Copy From Device:」右のプルダウンメニューから、コピー元のmicroSDカードのデバイスファイル名”(/dev/mmcblk0)″を選択します。
項目「Copy To Device:」右のプルダウンメニューから、コピー先のSSDカードのデバイスファイル名”(/dev/sda)”を選択します。
今回はコピー先がmicroSDカードではないので、項目「New Partition UUIDs」のチェックボックスにはチェックを入れないで「Start」ボタンをクリックします。
警告画面「これはデバイス上のすべてのコンテンツを消去します。よろしいですか?」が現れるので、よければ「Yes」ボタンをクリックします。
準備ができると2つのパーティションがコピーされます。「Copy complete」画面が出たら、「OK」→「Close」ボタンをクリックして「SD Card Copier」を閉じます。
SSDからのRaspbian起動
ここでRaspbianを一旦、シャットダウンして、Raspberry PiのカードスロットからmicroSDカードを取り外し ( SSDはUSB端子に接続したまま ) 、電源を再投入したところ、SSDの電源LEDは点灯するものの、画面には何も映りませんでした。
そこで、公式サイトの情報を検索したところ、こんな情報がありました。
本来は、HDDのように電源投入からスピンアップまでに時間の掛かるストレージの為にある設定なのですが、USBからの起動を待つタイムアウトを既定の2秒から5秒に延長するオプションがあったので、IDE接続の旧式SSDにも効果があるのではと思い実行してみることにしました。
Raspberry PiをmicroSDカードで起動して「LXTerminal」を開き、コマンド”sudo nano“で”/boot/config.txt”を開きます。
sudo nano /boot/config.txt
カーソルを最終行に送り、次のように入力します。
program_usb_boot_timeout=1
入力したら「Ctrl」+「O」キーで上書きし、「Enter」→「Ctrl」+「X」キーで画面を閉じます。
コマンド”poweroff”で、シャットダウンします。
poweroff
Raspbianがシャットダウンして、Raspberry PiのLED「ACT ( 緑 ) 」の点滅が終わり、「PWR ( 赤 ) 」のみが点灯した状態になったことを確認してから、電源を落とします。
Raspberry Piの電源が一度、完全に落ちてから、再び電源を入れてRaspbianを起動することで設定を有効化します。
再び、Raspbianをシャットダウンして、Raspberry PiのカードスロットからmicroSDカードを取り外し ( SSDはUSB端子に接続したまま ) 、電源を再投入したところ、画面が出るまでにちょっと時間はかかりましたが、SSDからRaspbianを起動させることができました。
コマンド”lsblk“で、SSDのパーティション構成とマウント状況を確認します。
lsblk
これを見ると、”sda ( SSD ) “以外にマウントされたストレージがない状態で起動していることが分かります。
SSDの全容量59.6GBが”/boot”パーティション以外は全て”/ ( ルート ) “パーティションに割り当てられていて、未割り当て領域はありませんでした。
次回の【STEP-27】では、USB接続のデバイス ( USBメモリー等 ) にswap領域を移動して、ディスクアクセスを低減することで、SSD起動の最適化を図る方法を紹介します。