ブートディスクを作ろうとする場合,最初の何回かが失敗するのはよくあるこ とです.ルートディスクを作成する際によく用いられる方針は,手持ちのシス テムから部品を取り出してフロッピーベースのシステムに詰め込み,コンソー ルにメッセージが出るまで試行錯誤を繰り返すことです.メッセージさえ出れ ば半分勝ったも同然です.後はシステムが文句を言わなくなるまで,一つ一つ 問題を解決していけばよいのです.システムが何のメッセージも出さずにハン グする場合は,その理由を調べるのは大変です.何とか表示が出る段階に達す るには,いくつかの部品がちゃんと揃っていて,正しく設定されている必要が あるのです.システムが何も言ってくれないような問題を見つけるためのお勧 めの手順を以下に示します:
Kernel panic: VFS: Unable to mount root fs on XX:YYこれはありがちな問題ですし,原因もごく限られています.まずデバイス XX:YY をデバイスコードのリストで確認してください.これが正しいルー トデバイスですか? 正しくなければ,
rdev -R の実行を忘れたか,間違っ
たイメージに対して rdev -R を実行したと思われます.デバイスコード
が正しければ,次にデバイスドライバがカーネルに組み込まれているかどうか
をしっかり調べてください.フロッピーディスク,RAM ディスク,ext2 ファ
イルシステムのサポートがカーネルに組み込まれていることを確かめてくださ
い.
/lib ディレクト
リのリンクがハードディスクと同じになっていることを確認します.
/dev ディレクトリにおけるシンボリック
リンクがルートディスクのファイルシステムにも存在していることを確認しま
す.またリンク先がちゃんとあることも確認します.特に
/dev/console を忘れがちなので気を付けてください.
/dev/tty1, /dev/null, /dev/zero, /dev/mem,
/dev/ram, /dev/kmem があることを確認します.
以上のような一般的な点が確認できたら,次に示すようなファイルをチェック してみましょう:
init が /sbin/init または
/bin/init として存在しており,実行可能になっていることを
確認する.
ldd init を実行して, init の使うライブラリを確認してく
ださい.通常は libc.so だけでしょうが,それでもチェックしてください.
必要なライブラリやローダがディスクに入っていることも確認します.
使っているライブラリに合ったローダがあることを確認します.
a.out 形式ならば ld.so ですし,ELF 形式ならば ld-linux.so で
す.
getty
(あるいは agetty, mgetty, getty_ps 等の
getty と同等のプログラム) の呼び出し方を調べてください.
これらの記述をハードディスクの inittab
と念入りに比べてください.ちゃんと意味を持った記述になっているか,お使
いのプログラムのマニュアルページも参照してください.inittab はお
そらく最も難しい部分です.なぜなら文法や内容が,使っている init
プログラムやシステムの作りによって変わってしまうからです.inittab
を正しく書くための手段はただ一つ,init と inittab のマニュア
ルページを読んで,現在のシステムがブート時にやっていることを解き明かす
ことです. /etc/inittab を見て,そこにシステムの初期化を
行っているエントリがあることを確認してください.このファイルにはシステ
ム初期化のために実行するスクリプトが書かれているはずです.ここで指定さ
れているファイルは存在していなければなりません.
init に行ったのと同じように, getty に対して
も ldd を実行し,必要なライブラリを表示させます.そしてそのライブ
ラリのファイルとローダがルートファイルシステムに入っていることを確認し
ます.
bash や
ash)があることを確認します.
init が起動しても次のようなメッセージが出力されることがあります:
Id xxx respawning too fast: disabled for 5 minutes
これは init が出すもので,お使いの getty または login
が起動してすぐに異常終了したことを示しています.
getty や login の実行ファイル,そしてそれらが依存しているラ
イブラリをチェックしてください. また,/etc/inittab から
の呼び出し方が正しいかどうかも調べてください. getty がおかしなメッ
セージを出力する場合は,おそらく /etc/inittab からの呼び
出し方が間違っています.getty のオプションはプログラムによって違
います.また agetty ではバージョンによって互換性がない場合さえあ
るそうです.
ログインプロンプトが現われ,正しいログイン名を入力したのに,即座に次の ログインプロンプトをシステムが出す場合には,PAM か NSS に問題があると 思われます. PAM と NSS の節をご覧ください.シャ ドウパスワードを使っているのに /etc/shadow をブートディス クにコピーしていない場合にも,この問題が出ることがあります.
何かの実行ファイル(例えば df)をレスキューディスクから起動したとき
に, df: not found のようなメッセージが出る場合には,次の 2 点を
確認してください: (1) バイナリがあるディレクトリが PATH に含まれているか.
(2) プログラムが必要とするライブラリ(とローダ)があるか.