Raspberry Pi nginx Web Server の RAMディスク化

Raspberry Pi + nginx = Webサーバー
Web Server の RAMディスク化
 
microSD logoRaspberry Pi をサーバーとして使っており、24時間稼働中である。
Raspi のシステムはSDカードにあり、このSDカードへの読み書きで寿命が短くなり、壊れるのではないかと、心配になる。
 
 

 

スポンサー リンク

 

 
 
そこで、可能な限りのアクセスを RAMディスク化し、SDカードへの負担を減らこととした。

 

1. Swapを無効にする
 
dphys-swapfile の自動起動設定を off にして、SDカード上に swap ファイルを作成することをやめる。
 
① chkconfigをインストール。
apt-get update
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
 
③ swap ファイルの削除。
sudo swapoff /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
 
② ここで、一旦、再起動する。
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 というのが 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

 
② ここで、一旦、再起動する 。
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
 
④ どんなログファイルが作成されてか確認。
ls -l /var/log
 
⑤ rsyslog.confの編集
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/*  
 
⑦ /etc/rc.local のスクリプトで nginx を起動するように変更するので、
事前に sudo update-rc.d -f nginx remove を実行しておく。
 
⑧ rc.localに追記
ログを直接吐き出すプログラムでは、ディレクトリが無いとエラーとなる場合があるので、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)

 

 

スポンサー リンク

 

             

 

 

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください