Raspberry PiのログをRAMDISKに置く方法
- 2015年07月30日
- Linux
- RaspberryPi
甘くないラズベリーパイことRaspberryPiのtmpディレクトリやログファイルをRAMDISKに置く方法です。
安価で省電力省スペース、静かなLinuxマシンとして使え、なおかつGPIO端子も備えており、各種センサー等を接続することでこの頃流行りのIoT(Internet of Things)デバイスも開発できちゃうRaspberry Pi(以下ラズパイ)。
Apache等を導入して常時稼動のWebサーバーとしても使えるラズパイですが、ラズパイの記憶装置はHDDではなくmicroSDカードです。なのでswapを使用したり24時間稼動でApacheのログファイル等を書きこんでいくと書き込み回数制限によりSDカードの寿命がどんどん削れていきます。
ということでswapファイルの作成を停止させ、RAMDISKを作成してSDカードの延命を図るための手順です。
(使用OSはRaspbianです。)
1.swapを無効化
freeで確認するとswapファイルが100MBほどあるのがわかります。
1 2 3 4 5 |
free total used free shared buffers cached Mem: 949408 469904 479504 0 30172 263712 -/+ buffers/cache: 176020 773388 Swap: 102396 0 102396 |
swapを無効化します
1 2 3 4 5 6 |
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 |
SWAPが消えました
このままだと再起動した時にswapが復活するので
1 |
sudo apt-get remove dphys-swapfile |
でswapを自動生成するプログラムを消します。
rebootしてfreeでswapが生成されていないのを確認しましょう。
常時稼動のwebサーバーとして使わないならswapを消すだけでも延命工作としては十分かもしれません。
2.RAMディスクの作成
次はRAMDISKにApacheのログや一時ファイルを移していきましょう。まずfstabを編集してマウント設定の変更をします。
1 2 3 4 5 6 7 8 9 10 11 12 |
sudo vim /etc/fstab proc /proc proc defaults 0 0 /dev/mmcblk0p5 /boot vfat defaults 0 2 /dev/mmcblk0p6 / 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 #### 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 |
編集し終えたらrebootしてマウント確認をしましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
df -h ファイルシス サイズ 使用 残り 使用% マウント位置 rootfs 28G 2.9G 24G 11% / /dev/root 28G 2.9G 24G 11% / devtmpfs 460M 0 460M 0% /dev tmpfs 93M 272K 93M 1% /run tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 186M 0 186M 0% /run/shm /dev/mmcblk0p5 60M 19M 42M 32% /boot tmpfs 32M 8.0K 32M 1% /tmp tmpfs 16M 0 16M 0% /var/tmp tmpfs 32M 2.0M 31M 7% /var/log /dev/mmcblk0p3 27M 444K 25M 2% /media/SETTINGS |
tmpfsがきちんとマウントされていますね。
RAMDISKに移す/var/log 内のファイルの準備をしましょう。
起動時に/var/log以下のディレクトリを作成するinitスクリプトを作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
vim /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/ntpstats mkdir -p /var/log/samba chown root.adm /var/log/apache2 chmod 750 /var/log/apache2 chown ntp.ntp /var/log/ntpstats chown root.adm /var/log/samba ############################ # 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 |
このinitプログラムの起動用リンクを作成します。
1 |
sudo update-rc.d make-varlog-files defaults 01 10 |
何かエラー出てますね…。
1 |
>insserv: script make-varlog-files is not an executable regular file, skipped! |
そういえば実行権付け忘れてましたね。chmodしましょう。
1 |
chmod 755 /etc/init.d/make-varlog-files |
これでもう一度リンクを作成するとエラーもなく通りました。
最後にランレベル2用の起動スクリプトディレクトリを確認しときましょう。
1 2 3 4 5 |
ls /etc/rc2.d/ K05nfs-common S01cgroup-bin S01motd S02apache2 S03mysql S03vsftpd S05rc.local K05rpcbind S01dhcpcd S01rsyslog S03cron S03ntp S04avahi-daemon S05rmnologin README S01ifplugd S01sudo S03dbus S03rsync S04lightdm S01bootlogs S01make-varlog-files S01triggerhappy S03dphys-swapfile S03ssh S05plymouth |
ここで、S01make-varlog-files
がS02apache2
より若い数字に指定されてるのでApacheの起動条件としては問題ないです。
これでラズパイの一時ファイルやログがRAMDISKに保存されるようになりました。延命工作完了です。
この状態だとRAMDISKにログが記録されていくため、そのままラズパイの電源を落とすとログは消えてしまいます。
何か記録しておきたいログがある場合、cronで定時シャットダウン前にメールでログを送信するようにしたり定期的にログをSDカードに書き出すようにするといいです。
ITエンジニア募集中!
キュアコード株式会社はITエンジニアを募集しております。少人数の職場なので、上流・下流やサーバー・クライアント対応の垣根なく、あなたの強みを活かしながら いろいろなことにチャレンジ可能です。エンジニアとしての未経験の方、経験が少ない方も歓迎しています。
下記よりITエンジニア募集の採用情報をご覧いただけます。