Chainload两个Grub2安装


14

这真让我失望。我有Gentoo和Ubuntu,都带有Grub2。Gentoo有一个专用/boot分区,而Ubuntu没有。我有一个menuentryGentoo /etc/grub.d/40_custom来启动Ubuntu(而Ubuntu确实可以启动)。

因为Ubuntu是Grub附带的,所以我想将其链式加载到其中,而不是维护设置根,内核,initrd和其他东西的条目。这是链式装载机所需要的(Ubuntu已打开,/dev/sda4并且我已经在那里安装了Grub):

menuentry 'Chainloader' {
    insmod chain
    set root=(hd0,4)
    chainloader +1
}

它给了我error: Invalid signature,但我找不到可用的解决方案。有人可以指出吗?

这是由于 </dev/sda4 head -c 512 | hd

00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000200

这是的结果fdisk -l/dev/sda1/bootGentoo,Gentoo在/dev/sda2,Ubuntu在/dev/sda4。Ubuntu的/boot/dev/sda4太多。

Disk /dev/sda: 160.0 GB, 160041885696 bytes
255 heads, 63 sectors/track, 19457 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xe001152b

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1           9       72261   83  Linux
/dev/sda2              10       13064   104864287+  8e  Linux LVM
/dev/sda4   *       18152       19457    10490445   83  Linux

没有错误 grub-install /dev/sda4 --no-floppy --force

/usr/sbin/grub-setup: warn: Attempting to install GRUB to a partition instead of the MBR.  This is a BAD idea..
/usr/sbin/grub-setup: warn: Embedding is not possible.  GRUB can only be installed in this setup by using blocklists.  However, blocklists are UNRELIABLE and their use is discouraged..
Installation finished. No error reported.

显然,您尚未在上安装引导程序/dev/sda4。您是否有多个磁盘?你的分区表是什么?请发布的输出fdisk -l以及来自的消息grub-install /dev/sda4 --no-floppy --force
吉尔(Gilles)'所以

是的,我更新了问题
phunehehe 2010年

Answers:


4

您可以从GRUB2加载GRUB2,我只是按照您描述的方式进行了尝试,并且可以正常工作。但是,您提供的信息使启动映像看起来没有嵌入磁盘的MBR中(或者不会全为零)。

我会尝试这样做,尽管它并不是完全使用Ubuntu的GRUB2(只是它的配置文件)。您可以在Gentoo GRUB2配置文件中创建菜单项,以加载Ubuntu配置文件。我看到有两种方法可以做到这一点。

我将使用的是normal命令,它允许您指定要在普通模式下加载的配置文件。如果走这条路线,有一个名为normal_exit的命令可以作为自定义项添加到Ubuntu配置中,这将允许您返回到Gentoo配置。

另一个选项是configfile命令,它使您可以指定要加载的备用配置文件。不过,似乎似乎很难“退出”该选项。

有关这些命令的更多信息,请参见此处


3

启动过程的初始部分包括从硬盘驱动器的第一个扇区(即所谓的主启动记录(MBR))中加载代码。通常,将Grub写入此第一个硬盘驱动器扇区,而不写入分区保存/ boot的第一个扇区。但是,通常可以在Linux安装过程中更改此设置,但是在现代安装例程中,这通常是隐藏的。

您说已经在/ dev / sda4中安装了Grub,但是您的配置看起来正确,并且您发布的错误消息表明,Grub可能没有正确安装到要链式装载的分区中。您应该启动到Gentoo,然后chroot进入Ubuntu分区。确保/ boot现在正确指向Ubuntu- / boot而不是Gentoo!现在,将Grub 2安装到Ubuntu-Partition / dev / sda4的第一个扇区:中grub-install /dev/sda4 --no-floppy

像往常一样,在处理MBR和分区时,请确保在开始之前具有功能齐全的最新备份。


如果我启动到Ubuntu并运行grub-install,会有所不同吗?COS,这是我做过的,但是没有用:(
phunehehe 2010年

我以为您不能启动Ubuntu,因为链加载不起作用?但是不,如果您启动到Ubuntu或chroot进入Ubuntu,这应该没有什么不同。
fschmitt

@phunehehe:错误消息表示Grub在的第一个扇区/dev/sda4(最后两个字节必须是0x55 0xaa)中找不到引导加载程序签名。您可以发布的输出</dev/sda4 head -c 512 | hd吗?
吉尔斯(Gillles)“所以-别再邪恶了”,2010年

@吉尔斯:我把结果加到了问题上。看起来不正确,是吗?
phunehehe

实际上我必须跑步grub-install /dev/sda4 --no-floppy --force,否则将会对
黑名单

-1

sda4是不是在grub中是(hd0,3),还是在grub2中发生了这种变化?


是的,我确定/ dev / sda4会变成(hd0,4),因为这就是我用来引导Ubuntu的东西
phunehehe 2010年

3
是的,蛴螬0.97开始计数的磁盘或者分区以0 GRUB 2仍然从0开始计数分区与1所以的/ dev / SDA4就是hd0,3在蛴螬0.97和蛴螬2 hd0,4计数盘,但启动
fschmitt
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.