PCリンクスでは、パソコンの設定・修理から組込み機器の受託開発まで承ります。

 

Raspberry Pi でRAMディスクを使う

3回目の今回は、Raspberry Piでtmpディレクトリやログファイルの格納先として、RAMディスクを使用するよに対応します。

SDカードは、データの書き込み回数制限があり、ハードディスクドライブに比べて寿命が短いので、延命対策としてRAMディスクを使用するようにします。

デジカメで撮影した写真の保存先としてSDカードを使用するのであれば、なんら問題は無いのですが、今回のように、24時間動作のサーバ用途に、HDDの代わりとしてSDカードを使うためには、RAMディスクを使用するなどの、対応が必要となります。
※最終的には、fsprotectパッケージを採用して、ファイルシステムをリードオンリーとして使用するようにします。

安価なSSDの詳細は、こちら 安易なSSD導入がもたらす「猛毒」の正体 をご参照ください。(こわ~)

SDメモリーカードに使用されているNANDフラッシュメモリには、1つのセルに1bitのデータを記録するSLC (Single Level Cell)と、2bit以上のデータを記録するMLC (Multi Level Cell)タイプがあります。

toshiba sd8gb 300x276 Raspberry PiでRAMDiskを使う

 <SDカードのパッケージ写真>

 価格重視の一般的なSDカードでは、
 MLCタイプのNANDフラッシュが採用されています。
 (今回購入した東芝のSDカードはMLCタイプです)

 信頼性を重視する用途では、
 SLCタイプのNANDフラッシュが採用されています。
 (価格はMLCの10倍くらいします…)
 

 

swapファイルの対応

最初に、dphys-swapfileの自動起動設定をoffして、SDカード上にswapファイルを作成することをやめます。

[root@ms03 ~]# chkconfig dphys-swapfile off
[root@ms03 ~]# chkconfig dphys-swapfile --list
dphys-swapfile            0:off  1:off  2:off  3:off  4:off  5:off  6:off

 

tmpファイルの対応

OSの起動時、/tmpディレクトリと/var/tmpディレクトリは、RAMディスク上にマウントするように変更します。

[root@ms03 ~]# pico /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$
# tmpファイルはRAMディスク上に保管する
tmpfs                   /tmp            tmpfs    defaults,size=32m,noatime,mode=1777      0       0
tmpfs                   /var/tmp        tmpfs    defaults,size=16m,noatime,mode=1777      0       0

ここで、一旦、再起動して、マウント状況を確認します

[root@ms03 ~]# reboot
[root@ms03 ~]# 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

 

ログファイルの対応

rsyslogで記録するログは、RAMディスク上に記録させて、SDカードには記録させないようにします。

OS起動時、/var/logディレクトリは、RAMディスク上にマウントするように変更します。

[root@ms03 ~]# pico /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$
# tmpファイルはRAMディスク上に保管する
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

マウント状況を確認します。

[root@ms03 ~]# mount /var/log
[root@ms03 ~]# 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

 

rsyslog設定の変更

rsyslogでは、必要最小限のログ(auth , syslogとmessages)のみを、記録させるようにして、RAMディスク容量を節約するようにします。
また、ログを直接吐き出すアプリでは、/var/log 配下にサブディレクトリが存在しないと、エラーとなる場合がありますので、rc.localファイルで、起動時に自動的にディレクトリを作成するようにします。

rsyslog.confの初期状態では、下記のログファイルが作成されています。

[root@ms03 ~]# ll /var/log
-rw-r----- 1 	root adm    701  3月  2 14:55 	auth.log
-rw-r----- 1 	root adm    180  3月  2 14:55 	daemon.log
-rw-r----- 1 	root adm    949  3月  2 14:54 	debug
-rw-r--r-- 1 	root adm  12155  3月  2 14:54 	dmesg
-rw-r----- 1 	root adm  17863  3月  2 14:54 	kern.log
-rw-r----- 1 	root adm      0  3月  2 14:54 	lpr.log
-rw-r----- 1 	root adm      0  3月  2 14:54 	mail.err
-rw-r----- 1 	root adm      0  3月  2 14:54 	mail.info
-rw-r----- 1 	root adm      0  3月  2 14:54 	mail.log
-rw-r----- 1 	root adm      0  3月  2 14:54 	mail.warn
-rw-r----- 1 	root adm  17044  3月  2 14:54 	messages
drwxr-xr-x 2 	root root   100  3月  2 14:54 	news
-rw-r----- 1 	root adm  18391  3月  2 14:55 	syslog
-rw-r----- 1 	root adm      0  3月  2 14:54 	user.log 

rsyslogの設定ファイル(rsyslog.conf)を修正して、最小限のログのみを記録するように変更します。

[root@ms03 ~]# pico /etc/rsyslog.conf
(略)
###############
#### 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

# The named pipe /dev/xconsole is for the `xconsole' utility.  To use it,
# you must invoke `xconsole' with the `-file' option:
#
#    $ xconsole -file /dev/xconsole [...]
#
# NOTE: adjust the list below, or you'll go crazy if you have a reasonably
#      busy site..
#
daemon.*;mail.*;\
        news.err;\
        *.=debug;*.=info;\
        *.=notice;*.=warn       	|/dev/xconsole

ログを直接吐き出すプログラムでは、ディレクトリが無いとエラーとなる場合がありますので、rc.localに追記し、OS起動時、自動でディレクトリを作成するようにします。

[root@ms03 ~]# pico /etc/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
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

exit 0

ここで、一旦、OSを再起動させて、/var/logを確認します。
※RAMディスク上のログファイルは、電源をオフすると、すべて消えてしまいますので、消えてしまって困るログは、事前にバックアップしておきます。

[root@ms03 ~]# reboot
[root@ms03 ~]# ll /var/log/
drwxr-xr-x 2 	root 	root     	40  	3月  2 15:02 	ConsoleKit
drwxr-xr-x 2 	root 	root     	40  	3月  2 15:02 	apt
-rw-r----- 1 	root 	adm     	483  	3月  2 15:03 	auth.log
-rw-r--r-- 1 	root 	utmp     	0   	3月  2 15:02 	btmp
-rw-r--r-- 1 	root 	adm   		12155  	3月  2 15:02 	dmesg
drwxr-xr-x 2 	root 	root     	40  	3月  2 15:02 	fsck
-rw-r--r-- 1 	root 	utmp 		292584 	3月  2 15:03 	lastlog
-rw-r----- 1 	root 	adm   		17044  	3月  2 15:02 	messages
drwxr-xr-x 2 	root 	ntp      	40  	3月  2 15:02 	ntpstats
drwxr-xr-x 2 	root 	adm      	40  	3月  2 15:02 	samba
-rw-r----- 1 	root 	adm   		18389  	3月  2 15:03 	syslog
-rw-r--r-- 1 	root 	utmp   		3072  	3月  2 15:03 	wtmp

 

以上で、「Raspberry Pi でRAMディスクを使う」を終了します。

コメント

コメントを受け付けておりません。