カーネルパニック - 非同期:VFS:未知のブロック(0,0)にルートファイルシステムをマウントできません。

カーネルパニック - 非同期:VFS:未知のブロック(0,0)にルートファイルシステムをマウントできません。

次のコマンドを使用してイメージファイルを作成しました。

dd if=/dev/zero of=linux.img bs=16M count=1024
cfdisk linux.img
mkfs.ext4 linux.img

そして、「Linux From Scratch 11.3」の本の指示に従ってLinuxシステムをインストールしました。 chrootを介してシステムにアクセスできますが、次のように実行しようとすると:

qemu-system-x86_64 -hda linux.img -vga std -m 4G

この質問のタイトルに記載されているエラーのため、システムの初期化が中断されました。私のファイルは/boot/grub/grub.cfg次のとおりです。

# Begin /boot/grub/grub.cfg
set default=0
set timeout=5

insmod ext4
#set root=(hd0,2)

menuentry "GNU/Linux, Linux 6.1.11-lfs-11.3" {
        linux   /boot/vmlinuz-6.1.11-lfs-11.3 root=/dev/hda1 ro

私が試したこと:

  1. grub起動画面の後に続くset root=(hd0,2)' and trying the values hd0,0 orhd0,1 hd0,X notfound行のコメントを外します。(the system not even initialize with this, and I got the error

  2. メニュー項目オプションで、linuxで始まる行のルート値を/ dev / loopXXに変更します(同じエラーが発生しました)。

  3. linuxで始まる行のメニュー項目オプションで、ルート値を/ dev / sda1に変更します(この場合、メッセージは同じですがブロックはです(8,1))。

この問題を解決するために何ができるか教えてくれる人はいますか?

ベストアンサー1

このエラーメッセージはhd0,X not foundGRUBで発生し、GRUB構成ファイルにエラーがあり、存在しないか、GRUBを読み取れないパーティションを指していることを示します。

タイトルエラーメッセージKernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)は、GRUBを介してLinuxカーネルを入力しましたが、カーネルがルートファイルシステムに指定されたデバイスを見つけることができないことを意味します。つまり、カーネル(またはそれを使用した場合はinitramfs)に含める必要があるドライバがありません。 。ただし、LFSはそうではありません)またはroot=/dev/...カーネルブートオプションが正しくありません。

より具体的には、unknown-block(0,0)ルートファイルシステムがどのブロックデバイスにあるべきかは、カーネルが知らないことを意味します。unknown-block(8,1)つまり、ユーザーが指定し、/dev/sda1カーネルがパーティションを理解しているが、そのようなパーティションが見つからないことを意味します。この番号は、デバイスノードの主要なデバイス番号とサブデバイス番号を示します。

ls -l /dev/sda1
brw-rw---- 1 root disk 8, 1 May  4 07:56 /dev/sda1
                      ^^^^^

最初のエラーは次のとおりです。

cfdisk linux.img
mkfs.ext4 linux.img

これは、最初にパーティション化されたテーブル(未知の種類の未指定の数のパーティションを含む)を作成し、パーティションテーブルの上書きイメージ全体を単一のext4ファイルシステムに初期化します。

したがって、パーティションはまったくありません。 GRUBの用語では、(hd0,0)どちらもあり(hd0,1)ません(hd0,2)(hd0)また、MBRパーティションテーブルとGRUBコアイメージに含まれる最初のパーティションの先頭との間に未割り当て領域がないため、GRUBをインストールするといくつかの警告が表示されることがあります。インストーラは、現在の以前のインストール方法に戻って、この状況に適応することができます。真剣に落胆。

フルディスクイメージを作成するには、次のプロセスをお勧めします。

dd if=/dev/zero of=linux.img bs=16M count=1024
cfdisk linux.img
losetup -P /dev/loop0 linux.img
ls /dev/loop0*   #you should see loop0 and the first partition as loop0p1
mkfs.ext4 /dev/loop0pX  # replace X with partition number
mkswap /dev/loop0pY     # if you created a swap partition, use this for it and replace Y
...                    # LFS 11.3 chapter 2.6 and the 1st command of chapter 2.7
mount -v -t ext4 /dev/loop0pX $LFS     # the 2nd command of LFS 11.3 chapter 2.7
...                    # continue according to the book

これでgrub.cfg、ファイル内のエントリはLinuxが1からパーティションを数え始めますが、GRUBは0から数え始めるので、set root=次の形式でなければなりません。そのため、パーティショニング(hd0,<X-1>)に使用する場合はGRUBを使用してください。/dev/loop0p1ext4set root=(hd0,0)

また、オンラインは、linux廃止予定のPATAディスクコントローラ用の廃止予定のroot=/dev/hda1ビドライバを表します。libataほとんどの最新のLinuxディスクコントローラドライバは/dev/sdXNスタイル名を使用します。したがって/dev/loop0p1、LFSイメージを使用してext4ファイルシステムを作成しても、そのイメージがQEMU VMに仮想ハードディスクとして表示される場合は、カーネル構成/dev/sda1で奇妙な選択を行い、他のQEMUオプションを使用しない限り、カーネルは名前を付けます。 。したがって、最後の行は次grub.cfgのようになります。

    linux   /boot/vmlinuz-6.1.11-lfs-11.3 root=/dev/sda1 ro

(現在準備ができていない状況では、楽しみで試してみることもできない場合もlinux.imgありroot=/dev/sdaます。)

おすすめ記事