前々から Raspberry Pi 2,3 を使おうと、Raspberry Pi 2と3 を確保しているのですが、SDメモリからブートしなくてはならないため、いまだに本格稼働に至っていません。
最近、少しだけ時間が取れたので、Raspberry Pi 対応OSの進歩状況をチェックしていたところ、なんと、Raspberry Pi 2,3,4 はファームウェアを更新して、USBブートを有効にすれば、USBメモリやUSB HDDにプリインストールしたOSから起動出来るとのこと。
Web検索すれば、情報源は複数ありますが、私が参照したのは次のサイト。
うれしいことに、新しいモデルの Raspberry Pi4 だけでなく、Pi2, Pi3 もUSB起動が可能になるとのこと。
USBメモリから起動出来るようにする作業は、最新Raspberry Pi OS上で行うことになります。
- PCのRaspberry Pi Imager ver.1.4 を使って、SDメモリ上にRaspberry Pi OS 32-bitをインストール。
- このSDメモリを使って、Raspberry Pi OSを起動。
- OSを最新に上げる。(ファームウェアが特定バージョン以上でないと使えないらしいので。)
これで、ファームウェアのバージョンが、2020/08/19 バージョンになったのでOK。
pi@rpi2:~ $ vcgencmd version
Aug 19 2020 17:40:15バージョンアップに関しては、
https://raspberrypi.akaneiro.jp/archives/1431
を参考にさせてもらいました。 - そして、https://jyn.jp/raspberrypi-usb-only-boot/ のコマンドを発行。
pi@rpi2:~ $ echo "program_usb_boot_mode=1" | sudo tee -a /boot/config.txt program_usb_boot_mode=1 pi@rpi2:~ $ echo "program_usb_boot_timeout=1" | sudo tee -a /boot/config.txt program_usb_boot_timeout=1 pi@rpi2:~ $ sudo reboot
- 再び1の Raspberry Pi Imager に戻って、USBメモリ上にファイルシステムを作ります。
- これで、USBメモリから起動出来るようになりました。SDメモリを取り外して、USBメモリを接続。
電源を入れると、Linuxが起動したのには少し感動。
動作速度だけ考えるなら、USBメモリ上のファイルシステムなんか使わずにSDメモリだけで動かす方が高速です。問題は、OS更新とスワップ。
特にスワップパーティションとして指定した領域には繰り返し書き込みが発生するはずで、フラッシュメモリで構成されているSDメモリやUSBメモリをスワップとして割り当てるのはとっても怖い。フラッシュメモリのタイプが、SLCならスワップとして使っても大丈夫ですが、MLCなら必要スワップサイズの3倍くらいパーティション容量を確保しておけば大丈夫かな?TLCだと同じセルへの書き込み寿命が数千回と言われているのでスワップパーティションのように繰り返し書き込みが行われる用途に使用すると、あっという間にSDメモリ全体の寿命が終わってしまう可能性があります。
WindowsやMacのように、特別なスワップパーティションを使わず、ファイルシステム上に仮想記憶エリアを確保する(ファイルシステムスワップ)ように設定するならSDメモリをある程度延命させることが出来そうですが。
Raspberry Pi4 の4GBや8GBモデルを購入して、メインメモリを増やすことでスワップを減らすというのも手ですが、私が使いたいのはRPI2やRPI3。
OS更新は、スワップほどじゃないにせよ、ファイルの書き換えが行われるので、ソースからのビルドをする場合が少し心配です。バイナリー更新ならあまり問題無いでしょう。
問題は、SDメモリスロットが1つしかないことで、スワップパーティションが壊れてエラーを出し始めたとすると、OS全体を別のSDメモリに作り直さなきゃいけなくなるって事。遊びのシステムならそれでもいいのですが、24時間システムに使いたいと考えている場合は、2,3ヶ月おきにOSの作り直しなんかしたくないわけですよ。
SDメモリスロットが2つあるなら、一つをスワップ専用、もう一つをファイルシステムに使えば良いのですが、Raspberry PiのSDスロットは1個のみ。スワップ専用パーティションをUSBメモリに配置するという手はありますが、USBメモリへの書き込みは遅いので、出来ることならスワップだけはSDメモリ上に置きたい。SDメモリがスワップだけなら、壊れたら別のSDメモリに交換するとか、2GBくらいの古いMLCチップタイプを使うとか、TLCチップを4GBくらいずつのスワップパーティションに分割し、壊れたら次のスワップエリアへ切り替えて行くような使い方ができそうです。この場合、ファイルシステムはUSBメモリ上にあることを前提に書いているので、OSの動きは早くは無さそうですけど低消費電力で安定して動いてくれるなら、多少遅くても問題なし。
とりあえず、Raspberry Pi2 と Pi3 で、USBメモリからRaspberry Pi OSが起動出来ることを確認しただけなので、同様に他のOSも起動出来るかどうかを確認するのが次の課題となります。