2-12. Raspberry Pi の最適化・軽量化


軽量化やSDカードの延命対策 一覧
 1. ext4ファイルシステムのジャーナルを廃止
 2. 不要デーモンの無効化
 3. 不要パッケージの削除
 4. chkconfig : システムサービスの切替ツールのインストール
 5. swapの無効化
 6. tmpフォルダのRAMディスク化
 7. cron による一日・一回 システムのリブート
 8. 最小限のログのみを記録するように変更
 9. /var/log のRAMディスク化

1. ext4ファイルシステムのジャーナルを廃止

SDカードの寿命を伸ばしたい関連

$ su
# umount /dev/mmcblk0p2
# tune2fs -O ^has_journal /dev/mmcblk0p2
tune2fs 1.42.5 (29-Jul-2012)
#

うまくいったかどうか確認するには

# tune2fs -l /dev/mmcblk0p2 | grep features
Filesystem features: ext_attr resize_inode
dir_index filetype extent flex_bg sparse_super
large_file uninit_bg dir_nlink extra_isize

has_journalが含まれていなければOK。

2. 不要デーモンを無効化する

sudo chkconfig motd off
sudo chkconfig triggerhappy off
sudo chkconfig alsa-utils off
sudo chkconfig lightdm off
sudo chkconfig plymouth off

3. 不要パッケージを削除

sudo apt-get autoremove -y wolfram-engine
sudo apt-get autoremove -y scratch
sudo apt-get autoremove -y python-pygame
sudo apt-get autoremove -y pistore
sudo apt-get autoremove -y sonic-pi
sudo apt-get autoremove -y python-minecraftpi
sudo apt-get autoremove -y idle idle3
sudo apt-get autoremove -y netsurf-common dillo
sudo apt-get autoremove -y debian-reference-common
sudo apt-get autoremove -y libraspberrypi-doc

sudo rm -rf /home/pi/python_games/
sudo rmdir /usr/local/games/
sudo rmdir /usr/games/

sudo apt-get autoremove -y man manpages
sudo apt-get autoremove -y git git-man
sudo apt-get autoremove -y galculator

4. chkconfig : システムサービスの切替ツールのインストール

sudo apt-get update
sudo apt-get install chkconfig

5. swapを無効化

freeで確認

free
                     total          used          free     shared      buffers 	   cached
Mem:        947732     303684     644048      29188      19156     150720
-/+ buffers/cache:      133808     813924
Swap:       102396               0     102396

swapを無効化

sudo swapoff --all
free
	             total         used           free     shared     buffers     cached
Mem:        949408     469904     479504             0      30172     263712
-/+ buffers/cache:      176020     773388
Swap:               0               0         0

sudo apt-get remove dphys-swapfile

chkconfigでdphys-swapfileをオフにする

sudo chkconfig dphys-swapfile off
sudo chkconfig dphys-swapfile -list
dphys-swapfile            0:off  1:off  2:off  3:off  4:off  5:off  6:off

swap ファイルの削除

sudo rm /var/swap

6. tmpフォルダをRAMディスクに移す

sudo nano /etc/fstab で次の2行を追記。

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, so no using swapon|off from here on,
 use  dphys-swapfile swap[on|off]  for that
#
# tmp files put on RAM disk
tmpfs		/tmp		tmpfs	defaults,size=32m 0	0
tmpfs		/var/tmp	tmpfs	defaults,size=16m 0	0
#


sudo reboot
df -h でマウントされているか確認。

sudo rm -rf /tmp/*
sudo rm -rf /var/tmp/*
で、ファイルの削除。

7. cron により一日に一回システムをリブート

sudo crontab -e
nanoでcrontabファイルの編集ができる。
最後の行に下記を追加する。ここでは午前4時に再起動がかかるようにした。
0 4 * * * /sbin/reboot

8. 最小限のログのみを記録するように変更

rsyslog.confを編集し、必要最小限のログ(auth , syslogとmessages)のみを
 記録させるようにして、ディスクへの書き込みを減らす。
 sudo nano /etc/rsyslog.conf
 グリーンのところだけ残し、他はコメントにする

#  /etc/rsyslog.conf    Configuration file for rsyslog.
#
~略~
###############
#### 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:*

#
# I like to have messages displayed on the console, but only on a virtual
# console I usually leave idle.
#
#daemon,mail.*;\
#       news.=crit;news.=err;news.=notice;\
#       *.=debug;*.=info;\
#       *.=notice;*.=warn       /dev/tty8

9. /var/log のRAMディスク化

ログを直接吐き出すアプリでは、/var/log 配下にサブディレクトリが存在しないと
エラーとなるので、起動時に自動的にディレクトリを作成する必要がある。

従来は、rc.localファイルでディレクトリを作成する方法で、うまく行っていた。
しかし、Raspbian Jessie では /etc/rc.local が自動起動しなくなっている。
・・・ /etc/rc.local を起動するように変更するも、うまく行かず。

Raspbian Jessie で /etc/rc.local を起動させる方法。


/etc/init.d/init-ramdisk を新たに作成して試みるも、うまく行かず。
systemd で、再度チャレンジすべきか?

参考:
★ マイクロSDカードの書き換え寿命への完璧対策






関連ページ