ラズパイはSDカードにOSをインストールしメインのディスクとしてファイルの読み書きが大量に行われることになります。SDカードは読み書きの回数に上限があるためラズパイの起動時間に応じてSDカードの寿命が削られていきます。今回はSDカードをより長く使うために設定を変更し長寿命化を目指します。
対策のリストアップ
SDカードの長寿命化の方法としてウェブサイトなどで紹介されている主な方法は次の通りです。
- ログの書き込み頻度を下げる
- スワップを使用しない
- 一時ファイルの置き場をSDカードからRAM(メモリ)に変更する
- SDカードを読み込み専用にして書き込みを行わない
- ネットワークブートにしてSDカードを使用しない (厳密には長寿命化ではないが)
この中で簡単にできるのがスワップを未使用もしくはRAMに移動することです。freeコマンドで確認するとスワップ領域をどれくらい使用しているか確認できます。今回はスワップ領域の使用量が0だったのでスワップについては変更しませんでした。
一時ファイルの置き場をSDカードからRAM(メモリ)に変更する
一時ファイルとして/tmpをRAMに変更します。tmpfsというファイルシステムを利用することで実現できます。/tmp以外にも/var/tmpやログ置き場の/var/logなどを同様の方法でRAMに移動することでよりSDカードへのアクセスを減らすことができると思います。今回は/tmpのみ対応しました。サイズはラズパイ3のRAM1GBの内128MBを割り当てました。
arch linuxのドキュメントを参考に作業します: https://wiki.archlinux.jp/index.php/Tmpfs
まず/etc/fstabに次の行を追加します。
tmpfs /tmp tmpfs rw,nodev,nosuid,size=128M 0 0
追加したらリブートします。リブート後にdf -hコマンドで確認し、/tmpがtmpfsとなっていれば成功です。
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 27G 2.3G 24G 10% /
devtmpfs 10M 0 10M 0% /dev
tmpfs 193M 440K 192M 1% /run
cgroup_root 10M 0 10M 0% /sys/fs/cgroup
shm 481M 0 481M 0% /dev/shm
tmpfs 128M 0 128M 0% /tmp
RAMデイスクを作る
一時ファイル置き場だけに限らずtmpfsを使用したRAMディスクを作成しておきます。ラズパイでよく画像処理の動作確認などをするので画像の一時的なファイルの保存や、プログラムのビルド時に発生する一時ファイルなどのアクセスがSDカードの負担にならないようにするためです。
例として/mnt/tmpfsにRAMディスクを128MB分作成する方法を示します。
# mkdir /mnt/tmpfs
# mount -t tmpfs -o size=128M tmpfs /mnt/tmpfs
# # df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 27G 2.3G 24G 10% /
devtmpfs 10M 0 10M 0% /dev
tmpfs 193M 440K 192M 1% /run
cgroup_root 10M 0 10M 0% /sys/fs/cgroup
shm 481M 0 481M 0% /dev/shm
tmpfs 128M 0 128M 0% /tmp
tmpfs 128M 0 128M 0% /mnt/tmpfs
これで/mnt/tmpfsに作成されるファイルはどれだけ読み書きしようともSDカードに影響が出ないようになりました。注意点として、ラズパイのメモリサイズに依存しているので1GBなどの大きなサイズのファイルを作成できないことと、再起動など電源オフのタイミングで内容が失われるので必要なファイルは電源オフの前にSDカードにコピーする必要があることがあります。
コメント