ログ・ファイルをRAMに置いてシステム・パフォーマンスを改善する方法
フラッシュ・ドライブを使う場合、寿命については十分に検討する必要がある。ディスクへの書き込み頻度を見ると、一般に、/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、ファイルシステム、検索ソリューションを中心にコンサルティングをしている。