Raspberry Pi 5 が不安定になり、ビルドやパッケージのインストールが遅くなったり、途中で止まる現象が発生したのでSSD起動に切り替えて高速化した話です。
Raspberry Pi 5 のセットアップは以下で触れています。
Raspberry Pi 5 が不安定になった原因
まず、そもそもの低速化に至った話は、一度、何かをインストールしている最中に Raspberry Pi 5 がフリーズしたので、禁じ手、SysRq+[b]
キーでの強制リブートをしをしてしまったことがきっかけでした。その日以降、以下のようなエラーが出て、インストールしなおしても症状が改善されませんでした。
$ ls -al
-bash: /usr/bin/ls: Input/output error
一度、発生すると何もできなくなり、電源長押しでしか再起動できません。
これは、SDカードが不良になってしまったことが原因で、別のSDカードを使ってインストールしなおすことで改善しました。
ともあれ、購入してしまったのでSSD起動に切り替えます。
SSD の取り付け
Raspberry Pi 5 には、PCIe 2.0 が付いているので、対応した高速周辺機器の取り付けが可能になりました。また、Raspberry Pi のサイズに合わせたNVMEシールドもあるので、これらを購入して早速、取り付けてみました。
なお、Raspberry Pi 5 は、SDカードでセットアップ済みで、今回は、SDカードからSSDへの移行という形で進めました。
合わせて、SSD を取り付けた後に収納できるケースも購入しました。
Raspberry Pi 5 含めて購入したのは、以下のものです。

届いたので、早速、取り付けていきます。
まずは、Raspberry Pi 5 に X1001 NMVeボードを取り付けます。
(電源を抜いた状態で取り付けます)

ボードに付属しているケーブルをRaspberry Pi 5 側にセットアップします。

続いてボードを支えるスペーサーを3ヵ所ネジ留めします。

ボードを載せて、ネジで固定します。

SSD を取り付けます。

はめ込むだけです。

PCIe バスの反対側をネジで固定します。

これで、Raspberry Pi 5 に SSD を取り付け完了しました。
SSD で起動できるようにする
SSD にSDカードのイメージをコピーして、起動できるようにします。
ファームウェアの更新
Raspberry Pi 5 起動したら、最新の状態に更新します。
$ sudo apt update && sudo apt upgrade -y
Raspberry Pi 5 本体のファームウェアを更新します。
$ sudo rpi-eeprom-update -a
パーティションの作成とフォーマット
ディスクの状態を確認します。
$ sudo fdist -l
…
Disk /dev/nvme0n1: 238.47 GiB, 256060514304 bytes, 500118192 sectors
Disk model: PCIe SSD
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mmcblk0: 117.75 GiB, 126437294080 bytes, 246947840 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x90bc1d25
Device Boot Start End Sectors Size Id Type
/dev/mmcblk0p1 8192 1056767 1048576 512M c W95 FAT32 (LBA)
/dev/mmcblk0p2 1056768 246947839 245891072 117.3G 83 Linux
パーティションの状態を確認します。
$ sudo parted /dev/nvme0n1
GNU Parted 3.5
Using /dev/nvme0n1
Welcom to GNU Parted! Type 'help' to view a list of commands.
(parted) p
Error: /dev/nvme0n1: unrecognised disk label
Model: PCIe SSD (nvme)
Disk /dev/nvme0n1: 256GB
Sector size (logical/physical): 512B/512B
Partition Table: unknown
(parted) mklabel gpt
(parted) p
Model: PCIe SSD (nvme)
Disk /dev/nvme0n1: 256GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
(parted) quit
parted を対話モードで起動しています。
パーティションの状態を確認するコマンド「p
」を実行すると、エラーが表示されました。
ディスクラベルが設定されていないとのことです。
「mklabel gpt
」でラベルを付けます。
ラベルを付けた後で、「p
」を実行すると、エラー無く表示されました。
現段階では、パーティションが無いので、作成する必要があります。
$ sudo parted -a optinal /dev/nvme0n1 mkpart primary ext4 0% 100%
再び、ディスクの状態を確認します。
$ fdisk -l
…
Disk /dev/nvme0n1: 238.47 GiB, 256060514304 bytes, 500118192 sectors
Disk model: PCIe SSD
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 5B5563B1-AACA-4DD5-804A-775896079CC5
Device Start End Sectors Size Type
/dev/nvme0n1p1 2048 500117503 500115456 238.5G Linux filesystem
Disk /dev/mmcblk0: 117.75 GiB, 126437294080 bytes, 246947840 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x90bc1d25
Device Boot Start End Sectors Size Id Type
/dev/mmcblk0p1 8192 1056767 1048576 512M c W95 FAT32 (LBA)
/dev/mmcblk0p2 1056768 246947839 245891072 117.3G 83 Linux
フォーマットを行います。
$ sudo mkfs -t ext4 -L EX-SSD /dev/nvme0n1p1
SDカードのイメージをSSDへコピー
再起動して、イメージをコピーします。

メニューから [アクセサリ]→[SD Card Copier] を選択してSDカードからSSDにイメージをコピーします。


「Copy From Device:
」にSDカードのデバイスを指定します。
ここでは「USD00 (/dev/mmcblk0)
」を指定しました。
「Copy To Device:
」にSSDを指定します。ここでは「PCIe SSD (/dev/nvme0n1)
」を指定しました。

「Start
」ボタンを押すとパーティションを作成して、データがコピーされます。
ブートデバイスの変更
「raspi-config
」を起動します。
$ sudo raspi-config

「6 Advanced Options
」を選択します。

「A4 Boot Order
」を選択します。

「B2 NVMe/USB Boot
」を選択します。

ブートデバイスが変更されました。
一旦、再起動します。再起動後にシャットダウンしてSDカードを抜いた状態で起動します。

SSDのみで起動できるようになりました。
ケースに格納する
起動することが分かったので、ケースに収納します。

真ん中の黒い金属製のケースに収納します。

X1001 NVMeボードの取り付けで使ったネジを外します。
1つずつ外してケースに付属の別ネジを取り付けます。

上の写真は、4ヵ所全て取り付けが完了した状態です。
なお左上は、ダミーのスペーサーを取り付けています。

ケースにRaspberry Pi 5 on SSD をセットアップします。
写真のように右側は、空けて左側にピッタリと寄せます。

ひっくり返してケース付属のネジで4ヵ所止めます。
実際には、2ヵ所は立てた状態でネジ留めして、残りの2か所のみひっくり返してネジ留めしています。

固定済みの状態です。

ケースのカバーをはめ込んで、ネジを4ヵ所止めます。
これでケースへの収納が完了です。

問題なく起動しました。
早くなったのか検証してみる
どのくらい早くなったのか確認してみます。
以下のサイトを参考にさせて頂きました。
fio のインストール
「fio
」コマンドを使ってベンチマークを計測します。
$ sudo apt update && sudo apt install -y fio
ベンチマークの内容は、以下に設定します。
$ nano ~/.config/fio.config
[global]
ioengine=libaio
iodepth=1
size=1g
direct=1
runtime=60
directory=/tmp
stonewall
[Seq-Read]
bs=1m
rw=read
[Seq-Write]
bs=1m
rw=write
[Rand-Read-512K]
bs=512k
rw=randread
[Rand-Write-512K]
bs=512k
rw=randwrite
[Rand-Read-4K]
bs=4k
rw=randread
[Rand-Write-4K]
bs=4k
rw=randwrite
[Rand-Read-4K-QDS32]
iodepth=32
bs=4k
rw=randread
[Rand-Write-4K-QDS32]
iodepth=32
bs=4k
rw=randwrite
INISDカードのベンチマーク
SSDを外した状態で「fio
」を実行してみます。
代わりにSDカードを差し込んだ状態で起動しています。
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
mmcblk0 179:0 0 117.8G 0 disk
├─mmcblk0p1 179:1 0 512M 0 part /boot/firmware
└─mmcblk0p2 179:2 0 117.3G 0 part /
以下のコマンドで計測します。
$ fio -f ~/.config/fio.config
…
計測結果は、以下の通りです。
項目 | 速度 | IOPS |
---|---|---|
Seq-Read | 93.8MB/s | 89 |
Seq-Write | 74.4MB/s | 70 |
Rand-Read-512K | 91.7MB/s | 174 |
Rand-Write-512K | 67.1MB/s | 128 |
Rand-Read-4K | 15.0MB/s | 3655 |
Rand-Write-4K | 6255KB/s | 1527 |
Rand-Read-4K-QDS32 | 15.5MB/s | 3783 |
Rand-Write-4K-QDS32 | 6802KB/s | 1660 |
SSD のベンチマーク
SDカードを外した状態で「fio
」を実行してみます。
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
nvme0n1 259:0 0 238.5G 0 disk
├─nvme0n1p1 259:1 0 512M 0 part /boot/firmware
└─nvme0n1p2 259:2 0 238G 0 part /
以下のコマンドで計測します。
$ fio -f ~/.config/fio.config
…
計測結果は、以下の通りです。
項目 | 速度 | IOPS | 速度-UP | IOPS-UP |
---|---|---|---|---|
Seq-Read | 426MB/s | 406 | 454.16% | 456.18% |
Seq-Write | 392MB/s | 374 | 526.88% | 534.29% |
Rand-Read-512K | 406MB/s | 774 | 442.75% | 444.83% |
Rand-Write-512K | 391MB/s | 745 | 582.71% | 582.03% |
Rand-Read-4K | 56.7MB/s | 13900 | 378.00% | 380.30% |
Rand-Write-4K | 142MB/s | 34700 | 2270.18% | 2272.43% |
Rand-Read-4K-QDS32 | 440MB/s | 107000 | 2838.71% | 2828.44% |
Rand-Write-4K-QDS32 | 286MB/s | 69900 | 4204.65% | 4210.84% |
ベンチマークの内容によって、倍率にはかなり差異が発生しますが、少なくとも4倍以上の高速化にはなっていると思います。
以上です。
コメント
I am constantly browsing online for ideas that can assist me. Thank you!
Thank you!