GRUB2:引导到第二个(另一个)硬盘

GRUB2:引导到第二个(另一个)硬盘

我已经研究过这个问题,但未能找到明确的答案……甚至找不到明确的问题。所以我将使用一个简单的例子。

我的电脑有**两个硬盘:**

  • 硬盘1:乌班图Linux 与GRUB2膜生物反应器
  • 硬盘2:任何其他操作系统(这会影响哪一个吗?)与其他 MBR 加载程序。

仅限 GRUB2启动至 Ubuntu(在我的示例中,在第一个硬盘上)。
发行update-grub确实未检测到操作系统在第二块硬盘上,但我知道有一个。
如果我输入BIOS启动时间并将启动顺序更改为硬盘 2(第二个操作系统)靴子好

我怎么能够向 GRUB2 添加条目启动到第二个硬盘

(事实是:我觉得这个问题可以问没有指定第2个硬盘中的操作系统。或不?)

根据请求添加os-prober具有此配置的示例机器的输出:

luis@threepwood:~$ sudo os-prober
/dev/sdb1:Windows 7 (loader):Windows:chain
/dev/sdb7:Ubuntu 14.04.3 LTS (14.04):Ubuntu:linux

在此特定示例中(我在 BIOS 中更改了启动顺序):

  • sdb是HDD-1。
  • sda是HDD-2。

答案1

我通常grub.cfg手动编写,从不使用update-grub,并且有一个所谓的主 Grub2 引导加载程序,我可以在其中选择从哪里启动,然后我让每个 Linux 发行版在自己的根分区上安装自己的引导加载程序,这样 Linux 就可以编辑自己的引导加载程序而无需接触我的主 grub2 引导加载程序。

为了跳转到其他磁盘 MBR,我为普通操作系统设置了此类条目,grub.cfg不需要将磁盘视为第一个磁盘:

menuentry "Boot from second disk" {
   chainloader (hd1)+1
}
menuentry "Boot from third disk" {
   chainloader (hd2)+1
}
menuentry "Boot from fourth disk" {
   chainloader (hd3)+1
}

所以它只是将 MBR 加载到我想要的另一个磁盘上。

但对于一些棘手的 Linux(以及一些 Windows),希望看到另一个磁盘就像第一个磁盘一样,我还向 grub 菜单项添加了一些命令,所以它看起来像这样:

menuentry "Boot from second disk and see it as first disk" {
   set root=(hd1)
   drivemap -s hd0 hd1
   chainloader +1
}
menuentry "Boot from third disk and see it as first disk" {
   set root=(hd2)
   drivemap -s hd0 hd2
   chainloader +1
}
menuentry "Boot from fourth disk and see it as first disk" {
   set root=(hd3)
   drivemap -s hd0 hd3
   chainloader +1
}

全部详细解释:

  • (hd#)代表磁盘,其中#从零开始

  • drivemap 进行驱动器交换,因此任何磁盘都可以被视为第一个磁盘,或者您想要的任何数字(它交换所看到的两个磁盘上的顺序)

  • chainloader (hd#)+1 跳转到磁盘的MBR

  • chainloader +1 跳转到存储在(根)上的第一个扇区

  • set root=... 设置(root)拥有什么。

  • (root)就像一个变量,可以用来少输入

有关grub.cfg文件的完整文档,您可以查看官方网页:

https://www.gnu.org/software/grub/manual/grub/grub.html

答案2

这很容易。只需按照步骤操作即可。

示例场景:

  • /dev/sda1– CentOS

  • /dev/sdb1– Debian

假设 CentOS 驱动器上有活动的 MBR。这样,启动后我们就可以进入CentOS系统了;必须添加 Debian。

活动操作系统下的任务(我们场景中的 CentOS):

  1. mount /dev/sdb1 /mnt/debian

  2. menuentry从 中截取 Debian 的整个部分/mnt/debian/boot/grub{2}/grub.cfg,如下:

    menuentry 'Debian GNU/Linux' --class debian --class gnu-linux ... { ... }

  3. 现在,创建文件:touch /etc/grub.d/11_linux

  4. 由于这是脚本,请记住执行以下操作:chmod +x /etc/grub.d/11_linux

  5. 添加:

    #!/bin/sh
    echo "
    

    的开头11_linux并将该部分粘贴到其中。"到最后就完成了。所以,我们应该:

    centos #~> cat /etc/grub.d/11_linux
    
    #!/bin/sh
    echo "menuentry 'Debian GNU/Linux' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-78026456-ebcc-4eed-b59d-a3f0bdff7353' {
        load_video
        insmod gzio
        if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
        insmod part_msdos
        insmod ext2
        set root='hd0,msdos1'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  f2de4123-5a98-4568-99dd-e61940b99ab2
        else
          search --no-floppy --fs-uuid --set=root f2de4123-5a98-4568-99dd-e61940b99ab2
        fi
        echo    'Loading Linux 3.16.0-4-amd64 ...'
        linux   /vmlinuz-3.16.0-4-amd64 root=/dev/mapper/Thinkpad--vg-root ro  quiet
        echo    'Loading initial ramdisk ...'
        initrd  /initrd.img-3.16.0-4-amd64
    }"
    
  6. grub2-mkconfig -o /boot/grub{2}/grub.cfg

  7. 重启。

瞧。

答案3

嗨,我刚刚遇到了同样的问题。我发现在安装 os-prober 后,grub-customizer 能够使用 os-prober 找到第二个 HDD 上的操作系统并将其添加到我的启动菜单中。您可能会发现这比编辑配置文件更容易:)

答案4

我认为您应该在 grub 配置中为第二个 hdd 添加一个条目。

哪个操作系统并不重要。

我在 Windows HDD 上使用带有 grub2 的双本书。它可以检测 Windows 和 Linux,并为我提供一个菜单来选择要启动的操作系统。

如需高级配置、链式加载以及向 grub 添加手动条目,请点击以下链接:

https://help.ubuntu.com/community/Grub2/CustomMenus

相关内容