ログ・ファイルを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