Small Memory mini-HOWTO Todd Burgess tburgess@uoguelph.ca JF Project - 日本語訳 JF@linux.or.jp 2000-12-12 Revision History Revision 0.1 2000-12-01 Revised by: tb メモリ容量が少ないシステム上で Linux を動かす方法 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Table of Contents 1. イントロダクション 2. Linux カーネル 3. 仮想コンソール 4. デーモンプロセス 4.1. inetd 4.2. lpd 4.3. nfsd と mountd 4.4. portmap 4.5. sendmail 4.6. others 5. あとがき 6. 日本語訳について 6.1. Red Hat/Caldera/Debian でのデーモンの起動の止め方(自己流) 6.2. 訳者および謝辞 1. イントロダクション メモリを買って追加するという手もありますが、それ以外にも Linux が消費す るメモリの量を節約する方法はたくさんあります。 メモリ消費の観点からすると、インストールした直後のディストリビューショ ンでは、たいてい非常に無駄の多いメモリの使い方をしています。わたしたち の大部分が使いもしないようなサービスや機能が動いているのです。そうした 過剰なサービスの多くを削除することで、数 MB の実メモリを解放できます。 著者自身のシステムは、486DX2 66MHz の CPU と 12 MB の物理メモリ、および 12 MB のスワップスペースという環境です。これでここ 3 年間なんの不満もな く Linux を動かしています。たぶん、あと数年はこのまま Linux を動かし続 けるでしょう。 :) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2. Linux カーネル ディストリビューション付属のカーネルは、どれも肥大しすぎであり、誰も使 わないような機能まで付加されています。これまでカーネルを再コンパイルし たことがないとしても、この際、是非やってみることをおすすめします。カー ネルの再コンパイルの方法はこの文書の範疇を越えますが、それについて丁寧 に解説された優れた Linux 本やガイドはたくさんあります。 カーネルを再コンパイルする場合は、必要な機能以外は一切組み込まないとい う方針を忘れないでください。たとえば、読者のうち、カーネルの PLIP サポ ートを必要とするひとがどれだけいるでしょうか?その機能を組み込んだとし て、実際に使うひとがどれだけいますか?カーネルを小さくすれば、ロード時 間が短くなり、メモリの消費は減少し、CPU サイクルも短縮されます。 もうひとつ、モジュールの問題があります。モジュールは扱いがやっかいだと 思っているので、個人的には使っていません。しかし、もし使ってみて特に問 題だと感じないなら、「カーネルの肥大化」を抑えるには効果的です。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3. 仮想コンソール 仮想コンソールの数を減らすと、使用メモリを大幅に節約できます。大部分の Linux ディストリビューションでは、初期状態で 6 個の仮想コンソールが作動 していまが、 6 個の仮想コンソールを作動させると、だいたい平均で、約 4MB のメモリを消費します。この数を減らせば、数 MB 単位でメモリを節約できま す。たいていのユーザは、 3 個か 4 個で充分です。いくつまで減らすかは使 う人の好みにもよりますが、仮想コンソールの数を減らせば減らすだけ、その 分アプリケーションが使用できるメモリの量が増えるということを忘れないで ください。 仮想コンソールをいくつ動作させるかは、/etc/inittab に記述されています。 仮想コンソールの数を減らすには、次のようにしてください。 1. テキストエディタで、/etc/inittab を開きます。 2. 次のように書かれている行を見つけます(先頭が c1 で始まっているところ がポイントです)。 c1:12345:respawn:/sbin/getty tty1 38400 linux このような行のうち、一番大きな数字で始まる行(たとえば、c6 )の行頭に # を書き込んでコメントアウトします(左側に空白をいれないようにしてく ださい)。この作業を必要な回数だけ繰り返してください。1 行コメントア ウトするごとに、起動するコンソールがひとつ減ります。 3. システムを再起動すると、設定が有効になります。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4. デーモンプロセス 多くの Linux ディストリビューションでは、わたしたちのほとんどが使いもし ないようなデーモンが起動するようになっています。そうしたデーモンの大部 分は、スクリプトによってロードされています。ただ、そのスクリプトの名前 や置かれている位置は、ディストリビューションによって異なっています。 Slackware の場合だと、セットアップスクリプトは /etc/rc.d/rc.* にありま す (訳注:Red Hat/Caldera/Debian でのデーモンの止め方は、日本語訳につい てをご覧ください)。 ここからの説明においては、Unix シェルスクリプト・プログラミングの知識が あると非常に役に立ちます。とはいえ、Unix シェルスクリプトを書いたことが ないひとのために、以下に簡単ではありますが、シェルスクリプトの紹介をし ようと思います。 次のシェルスクリプトをご覧ください。 #!/bin/sh echo "hello world" #echo "good bye cruel world" 上記のコードは、"hello world" という文字列を表示するものです。シェルス クリプトには、まず次のような記述が、最初の行の先頭に含まれていなければ なりません。 #!/bin/sh それに続くすべての行では、実行に先立ってあらかじめキーボード上で打ち込 んでおいたコマンドがそのまま一行づつ実行されます(良くできたキーボードマ クロのようなものと考えてください)。 '#' で始まる行は、シェルによって実行されないので、コメントとなります。 デーモンをロードする場合、起動スクリプトのほとんどは次のようなかたちに なっています。 if somecondition do something fi 必要なのは、次の記述で始まり、 if 次の記述で終わる行、 fi こうした行をすべてコメントアウトすることです。 特定のデーモンがどこで起動されているか知りたい場合は、そのデーモンの名 前を初期化スクリプト内で探してください。たとえば、inetd が Slackware の どこからロードされるのか知りたい場合、わたしなら次のようにします。 $ cd /etc/rc.d $grep -n inetd rc.* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.1. inetd inetd は、telnet や ftp コマンドを使ったり、あなたのマシンに talk リク エストを送ったりできるようにするデーモンです。自分のマシンをサーバとし て使ったり、リモートでアクセスしたりする必要がないなら、inetd は削除し てかまいません。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.2. lpd lpd は、lpr コマンドを使って、ファイルをプリンタで印刷する際に使用しま す。お手元の Linux で印刷をしない場合は、lpd を削除してかまいません。た だ、もしお使いのプリンターが HP Deskjet ?? プリンタであり、それで印刷を するのであれば、 dj-printcap というパッケージをおすすめします。このパッ ケージは以下の場所で入手できます。 ftp://sunsite.unc.edu/pub/Linux/system/Printing/dj-printcap.tar.gz ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.3. nfsd と mountd これらふたつのデーモンは、NFS サーバを稼働させる際に使用します。お使い の Linux システムを NFS サーバとして利用しないのであれば、このふたつの デーモンは削除したほうが安全です。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.4. portmap portmap デーモンは、RPC サービスを処理する際に使用します。NFS サーバや その多の RPC プログラムを稼働させないなら、 portmap は削除してかまいま せん。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.5. sendmail sendmail もかなり多くのメモリを消費するデーモンです。お手元の Linux で 送信メールを中継したり、送信されたメールを手元の Linux で直接受信したり しないのであれば、sendmail は削除してかまわないでしょう。手元の Linux からメールを送信する場合は、たいてい (プロバイダ等が提供する)別のメール サーバを使ってメール送信が可能なように、メールクライアントを設定できる ようになっています。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.6. others システム上で起動されるデーモンのなかには、他にも不必要なものがあると思 います。不要だと思ったら削除してしまいましょう。削除してはいけないデー モンは、 syslogd と klogd のふたつです。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5. あとがき これまで説明したことは、わたしが自分の Linux マシンのメモリ使用量をでき る限り節約するためにとった方法です。Linux マシンのメモリ使用量を抑える ための方法について、ちょっとした参考になればさいわいです。Good luck and happy hacking! ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6. 日本語訳について 6.1. Red Hat/Caldera/Debian でのデーモンの起動の止め方(自己流) 訳者は RedHat 4.2 を使っているため、この文書にあるデーモンの起動を止め るための手順をそのまま適用することはできませんでした。ここで、私のとっ た手順を紹介しておきます。(Debian は触ったことはありませんが、PCMCIA HOWTO によると System V 流のようなので、この手が使えるのではないでしょ うか) 以下の方法はベストではないのかもしれませんが、少なくとも最悪の方 法ではないと信じています。^^; (Debian ではディレクトリ配置が多少異なる場合がありますが、方法は同じで す。y.s.) ┌──────────────────────────────────┐ │ Caution │ ├──────────────────────────────────┤ │注意!!:この方法に関して起きるいかなる損害も訳者は一切その責任はとる│ │ことはできません。*自分の責任* において行ってくださいね。 │ └──────────────────────────────────┘ ◎手順 1. /etc/rc.d に移動し、root 権限で cp -pdr rc3.d rc3.d.backup と入力。 オリジナルのバックアップをとっておく。(以後の操作も root 権限で。) なお、オプションは正確にいれてください! 2. /etc/rc.d/rc3.d に移動し、止めたいものを入れるディレクトリを作成する (ここでは mkdir stop とします)。 3. /etc/rc.d/rc3.d にあるのが個々のデーモンを起動するために使用されるフ ァイルなので、不要と思われる名前のものを 2.で作成したディレクトリに 移動する。 (例: mv S60n* stop) 注意 1: 決して消さないように。あくまでも移動です。 注意 2: 十分な知識なしに一度にいくつも移動すると、問題が起こる かもしれません。1回で移動するファイルは最小限にして一歩一歩進み ましょう。 4. リブートする。 これら一連の作業を行う前に、起動直後のメモリの状態を cat /proc/meminfo 等で調べておいて、作業後の値と比較すると幸せになれるかもしれません。 この方式の利点は、 1. 現在の状態から 1つ 1つ変更していけるので、問題が起こった時の原因の判 別がしやすい。 2. もし立ち上がらなくなっても、ブートフロッピーからブートして、最後に移 動したファイルを元のディレクトリ (/etc/rc.d/rc3.d) にコピーするだけ で 1つ前の状態に戻せる。 3. にっちもさっちもいかなくなった時は、ブートフロッピーからブートし、 1.でとったバックアップで rc3.d を置き換えてやれば、 (cp -pdrf rc3.d.backup rc3.d) 一番最初に戻れる。 4. mkdir と cp と mv しか使わない。(リカバリーも楽) というわけで、私のような超初心者にはいいのではないかと思います。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.2. 訳者および謝辞 翻訳:中野正剛(1998/03/28) 日本語版の謝辞: この文書の作成に当たっては、有益なご助言をいただいた川 岸良治さん、中野武雄さんほか、JF の皆さんに感謝いたします。 更新:千旦裕司(2001/03/17) (Red Hat/Caldera/Debian でのデーモンの起動の止め方は、中野正剛さんが作 成しています。)