次のコマンドを使用してイメージファイルを作成しました。
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
私が試したこと:
grub起動画面の後に続く
set root=(hd0,2)' and trying the values
hd0,0or
hd0,1 hd0,X notfound行のコメントを外します。(the system not even initialize with this, and I got the error
メニュー項目オプションで、linuxで始まる行のルート値を/ dev / loopXXに変更します(同じエラーが発生しました)。
linuxで始まる行のメニュー項目オプションで、ルート値を/ dev / sda1に変更します(この場合、メッセージは同じですがブロックはです
(8,1)
)。
この問題を解決するために何ができるか教えてくれる人はいますか?
答え1
このエラーメッセージはhd0,X not found
GRUBで発生し、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/loop0p1
ext4
set 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
ます。)