Carpe Diem

  Top > スポンサー広告> Linuxカーネル > Linuxカーネルコンパイル その2  

スポンサーサイト

-- - --/-- [--] - --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Linuxカーネルコンパイル その2

2012 - 03/16 [Fri] - 20:45

前回の続きです。今回はカーネルパニックに陥った方の対処です。
カーネルパニックになったとき表示された

kernel panic: VFS: Unable to mount root fs on......

ですが、これはinitrdがないために起きていました。
まずはinitrdについて説明します。

◆なぜinitrd(Initial RamDisk)が必要か
カーネルは開発当時は小さかったため、新しいドライバや機能はどんどん付け加えられていきました。しかしそれが今になっては膨大な量となったため、ドライバ等はモジュールとしてカーネルとは別で管理されるようになりました。

しかしここで問題が起きます。
起動時にカーネルが読み込まれます。次にハードディスクをマウントするわけですが、ドライバがモジュール化されているためロードされずHDDを認識できません。

そこでinitrdの出番です。
initrdはマウントするための最低限のモジュールを包括していて、grubで指定すればカーネルと同時にinitrdも読み込み展開されるためきちんとHDDを認識、マウントしてくれるようになります。

11.04では自動でinitrdも作成してくれたので問題なく起動できましたが、なぜか10.04の時は作成してくれないために起動できませんでした。なので自分で作る&grubで指定する方法を書きます。


◆initrdの作成&grubの設定
$ cd /boot/
$ sudo mkinitramfs -o
initrd.img-xxx xxx

ファイル名 バージョン

の順に指定します。xxxの部分は.debファイルで出力したファイルの通りです。覚えていない場合は/lib/modules/ でモジュール群を読み込むので、そこに書いてあるフォルダ名を見ればいいです。

次にgrubの指定です。

$ cd /boot/grub/
$ sudo emacs -nw grub.cfg


で、下の方にブート時のメニューが出てきます。これはブート時に「e」を押したら出てくる設定です。
この中で「xxx」について書かれているもの(多分メニューの一番上に書かれているはず)だけがinitrdの記載が無いことが分かります。

なのでそこに他のカーネルの設定にならって
initrd /boot/initrd.img-xxx

と書いて保存します。ただ書き込み不可になってる可能性があるので、その場合はあらかじめ
$ sudo chmod 644 grub.cfg

としておけばいいです。編集後は元のパーミッションに戻しておきましょう。

この状態で再起動し、カーネルを選択するとちゃんと起動できるようになります。


◆補足:カーネルパニックから自動で再起動
カーネルパニックに陥るとマジックSysReqキーも効かないので基本的にリセットボタンくらいしかありません。
ですがあらかじめ設定しておくと自動で再起動してくれます。

$ sudo emacs -nw /etc/sysctl.conf
最終行に追記します。例として10秒後に再起動することにします。

kernel.panic = 10

保存後反映させます
$ sudo sysctl -p

確認したい時は
$ cat /proc/sys/kernel/panic

とすればいいです。デフォルトでは0で、この時は再起動してくれません。


ソース:
Linuxのinitrdファイルって何?
Ubuntu 10.04 でカーネル再構築
カーネルパニック時の再起動

コメントの投稿





管理者にだけ表示を許可する

 | ホーム | 

プロフィール

Cicatrice

Author:Cicatrice
備忘録

検索フォーム

カテゴリ

最新記事

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。