GRUB2 chainloader:为什么这不起作用?

GRUB2 chainloader:为什么这不起作用?

我正在尝试使用 GRUB2 链接加载驱动器上的不同分区来创建多重启动 USB 闪存驱动器。它不起作用。我不要想要有关如何创建多重启动闪存驱动器的建议;我知道有很多方法可以做到这一点。我是仅有的有兴趣弄清楚为什么这种特殊方法不起作用。

一些背景知识:我有两个 USB 驱动器,我们称它们为 USB1 和 USB2。我目前正在尝试以多重启动友好的方式在其中一个上安装 Debian Wheezy。现在,如果我只是将 iso 添加到 USB1 (/dev/sdb) 上:

dd conv=notrunc bs=4M if=/path/to/iso of=/dev/sdb

这会创建一个漂亮的可启动驱动器,我可以从中安装 Debian。此外,如果我在 USB2 上安装 GRUB2,我可以使用以下命令成功地从它链接加载 USB1:

search --label --set=root "Debian 7.0.0 i386 1"
chainloader +1
boot

现在解决我的问题:如果我在 USB2 上创建第二个分区并将 iso 添加到该分区上:

dd conv=notrunc bs=4M if=/path/to/iso of=/dev/sdc2

链式加载不起作用。它不会抛出任何错误消息,只是给我一个黑屏,带有闪烁的破折号(无响应)。 (我在两个驱动器上都尝试过此操作,所以我不认为有故障的硬件是罪魁祸首)。

为什么这不起作用?当链式加载不同的驱动器和在同一驱动器上链式加载不同的分区(当它们包含完全相同的数据时)有什么区别?

答案1

首先,磁盘映像与分区映像不同。您试图将您的一个(看似磁盘映像)用作两者,这是错误的。不要认为dd没有错误就一切正常:它会很乐意做你告诉它做的任何事情,除非存在某种真正的 IO 错误。

当您链接加载驱动器时,GRUB 将查找主引导记录 - 这是一种启动磁盘内容并包含引导代码的东西。然而,分区结构是不同的——它甚至不是从代码开始的;而是从代码开始的。它有一个引导记录,但位于更远的位置。 GRUB 也可以链式加载;但程序不同。当您将磁盘映像放入分区时,您没有创建任何易于使用的内容,并且 GRUB 肯定不会期望那里有 MBR。相反,它会运行一些随机机器代码,这对您的 PC 来说绝对不健康。

要实现此功能,您必须将 Debian 分区的内容复制到此分区并在其上安装 GRUB。除非过程中出现一些错误,否则它应该可以完美地工作。不要忘记重新创建您的/dev/sdc2

相关内容