今回はRaspberry Pi のROM化をして電源ブチ切りによるファイルシステムの損傷を防ぐ方法を解説していきたいと思います。
Raspberry Pi はIoT用途に使うことも多く電源が不定期に切れる状態で使いたいということがあります。しかし、 Raspberry Pi の電源がブチ切りされるとSD Cardのシステムファイルが損傷して起動できなくなってしまうことがあります。「Raspberry Piは本当に壊れやすいのか」によると平均で20回から30回電源をブチ切りするとRaspberry Pi が故障すると書かれています。
したがって今回は Raspberry Pi の保護方法の中でも比較的かんたんなOverlayrootという方法を用いてRaspberry PiのRead Only Memory(ROM)化を行っていきたいと思います。
環境
今回の Raspberry Pi の環境は以下のとおりです。OSはUbuntu 21.10を使っています。
PRETTY_NAME="Ubuntu 21.10"
NAME="Ubuntu"
VERSION_ID="21.10"
VERSION="21.10 (Impish Indri)"
VERSION_CODENAME=impish
ID=ubuntu
ID_LIKE=debian
設定方法
overlayrootをインストール
sudo apt update
sudo apt install overlayroot
設定ファイル(/etc/overlayroot.conf)の書き換え
overlayを有効にするには、設定ファイルを書き換える必要があります。
初期設定ではoverlayroot='”‘となっていますが、そこの部分を以下のように書き換えます。
overlayroot="tmpfs:swap=1,recurse=0"
もし、swapが不要な場合は :swap=1 の部分を消去してください。デフォルトだと swap=0となっていてスワップが使われません。
設定を書き換えたら再起動します。
設定の確認
以下のコマンドを実行します。
mount
ログの中に以下の記述があることを確認します。
overlayroot on / type overlayfs (rw,lowerdir=/media/root-ro/,upperdir=/media/root-rw)
動作確認
動作確認をします。ホームディレクトリに不要なファイルを作成します。
touch ~/trush.txt
その後再起動して、先程のファイルが消えていることが確認できれば設定は反映されいます。
ls ~/
Overlayrootを無効化
overlayrootを有効にするとファイルシステムを変更することができなくなります。しかし、設定を再設定したい場合も出てくると思います。
その際はoverlayrootを無効化する必要があります。overlayrootの無効はoverlayroot.confを再編集することで可能です。先ほどの記述を消去して、disabledを記述します。
- overlayroot="tmpfs:swap=1,recurse=0"
+ overlayroot="disabled"
Ocerlayroot以外の手段
Raspberry PiをM.2 SSDで動かす
overlayrootを使用すればファイルシステムの損傷は防ぐことができますが、SDカードでブートしている場合はSDカードは書き込み回数の上限が低いので、長期で運用する場合はSSDを使用することを考慮に入れても良いと思います。また、副次的に処理が速くなる傾向があるというメリットもあります。
産業用(industrial)SDカードを使用する
SSDを使用する方法以外でRaspberry Piを長期運用する場合は産業用SDカードを使用することも考えられると思います。しかし、普通のSDカードに比べて割高なのでRaspberry Pi ZeroなどSSDでブートできない機種に対して使うのが良いと思います。
小型のPCを使う
Raspberry Piはどうしても、SDカードを定期的に交換する必要があるため、メンテナンスコストがかかりがちです。GPIOを使用する予定がなく、もう少しお金を出せる場合は、小型のPCもおすすめです。多くのアプリケーションを動かしたい場合は、高い性能のPCを購入し、仮想化して使うと良いと思います。
Raspberry Pi Compute Module や他のSBCを使う
Raspberry Pi Compute Module や他のSingle Board Computerを使うのも良いと思います。Raspberry Pi Compute ModuleやSBCの中にはemmcで動作するものがあるので、SDカードを使わずに運用が可能です。