※setup時に発生した場合の対処法です。LILOを使用する場合は、1回正しくセットアップできれば、次からはほぼ大丈夫なので・・
(GRUBを使用する時は、問題を切り分けにくい所にはまると、毎回悩んだりしますが。)
一部の現象は、GRUBでも発生します。(原因が同じなので)
Slackwareのセットアップ時を想定しています。
他のディストリビューションを使用する場合は、パス等を適宜読み替えて下さい。
パッケージのインストールが終了し、セットアップ中に表示される、
LILOの設定画面 (liloconfig)が、エラーを表示した後とします。
セットアップ用DVDが起動しない場合は、別の対応が必要です。
(設定を変えてカーネルをコンパイルし、DVDを作り直すなど。)
DVDに入っているセットアップ用のisolinux/initrd.img は、
通常のmkinitrdで作るinitrd.gzと構成が異なるので注意しましょう。
※ext4、CD/DVDなどを読むために必要な項目は、モジュールにせず、カーネルに組み込みましょう。
モジュールにすると、セットアップ時にアクセスできなくなる場合があります。
initrd.imgに組み込んでおけばアクセスできるはずですが、既存のものを使いまわすと思いますので・・
「VirtIOだからアクセスできない」という話題をたまに見ますが、BIOSなどから見たら、FAT(と、一部環境でHFS+)以外は同条件です。
(ext4などのパーティション上のファイル(/boot)が見えるかどうかと、ほぼ同義です。)
「ext4は読めるけれど、/dev/vdaにアクセスできない」場合は、/dev/vdaが作成されているか、
カーネル自体がサポートしているか(configを取得できる場合)を確認しましょう。
※/proc/config.gzなどを見られるのは、CONFIG_IKCONFIG、CONFIG_IKCONFIG_PROCなどを有効にした場合のみです。
※/bootなどにconfigが置いてある場合も、ビルド時に使用したconfigと異なる場合がありますので、注意しましょう。
[追記]
追記がなぜか上の方にある!という突っ込みは置いておいて・・QEMU環境で、Kernel Panic VFS が発生する場合の対処法 (確定)
lilo.confで、
root=/dev/vda1ではなく、
addappend=" root=/dev/vda1"を指定します。(root=の行は指定しなくても動きます。)
Kernel Panic VFSの原因は、/dev/vda*のメジャー番号が変化するから。
(セットアップ時 (またはDVD起動) :254、セットアップ後(HDDから起動) :253)
HDD起動でも、Tabキーでboot: プロンプトを表示し、
Linux root=/dev/vda1 と打つことで起動できたので、(Linuxは、ラベルなので、適宜読み替えて下さい。)
これに相当する、addappend=" root=/dev/vda1"で、問題が解決します。
[事前準備]
セットアップ画面を終了(EXITメニュー) した後、セットアップ用DVDを再度入れ、再起動しておきます。再起動せず作業をする事も可能だと思いますが、その場合は、セットアップ中に色々マウントされているので、注意して作業しましょう。
/bootおよび、/ (root) は、/dev/vda1にあるものとします。
"parted -l" あるいは "fdisk -l" で表示されるデバイス名が/devv/vdaである事を確認します。
セットアップ用DVDが起動でき、セットアップ可能な時点で大丈夫とは思いますが、念のため。
/dev/sda あるいは /dev/hda となっていた場合は、おそらく、/dev/vda*が作成されていません。
(vdaは、udevなどによる自動作成。)
/dev/vda* が存在するか、/dev/block/25*:*などのリンクが切れていないか、確認しておきましょう。
"25*:*"の部分は、/dev/vda*のメジャー番号:マイナー番号で、254:0などになります。
※メジャー番号は環境によって変わるようです。気になる場合は、デバイスマッパーなどのキーワードで検索しましょう。
例:
ls -l /dev/vda*
brw-rw---- 1 root disk 254 ,0 (時間) /dev/vda
brw-rw---- 1 root disk 254 ,1 (時間) /dev/vda1
(略)
ls -l /dev/block/
lrwxrwxrwx 1 root root (略) 254:0 -> ../vda
lrwxrwxrwx 1 root root (略) 254:1 -> ../vda1
(略)
ls /sys/dev/block/
(略) 254:0@ 254:1@ (略)
[共通]
- mount /dev/vda1 /mnt を実行します。
- 作業中に元の画面も表示したいので、Alt+F2で、別のコンソールを開きます。
- chroot /mnt を実行します。
chroot前の環境にも同様のパスが存在しますので注意しましょう。
[dev/vda* が無い場合]
※chrootする前の /dev/vda* ではなく、/mnt/dev/vda* です。- メジャー番号が分からない場合は、コンソールを切り替えて確認します。
- dev/vda および dev/vda1 を作ります。
コンソールを切り替えて確認
Alt+F1 で、元のコンソール (chroot前の環境)に戻ります。(もしくは、exitで、chroot環境から抜けます。)
ls -l /dev/vda*
(アクセス権、所有者、メジャー番号などを確認します)
表示の例:
ls -l /dev/vda*
brw-rw---- 1 root disk 254 ,0 (時間) /dev/vda
brw-rw---- 1 root disk 254 ,1 (時間) /dev/vda1
(略)
Alt+F2 で、作業用のコンソールに戻ります。
(もしくは、chroot /mntで、chroot環境に戻ります。)
dev/vda および dev/vda1の作成
※誤って、chroot前の/devに作成しないように注意しましょう。例: メジャー番号が254の場合
mknod /dev/vda b 254 0
mknod /dev/vda1 b 254 1
chmod 660 /dev/vda
chmod 660 /dev/vda1
chown root:disk /dev/vda
chown root:disk /dev/vda1
ls -l /dev/vda
正しく作成できた事を確認します。
作るのは、liloの実行に必要なデバイスのみで大丈夫です。(udevなどを有効にしたカーネルの場合。)
デバイスのメジャー番号、マイナー番号は、chrootする前の /dev/vda* と合わせる必要があります。
(あわせないと、liloを実行した時にエラーが発生します。)
エラーの例: (lilo.confがの内容が正しい場合)
(/dev/vda が無い場合)
Fatal: do_disk: stat /dev/vda: No such file or directory
(/dev/vda1 が無い場合)
Fatal: Illegal 'root=' specification: /dev/vda1
[設定 (lilo.conf) に誤りがある場合]
現象:
liloを実行すると、次のようなエラーが表示されます。
Fatal:raid_setup:stat("/dev/sda1")
※デバイス名は環境によって異なります
対処法:
- etc/lilo.cnf の設定を見直します。
- lilo を実行します。 ※dev/vda、dev/vda1 を事前に作っておく必要があります。
etc/lilo.conf
注意:セットアップ用の環境では、liloconfigで作り直すと、 キャッシュされた内容になる場合がありますので、注意しましょう。# lba32 の行が抜ける場合があります。必要に応じて追記します。(気になる場合は、1023シリンダ問題で検索)
lba32
# boot= の行を変更します。(/dev/sdaになっている場合)
# disk= の行を追加します。
boot=/dev/vda
disk=/dev/vda bios=0x80 max-partitions=7
# addappend= の行を追加します。 ←ここが重要
#root=/dev/vda1
addappend=" root=/dev/vda1"
※追記: root=では、/dev/vda1のメジャー番号が変わると起動しません。
(Kernel Panic VFSが発生します。)
bios= の指定(BIOSが認識する1番目のディスク(起動ディスク)を、vdaに割り当てる)が誤っている場合は、起動時に「LI」などで表示が止まるかと思います。
max-partitions= で指定する値は、7, 15, 31, 63のいずれかです。パーティション数に応じて設定しましょう。多くの場合、7 または15を指定します。
詳細は、lilo.confのマニュアルの、disk=のあたりを参照して下さい。
参考:
Boot from virtio block device - KVM "Booting with lilo"
man lilo.conf (英語) (詳しい。disk=のあたりを参照。)
man lilo.conf (日本語) (ざっくり)
JF - LILO "the Linux Loader" の動作について 「1.3 BIOS によるディスクデータのロード」 ("bios="で指定する値について書かれています)
lilo を実行
Warning: '/proc/partitions' does not exist, disk scan bypassedなどのワーニングが表示される場合があります。
これは、 /proc/partitionsが存在しないので、/dev/vdaなどを確認できないという表示です。
Added Linux *
(ラベルが"Linux"の場合)
などが表示されれば、起動可能なはずです。
追記:・・と思いましたが、おそらくudevなどが悪さ(デバイスのメジャー番号の変更)をして、
立ち上がらないので、安定した立ち上げ方法を検討中です。→ 対応策が確定しました。
(DVDのboot:プロンプトでオプション指定(root=/dev/vda1) すれば一応立ち上がりますが・・)
さらに追記:
lilo.confの内容を変更したら、立ち上がるようになりました。
詳細は上の方を参照して下さい。
補足:
chroot前の/procを、/mnt/procにマウント(mount -o bind)すれば、
'/proc/partitions' does not existのワーニングは消えますが、
/devと/mnt/devの内容が一致していない (vda2から7を作成していない) ので、
Warning: '/proc/partitions' does not match '/dev' directory structure/
Warning: '/dev' directory structure is incomplete; device (254, 2) is missing.
などのワーニングが発生します。
また、 メジャー番号 (254) が実験的だという
Warning: /proc/partitions references Experimental major device 254.
などのワーニングも発生します。
参考:
LINUX ALLOCATED DEVICES (2.6+ version) (major#: 240-254 block LOCAL/EXPERIMENTAL USE)
0 件のコメント:
コメントを投稿