## Small Memory mini-HOWTO

Todd
Burgess

    tburgess@uoguelph.ca

JF Project
日本語訳

    JF@linux.or.jp

メモリ容量が少ないシステム上で Linux を動かす方法

2000-12-12
0.1
2000-12-01
tb

## イントロダクション

メモリを買って追加するという手もありますが、それ以外にも Linux が消費する メモリの量を節約する方法はたくさんあります。

メモリ消費の観点からすると、インストールした直後のディストリビューション では、たいてい非常に無駄の多いメモリの使い方をしています。わたしたちの 大部分が使いもしないようなサービスや機能が動いているのです。そうした過剰な サービスの多くを削除することで、数 MB の実メモリを解放できます。

著者自身のシステムは、486DX2 66MHz の CPU と 12 MB の物理メモリ、および 12 MB のスワップスペースという環境です。これでここ 3 年間なんの不満もなく Linux を 動かしています。たぶん、あと数年はこのまま Linux を動かし続けるでしょう。 :)

## Linux カーネル

ディストリビューション付属のカーネルは、どれも肥大しすぎであり、誰も使わない ような機能まで付加されています。これまでカーネルを再コンパイルしたことがない としても、この際、是非やってみることをおすすめします。カーネルの再コンパイル の方法はこの文書の範疇を越えますが、それについて丁寧に解説された優れた Linux 本やガイドはたくさんあります。

カーネルを再コンパイルする場合は、必要な機能以外は一切組み込まないという方針 を忘れないでください。たとえば、読者のうち、カーネルの PLIP サポートを必要と するひとがどれだけいるでしょうか？ その機能を組み込んだとして、実際に使う ひとがどれだけいますか？ カーネルを小さくすれば、ロード時間が短くなり、 メモリの消費は減少し、CPU サイクルも短縮されます。

もうひとつ、モジュールの問題があります。モジュールは扱いがやっかいだと 思っているので、個人的には使っていません。しかし、もし使ってみて特に 問題だと感じないなら、「カーネルの肥大化」を抑えるには効果的です。

## 仮想コンソール

仮想コンソールの数を減らすと、使用メモリを大幅に節約できます。大部分の 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. システムを再起動すると、設定が有効になります。

## デーモンプロセス

多くの 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.*

### inetd

inetd は、`telnet` や `ftp` コマンドを使ったり、あなたのマシンに `talk` リクエストを送ったりできるようにするデーモンです。自分のマシンをサーバとして 使ったり、リモートでアクセスしたりする必要がないなら、inetd は削除してかまいません。

### lpd

lpd は、`lpr` コマンドを使って、 ファイルをプリンタで印刷する際に使用します。お手元の Linux で印刷をしない場合 は、lpd を削除してかまいません。ただ、もしお使いの プリンターが HP Deskjet ™ プリンタであり、それで印刷をするのであれば、 dj-printcap というパッケージをおすすめします。このパッケージは以下の場所で 入手できます。

ftp://sunsite.unc.edu/pub/Linux/system/Printing/dj-printcap.tar.gz

### nfsd と mountd

これらふたつのデーモンは、NFS サーバを稼働させる際に使用します。お使いの Linux システムを NFS サーバとして利用しないのであれば、このふたつのデーモンは 削除したほうが安全です。

### portmap

portmap デーモンは、RPC サービスを処理する際に 使用します。NFS サーバやその多の RPC プログラムを稼働させないなら、 portmap は削除してかまいません。

### sendmail

sendmail もかなり多くのメモリを消費するデーモン です。お手元の Linux で送信メールを中継したり、送信されたメールを手元の Linux で直接受信したりしないのであれば、sendmail は 削除してかまわないでしょう。手元の Linux からメールを送信する場合は、たいてい (プロバイダ等が提供する)別のメールサーバを使ってメール送信が可能なように、 メールクライアントを設定できるようになっています。

### others

システム上で起動されるデーモンのなかには、他にも不必要なものがあると思います。 不要だと思ったら削除してしまいましょう。削除してはいけないデーモンは、 syslogd と klogd の ふたつです。

## あとがき

これまで説明したことは、わたしが自分の Linux マシンのメモリ使用量をできる 限り節約するためにとった方法です。Linux マシンのメモリ使用量を抑えるための 方法について、ちょっとした参考になればさいわいです。Good luck and happy hacking!

## 日本語訳について

### Red Hat/Caldera/Debian でのデーモンの起動の止め方(自己流)

訳者は RedHat 4.2 を使っているため、この文書にあるデーモンの起動を止める ための手順をそのまま適用することはできませんでした。ここで、私のとった手 順を紹介しておきます。(Debian は触ったことはありませんが、PCMCIA HOWTO によると System V 流のようなので、この手が使えるのではないでしょうか) 以下の方法はベストではないのかもしれませんが、少なくとも最悪の方法では ないと信じています。^^;

(Debian ではディレクトリ配置が多少異なる場合がありますが、方法は 同じです。y.s.)

注意!!： この方法に関して起きるいかなる損害も訳者は一切その責任は とることはできません。*自分の責任* において行ってくださいね。

◎手順

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` しか使わない。(リカバリーも楽)

というわけで、私のような超初心者にはいいのではないかと思います。

### 訳者および謝辞

    翻訳：中野正剛(1998/03/28)

日本語版の謝辞: この文書の作成に当たっては、有益なご助言をいただいた 川岸 良治さん、中野 武雄 さん ほか、JF の皆さんに感謝いたします。

    更新：千旦裕司(2001/03/17)

(Red Hat/Caldera/Debian でのデーモンの 起動の止め方は、中野正剛さんが作成しています。)