ログ・ファイルをRAMに置いてシステム・パフォーマンスを改善する方法

 コンピューターの動作中はシステム・ログをRAMに置き、シャットダウン時にディスクにコピーするようにすれば、システムログ機能のあるノートパソコンあるいはモバイル機器のバッテリーやフラッシュ・ドライブの寿命を延ばすことができるだろう。その上、デーモンが突然30秒ごとにメッセージをsyslogに送り始め、ハードディスクが休まず回転し続けてバッテリーを浪費するといった状況に陥りにくくもなる。 Ramlog は、それを実現しようというプロジェクトだ。

 フラッシュ・ドライブを使う場合、寿命については十分に検討する必要がある。ディスクへの書き込み頻度を見ると、一般に、/varや/tmpへの書き込みが大半で、/usrパーティションにはソース・コードを毎日数回ホーム・ディレクトリーに書き込む程度でさほど頻繁というわけではないというケースがよくある。このような場合、システム・ログをRAMに移せばフラッシュ・ドライブへの書き込み頻度が大幅に減少し、その分書き込み不能セクターの発生時期を遅らせることができる。その反面、もしノートパソコンがクラッシュし正常に終了できなかった場合、RAMに置かれたログは失われることになる。もっとも、ノートパソコンの場合、ログが死命を制するという事態はほとんどないだろうが。

 RamlogのパッケージはopenSUSE、Ubuntu、Fedoraのリポジトリーにはない。プロジェクトのホーム・ページにあるFedora用の.rpmファイル、Ubuntu用の.debファイル、ソースのtarballを利用する。ここでは、64ビットFedora 8マシン上でRamlogバージョン1.1.0を使ってソースからビルドしてみよう。

 インストールの最初の部分を下に示す。ここで、Ramlogバージョン1.1.0のtarballをサブディレクトリーではなく、カレント・ディレクトリーに直接展開している点に注意。これで、ファイルは最終的にあるべき位置に配置される。また、chkconfigを利用しているが、これはFedoraの場合で、Ubuntuの場合に使うコマンドはRamlog INSTALLファイルを参照のこと。

$ mkdir ramlog-1.1.0
$ cd ramlog-1.1.0
$ tar xzvf /.../ramlog-1.1.0-1.tar.gz
$ su
...
# install -m 750 ramlog /etc/init.d/ramlog
# install -m 444 ramlog.8.gz /usr/share/man/man8/ramlog.8.gz
# install -m 755 ramlog.cron /etc/cron.daily/ramlog.cron
# install -m 644 ramlog.logrotate /etc/logrotate.d/ramlog

# chkconfig --add ramlog
# chkconfig ramlog on

 次に、getlogsizeオプションを付けてramlogコマンドを実行し、/var/logディレクトリーのサイズを調べる。ログ・ファイルを置くRAMディスクの大きさを決める際の参考にするためだ。ログ・ファイルが無制限に大きくならないようにlogrotateを利用している場合、ログを置くRAMディスクのサイズは現在のログ・ファイルのサイズの30~50%増にすれば十分だ。RAMディスクのサイズを明示的に指定しない場合は、使用しているディストリビューションによってサイズが変わる。明示的に設定する場合は、grub.confファイルに「ramdisk_size=n 」を追加する。ここでnはRAMディスクのサイズで、単位はKB。私の場合、現在の/va/logは50MB強だったので、RAMディスクを約80MBにした。

# ./ramlog getlogsize
Ramlog: Size of /var/log is: 52640 kbytes
# vi /boot/grub/grub.conf
...
title Fedora (2.6.24.4-64.fc8 ramlog)
        root (hd0,0)
        kernel /vmlinuz-2.6.24.4-64.fc8 ro root=/dev/VolGroup00/LogVol00 rhgb quiet ramdisk_size=80000
        initrd /initrd-2.6.24.4-64.fc8.img

 ここでリブートするとRamlogが有効になる。あるいは、/var/logを使っているプログラムを一旦すべて終了させ、ramlogを起動してから、再起動してもよい。前者(リブート)の場合RAMディスクのサイズ・パラメーターがそのまま有効になるが、後者(システムを動作させたままramlogを起動)の場合はRAMディスクのサイズはそのとき利用可能な大きさ次第だ(Ramlogの解説書によると64MB)。/var/logを使っているプログラムは、下のコマンドで調べることができる。私の場合、多数のデーモンとXウィンドウ・システムが使用中。したがって、Ramlogを有効にしたければリブートする方が簡単だ。ただし、RAMディスクのサイズが小さすぎるとRamlogは起動せず、/var/logはハード・ディスク上に置かれたままとなり、Ramlogをインストールする前と何ら変わらないことになる。

# service ramlog teststartstop
The list of open files: (ramlogを手作業で起動/停止する場合は、以下のデーモンを停止させる必要がある)

COMMAND     PID   USER   FD   TYPE DEVICE    SIZE    NODE NAME
auditd     1680   root    5w   REG  253,0 4590592 3936085 /var/log/audit/audit.log
rsyslogd   1934   root    2w   REG  253,0   23860 3933163 /var/log/messages
...
setrouble  1966   root    4w   REG  253,0     131 3935366 /var/log/setroubleshoot/setroubleshootd.log-20080705
httpd      2053   root    2w   REG  253,0    8160 3935447 /var/log/httpd/error_log
...
cupsd      2178   root   11u   REG  253,0   14729 3933123 /var/log/cups/access_log
X          2430   root    0r   REG  253,0   30710 3933132 /var/log/Xorg.0.log
...
mysqld    25212  mysql    1w   REG  253,0    1468 3935384 /var/log/mysqld.log
...
Test result: ramlog cannot be started or stopped at the moment.

 一方、RAMディスクのサイズが十分であればramlogサービスは有効となり、ブート中に/var/logディレクトリーがRAMディスクにコピーされ、RAMディスクが/var/logにマウントされる。ハード・ディスク上のlogディレクトリーにはパス/var/log.hddでアクセスできる。したがって、どちらのファイル・システムも操作は可能だ。たとえば、ファイルを削除するときは/var/log.hddのファイルを削除する。そうしないと、次回ブートしたときに、削除したはずのファイルがまたRAMディスクにコピーされ復活することになる。下に示したように、log.hddディレクトリーはLogVol LVMに、/var/log自体はram9ディスクにある。

# df -h  /var/log /var/log.hdd
Filesystem            Size  Used Avail Use% Mounted on
/dev/ram9              76M   52M   21M  72% /var/log
/dev/mapper/VolGroup00-LogVol00
                       16G   11G  3.8G  75% /

 RAMディスクのログ・ファイルをハード・ディスクに保存するときは、rootで「service ramlog restart」を実行する。

 logrotateを利用している場合、logrotateのファイルをハード・ディスクに残しソフトリンクだけをRAMディスクに置くようになるといいと思う。こうすれば、RAMディスクには使用中のログ・ファイルだけが置かれることになるので、RAMディスクを小さくできるからだ。ramlogのlogrotate対応は、おそらく、今後のバージョンで検討されるだろう。

まとめ

 ログ・ファイルをRAMの固定サイズの領域に置けば、冗舌すぎるデーモンが何かとログしたとしても、ノートパソコンのハード・ディスクが休みなく回転し続けるということはない。また、Ramlogが使うRAMディスクは固定サイズのため、冗舌すぎるデーモンのお陰でシステムのRAMを使い果たしてしまうということもない。ノートパソコンでフラッシュ・ドライブを使っており、RAMが数GBあるなら、50~80MBのRAMを犠牲にするだけで、Ramlogを使ってフラッシュ・ドライブへの書き込みサイクルを大幅に減少させることができる。

Ben Martin 10年以上にわたってファイルシステムを研究。博士課程を修了し、現在、libferris、ファイルシステム、検索ソリューションを中心にコンサルティングをしている。

Linux.com 原文