Raspberry piはMicro SDカードをディスクとして使用します。Micro SDカードは書き換え回数に上限があるため頻繁な書き込みを行うと寿命が付くてしまいます。
できるだけMicro SDカードに書きこみをしないで寿命を延ばす設定になります。
目次
Micro SDカード延命処置
できるだけMicro SDカードに書きこみをしない方法は以下のものがあります。
①スワップ(Swap)を無効化
②ログファイルと一次作成場所をtmpfs(RAMdisk上)にする
③ログ出力を減らす
④容量の大きなSDカード/マイクロSDカードを使う
スワップ(Swap)を無効化
スワップ(Swap)は仮想メモリをつかうもので、Windowsにもあるスワップファイルです。
実メモリが不足すると、一時的にディスク上に作成したスワップファイルに使っていないメモリ領域を保存して、実メモリに空きを作るものです。
スワップ(Swap)を無効化することで、ディスク(Micro SDカード)へのアクセス量は減りますが、場合によってはメモリ不足でアプリケーションが動作しなくなることがあります。
無効化の方法
まず、現在の状態を確認します。
$ free -h total used free shared buff/cache available Mem: 925Mi 69Mi 417Mi 54Mi 438Mi 738Mi Swap: 99M 0B 99M
この例では、スワップ領域に99Mb確保されていて、使用量は0B(使っていない)ことになります。
スワップ(Swap)を無効化します。
$ sudo swapoff --all $ free -h total used free shared buff/cache available Mem: 925Mi 69Mi 417Mi 54Mi 438Mi 738Mi Swap: 0B 0B 0B
続いて、再起動してもこの状態が続くようにします。
スワップサービスの削除(apt-get remove dphys-swapfile)もいいのですが、ここではサービスの停止を行います。
# スワップを無効化 $ sudo systemctl stop dphys-swapfile $ sudo systemctl disable dphys-swapfile # 確認 $ sudo systemctl status dphys-swapfile #旧フォルダを削除 $ sudo rm -rf /var/log
これでスワップ(Swap)を無効化できました。
スワップ(Swap)を有効化
メモリ不足になり、スワップ(Swap)が必要になった場合は以下のようにスワップを復活させます。
# スワップを有効化 $ sudo systemctl enable dphys-swapfile $ sudo systemctl start dphys-swapfile # 確認 $ sudo systemctl status dphys-swapfile
これでスワップ(Swap)を有効化できました。
ログファイルと一次作成場所をtmpfs(RAMdisk上)にする
テンポラリ領域(一時的保存領域)の 「/tmp」 と 「/var/tmp」、およびログファイルの 「/var/log」 が、RAMdisk(メモリ上のファイルシステム)の tmpfs に作られるように設定します。
なお、RAMdisk(メモリ上のファイルシステム)はRaspberry piの再起動でリセットされデータは消えてしまうので、消えてほしくないデータはRAMdisk(メモリ上のファイルシステム)に置かない、もしくは再起動やシャットダウンの前にSDカードへ避難させる必要があります。
tmpフォルダをtmpfs(RAMdisk上)にする
fstabを修正して、/tmp と /var/tmp をtmpfs(Ramdisk上)に設定します。
$ sudo nano /etc/fstab #以下の行を追加します tmpfs /tmp tmpfs defaults,size=64m,noatime,mode=1777 0 0 tmpfs /var/tmp tmpfs defaults,size=16m,noatime,mode=1777 0 0
次に、SDカード上の /tmp と /var/tmp を消します。
$ sudo rm -rf /tmp $ sudo rm -rf /var/tmp
再起動します。
$ sudo reboot
なお、上記の設定では
・/tmp : 64MB
・/var/tmp:16MB
となっています。アプリケーションなどで多くの一時領域が必要な場合は、この数値を多くします。ただし、あまり多くすると実メモリがなくなるので注意が必要です。
logフォルダをtmpfs(RAMdisk上)にする
ログフォルダをRAMdisk上に置きます。Raspberry pi が再起動するとログは消えてしまうので、ある意味どうでもいいログを置く場所となります。もし、logの中で残しておきたいログがあれば保存しておく必要があります。
$ sudo nano /etc/fstab #以下の行を追加します tmpfs /var/log tmpfs defaults,size=32m,noatime,mode=0755 0 0
なお、Raspberry pi の起動時にログフォルダはりせってされるので何も残りません。
アプリケーションによっては ”ログフォルダがそこにあること” を前提にしているものもあるのでエラーとなる場合があります。
そのため、以下のようなスクリプトをRaspberry pi の起動時に走らせて(rc.localなど)おくのが良いでしょう。
以下は起動時にログフォルダを作成する例です。
ここでは「/usr/local/bin/command/start/make-folder.sh」を作成して「rc.local」に登録します。
$ sudo mkdir /usr/local/bin/command $ sudo mkdir /usr/local/bin/command/start $ sudo nano /usr/local/bin/command/start/make-folder.sh #!/bin/sh # # 起動時、自動的にディレクトリを作成 mkdir -p /var/log/ConsoleKit mkdir -p /var/log/samba mkdir -p /var/log/fsck mkdir -p /var/log/apt mkdir -p /var/log/ntpstats #chown root.ntp /var/log/ntpstats chown root.adm /var/log/samba # 起動時、自動的にLastlogとwtmp,btmpファイルの空ファイルを作成 touch /var/log/lastlog touch /var/log/wtmp touch /var/log/btmp chown root.utmp /var/log/lastlog chown root.utmp /var/log/wtmp chown root.utmp /var/log/btmp
作成したファイルを起動可能にします。
sudo chmod +x /usr/local/bin/command/start/make-folder.sh
起動時に実行できるように「rc.local」に登録します。
$ sudo nano /etc/rc.local #以下を追記します #startup /usr/local/bin/command/start/make-folder.sh
再起動します。
$ sudo reboot
ログ出力を減らす
いろいろなログが出力されていますが、使っていないサービスのログ出力を減らしてます。「/etc/rsyslog.conf」 を編集してログ出力を抑えます。
「/etc/rsyslog.conf」 を開きます。
$ sudo nano /etc/rsyslog.conf
基本的なログの中で使わないモノをコメントアウトします。
############### #### RULES #### ############### # # First some standard log files. Log by facility. # auth,authpriv.* /var/log/auth.log *.*;auth,authpriv.none -/var/log/syslog #cron.* /var/log/cron.log #daemon.* -/var/log/daemon.log #kern.* -/var/log/kern.log #lpr.* -/var/log/lpr.log #mail.* -/var/log/mail.log #user.* -/var/log/user.log
メール、InterNetNewsもいらないでしょう。
#mail.info -/var/log/mail.info #mail.warn -/var/log/mail.warn #mail.err /var/log/mail.err #news.crit /var/log/news/news.crit #news.err /var/log/news/news.err #news.notice -/var/log/news/news.notice
デバッグもいらないでしょう。
#*.=debug;\ # auth,authpriv.none;\ # news.none;mail.none -/var/log/debug
再起動します。
$ sudo reboot
容量の大きなSDカード/マイクロSDカードを使う
これは、ある意味力業です。
SDカードの容量が大きいとそれだけ書き込める箇所が増えるので、同じ場所に書き込む割合が少なくなります。