Raspberry Piのテンポラリ ディレクトリをRAMディスクに移動し、SDカードに書き込む回数をなるべく押さえるようにする設定
■ 検証環境
・Raspberry Pi (Debian) 2013-02-09-wheezy-raspbian
■ マウント設定の変更
/etc/fstab
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 $
#### ramdisk
tmpfs /tmp tmpfs defaults,size=32m 0 0
tmpfs /var/tmp tmpfs defaults,size=16m 0 0
tmpfs /var/log tmpfs defaults,size=32m 0 0
tmpfs /var/www/mrtg tmpfs defaults,size=2m 0 0
■ /var/log 内のファイルの準備
再起動後、/var/log内に必要なディレクトリやファイルを作成し、初期状態を作る。今回は、Apache2やSamba用のファイルも作成している。
まず、initスクリプトを作成する。(ファイル名は、適当で良い)
/etc/init.d/make-varlog-files
#!/bin/bash # ### BEGIN INIT INFO # Provides: make-varlog-files # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Required-Start: # Required-Stop: # Short-Description: Create /var/log/... files on tmpfs at startup # Description: Create /var/log/... files needed by system daemon ### END INIT INFO # # main() # case "${1:-''}" in 'start') ############################ # prepare /var/log subdir for ramdisk init on every boot mkdir -p /var/log/ConsoleKit mkdir -p /var/log/apache2 mkdir -p /var/log/apt mkdir -p /var/log/fsck mkdir -p /var/log/mrtg mkdir -p /var/log/ntpstats mkdir -p /var/log/samba mkdir -p /var/log/squid3 chown root.adm /var/log/apache2 chmod 750 /var/log/apache2 chown root.adm /var/log/mrtg chown ntp.ntp /var/log/ntpstats chown root.adm /var/log/samba chown proxy.proxy /var/log/squid3 ############################ # prepare /var/log file for ramdisk init on every boot touch /var/log/lastlog touch /var/log/wtmp touch /var/log/btmp touch /var/log/apache2/access.log touch /var/log/apache2/error.log touch /var/log/apache2/other_vhosts_access.log touch /var/log/apache2/ssl_access.log chown root.adm /var/log/apache2 chown root.adm /var/log/apache2/access.log chmod 640 /var/log/apache2/access.log chown root.adm /var/log/apache2/error.log chmod 640 /var/log/apache2/error.log chown root.utmp /var/log/lastlog chown root.utmp /var/log/wtmp chown root.utmp /var/log/btmp ;; 'stop') ;; 'restart') ;; 'reload'|'force-reload') ;; 'status') ;; *) echo "Usage: $SELF start" exit 1 ;; esac
デフォルト ランレベル(2,3,4,5)の起動用リンクを作成する
$ sudo update-rc.d make-varlog-files defaults 01 10
ランレベル 2用の起動スクリプト ディレクトリを念の為確認する
$ /etc/rc2.d/
K01hostapd S01ifplugd S02bind9 S04isc-dhcp-server
K01lightdm S01make-varlog-files S02dbus S04postfix
K01squid3 S01motd S02dphys-swapfile S05plymouth
K02dnsmasq S01rsyslog S02ntp S05rc.local
K06nfs-common S01samba S02snmpd S05rmnologin
K06rpcbind S01saslauthd S02ssh
README S01sudo S03apache2
S01bootlogs S01triggerhappy S04cron
S03Apache2
より前に(若い数に)指定されていなければ、Apache2の起動条件を満たさないため、S01で登録されていることで問題が無いことが分かる。
■ ログファイルをメール転送する設定を行う (任意)
RAMディスクにログが記録されているため、電源を落とすと消えてしまう。スケジュールで電源を落とす設定の場合、その前にログをメールで外部転送する設定を行なっておく。
/usr/local/bin/mail_logfiles.sh
#!/bin/sh /usr/bin/logger "mail logfiles task started" /usr/bin/base64 /var/log/syslog 1> /tmp/syslog.txt 2> /dev/null /usr/bin/base64 /var/log/dpkg.log 1> /tmp/dpkg.log.txt 2> /dev/null /usr/bin/base64 /var/log/apache2/access.log 1> /tmp/access.log.txt 2> /dev/null /usr/bin/base64 /var/log/apache2/error.log 1> /tmp/error.log.txt 2> /dev/null /usr/bin/base64 /var/log/apache2/ssl_access.log 1> /tmp/ssl_access.log.txt 2> /dev/null /usr/bin/zip -j /tmp/mrtg_data.zip /var/www/mrtg/*.log 1> /dev/null 2>&1 /usr/bin/base64 /tmp/mrtg_data.zip 1> /tmp/mrtg_log.zip 2> /dev/null /usr/bin/perl /usr/local/bin/make_mailbody.pl /tmp/syslog.txt /tmp/dpkg.log.txt /tmp/access.log.txt /tmp/error.log.txt /tmp/ssl_access.log.txt /tmp/mrtg_log.zip 1> /tmp/mailbody.txt 2> /dev/null cat /tmp/mailbody.txt | /usr/sbin/sendmail -t 1> /dev/null 2>&1
※なお、『(Linux) シェルスクリプトとsendmailで添付ファイル付きメールを送信する』で作成したmake_mailbody.pl
ファイルが/usr/local/bin
ディレクトリにインストールされていること。
このスクリプトを、cronで定時シャットダウン等の前に自動実行させれば良い。
$ sudo crontab -e 25 1 * * * /usr/local/bin/mail_logfiles.sh 30 2 * * * /sbin/shutdown -h 0 cron_shutdown_schedule
スワップファイル
ramdisk化に加えて、swapfileも停止して最適化することもできる。swapfileの状態は free
コマンドで確認できる。
swapfile無効化
$ sudo swapoff --all $ sudo systemctl stop dphys-swapfile $ sudo systemctl disable dphys-swapfile $ systemctl status dphys-swapfile
元に戻すときは...
swapfile有効化
$ sudo systemctl start dphys-swapfile $ sudo systemctl enable dphys-swapfile $ systemctl status dphys-swapfile