(2010.03.03)

ハードディスクの勝手なアクセスの抑止

LASER5 Linuxをサーバとして利用しているんだが、HDDのアクセス音が気になって仕事にならん!使用中にアクセスするのは当然だから仕方ないとしても、アクセスをしていなくてもHDDが突然ウィーンと唸り出すのは、どういうこった!? 電気も無駄に消費するし、HDDの寿命も短くなるし、原稿書きに全然集中できんだろうが!!

●syslogの停止

基本的に、ログの吐き出しが問題なんだから、まずはsyslogを終了させる。ま、ログを殺してしまうのは恐いけど…とりあえず実験ということで;
 killall syslogd
 killall klogd		こっちも必要かな?

●ログの出力先の変更

ログを殺さなくても、ハードディスク以外の場所(RAMディスク)に吐き出させれば、アクセス音はしないわけだから、ログの出力先を変更する方法もあるか。
 /etc/syslog.conf
にログの出力先が書いてあるので、ここを編集してramdiskに書き出させることに。起動は;
 /sbin/syslogd -m 0	←「-m 0」を忘れずに!(忘れると20分に1回MARKが出る)
 /sbin/klogd

●cronの停止

しかし、これでもHDDアクセスが… あ、犯人はcronのようですな。 /var/logで dir -t -l | less とすれば、何がいつ書き込まれたのか確認できる。 なので、
 killall crond
しちまえばいいだんが…これもちと問題かねえ…。 一応、確認したのは、cronによってhourlyのアクセスがある(毎時1分)。 それとは別にrmmod -asによる10分ごとのアクセスがある。こりはなに? わかんないけど、とりあえず cronを殺しておきましょう…いいのかな?

あれれ、またアクセスがあったぞと…ん?ramdiskができていない? できてなかったんだ、やっぱり…う〜む、自動で作る方法を見つけなきゃ。

 □RAMDISKを自動生成する方法
 □crondのログの出力制御

cronの方は、/etc/crontabに設定が書かれているが、これはログの出力先はの指定はできないんだね。個人用のは/var/spool/cronにあるそうだが、ウチの環境では空。crondを再起動するときは;

 /usr/sbin/crond

●問題点のまとめ

syslogdおよびcrondによって、一定時間ごとあるいはイベントごとに、/var/logディレクトリにログが吐き出される。このログの書き出しはかなり頻繁に行われ、その度にHDDがアクセスされる。最も頻繁に書き出されるのはcrondのkmod(rmmod -as)のログで、その間隔はわずか10分である。

解決方法

 syslogd → /etc/syslog.confを編集して、ログをramdiskに書き出させる。
 crond	  → 実行間隔を変更して、最も頻度の高いものでも1日1回にする。

●crondの実行間隔の変更

crondもログをramdiskに書き出せればよいのだが、設定方法が判らなかった。一般には、/etc/syslog.confの中に、
 cron.*						/ramdisk/log/cron
のような行を追加すればよいはずなのだが、なぜか私の環境ではこの設定は無効になり、相変わらず/var/log/cronに書き出されてしまう。どこかにsyslog.confよりも上位の設定があるのかも知れない。

crondの実行間隔は/etc/crontabで設定されている。この中に書き込まれているのはhourly/daily/weekly/monthlyで、このうち問題になるのはhourlyの設定。これを停止するか、あるいはdailyに変更すればよい。幸い、私の環境ではhourlyの設定(/etc/cron.dailyの中にある)は空なので、単純にhourlyの行をコメントアウトすればよい。ただし、このcrontabファイルでは、10分おきの設定は変更できない。

  SHELL=/bin/bash
  PATH=/sbin:/bin:/usr/sbin:/usr/bin
  MAILTO=root
  HOME=/
  # run-parts
  #01 * * * * root run-parts /etc/cron.hourly	←コメントアウト
  02 4 * * * root run-parts /etc/cron.daily
  22 4 * * 0 root run-parts /etc/cron.weekly
  42 4 1 * * root run-parts /etc/cron.monthly
10分おきに実行されるkmodの設定は/etc/cron.dの中に入っている。このcron.dというのはcrontabには記述がないが、hourly/daily/weekly/monthlyのいずれにも該当しない実行間隔を持つコマンドを格納しておく場所のようだ。と言っても、「cron.weekly」や「cron.hourly」などのディレクトリ名が直接実行間隔を規定しているわけではなく、設定をちょいと書き変えれば、たとえばcron.weeklyをdailyに実行させることも可能。週に一回実行するものはcron.weeklyにまとめておいた方が便利、というような便宜上の分類に過ぎない。

cron.dについても基本的に同じで、中身をdailyやweeklyに実行してはいけないわけではない。実際、kmodをdailyに実行させるのは大して難しくない。/etc/cron.d/kmodを次のように編集すれば良い。

 */10 * * * *    root    /sbin/rmmod -as		10分ごとに実行
  ↓
 01 4 * * *    root    /sbin/rmmod -as		毎日午前4時01分に実行
これで各デーモンを起動し直せば、勝手にHDDをアクセスするのは毎日1回のみとなるはず。ただし、元々10分ごとに実行するものを1日1回に減らしては弊害が出るかも知れない。ちなみに、このkmodは不要モジュールのクリーナーらしい。

う〜ん、まだ20分に1回アクセスがあるようだ。

●20分に一度のMARK出力

syslogdのmessagesに、20分に1回;
 linux -- MARK --
が書き込まれている。でも、このログ自体はramdisk上なんで、カンケーないはず。 問題は、何が起きているのか? なんか起きてるからHDDアクセスにいくんだろう。 ちなみに、このMARKはLinuxが「起きてるよ〜」という証拠らしい。 だから、他のコマンドが実行されている間はこのMARKは発生しない。 でも、なんでHDDにアクセスにいくの?  実はramdiskができてなかったりして…流石にそれはないか…dfで確認済み

どうやら、syslogdの起動オプションで抑止できるらしい。 つ〜か、元々は抑止していたようだ。-mオプションで間隔を指定するのだが、0を指定すれば抑止できる。 /etc/rc.d/init.d/syslogに;

 daemon syslogd -m 0
つ〜行があるので、もともとは止まっていたんだね。 なので、syslogdを-m 0付きで再起動すればよろし。

【PCうそつき講座目次】 【ホーム】