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