前のページ 次のページ 目次

7. いくつかの落とし穴

7.1 make clean

通常のアップグレードの後,新しく構築したカーネルが奇妙な動作をするときは,新 しいカーネルをコンパイルをする前にmake cleanし忘れた可能性がありま す。症状はいろいろで,システムが完全にクラッシュしてしまったり,I/Oが変だっ たり,あるいは速度が遅かったりするかもしれません。make depも忘れず にしてください。

7.2 巨大あるいは遅いカーネル

カーネルが多量のメモリを使いこんだり,あまりに巨大だったり,あるいはせっかく 新しい786DX6/440を投入してやったというのにコンパイルがいつまでたっても終わら ないという場合は,いらないものまでカーネルに組みこんでしまっているかもしれま せん(デバイスやファイルシステムなどです)。いらないものは組みこまない,メモ リを浪費することになるからです。カーネルが巨大化して,もっとも目立つ症状は, 頻繁にメモリとディスクの間でスワップが起こるというものです。ディスクがあんま りうるさい場合で,かつハードディスクに停止する際にジェット機の着陸時のような 音のする古い富士通のEaglesを使用していない場合は,カーネルの設定を調べてみま しょう。

カーネルがどれくらいメモリを消費してるかは,/proc/meminfoあるいは ‘free'コマンドの``total mem''からマシンに搭載しているメ モリ量を差し引くことでわかります。‘dmesg'を実行する(あるいはカー ネルのログファイルを見る)ことでもわかります。このような行があるはずです:

Memory: 15124k/16384k available (552k kernel code, 384k reserved, 324k data)

私の386(若干ジャンクを組み合わせたようなものですが)ではこう表示されます:

Memory: 7000k/8192k available (496k kernel code, 384k reserved, 312k data)

7.3 カーネルをコンパイルできない

コンパイルできない場合,パッチ当てに失敗していたり,カーネルソースがどこか壊 れているのかもしれません。gccのバージョンが違っていたり,gccそのものが壊れて いるのかもしれません(例えばインクルードファイルがおかしいなど)。Linusが READMEで説明しているシンボリックリンクが,正しく設定されているか確 認して下さい。通常,標準のカーネルをコンパイルできない場合,特定のツールを再 インストールする必要があるかもしれません。

あういは,たぶんあなたは1.2.xのカーネルをELFのコンパイラ(gcc 2.6.3および それ以降)でコンパイルしようとしているのかもしれません。コンパイルの最中に so-and-so undefinedというメッセージが大量に出て来たら,これがきっ と原因なんでしょう。ほとんどの場合対処法は極めて簡単です。 arch/i386/Makefileの先頭に以下の行を追加してください:

AS=/usr/i486-linuxaout/bin/as
LD=/usr/i486-linuxaout/bin/ld -m i386linux
CC=gcc -b i486-linuxaout -D__KERNEL__ -I$(TOPDIR)/include
それからもう一度make depmake zImageを実行してください。

極めて,極めてまれなことですが,ハードウェアの問題でgccがクラッシュすること があります。エラーメッセージは``xxx exited with signal 15''というような感じ になり,一般に大変ミステリアスに見えます。このことについては言及しませんが, 一度わたしも遭遇したことがあります - 原因は不良のキャッシュメモリで,コンパ イラがランダムに酔っ払い状態になることがありました。問題に遭遇したら,まず gccを再インストールしてみてください。外部キャッシュをオフにしたり,RAM容量 を減らしてみたらカーネルコンパイルがうまく行く場合は,この辺を疑ってみるべ きでしょう。

7.4 新しいバージョンのカーネルでブートしていないようだ

LILOを実行していなかったり,LILOの設定が正しくありません。以前私が遭遇したの は設定ファイルの問題でした。`boot = /dev/hda'ではなく `boot = /dev/hda1'と書いていました(これは本当に紛らわしいですが, 一旦動作する設定ファイルを作ったら後は変更する必要はありません)。

7.5 LILOを実行し忘れた,あるいはまったくブートできない

ええっ!ここでの最善の策はフロッピーディスクから起動し,別のブート可能なフロ ッピーを作ることです(`make zdisk'などとします)。どこにルート (/)のファイルシステムがあるか,またそのファイルシステムの種類 (ext2やminixなど)を知っている必要があります。以下の例では /usr/src/linuxというソースツリーが,どのファイルシステムに存在す るか,その種類,また通常はどこのマウントされているかも知っていなければなり ません。

以下の例では,//dev/hda1にあり,また /usr/src/linuxが存在するファイルシステムは/dev/hda3で 通常は/usrにマウントされています。どちらもext2ファイルシステム です。/usr/src/linux/arch/i386/bootに存在する,動作するカーネル イメージはzImageと呼ばれます。

もしちゃんと動作するzImageが存在するなら,それを新しいフロッピー で使用できる,というのがこの復旧法の考え方です。これよりうまくいくかどう かは定かではありませんが(これはどのようにしてシステムを破壊したかにより ます),別の方法については例の後に説明します。

まず,boot/rootディスクの組み合せか復旧ディスクから起動し,動作するカーネル を持つファイルシステムをマウントします:

      mkdir /mnt
      mount -t ext2 /dev/hda3 /mnt
H2>


カ仝ところから入手できます。

6.2 util-linux

Rik Faith (faith@cs.unc.edu)は,奇妙な一致ですが,util-linuxという linux用のユーティリティをたくさん集めたものをまとめていました。現在は Nicolai Langfeldtによって維持されています(util-linux@math.uio.no)。 sunsite.unc.edu[およびそのミラーサイト]の/pub/Linux/system/Miscか ら匿名ftpで入手でき,settermrdevctrlaltdelなど カーネルに関連したプログラムが含まれています。Rikはこう言っています「なに も考えないでインストールしてはいけません;パッケージのすべてをインストー ルする必要はありません。そんなことすると重大な問題を引き起こすかもしれませ ん。」

6.3 hdparm

多くのパッケージにおいて,このhdparmはかつてはカーネルパッチとサポートプログ ラムでした。パッチは公式のカーネルに取りこまれ,ハードディスクを最適化したり ハードディスクと戯れるためのプログラムは別個に配布されるようになりました。

6.4 gpm

gpmはgeneral purpose mouseを略したものです。このプログラムは仮想コンソール 間でのカットアンドペーストを可能にしたり,非常に多くの種類のマウスに関して さまざまな機能を提供します。


前のページ 次のページ 目次 usr/doc/LANG/ja/HOWTO/Kernel-HOWTO.euc-7.html100644 0 0 34706 6207351551 16507 0ustar rootroot Linux Kernel HOWTO: いくつかの落とし穴 前のページ 次のページ 目次

7. いくつかの落とし穴

7.1 make clean

通常のアップグレードの後,新しく構築したカーネルが奇妙な動作をするときは,新 しいカーネルをコンパイルをする前にmake cleanし忘れた可能性がありま す。症状はいろいろで,システムが完全にクラッシュしてしまったり,I/Oが変だっ たり,あるいは速度が遅かったりするかもしれません。make depも忘れず にしてください。

7.2 巨大あるいは遅いカーネル

カーネルが多量のメモリを使いこんだり,あまりに巨大だったり,あるいはせっかく 新しい786DX6/440を投入してやったというのにコンパイルがいつまでたっても終わら ないという場合は,いらないものまでカーネルに組みこんでしまっているかもしれま せん(デバイスやファイルシステムなどです)。いらないものは組みこまない,メモ リを浪費することになるからです。カーネルが巨大化して,もっとも目立つ症状は, 頻繁にメモリとディスクの間でスワップが起こるというものです。ディスクがあんま りうるさい場合で,かつハードディスクに停止する際にジェット機の着陸時のような 音のする古い富士通のEaglesを使用していない場合は,カーネルの設定を調べてみま しょう。

カーネルがどれくらいメモリを消費してるかは,/proc/meminfoあるいは ‘free'コマンドの``total mem''からマシンに搭載しているメ モリ量を差し引くことでわかります。‘dmesg'を実行する(あるいはカー ネルのログファイルを見る)ことでもわかります。このような行があるはずです:

Memory: 15124k/16384k available (552k kernel code, 384k reserved, 324k data)

私の386(若干ジャンクを組み合わせたようなものですが)ではこう表示されます:

Memory: 7000k/8192k available (496k kernel code, 384k reserved, 312k data)

7.3 カーネルをコンパイルできない

コンパイルできない場合,パッチ当てに失敗していたり,カーネルソースがどこか壊 れているのかもしれません。gccのバージョンが違っていたり,gccそのものが壊れて いるのかもしれません(例えばインクルードファイルがおかしいなど)。Linusが READMEで説明しているシンボリックリンクが,正しく設定されているか確 認して下さい。通常,標準のカーネルをコンパイルできない場合,特定のツールを再 インストールする必要があるかもしれません。

あういは,たぶんあなたは1.2.xのカーネルをELFのコンパイラ(gcc 2.6.3および それ以降)でコンパイルしようとしているのかもしれません。コンパイルの最中に so-and-so undefinedというメッセージが大量に出て来たら,これがきっ と原因なんでしょう。ほとんどの場合対処法は極めて簡単です。 arch/i386/Makefileの先頭に以下の行を追加してください:

AS=/usr/i486-linuxaout/bin/as
LD=/usr/i486-linuxaout/bin/ld -m i386linux
CC=gcc -b i486-linuxaout -D__KERNEL__ -I$(TOPDIR)/include
それからもう一度make depmake zImageを実行してください。

極めて,極めてまれなことですが,ハードウェアの問題でgccがクラッシュすること があります。エラーメッセージは``xxx exited with signal 15''というような感じ になり,一般に大変ミステリアスに見えます。このことについては言及しませんが, 一度わたしも遭遇したことがあります - 原因は不良のキャッシュメモリで,コンパ イラがランダムに酔っ払い状態になることがありました。問題に遭遇したら,まず gccを再インストールしてみてください。外部キャッシュをオフにしたり,RAM容量 を減らしてみたらカーネルコンパイルがうまく行く場合は,この辺を疑ってみるべ きでしょう。

7.4 新しいバージョンのカーネルでブートしていないようだ

LILOを実行していなかったり,LILOの設定が正しくありません。以前私が遭遇したの は設定ファイルの問題でした。`boot = /dev/hda'ではなく `boot = /dev/hda1'と書いていました(これは本当に紛らわしいですが, 一旦動作する設定ファイルを作ったら後は変更する必要はありません)。

7.5 LILOを実行し忘れた,あるいはまったくブートできない

ええっ!ここでの最善の策はフロッピーディスクから起動し,別のブート可能なフロ ッピーを作ることです(`make zdisk'などとします)。どこにルート (/)のファイルシステムがあるか,またそのファイルシステムの種類 (ext2やminixなど)を知っている必要があります。以下の例では /usr/src/linuxというソースツリーが,どのファイルシステムに存在す るか,その種類,また通常はどこのマウントされているかも知っていなければなり ません。

以下の例では,//dev/hda1にあり,また /usr/src/linuxが存在するファイルシステムは/dev/hda3で 通常は/usrにマウントされています。どちらもext2ファイルシステム です。/usr/src/linux/arch/i386/bootに存在する,動作するカーネル イメージはzImageと呼ばれます。

もしちゃんと動作するzImageが存在するなら,それを新しいフロッピー で使用できる,というのがこの復旧法の考え方です。これよりうまくいくかどう かは定かではありませんが(これはどのようにしてシステムを破壊したかにより ます),別の方法については例の後に説明します。

まず,boot/rootディスクの組み合せか復旧ディスクから起動し,動作するカーネル を持つファイルシステムをマウントします:

      mkdir /mnt
      mount -t ext2 /dev/hda3 /mnt
H2>


カ仝ところから入手できます。

6.2 util-linux

Rik Faith (faith@cs.unc.edu)は,奇妙な一致ですが,util-linuxという linux用のユーティリティをたくさん集めたものをまとめていました。現在は Nicolai Langfeldtによって維持されています(util-linux@math.uio.no)。 sunsite.unc.edu[およびそのミラーサイト]の/pub/Linux/system/Miscか ら匿名ftpで入手でき,settermrdevctrlaltdelなど カーネルに関連したプ