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

7. トラブルシューティング,または挫折の苦しみ

ブートディスクを作ろうとする場合,最初の何回かが失敗するのはよくあるこ とです.ルートディスクを作成する際によく用いられる方針は,手持ちのシス テムから部品を取り出してフロッピーベースのシステムに詰め込み,コンソー ルにメッセージが出るまで試行錯誤を繰り返すことです.メッセージさえ出れ ば半分勝ったも同然です.後はシステムが文句を言わなくなるまで,一つ一つ 問題を解決していけばよいのです.システムが何のメッセージも出さずにハン グする場合は,その理由を調べるのは大変です.何とか表示が出る段階に達す るには,いくつかの部品がちゃんと揃っていて,正しく設定されている必要が あるのです.システムが何も言ってくれないような問題を見つけるためのお勧 めの手順を以下に示します:

以上のような一般的な点が確認できたら,次に示すようなファイルをチェック してみましょう:

  1. init が /sbin/init または /bin/init として存在しており,実行可能になっていることを 確認する.
  2. ldd init を実行して, init の使うライブラリを確認してく ださい.通常は libc.so だけでしょうが,それでもチェックしてください. 必要なライブラリやローダがディスクに入っていることも確認します. 使っているライブラリに合ったローダがあることを確認します. a.out 形式ならば ld.so ですし,ELF 形式ならば ld-linux.so で す.
  3. ブートディスクの /etc/inittab を見て, getty (あるいは agetty, mgetty, getty_ps 等の getty と同等のプログラム) の呼び出し方を調べてください. これらの記述をハードディスクの inittab と念入りに比べてください.ちゃんと意味を持った記述になっているか,お使 いのプログラムのマニュアルページも参照してください.inittab はお そらく最も難しい部分です.なぜなら文法や内容が,使っている init プログラムやシステムの作りによって変わってしまうからです.inittab を正しく書くための手段はただ一つ,initinittab のマニュア ルページを読んで,現在のシステムがブート時にやっていることを解き明かす ことです. /etc/inittab を見て,そこにシステムの初期化を 行っているエントリがあることを確認してください.このファイルにはシステ ム初期化のために実行するスクリプトが書かれているはずです.ここで指定さ れているファイルは存在していなければなりません.
  4. init に行ったのと同じように, getty に対して も ldd を実行し,必要なライブラリを表示させます.そしてそのライブ ラリのファイルとローダがルートファイルシステムに入っていることを確認し ます.
  5. rc スクリプトを全て実行できるシェルプログラム(例: bashash)があることを確認します.
  6. レスキューディスクに /etc/ld.so.chace がすでに存在して いるようでしたら,作り直してください.

init が起動しても次のようなメッセージが出力されることがあります:

        Id xxx respawning too fast: disabled for 5 minutes  

これは init が出すもので,お使いの getty または login が起動してすぐに異常終了したことを示しています. gettylogin の実行ファイル,そしてそれらが依存しているラ イブラリをチェックしてください. また,/etc/inittab から の呼び出し方が正しいかどうかも調べてください. getty がおかしなメッ セージを出力する場合は,おそらく /etc/inittab からの呼び 出し方が間違っています.getty のオプションはプログラムによって違 います.また agetty ではバージョンによって互換性がない場合さえあ るそうです.

ログインプロンプトが現われ,正しいログイン名を入力したのに,即座に次の ログインプロンプトをシステムが出す場合には,PAM か NSS に問題があると 思われます. PAM と NSS の節をご覧ください.シャ ドウパスワードを使っているのに /etc/shadow をブートディス クにコピーしていない場合にも,この問題が出ることがあります.

何かの実行ファイル(例えば df)をレスキューディスクから起動したとき に, df: not found のようなメッセージが出る場合には,次の 2 点を 確認してください: (1) バイナリがあるディレクトリが PATH に含まれているか. (2) プログラムが必要とするライブラリ(とローダ)があるか.


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