Raspberry Pi:SSDブートしたい。
※結局なんだかんだごちゃごちゃしてしまったので、手順をまとめました。 手順のまとめ
μSD構成のコンパクトさは魅力ではあるけれど、このままではストレージの遅さがシステムのパフォーマンスの足を引っ張ってもったいないことこの上ないので、ストレージをμSDからSSDに変更する。
当然先人がたくさんいたので、まずは手順をなぞってしまおう。お勉強はそのあと。写経は大事。
というわけで、今回参考にした先人様はこちら。 raspida.com
このサイトでは64bit版のOSでやっていたけれど、 64bit版はまだ安定版がリリースされていないようなので、OSはこのままでいきましょうかね。 (OS入れ替えるにしても、SSDにしてからのほうが速いんじゃね?とも思うし)
ところで本筋全然関係ないけどローダーというとこの本はいい本なんだけど、もう20年前なんだよな。 いい感じのもうちょい新しい感じの本とかないのかな。まあこの辺は特に新しくなるものでもないから 今でもこの知識でほぼ通用するんだろうけど。
まあ寄り道はさておき始めましょうかね。
準備
私のところでは以下の環境で確認しています。
Raspberry pi : Raspberry Pi 4 8GB (OS等は、2022/9/20時点でapt でとれる最新版に更新済)
SSD:TRANSCEND トランセンド TS240GSSD220S
SATA-USB変換ケーブル:NewLife NewDesing社製、SB3 to SATA アダプター (ケーブルは、チップの相性があるらしく、外れ引くと大変っぽいので、上のリンクにあるラズパイダさんところでおすすめされていたものを買った。)
https://www.yodobashi.com/product/100000001003104707www.yodobashi.com
家から一歩も出ずにこれがそろうのだから便利な時代だなぁ。。
ブートローダーの更新
raspberry pi 4のブートローダーは古いものはSSDブートに対応しないようなので、まずは確認。
dnack@raspberrypi:~ $ vcgencmd bootloader_version Sep 3 2020 13:11:43 version c305221a6d7e532693cc7ff57fddfc8649def167 (release) timestamp 1599135103 update-time 0 capabilities 0x00000000
ブートローダを確認してみたが2020年9月のバージョン。
いろいろなサイトを見ると多分このバージョンでもUSBブートは対応していそうなのだけど (この辺ってリリースノート見てもわかるように書かれていないみたいなんだよな…)、 1年前のままってのもなんだし、更新しておく。
dnack@raspberrypi:~ $ ls /lib/firmware/raspberrypi/bootloader/stable/pie* -la -rw-r--r-- 1 root root 524288 4月 24 2020 /lib/firmware/raspberrypi/bootloader/stable/pieeprom-2020-04-16.bin -rw-r--r-- 1 root root 524288 6月 17 2020 /lib/firmware/raspberrypi/bootloader/stable/pieeprom-2020-06-15.bin -rw-r--r-- 1 root root 524288 7月 20 2020 /lib/firmware/raspberrypi/bootloader/stable/pieeprom-2020-07-16.bin -rw-r--r-- 1 root root 524288 8月 10 2020 /lib/firmware/raspberrypi/bootloader/stable/pieeprom-2020-07-31.bin -rw-r--r-- 1 root root 524288 9月 7 2020 /lib/firmware/raspberrypi/bootloader/stable/pieeprom-2020-09-03.bin -rw-r--r-- 1 root root 524288 12月 15 2020 /lib/firmware/raspberrypi/bootloader/stable/pieeprom-2020-12-11.bin -rw-r--r-- 1 root root 524288 1月 14 2021 /lib/firmware/raspberrypi/bootloader/stable/pieeprom-2021-01-11.bin -rw-r--r-- 1 root root 524288 1月 17 2021 /lib/firmware/raspberrypi/bootloader/stable/pieeprom-2021-01-16.bin -rw-r--r-- 1 root root 524288 2月 23 2021 /lib/firmware/raspberrypi/bootloader/stable/pieeprom-2021-02-16.bin -rw-r--r-- 1 root root 524288 3月 19 2021 /lib/firmware/raspberrypi/bootloader/stable/pieeprom-2021-03-18.bin -rw-r--r-- 1 root root 524288 4月 30 20:57 /lib/firmware/raspberrypi/bootloader/stable/pieeprom-2021-04-29.bin -rw-r--r-- 1 root root 524288 7月 7 22:25 /lib/firmware/raspberrypi/bootloader/stable/pieeprom-2021-07-06.bin
なんかいっぱいいるけど、最新版焼けばいいよね。
dnack@raspberrypi:~ $ sudo rpi-eeprom-update -d -f /lib/firmware/raspberrypi/bootloader/stable/pieeprom-2021-07-06.bin *** INSTALLING /lib/firmware/raspberrypi/bootloader/stable/pieeprom-2021-07-06.bin *** CURRENT: 2020年 9月 3日 木曜日 12:11:43 UTC (1599135103) UPDATE: 2021年 7月 6日 火曜日 10:44:53 UTC (1625568293) BOOTFS: /tmp/tmp.00VqIMxn84 EEPROM updates pending. Please reboot to apply the update. To cancel a pending update run "sudo rpi-eeprom-update -r".
再起動しろとのことなのでリブートして待つことしばし。
dnack@raspberrypi:~ $ vcgencmd bootloader_version Jul 6 2021 11:44:53 version c258ef8fe1d2334a750078b17dab5e2c1a1787fc (release) timestamp 1625568293 update-time 1632126508 capabilities 0x0000007f
確かに更新されている。
SSDに環境をコピー
μSDからSSDに環境をコピーするのはGUIにあるツールを使うらしい。VNCいれといてよかった。 VNC接続して、GUIのメニューから”SD Card Copier”を選択。
New Partition UUIDsにチェックを入れてStartボタンを押下。 しばしそのまま放置すると、終了ダイアログが出るので、それまで待つ。
ブート順の設定
ブート順は、万一トラブったらμSDからブートするだろうから SD→USBの順でいいだろう。
dnack@raspberrypi:~ $ sudo raspi-config
から
6.Advanst Options → A6 Boot Order → B1 SD Card Boot Boot from SD Card if available, otherwise boot from USB
を選択。
私のところでは最初からそうなってたので何もせずに抜けた。
これで、SDカードがあればSDカードから、なければUSBからブートしてくれる設定になっているはず。
設定を変えた場合は、Finishでraspi-configから抜けると自動でリブートする(はず)。
設定ファイルの変更
Shutdownして電源落として、uSDカードを抜いてから起動してみると、、、
起動しねえ。。。
このままでは「起動しない」以上の情報量がないので 以前しまい込んだモバイルディスプレイを引っ張ってきて繋いでみると、 SCSIがどうたらという行でつんのめってるっぽい。
以前にいろいろいじってるうちに画面解像度をモバイルディスプレイに表示するにはあまりに細かくしてしまったので読めない。。
SDカードからブートして、画面解像度を字が読めるところ(800x600くらい?)に設定して、 そのSDからSSDへ環境のコピーからやり直し。これで起動時のメッセージ読めるはず。
そうすると、ディスクをマウントしようとしてるところでつんのめってるっぽいことがわかる。 ということで、もう一度SSD挿して、fstabを見てみると、
dnack@raspberrypi:~ $ cat /etc/fstab proc /proc proc defaults 0 0 /dev/mmcblk0p6 /boot vfat defaults 0 2 /dev/mmcblk0p7 / ext4 defaults,noatime 0 1
ちょまてよ(キムタク顔)
これをそのままコピーしたってことは、 SSD起動でもmmclkほげほげを探しに行って (SD引っこ抜いてるから当然存在しないので) つんのめっているのではないかしら。
ということで、ビルド周りでストレージのデバイス名を変更。
SSDをマウント
dnack@raspberrypi:~ $ sudo mkdir /mnt/ex_ssd6 dnack@raspberrypi:~ $ sudo mkdir /mnt/ex_ssd7 dnack@raspberrypi:~ $ sudo mount -t vfat /dev/sda6 /mnt/ex_ssd6 dnack@raspberrypi:~ $ sudo mount -t ext4 /dev/sda7 /mnt/ex_ssd7
/boot/cmdline.txtの修正
dnack@raspberrypi:~ $ sudo nano /mnt/ex_ssd6/cmdline.txt
で
console=serial0,115200 console=tty1 root=/dev/mmcblk0p7 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
の
root=/dev/mmcblk0p7
を
root=/dev/sda7
に変更。
fstabの修正
dnack@raspberrypi:~ $ sudo nano /mnt/ex_ssd7/etc/fstab で /dev/mmcblk0p6 /boot vfat defaults 0 2 /dev/mmcblk0p7 / ext4 defaults,noatime 0 1
のmmcblk0p6
をsda6
、mmcblk0p7
をsda7
にそれぞれ変更。
これでSDカード引っこ抜いて起動して、無事起動を確認。
先人のブログを見てもこんなところで苦労していた形跡はないので、 この辺はSD Card Copierくんがよろしくやってくれたりするのかなとか思ってたんだけど、そんなことはなかったらしい。 いやそれにしたって、前にやってうまくいっていた人たちと何が違うんだろうなぁ。
この苦境を救ってくれたのはこちらの先人様でした。 この人はSD Card Copierつかわずにやってたけど、 こうやって見るとつかわないほうが簡単だったのかも。
まあなにはともあれ、なんとかうまくいったわけだけど SDをコピーしただけなので、もとのSDのサイズ以外使われてないわけですよね。
なにこれすげえもったいない。 ちょっと後でええようにしないと。
とりあえずsda8,9をつぶしてsda7ひろげて、 前のほうは適当にswapだけつくって残りはどこかにマウントしてしまえばいいのかな。 bootとルートだけつぶさなきゃいいんだよな?
まあ今度にします。細かい字を読んだの目が疲れた。(持病の老眼が…)
※追記 ひょっとしてNew Partition UUIDsにチェックを入れたのがわるかったのかな。 ここにチェックを入れなかったらデバイス名にsdaじゃなくて、 SDカードと同じmmcblkほげほげがはいって、 なんもしなくてもうまくいってくれたのかもしれんな。
手順のまとめ
1. ブートローダーの更新
(最近買ったものだと、出荷時からSSDブートに対応しているブートローダーが入っている可能性が高いが、 確実を期して最新の安定版にしておくといい)
dnack@raspberrypi:~ $ ls /lib/firmware/raspberrypi/bootloader/stable/pie* -la dnack@raspberrypi:~ $ sudo rpi-eeprom-update -d -f /lib/firmware/raspberrypi/bootloader/stable/pieeprom-2021-07-06.bin dnack@raspberrypi:~ $ sudo reboot
(pieeprom-2021-07-06.bin
のところは、上の行のls
コマンドで表示されたもののうち最新のファイル名を入れる)
2. ブート順の設定
dnack@raspberrypi:~ $ sudo raspi-config
から 6.Advanst Options → A6 Boot Order → B1 SD Card Boot Boot from SD Card if available, otherwise boot from USB を選択。 ※ メニューツリーはバージョンによって異なる可能性があります。
3. ブート環境のコピー
リモートからVNCで接続して、メニューから”SD Card Copier”でSDからSSDへコピー
4. cmdline.txt,fstabの修正
SSDをマウント
dnack@raspberrypi:~ $ sudo mkdir /mnt/ex_ssd6 dnack@raspberrypi:~ $ sudo mkdir /mnt/ex_ssd7 dnack@raspberrypi:~ $ sudo mount -t vfat /dev/sda6 /mnt/ex_ssd6 dnack@raspberrypi:~ $ sudo mount -t ext4 /dev/sda7 /mnt/ex_ssd7
/boot/cmdline.txtの修正
/mnt/ex_ssd6/cmdline.txt
console=serial0,115200 console=tty1 root=/dev/mmcblk0p7 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
のroot=/dev/mmcblk0p7
を
root=/dev/sda7
に変更。
fstabの修正
/mnt/ex_ssd7/etc/fstab
/dev/mmcblk0p6 /boot vfat defaults 0 2 /dev/mmcblk0p7 / ext4 defaults,noatime 0 1
のmmcblk0p6
をsda6
、mmcblk0p7
をsda7
にそれぞれ変更。
5. SDを引っこ抜いてリブート
これでSSDから起動できるはず。