Kbootからシステムが起動しなくなった時
出典: PS3 Linux Information Site / Cell/B.E.のパワーを体験しよう
kboot.confの編集を間違えるなどすると、kbootからシステムを起動できなくなります。 この場合でも、カーネルを消去していなければ、kexecを直接使うことでシステムを起動することができます。
このページでは、kexecを直接使ってシステムを起動させる方法について説明します。
起動方法
"kboot:"プロンプトが出ている状態になったら、shと入力して、シェルを立ち上げましょう。
まずは、パーティションがマウントされているか調べます。
# mount
と入力すればマウントの状態を調べることができます。/mnt/rootに期待したパーティションがマウントされているかどうか調べましょう。
マウントされていない場合は、
# mount -o ro /dev/ps3da1 /mnt/root
これでエラーが出る場合は、
# mount -o ro /dev/sda1 /mnt/root
と入力してください。
次に、起動に使われるカーネルのファイル名と、必要なら(多分必要です)initrdのファイル名を調べます。
# ls /mnt/root
もしくは
# ls /mnt/root/boot
と入力すると、
System.map System.map-vmlinux vmlinux-2.6.16 System.map-2.6.16 config-2.6.24 vmlinux-2.6.23 System.map-2.6.23 grub vmlinux-2.6.23-2
このような感じのファイル名が並んでいるはずです。この中から、動きそうなバージョンのvmlinux, initrdを選び、ファイル名を覚えておきます。
次に選んだファイルをロードします。カーネルが2.6.16以外の場合は、
# kexec -l /mnt/root/boot/vmlinux-x.x.x --initrd=/mnt/root/boot/initrd-x.x.x --append=root=/dev/ps3da1
カーネルのバージョンが2.6.16の場合は、
# kexec -l /mnt/root/boot/vmlinux-x.x.x --initrd=/mnt/root/boot/initrd-x.x.x --append=root=/dev/sda1
と入力すればロードできます。(vmlinux-x.x.x,initrd-x.x.xは上で選んだファイル名に置き換えてください)
最後に、
# kexec -e
と入力して新しいカーネルでシステムを再起動します。なお、このコマンドを実行すると、その場でシステムがシャットダウンされますので、 書き込み可能なパーティションをマウントしている場合は、アンマウントしたあとにこのコマンドを実行してください。
kexecについて
kexec は実行中の Linux カーネルを別のカーネルに置き換えるというLinuxのコマンドです。
kbootは、このkexecを使って、HDD上にインストールされたLinuxシステムを起動しています。
また、kexecはkboot以外でも、クラッシュしたシステムを解析する場面等で利用されています。 クラッシュしたシステムの解析についての詳しい情報は、Linuxカーネルのソースに付属のドキュメント、"Documentation/kdump/kdump.txt"を参照してください。
パーティションのブートフラグについて
古いkbootでFC5をインストールすると、パーティションにboot flagが付かず、kbootを新しくした際に、kbootから起動できなくなることがあるようです。
何回kboot.confを見直してもkbootから起動できない場合は、fdisk等を使ってパーティションのboot flagを確認してみてください。
