tmpfs(RAMディスク)
20130311

動作環境
 CentOS6.x
⇒CentOS7.xの場合はtmpfs(RAMディスク)ページにて。
dfコマンドを実施した際に表示される「tmpfs」の説明及び活用をしていきます。

まず、「tmpfs」とは最近のRHELで自動的に割り当てられるRAMディスクの事です。
→デフォルトではシステムの最大メモリの半分を割り当てられています。
→割り当てられた領域にファイルを保存する場合、使用サイズ分のメモリがシステムで利用出来なくなります。

また、メモリに保存するという事は以下の性質を持ちます。
 1.読み書きの速度がHDDやSSDより高速。
 2.電源を切った際に保存されているファイルが消失する。
 →突然の電源ダウンではない限り、対処方法は有ります。
 3.頻繁にファイルの読み書きを行っても機器の寿命に対する影響が少ない。

以上の性質から、重要ではないファイルを保存し、高速にアクセスする必要のある「/tmp」に割り当てていきます。
→デフォルトでは「/dev/shm」
〜既存設定の確認とマウント解除〜
◆現在のシステムの状態を確認
 [root@server ~]# df
tmpfs 510480 0 510480 0% /dev/shm

◆現在のマウントを解除(「/dev/shm」内のデータは全て消去されます)
 [root@server ~]# umount /dev/shm

◆先ほどのファイルシステムが存在していない事を確認
 [root@server ~]# df
〜マウント位置の変更〜
◆マウント位置の変更する為、fstabを編集
 [root@server ~]# vi /etc/fstab

びふぉー
tmpfs /dev/shm tmpfs defaults 0 0

あふたー
tmpfs /tmp tmpfs defaults 0 0

◆設定した内容にマウントしましょう。
 [root@server ~]# mount -a

◆マウント位置を確認
 [root@server ~]# df
tmpfs 510480 0 510480 0% /tmp

これで以降「/tmp」はRAMディスクに保存される事になります。
〜電源を切った際にデータが消去される事への対処〜
◆まずは電源ダウン時に格納するディレクトリを作成しておきましょう。
 [root@server ~]# mkdir /root/tmp/

◆シャットダウン動作時にデータを待避する為の設定
 [root@server ~]# vi /etc/rc.d/init.d/halt
#!/bin/bash
#
# halt This file is executed by init when it goes into runlevel
# 0 (halt) or runlevel 6 (reboot). It kills all processes,
# unmounts file systems and then either halts or reboots.
#
# Author: Miquel van Smoorenburg,
# Modified for RHS Linux by Damien Neil
#
mv -f /tmp/* /root/tmp/
→赤文字部分を追加

※システムのアップデートで本ファイルの内容が初期化される場合があります。
 この場合、最新のデータを維持出来なくなる可能性があります。

◆上記対策の為、一日一回本ファイルの中身を調査するスクリプトを作成(任意)
 [root@Server ~]# vi /etc/cron.daily/tmpfs_check.sh

#!/bin/sh
export LANG=ja_JP.UTF-8

# Ver 20130107

# シャットダウンスクリプトのファイルパス
FILE="/etc/rc.d/init.d/halt"

# 検索キーワード
KEY="/tmp/"

# メール送信先アドレス。(デフォルトroot宛)
MAILADDRESS="root"

# 以降設定不要
if grep $KEY $FILE > /dev/null 2>&1 ; then
:
else echo -e "「$FILE」内にて、「$KEY」の文言を確認出来ません。\ntmpfsのデータ維持に支障が出る可能性がありますので、確認して下さい。\n参考「http://ry.tl/tmpfs.html」"| mail -s "$0" $MAILADDRESS
fi

if [ $TMPWATCH_CHECK = "yes" ] ; then
if [ -e /etc/cron.daily/tmpwatch ] ; then
echo -e "cron.dailyにて、tmpwatchファイルの存在を確認\n当該ファイルを$TMPWATCH_DIRに移動します。\n参考「http://ry.tl/tmpfs.html」"| mail -s "$0" $MAILADDRESS
mv -f /etc/cron.daily/tmpwatch $TMPWATCH_DIR
fi
fi

 [root@Server ~]# chmod +x /etc/cron.daily/tmpfs_check.sh
→実行権限を付与

→cronにて実行され、問題があればメールにて通知されてきます。

◆起動中に待避データを元の位置に戻す設定
 [root@server ~]# vi /etc/rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
cp -pr /root/tmp/* /tmp/
→赤文字部分を追加

急な電源のダウンやkernel panic時のデータは保証されない事に注意
〜定期的にデータを待避させて予期せぬ事態に備える〜
◆cronにて3時間毎にデータのコピーを取る設定
 [root@Server ~]# echo "*/180 * * * * root bash `rm -rf /root/tmp ; cp -pr /tmp/ /root/` >/dev/null 2>&1" >> /etc/crontab

予期せぬシャットダウンが発生した場合、最大で3時間前のデータを保持する事が可能になります。

赤文字部分を/60に変更する事で、1時間(60分)に一回コピーへと変更可能。
→詳しいcron設定については「Cron記述方法」にて
〜tmpwatchを停止(任意)〜
CentOSにはデフォルトでtmpwatchが動作するようになっているので停止していきます。
→「tmpwatch」とは、一定期間過ぎた「/tmp」内のファイルを削除する機能で、「cron」にスクリプトが登録されている。
→機能を停止させる必要性はあまり無いとは思いますが、念のために記載。
→何かの拍子に復活している場合もあるため、前述のスクリプトに監視機能を持たせる。

◆スクリプトをrootディレクトリに移動(場所は任意)
 [root@Server ~]# mv /etc/cron.daily/tmpwatch /root/

以上