Raspberry Pi + nginx = Webサーバー
Web Server の RAMディスク化
Web Server の RAMディスク化
スポンサー リンク
そこで、可能な限りのアクセスを RAMディスク化し、SDカードへの負担を減らこととした。
1. Swapを無効にする
dphys-swapfile の自動起動設定を off にして、SDカード上に swap ファイルを作成することをやめる。
① chkconfigをインストール。
apt-get update
apt-get upgrade
apt-get install chkconfig
apt-get upgrade
apt-get install chkconfig
② 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
sudo chkconfig dphys-swapfile -list
dphys-swapfile 0:off 1:off 2:off 3:off 4:off 5:off 6:off
③ swap ファイルの削除。
sudo swapoff /var/swap
sudo rm /var/swap
sudo rm /var/swap
2. tmpフォルダをRAMディスクに移す
OSの起動時、/tmpディレクトリと/var/tmpディレクトリを、RAMディスク上にマウントするように変更。
① fstab を編集し、グリーンのところを追記。
sudo nano /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 dphys-swapfile swap[on|off] for that
#
# tmp files put on RAM disk
tmpfs /tmp tmpfs defaults,size=32m,noatime,mode=1777 0 0
tmpfs /var/tmp tmpfs defaults,size=16m,noatime,mode=1777 0 0
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,noatime,mode=1777 0 0
tmpfs /var/tmp tmpfs defaults,size=16m,noatime,mode=1777 0 0
② ここで、一旦、再起動する。
sudo reboot
③ マウント状況の確認。
df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
rootfs 7.2G 1.5G 5.5G 21% /
/dev/root 7.2G 1.5G 5.5G 21% /
devtmpfs 235M 0 235M 0% /dev
tmpfs 49M 204K 49M 1% /run
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 98M 0 98M 0% /run/shm
/dev/mmcblk0p1 56M 19M 38M 34% /boot
tmpfs 32M 0 32M 0% /tmp
tmpfs 16M 0 16M 0% /var/tmp
ファイルシス サイズ 使用 残り 使用% マウント位置
rootfs 7.2G 1.5G 5.5G 21% /
/dev/root 7.2G 1.5G 5.5G 21% /
devtmpfs 235M 0 235M 0% /dev
tmpfs 49M 204K 49M 1% /run
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 98M 0 98M 0% /run/shm
/dev/mmcblk0p1 56M 19M 38M 34% /boot
tmpfs 32M 0 32M 0% /tmp
tmpfs 16M 0 16M 0% /var/tmp
※ tmpfs というのが RAM ディスクの事 。
3. logフォルダをRAMディスクに移す
rsyslogで記録するログは、RAMディスク上に記録させて、SDカードには記録させないようにする。
① fstab を再度編集し、グリーンのところを追記。
sudo nano /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 dphys-swapfile swap[on|off] for that
#
# tmp files put on RAM disk
tmpfs /tmp tmpfs defaults,size=32m,noatime,mode=1777 0 0
tmpfs /var/tmp tmpfs defaults,size=16m,noatime,mode=1777 0 0
#
# /var/logディレクトリはRAMディスク上に配置する
tmpfs /var/log tmpfs defaults,size=32m,noatime,mode=0755 0 0
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,noatime,mode=1777 0 0
tmpfs /var/tmp tmpfs defaults,size=16m,noatime,mode=1777 0 0
#
# /var/logディレクトリはRAMディスク上に配置する
tmpfs /var/log tmpfs defaults,size=32m,noatime,mode=0755 0 0
② ここで、一旦、再起動する 。
sudo reboot
③ マウント状況の確認。
df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
rootfs 7.2G 1.5G 5.5G 21% /
/dev/root 7.2G 1.5G 5.5G 21% /
devtmpfs 235M 0 235M 0% /dev
tmpfs 49M 204K 49M 1% /run
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 98M 0 98M 0% /run/shm
/dev/mmcblk0p1 56M 19M 38M 34% /boot
tmpfs 32M 0 32M 0% /tmp
tmpfs 16M 0 16M 0% /var/tmp
tmpfs 32M 0 32M 0% /var/log
ファイルシス サイズ 使用 残り 使用% マウント位置
rootfs 7.2G 1.5G 5.5G 21% /
/dev/root 7.2G 1.5G 5.5G 21% /
devtmpfs 235M 0 235M 0% /dev
tmpfs 49M 204K 49M 1% /run
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 98M 0 98M 0% /run/shm
/dev/mmcblk0p1 56M 19M 38M 34% /boot
tmpfs 32M 0 32M 0% /tmp
tmpfs 16M 0 16M 0% /var/tmp
tmpfs 32M 0 32M 0% /var/log
④ どんなログファイルが作成されてか確認。
ls -l /var/log
⑤ rsyslog.confの編集
rsyslog.confを編集し、必要最小限のログ(auth , syslogとmessages)のみを 記録させるようにして、RAMディスク容量を節約する。
rsyslog.confを編集し、必要最小限のログ(auth , syslogとmessages)のみを 記録させるようにして、RAMディスク容量を節約する。
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
⑥ RAMディスクにするディレクトリの削除。
sudo rm -rf /tmp/*
sudo rm -rf /var/log/*
sudo rm -rf /var/log/*
⑦ /etc/rc.local のスクリプトで nginx を起動するように変更するので、
事前に sudo update-rc.d -f nginx remove を実行しておく。
⑧ rc.localに追記
ログを直接吐き出すプログラムでは、ディレクトリが無いとエラーとなる場合があるので、rc.localに追記し、OS起動時、自動でディレクトリを作成する。
ログを直接吐き出すプログラムでは、ディレクトリが無いとエラーとなる場合があるので、rc.localに追記し、OS起動時、自動でディレクトリを作成する。
rc.local を編集。
sudo nano /etc/rc.local
mkdir ~ chown 迄を追記 。
#!/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 %sn" "$_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
# nginx用のログディレクトリ
mkdir -p /var/log/nginx
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
# nginxの起動
# 事前にupdate-rc.d -f nginx removeを実行すること
/etc/init.d/nginx start
exit 0
4. cron により一日に一回システムをリブート
このままだと、外部からHPにアクセスするとどんどんログがたまり、最後には一杯になる。そこで、cron により一日に一回システムをリブートし、溜まったログをクリアする。
nanoでcrontabファイルの編集。
sudo crontab -e
最後の行に下記を追加する。ここでは午前4時に再起動がかかるようにした。
0 4 * * * /sbin/reboot
と言う対策を実施。
以上。
(2015.06.29)
スポンサー リンク