2-1-5. nginx Web Server の RAMディスク化


Raspberry Pi をサーバーとして使っており、24時間稼働中である。
Raspi のシステムはSDカードにあり、この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ディスク上にマウントするように変更。

 ① sudo nano /etc/fstab ・・・ 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カードには記録させないようにする。

sudo nano /etc/fstab ・・・ 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起動時、自動でディレクトリを作成する。   
  sudo nano /etc/rc.local ・・・ rc.local を編集し、グリーンのところを追記

		#!/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 %s\n" "$_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 により一日に一回システムをリブートし、溜まったログをクリアする。

  sudo crontab -e

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

  0 4 * * * /sbin/reboot



スポンサー リンク




関連ページ


スポンサー リンク

スポンサー リンク