MicroSDカードやSDカードは,NANDフラッシュが使われていて,このNANDフラッシュには書き換え寿命が存在する。
Raspberry PiはOSをSDカードに書き込んで利用しているため,数ヶ月から1年程度でMicroSDカードやSDカードが寿命で使えなくなってしまう。
対策で考えられるのは,
などが考えられます。
そこで,SD/MicroSDカードの寿命を伸ばすため,とりあえずswapを使わないようにし,ログファイルをRAM Disk化して,出来るだけSD/MicroSDカードへの書き込み回数を減らすようにしてみる。
以下は,Raspbian Jessie/Stretchを使用している場合。
freeコマンドでswapサイズを確認してみる。
$ free total used free shared buffers cached Mem: 750632 523468 227164 5460 53252 361196 -/+ buffers/cache: 109020 641612 Swap: 102396 0 102396
と,スワップファイルとして100MBが確保されている。usedは0なんで,スワップは発生していないが・・・
まず,swapを無効化してみる。
# dphys-swapfile swapoff
確認してみると,
# free total used free shared buffers cached Mem: 750632 527064 223568 5460 53652 361688 -/+ buffers/cache: 111724 638908 Swap: 0 0 0
使用されなくなった。
再度swapを有効化するには,
# dphys-swapfile swapon
でOK。
swapは使用しなくなったが,電源ONでswapが自動起動しないようにsystemctlで設定します。
# systemctl stop dphys-swapfile # systemctl disable dphys-swapfile
Raspberry Piを再起動してswapが使用されていないか確認しておく。
メインRAMの一部をRAM Diskとして使用し,そこをテンポラリファイル保存場所に利用するようにする。
RAMディスクは,電源OFF-ONやブートしたりした場合消えてしまうが,テンポラリのログ等では消えてしまってもまあ問題ない。
/etc/fstabを編集して,/tmpと/var/tmpと/var/logを移動するようにしてみる。
proc /proc proc defaults 0 0 /dev/mmcblk0p1 /boot vfat defaults 0 2 /dev/mmcblk0p2 / ext4 defaults,noatime 0 1 # a swapfile is not a swap partition, no line here # use dphys-swapfile swap[on|off] for that
これを,
proc /proc proc defaults 0 0 /dev/mmcblk0p1 /boot vfat defaults 0 2 /dev/mmcblk0p2 / ext4 defaults,noatime 0 1 # a swapfile is not a swap partition, no line here # use dphys-swapfile swap[on|off] for that tmpfs /tmp tmpfs defaults,size=32m,noatime,mode=1777 0 0 tmpfs /var/tmp tmpfs defaults,size=16m,noatime,mode=1777 0 0 tmpfs /var/log tmpfs defaults,size=32m,noatime,mode=0755 0 0
とtmpfsとして3個追加する。
再起動して,マウント確認をする。
# df -h ファイルシス サイズ 使用 残り 使用% マウント位置 /dev/root 15G 4.6G 8.9G 34% / devtmpfs 363M 0 363M 0% /dev tmpfs 367M 0 367M 0% /dev/shm tmpfs 367M 5.1M 362M 2% /run tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs 367M 0 367M 0% /sys/fs/cgroup tmpfs 32M 88K 32M 1% /var/log tmpfs 16M 0 16M 0% /var/tmp tmpfs 32M 0 32M 0% /tmp /dev/mmcblk0p1 63M 21M 42M 34% /boot tmpfs 74M 0 74M 0% /run/user/1001
rsyslog.confを変更して,不要なログを作成しないようにする。
/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 # # Logging for the mail system. Split it up so that # it is easy to write scripts to parse these files. # #mail.info -/var/log/mail.info #mail.warn -/var/log/mail.warn #mail.err /var/log/mail.err # # Logging for INN news system. # #news.crit /var/log/news/news.crit #news.err /var/log/news/news.err #news.notice -/var/log/news/news.notice # # Some "catch-all" log files. # #*.=debug;\ # auth,authpriv.none;\ # news.none;mail.none -/var/log/debug *.=info;*.=notice;*.=warn;\ auth,authpriv.none;\ cron,daemon.none;\ mail,news.none -/var/log/messages # # Emergencies are sent to everybody logged in. # *.emerg :omusrmsg:*
テンポラリ用のディレクトリが無いと困るプログラム用に,起動時にディレクトリを作っておく。 /etc/rc.localで,これを行う。
#!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. # Print the IP address _IP=$(hostname -I) || true if [ "$_IP" ]; then printf "My IP address is %s\n" "$_IP" fi 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.adm /var/log/samba 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 exit 0
新しくコメントをつける