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
 
ブルーのところだけ残し、他はコメントにする 。
 
⑥ 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
 
20~39行目のところを追記 。
  

4. cron により一日に一回システムをリブート
 
このままだと、外部からHPにアクセスするとどんどんログがたまり、最後には一杯になる。そこで、cron により一日に一回システムをリブートし、溜まったログをクリアする。
 
nanoでcrontabファイルの編集。
sudo crontab -e
 
最後の行に下記を追加する。ここでは午前4時に再起動がかかるようにした。
0 4 * * * /sbin/reboot
 
 
と言う対策を実施。
 

以上。
(2015.06.29)

 

 

スポンサー リンク

コメントを残す

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