ラップトップでLinux を使うようになってから、ハードディスクへのアクセスが 数秒ごとに発生していることに気が付きました。これはシステムにだれもログイ ンしていないときも同じでした。ハードディスクは決して省資源モードに入るこ とがなかったのです。ハードディスクの駆動を抑制すれば、電池の稼働時間はグ ンと長くなります。この章にこのためのやり方を集めたのは、その効果が大きい からなのです。
試験に利用したのは RedHat 4.1です。配布によっては設定ファイルの置場所が 異なっているかもしれません(その節には、当方まで御知らせ下さい)。
一分ごとに起動するプロセスがあるかどうか /etc/crontab
というファイル
を調べて下さい。atrun が見つかることが多いでしょう。
(訳注: slackware の場合、 /var/spool/crontab/root
です)
at 命令を使えば、これから先そのうち起動される命令をスプールできます。 Linux システムの中には、この仕事を atd というデーモンにまかせているもの もあります。これに対し RedHat などの場合には、crond というデーモンが一分 毎に atrun を起動します。
たいていのシステムの場合、これは本当に必要なものではありません。at 命令
が正確な時間に起動されることが死活的であるというのは稀だからです。
/etc/crontab
には以下のような一行が見つかるかもしれません。
# Run any at jobs every minute (at を一分ごとに起動)
* * * * * root [ -x /usr/sbin/atrun ] && /usr/sbin/atrun
これを以下のように書き換えても何の問題もありません。
# Run any at jobs every hour (at を一時間ごとに起動)
00 * * * * root [ -x /usr/sbin/atrun ] && /usr/sbin/atrun
詳しくは crontab.5 のマニュアルを御読み下さい。フォークによっては crond デーモンなしでも機能します。この場合には crond デーモンを完全に外してし まってもかまいません。
Linux が特定のタイミングで処理するオープンファイルバッファはかなりの数に 達します。すなわち、システムはファイルに加えられた変更をハードディスクに 記録されたことを極力速やかに確認しなければならないのです。さもなければ、 システムがクラッシュした際には、変更内容が失われてしまうのです。
この仕事を受け持っているのが update / bdflush デーモンです。(同一のプロ グラムが二つの名前を名乗っています。したがって起動する際にはこのうちのど ちらかの名前を呼んでもかまいません)初期設定では、flush を五秒ごとに、 sync を三十秒ごとに呼び出しするようになっています。
御使用中のハードディスク上のファームウェア次第ですが、著者の機械の場合こ の初期設定ではハードディスクにアクセスしっ放しになります。(ハードディス クによっては、全く変更がなくてもキャッシュラムをフラッシュするようです)
Linux がしょっちゅう「落ちる」というようなことはもうなくなっているので、 著者は上記の両設定値を 3600秒に変更しています。これが問題を引き起こした 例はなく、ハードディスクへのアクセスも定期的に停止するようになりました。 (もちろん今システムが落ちたら、ファイルがかなりたくさんやられてしまうで しょうが)
RedHat 4.1 の場合 /etc/inittab
中の update 呼び出しを次のように
変更します。
ud::once:/sbin/update -s 3600 -f 3600
Suse 4.4.1 (訳注:ドイツでかなり幅をきかせているの配布の一つ)の場合 update を呼び出ししているのは
/sbin/init.d/boot
Slackware の場合、 update を呼び出ししているのは /etc/rc.d/rd.S です。
詳しくは update のマニュアルを参照してください。
syslogd デーモンは、/var/log
ディレクトリにある Linux の様々な
システムログファイルを司っています。システムメッセージが発せられる度に
ログファイルを同期させるというのが初期設定となっています。
この機能を停止させるには、/etc/syslog.conf
上に記載されている
ファイル名の前にダッシュ "-" をつけくわえます。以下の例は著者の
syslog.conf
です。
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none -/var/log/messages
ここでも、クラッシュ時の問題点の報告がディスクに保存されないという二律背 反に直面することになります。
ブートアップ中に初期プロセスやデーモンを起動するために使用するのが init コマンドです。このコマンドも、各プロセスごとに sync を呼び出しします。
この点を変更するためには、ソースコードから sync() 呼び出しを取り除き、init コマンドを再コンパイルする必要があります。
ファイルバッファが失われるという問題は、
/etc/rc.d/init.d/halt
という書式のファイルシステムをアンマウントす
る直前の部分に sync 呼び出しを付け加えるという方法で回避できます。
Linux のスワップパーティションは仮想記憶を用いて物理的メモリ空間を広げる ためのものです。スワップパーティションを使うというのは、ディスクアクセス の原因の一つとなります。御使いのラップトップがラムを十分装備している場合、 あるいは軽いアプリケーション(vi のような)を使う場合には、スワップを「切」 にすることを考慮したくなるでしょう。
スワップを「切」にできるかどうかはもちろん「何をしようとするか」次第です。 4M や 8M のメモリでは不十分です。どうしてもスワップパーティションが必要 です。8 - 16 M もあれば、コンソールを使うアプリケーションなら難なく利用 できます。マルチタスク機能を諦めるなら、スワップを「切」にしても危険はな いでしょう。X-Windows 環境を使うには潤沢なメモリが必要です。16M 以上のメ モリがない限りスワップは必須です。
(註記:著者のラップトップは16Mですが、スワップを用いないで emacs 一つ、 bash シェルを四つ走らせながらカーネルの構築をしてもメモリ不足を来たすこ とはありません。著者にとってはこれで十分です)
既にスワップパーティションを設定してしまっている場合でも、これを使わない
ようにすることはできます。/etc/rc.d/rc.sysinit
にある swapon を
呼び出す部分の先頭に "#" を付け足せばいいのです。スワップを常時オフにはしてしま
いたくない時には、システム立ち上げ時にスワップ使用の可否を問い合わせるよ
うにしておきましょう。RedHat 4.1 の場合には /etc/rc.d/rc.sysinit
、Suse
4.4.1 の場合には /sbin/init.d/boot
を以下のように記述します。
(Slackware の場合には、 /etc/rc.d/rc.S
です)
echo "Should the system use swap?"
echo " 0: No."
echo " 1: Yes."
/bin/echo "Your choice: \c"
read SWAPCHOICE
case "$SWAPCHOICE" in
0)
# Do nothing.
echo "(Swap partitions disabled)"
;;
*)
# Start up swapping.
echo "Activating swap partitions"
swapon -a
esac
こうしておけば、交流電源を使用しているときにはスワップを用い、電池を使用 しているときにはスワップを用いないといったことが可能となります。
著者は Website 用の cgi 書式の作成・試験にラップトップを使用しています。 ローカルの Web サーバーをラップトップ上で立ち上げているのはそのためなの です。書式を試験したり頁を時々検査したりするだけの人にとって標準設定はい ささか過ぎたるものでしょう。
httpd.conf
にある MinSpareServers、 StartServers の値を 1 に
変更してください。ローカルの試験サイトにはこれで十分でしょう。
Web サーバーのログを取るのをやめたい際には、httpd デーモンを再コンパイル するしか手がありません。詳しくは当該文書を御読み下さい。
Linux システムがまだハードディスクを頻繁に触りに行きすぎるように思える時 には、ps ax コマンドを使って一体何が起こっているのかを調べるという手があ ります。この命令は現在走っている全てのプロセスをフルネームで表示してくれ ます。場合によっては、各プロセスのコマンドライン引数も表示されます。
(訳注:表示が画面の右端で切れてしまうときには、 ps axwww とします)
次に各プロセスのマニュアルを読んで、その正体は何か?、挙動を変更するには どうすればいいのかを調べてください。この手法を使えば、どのプロセスがハー ドディスクへのアクセスを頻繁化させている主犯かを突き止めることができるは ずです。
新発見がありましたら、是非著者までE-mail を御送り下さい。