ラズパイを自宅サーバーとして使っていると、どうしてもSDカードの寿命を気にしなくてはなりません。ラズパイ4はUSBドライブからも起動できるので、試してみたという話。
結果的にサクサク動作するようになり快適です。定期的なログの書き込みなどで、SDカードが壊れる問題もなくなるので、運用も楽になります。
試した環境
SSDドライブにはSanDisk SSD 480GB を使用しています。
コンパクトで速度も早いのでラズパイに合わせるにはちょうど良い感じです。
※追記:速度は遅くなりますがバッファローのSSDも使っています。アクセスランプがある方がわかりやすいですね。
ファームウェアの確認・アップデート
まずはラズパイのファームウェアを確認します。
USBドライブで起動するには、2020年9月版より新しいファームウェアが必要です。
# Ubuntu だと rpi-eeprom をインストールする必要がある
$ sudo apt install -y rpi-eeprom
# 現在のバージョンを確認。古いみたい。
$ rpi-eeprom-update
BCM2711 detected
VL805 firmware in bootloader EEPROM
VCHI initialization failed
*** UPDATE AVAILABLE ***
BOOTLOADER: update available
CURRENT: 2020年 3月 19日 木曜日 14:27:25 UTC (1584628045)
LATEST: 2020年 9月 3日 木曜日 12:11:43 UTC (1599135103)
FW DIR: /lib/firmware/raspberrypi/bootloader/default
VL805: version unknown. Try sudo rpi-eeprom-update
CURRENT:
LATEST:
# アップデートする
$ sudo rpi-eeprom-update -a
BCM2711 detected
VL805 firmware in bootloader EEPROM
*** INSTALLING EEPROM UPDATES ***
BOOTLOADER: update available
CURRENT: 2020年 3月 19日 木曜日 14:27:25 UTC (1584628045)
LATEST: 2020年 9月 3日 木曜日 12:11:43 UTC (1599135103)
FW DIR: /lib/firmware/raspberrypi/bootloader/default
VL805: up-to-date
CURRENT: 000137ad
LATEST: 000137ad
BOOTFS /boot/firmware
EEPROM updates pending. Please reboot to apply the update.
# 再起動
$ sudo reboot
# アップデートされていることを確認
$ sudo rpi-eeprom-update
BCM2711 detected
VL805 firmware in bootloader EEPROM
BOOTLOADER: up-to-date
CURRENT: 2020年 9月 3日 木曜日 12:11:43 UTC (1599135103)
LATEST: 2020年 9月 3日 木曜日 12:11:43 UTC (1599135103)
FW DIR: /lib/firmware/raspberrypi/bootloader/default
VL805: up-to-date
CURRENT: 000138a1
LATEST: 000138a1
ブートオーダの設定を変更する
ファームウェアをアップデートができたら、ブートオーダーを確認します。
私の環境は BOOT_ORDER=0x1 になっていました。これだとブートデバイスに使えるのはSDカードのみになります。
# 現在の設定値を確認する
$ rpi-eeprom-config
...
BOOT_ORDER=0x1
...
USBドライブを優先させる場合は BOOT_ORDER=0xf14、SDカードを優先させる場合は BOOT_ORDER=0xf41 に変更すれば良さそうです。
BOOT_ORDER | Description |
0xf41 | Try SD first, followed by USB-MSD then repeat (default if BOOT_ORDER is empty) |
0xf14 | Try USB first, followed by SD then repeat |
0xf21 | Try SD first, followed by NETWORK then repeat |
今回は、BOOT_ORDER=0xf41 を設定しました。
# BOOT_ORDER の値を変更する
$ env EDITOR=vi sudo -E rpi-eeprom-config --edit
[all]
BOOT_UART=0
WAKE_ON_GPIO=1
POWER_OFF_ON_HALT=0
DHCP_TIMEOUT=45000
DHCP_REQ_TIMEOUT=4000
TFTP_FILE_TIMEOUT=30000
TFTP_IP=
TFTP_PREFIX=0
BOOT_ORDER=0xf41 # ← ここを書き換える
SD_BOOT_MAX_RETRIES=3
NET_BOOT_MAX_RETRIES=5
[none]
FREEZE_VERSION=0
# 保存したらリブート
$ sudo reboot
これでSDカードが刺さっていなければ、USBドライブからブートするようになります。
念の為、SDカードでもう一度起動して、設定値を確認します。
# BOOT_ORDER の値が変わっています
$ rpi-eeprom-config
[all]
BOOT_UART=0
WAKE_ON_GPIO=1
POWER_OFF_ON_HALT=0
DHCP_TIMEOUT=45000
DHCP_REQ_TIMEOUT=4000
TFTP_FILE_TIMEOUT=30000
TFTP_IP=
TFTP_PREFIX=0
BOOT_ORDER=0xf41
SD_BOOT_MAX_RETRIES=3
NET_BOOT_MAX_RETRIES=5
[none]
FREEZE_VERSION=0
# 停止
$ sudo shutdown
SDカードの内容をSSDにコピーする
設定ができたら、あとはSDカードの内容をSSDにコピーして差し替えるだけです。
私の場合はWin32 Disk ImagerでSDカードの内容をPCにバックアップして、SSDに書き込みました。
SSDからの読み込みに数時間かかったので、新しくインストールして必要なデータだけを移したほうが早いかもしれません。
確認してみる
こちらの記事「Raspberry PiでmicroSDカードの性能測定」を参考にさせていただき、SDカードの時とSSDにした時の速度を比べてみます。
下記のコマンドを叩くと、いろいろパッケージがインストールされたあとに計測が始まりました。
$ sudo curl https://raw.githubusercontent.com/TheRemote/PiBenchmarks/master/Storage.sh | sudo bash
しばらくすると、結果が表示されます。
SDカードの計測結果
Category Test Result
HDParm Disk Read 41.90 MB/s
HDParm Cached Disk Read 41.65 MB/s
DD Disk Write 21.2 MB/s
FIO 4k random read 3933 IOPS (15732 KB/s)
FIO 4k random write 1286 IOPS (5146 KB/s)
IOZone 4k read 13440 KB/s
IOZone 4k write 4086 KB/s
IOZone 4k random read 10613 KB/s
IOZone 4k random write 4082 KB/s
Score: 1510
SSDの計測結果
Category Test Result
HDParm Disk Read 290.82 MB/s
HDParm Cached Disk Read 187.73 MB/s
DD Disk Write 97.1 MB/s
FIO 4k random read 3927 IOPS (15711 KB/s)
FIO 4k random write 13178 IOPS (52715 KB/s)
IOZone 4k read 14148 KB/s
IOZone 4k write 15774 KB/s
IOZone 4k random read 14040 KB/s
IOZone 4k random write 17677 KB/s
Score: 5097
くらべるまでもありませんが、数値で見ても読み書きの性能が向上していることがわかります。
パッケージのインストールなども爆速になりました。ストレージがボトルネックで、ラズパイ4本来のパフォーマンスが出せていなかったのがよくわかります。
ただ、Transcend製のSDカードも十分速いので通常はこれでも問題ないですね。
コメント