获得一个可用的 chroot 环境以使用 Grub2 启动

获得一个可用的 chroot 环境以使用 Grub2 启动

问题

我有一个工作 chroot 环境(inittab、fstab、init.d/rcS 设置)、一个内核和安装的 grub2。我还需要什么才能让我的系统正常工作?

背景/细节

出于教育目的,我着手构建一个小型 Linux 环境,我可以启动该环境并拥有一个正在运行的 shell。

我使用 Virtualbox 将一台虚拟机连接到两个硬盘驱动器(每个硬盘驱动器只有一个分区)。第一个安装了 Debian,第二个我使用 Busybox 构建了一个小型 chroot 环境,使用本文。我还按照文章中的指示设置了inittabfstabinit.d/rcS和大多数其他文件系统相关的内容,尽管我在第二页上没有做任何与 和 相关的事情genfromfssyslinux因为我认为我没有制作可启动软盘。

为了弄清楚如何启动我的 chroot 系统,我发现这个帖子,我就跑了grub-install --root-directory=/mnt /dev/sdb。最后它说它完成了,没有错误。

然后我创建了一个新的虚拟机,这次将第二个硬盘驱动器作为其唯一的硬盘驱动器,并启动它。它给了我一个 grub 提示符,所以我谷歌搜索了更多,然后我输入了

set root=(hd0,msdos1)
linux /vmlinuz
boot

我有了解 initrd/initramfs 是可选的,所以我决定暂时忽略它。我使用make defconfigand构建了 linux 内核,make并在构建后将 bzImage 复制到 x86 目录下。

然而,很快我就遇到了一个挂起的屏幕:

[ 0.74.. ] md: autorun ...
[ 0.74.. ] md: ... autorun DONE.
[ 0.74.. ] Root-NFS: no NFS server address
[ 0.74.. ] VFS: Unable to mount root fs via NFS, trying floppy.
[ 0.74.. ] VFS: Cannot open root device "(null)" or unknown-block(2,0)
[ 0.74.. ] Please append a correct "root=" boot option; here are the avaialbe partitions:
[ 0.74.. ] 0800  ... sda driver: sd
[ 0.74.. ] 0801 ... sda1 ...
[ 0.74.. ] 0b00 .. sr0 driver: sr ..
[ 0.74.. ] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)
[ 0.74.. ] Pid: 1, comm: swapper/0 Not tainted 3.2.6 #1
[ 0.75.. ] Call Trae:
[ 0.75.. ]  [<c16..>] panic+0x57/0x157
[ 0.75.. ]  [<c18..>] mount_block_root+0x125/0x1a7
[ 0.75.. ]  [<c10..>] ? sys_mknod+0x27/0x30
.. a few more lines of call trace ...

我遗漏了一些数字和最后几行,因为我必须手动输入它们,所以如果您需要它们,请告诉我,我会发布它们。

答案1

您需要root=在 grub 中指定该参数。内核正在寻找错误的根设备,因此您会收到“未知块”错误。我可以看到它正确检测到您的硬盘驱动器,因此在 grub 中您应该使用如下行:

linux /vmlinux root=/dev/sda1

相关内容