![GRUB2:引导到第二个(另一个)硬盘](https://linux22.com/image/80598/GRUB2%EF%BC%9A%E5%BC%95%E5%AF%BC%E5%88%B0%E7%AC%AC%E4%BA%8C%E4%B8%AA%EF%BC%88%E5%8F%A6%E4%B8%80%E4%B8%AA%EF%BC%89%E7%A1%AC%E7%9B%98.png)
我已经研究过这个问题,但未能找到明确的答案……甚至找不到明确的问题。所以我将使用一个简单的例子。
我的电脑有**两个硬盘:**
- 硬盘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
文件的完整文档,您可以查看官方网页:
答案2
这很容易。只需按照步骤操作即可。
示例场景:
/dev/sda1
– CentOS/dev/sdb1
– Debian
假设 CentOS 驱动器上有活动的 MBR。这样,启动后我们就可以进入CentOS系统了;必须添加 Debian。
活动操作系统下的任务(我们场景中的 CentOS):
mount /dev/sdb1 /mnt/debian
menuentry
从 中截取 Debian 的整个部分/mnt/debian/boot/grub{2}/grub.cfg
,如下:menuentry 'Debian GNU/Linux' --class debian --class gnu-linux ... { ... }
现在,创建文件:
touch /etc/grub.d/11_linux
由于这是脚本,请记住执行以下操作:
chmod +x /etc/grub.d/11_linux
添加:
#!/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 }"
grub2-mkconfig -o /boot/grub{2}/grub.cfg
重启。
瞧。
答案3
嗨,我刚刚遇到了同样的问题。我发现在安装 os-prober 后,grub-customizer 能够使用 os-prober 找到第二个 HDD 上的操作系统并将其添加到我的启动菜单中。您可能会发现这比编辑配置文件更容易:)
答案4
我认为您应该在 grub 配置中为第二个 hdd 添加一个条目。
哪个操作系统并不重要。
我在 Windows HDD 上使用带有 grub2 的双本书。它可以检测 Windows 和 Linux,并为我提供一个菜单来选择要启动的操作系统。
如需高级配置、链式加载以及向 grub 添加手动条目,请点击以下链接: