无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 11402|回复: 58
打印 上一主题 下一主题

请问下BIOS启动怎样启动另一个硬盘里面的grub2?

  [复制链接]
跳转到指定楼层
1#
发表于 2022-2-16 07:36:21 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 liuzhaoyzz 于 2022-2-16 07:48 编辑

有一个硬盘1已经安装好了CentOS,他的主引导是BIOS启动的grub2,菜单详见附件grub-menu.rar。

我现在想用另一个硬盘2的grub4dos/grub2作为主引导,怎么去引导硬盘1里面的grub2,进而引导硬盘1里面的CentOS?我没有找到类似core.img这样子的文件,所以不知道怎么加载core.img
title grub2-bios
find --ignore-floppies --ignore-cd --set-root /boot/grub2/core2.img
kernel /boot/grub2/core2.img


有没有chainloader (hd0)+1之类的方法,加载硬盘1的MBR之类的?硬盘1的MBR应该是grub2.boot.img





linux64 位-2022-02-16-07-41-57.png (48.72 KB, 下载次数: 264)

linux64 位-2022-02-16-07-41-57.png

linux64 位-2022-02-16-07-27-03.png (33.36 KB, 下载次数: 303)

linux64 位-2022-02-16-07-27-03.png

linux64 位-2022-02-16-07-27-46.png (51.05 KB, 下载次数: 288)

linux64 位-2022-02-16-07-27-46.png

linux64 位-2022-02-16-07-30-21.png (82.39 KB, 下载次数: 304)

linux64 位-2022-02-16-07-30-21.png

linux64 位-2022-02-16-07-30-27.png (77.48 KB, 下载次数: 267)

linux64 位-2022-02-16-07-30-27.png

linux64 位-2022-02-16-07-30-29.png (76.14 KB, 下载次数: 279)

linux64 位-2022-02-16-07-30-29.png

linux64 位-2022-02-16-07-26-57.png (74.44 KB, 下载次数: 267)

linux64 位-2022-02-16-07-26-57.png

grub-menu.rar

1.44 KB, 下载次数: 14, 下载积分: 无忧币 -2

2#
发表于 2022-2-16 07:56:09 来自手机 | 只看该作者
本帖最后由 窄口牛 于 2022-2-16 07:57 编辑

不需要加载mbr了,直接执行另一个的grub2菜单即可。写个g4d菜单,引导那个centos。

点评

系统自动生成的grub.cfg菜单,感觉有点复杂。 menuentry 'CentOS Linux (3.10.0-1160.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnul  详情 回复 发表于 2022-2-16 09:15
回复

使用道具 举报

3#
发表于 2022-2-16 08:13:29 | 只看该作者

没太看明白你的截图。
图二应该是 grub-legacy。图三是 syslinux (extlinux)。
linux 系统安装 grub2 是把核心写在分区间隙里面的,没有实体文件。
有没有chainloader (hd0)+1之类的方法,加载硬盘1的MBR之类的?

chainloader +1
chainloader (hd0)+1
这些都是可以执行的。注意看清楚磁盘号。

点评

好像CentOS安装好之后,默认就是grub2引导,我这边是BIOS启动,所以应该是grub2-BIOS启动,好像不是grub-legacy. chainloader +1 chainloader (hd0)+1 这样子的语句,似乎只对微软的引导体系ntldr/bootmgr有  详情 回复 发表于 2022-2-16 09:18
回复

使用道具 举报

4#
发表于 2022-2-16 08:39:51 | 只看该作者
帮顶
回复

使用道具 举报

5#
发表于 2022-2-16 08:59:10 | 只看该作者
  1. chainloader +1
  2. chainloader (hd0)+1
复制代码

这就和nt5的菜单一样,只能固定启动媒体数目,插个优盘,加块硬盘就杀b了。十分不靠谱,尽量别这么写。

点评

如果这个语句可行的话,先用find --set-root或者search -n -s -f语句,查找标致文件,确定root,然后chainloader +1应该可行,不会存在你说的问题。  详情 回复 发表于 2022-2-16 09:20
回复

使用道具 举报

6#
 楼主| 发表于 2022-2-16 09:15:17 | 只看该作者
本帖最后由 liuzhaoyzz 于 2022-2-16 09:27 编辑
窄口牛 发表于 2022-2-16 07:56
不需要加载mbr了,直接执行另一个的grub2菜单即可。写个g4d菜单,引导那个centos。

系统自动生成的grub.cfg菜单,感觉有点复杂。
menuentry 'CentOS Linux (3.10.0-1160.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-1160.el7.x86_64-advanced-f8bcfd91-cda7-4dc3-ab83-9dedebcc029e' {
        load_video
        set gfxpayload=keep
        insmod gzio
        insmod part_msdos
        insmod xfs
        set root='hd0,msdos1'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos1 --hint-efi=hd1,msdos1 --hint-baremetal=ahci1,msdos1 --hint='hd0,msdos1'  9604622c-6438-472e-83cb-6ff06c55e673
        else
          search --no-floppy --fs-uuid --set=root 9604622c-6438-472e-83cb-6ff06c55e673
        fi
        linux16 /vmlinuz-3.10.0-1160.el7.x86_64 root=/dev/mapper/centos-root ro crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap nomodeset rhgb quiet LANG=zh_CN.UTF-8
        initrd16 /initramfs-3.10.0-1160.el7.x86_64.img
}

我想用硬盘2里面的grub4dos/grub2直接去引导硬盘1里面的grub2,我不想再研究菜单的具体内容了,因为具体内容已经是写好了的,也可以启动。
简而言之,我想用grub2引导grub2,或者用grub4dos引导grub2。
回复

使用道具 举报

7#
 楼主| 发表于 2022-2-16 09:18:03 | 只看该作者
本帖最后由 liuzhaoyzz 于 2022-2-16 09:25 编辑
wintoflash 发表于 2022-2-16 08:13
没太看明白你的截图。
图二应该是 grub-legacy。图三是 syslinux (extlinux)。
linux 系统安装 grub2  ...

好像CentOS安装好之后,默认就是grub2引导,我这边是BIOS启动,所以应该是grub2-BIOS启动,好像不是grub-legacy.


chainloader +1
chainloader (hd0)+1
这样子的语句,似乎只对微软的引导体系ntldr/bootmgr有效吧?因为ntldr/bootmgr写入MBR的时候,只需要占用一个扇区,所以+1有效,那么grub2占用多少个启动扇区?我不清楚。我试了下上面的语句,似乎不行呀,可能盘号弄错了?晚点再试试。

点评

你要看看那个硬盘是不是 (hd0)。最好是 (hd0),要不然可能需要交换磁盘。 你这就扯了。BIOS 也不知道你的引导器占几个扇区,它是怎么启动你的硬盘的?  详情 回复 发表于 2022-2-16 17:57
回复

使用道具 举报

8#
 楼主| 发表于 2022-2-16 09:20:04 | 只看该作者
本帖最后由 liuzhaoyzz 于 2022-2-16 09:23 编辑
窄口牛 发表于 2022-2-16 08:59
这就和nt5的菜单一样,只能固定启动媒体数目,插个优盘,加块硬盘就杀b了。十分不靠谱,尽量别这么写。

如果这个语句可行的话,先用find --set-root或者search -n -s -f语句,查找标志文件,确定root,然后chainloader +1应该可行,不会存在你说的问题。
回复

使用道具 举报

9#
发表于 2022-2-16 11:33:55 来自手机 | 只看该作者
可以。configfile命令,去启动它的grub2菜单文件简单。

点评

configfile应该可以调用,的确是个解决办法,应该可行,晚点我试试看。适用于grub2启动grub2。 那么grub4dos又怎么调用grub2呢?前提是没有那个core.img文件。  详情 回复 发表于 2022-2-16 14:18
回复

使用道具 举报

10#
 楼主| 发表于 2022-2-16 14:18:05 | 只看该作者
本帖最后由 liuzhaoyzz 于 2022-2-16 14:32 编辑
窄口牛 发表于 2022-2-16 11:33
可以。configfile命令,去启动它的grub2菜单文件简单。

configfile应该可以调用,的确是个解决办法,应该可行,晚点我试试看。适用于grub2启动grub2。

那么grub4dos又怎么调用grub2呢?前提是没有那个core.img文件。
问这个问题的主要原因,其实是我没有搞明白grub2引导的CentOS倒底是怎么实现的,boot.img+core.img都是写入了MBR了吗?
回复

使用道具 举报

11#
发表于 2022-2-16 17:57:27 | 只看该作者
本帖最后由 wintoflash 于 2022-2-16 18:03 编辑
liuzhaoyzz 发表于 2022-2-16 09:18
好像CentOS安装好之后,默认就是grub2引导,我这边是BIOS启动,所以应该是grub2-BIOS启动,好像不是grub- ...
我试了下上面的语句,似乎不行呀,可能盘号弄错了?

你要看看那个硬盘是不是 (hd0)。最好是 (hd0),要不然可能需要交换磁盘。
chainloader +1 启动的应该是 ($root)+1,也就是根分区的 pbr,应该不适用于 GRUB2。
这样子的语句,似乎只对微软的引导体系ntldr/bootmgr有效吧?因为ntldr/bootmgr写入MBR的时候,只需要占用一个扇区,所以+1有效,那么grub2占用多少个启动扇区?

你这就有点想当然了。BIOS 也不知道你的引导器占几个扇区,它是怎么启动你的硬盘的?
BIOS 启动硬盘,都是把 MBR(1个扇区!) 加载到内存 0x7c00 位置的。

你可能想的是 chainloader /ntldr 这种东西。grub4dos 里面的 chainloader ntldr/bootmgr/grldr 和 chainloader grldr.mbr/(hd0)+1 其实是两回事,是把两种功能合并到了一个命令中。而在 grub2 里面就是分开的。

点评

chainloader (hd1)+1我试过了,不行啊,直接黑屏了。  详情 回复 发表于 2022-2-16 18:06
回复

使用道具 举报

12#
 楼主| 发表于 2022-2-16 18:01:02 | 只看该作者
本帖最后由 liuzhaoyzz 于 2022-2-16 18:02 编辑

menuentry "/grub2/grub.cfg" "/grub2/grub.cfg" {
search --no-floppy --set --file /grub2/grub.cfg
configfile /grub2/grub.cfg
#chainloader +1
}
configfile /grub2/grub.cfg,grub2启动grub2亲测可用。
chainloader +1似乎不行。
回复

使用道具 举报

13#
 楼主| 发表于 2022-2-16 18:06:35 | 只看该作者
本帖最后由 liuzhaoyzz 于 2022-2-16 18:18 编辑
wintoflash 发表于 2022-2-16 17:57
你要看看那个硬盘是不是 (hd0)。最好是 (hd0),要不然可能需要交换磁盘。
chainloader +1 启动的应该 ...

chainloader (hd1)+1我试过了,不行啊,直接黑屏了。


你要看看那个硬盘是不是 (hd0)。最好是 (hd0),要不然可能需要交换磁盘。

windows启动有这个要求,linux似乎没有这个要求吧?

我试了
drivemap (hd1) (hd0)
chainloader (hd1)+1或者chainloader (hd0)+1
boot
似乎都不行。

linux64 位-2022-02-16-18-05-35.png (25.55 KB, 下载次数: 286)

linux64 位-2022-02-16-18-05-35.png

点评

不要在图像模式下执行。  详情 回复 发表于 2022-2-16 18:54
回复

使用道具 举报

14#
发表于 2022-2-16 18:28:34 | 只看该作者
本帖最后由 2011whp 于 2022-2-16 18:34 编辑

传统引导分区,只能有一个(win的情况): 第一硬盘,激活分区

要 磁盘间 互引导,得把  bcd  boot.ini 的相关资源,每个硬盘 复制上

主板bios的 Fx 选择,只有一次 磁盘交换的 机会(要不 得 用  g4d 交换磁盘 )
——————————————————————————————
同理  linux 的 传统的grub2 是否也有这样的规则呢?

据前面 讨论,直接config  不同硬盘的 grub.cfg  ,  即可
(不像win  有 bcd  和  boot.ini 两套相关资源 ,   grub2 一套 通用)

如果 一定要  从 磁盘 互引:每个磁盘,有一套g4d 来交换磁盘 ,g4d来 chainloader  mbr或pbr

回复

使用道具 举报

15#
发表于 2022-2-16 18:29:20 来自手机 | 只看该作者
g4d就不调用grub2了,写一个g4d的菜单来启动centos,怎么写我也不懂了,因为linux基本上没有用g4d做引导的,大部分都是isolinux做legacy,grub2做efi。我建议都用grub2,借用grldr来引导grub2,当然定制的时候不一样。
回复

使用道具 举报

16#
发表于 2022-2-16 18:42:17 | 只看该作者
本帖最后由 2011whp 于 2022-2-16 18:46 编辑

意思是  每个 磁盘 第二重引导 加上 g4d

至于 g4d 交换磁盘后,可以 mbr pbr,  也可以文件
(问题是 楼主,找不到文件,linux没提供,有的话   lnboot.img +core.img 自己做一个ntldr的文件,或 直接 linux16 core.img)

再有就是 g4d 跳过 grub2  , 直接 kernel 内核( 估计 不用 交换 磁盘了,内核找分区,应该是唯一的)

点评

不想这样,我想尝试下其他方法。  详情 回复 发表于 2022-2-16 19:03
回复

使用道具 举报

17#
发表于 2022-2-16 18:54:45 | 只看该作者
liuzhaoyzz 发表于 2022-2-16 18:06
chainloader (hd1)+1我试过了,不行啊,直接黑屏了。

不要在图像模式下执行。

点评

果然如此! grub2-BIOS: menuentry "chainloader-hd1" "/grub2/grub.cfg" { terminal_output console drivemap (hd1) (hd0) chainloader (hd1)+1 } grub4dos-BIOS: title chainloader-hd1 map (hd1) (hd0  详情 回复 发表于 2022-2-16 19:17
回复

使用道具 举报

18#
 楼主| 发表于 2022-2-16 19:03:07 | 只看该作者
2011whp 发表于 2022-2-16 18:42
意思是  每个 磁盘 第二重引导 加上 g4d

至于 g4d 交换磁盘后,可以 mbr pbr,  也可以文件

不想这样,我想尝试下其他方法。
回复

使用道具 举报

19#
 楼主| 发表于 2022-2-16 19:17:59 | 只看该作者
本帖最后由 liuzhaoyzz 于 2022-2-16 19:38 编辑
wintoflash 发表于 2022-2-16 18:54
不要在图像模式下执行。

果然如此!
grub2-BIOS:
menuentry "chainloader-hd1"  {
terminal_output console
drivemap (hd1) (hd0)
chainloader (hd1)+1
}

grub4dos-BIOS:
title chainloader-hd1
map (hd1) (hd0)
map --hook
chainloader (hd1)+1

都可以启动。
那为啥要交换磁盘呢?以前看帖子说windows下面才需要交换磁盘,linux下面不需要啊?看样子我被误导了。

点评

你写的grub4dos菜单似乎有问题,实际启动的是(hd0)。 切换成文本模式与交换磁盘,都是为了规避bios可能有的问题。  详情 回复 发表于 2022-2-17 10:27
回复

使用道具 举报

20#
发表于 2022-2-16 19:29:29 | 只看该作者
drivemap (hd1) (hd0)  应该 交换是 必须的 吧

——————————————————

boot后生效? 一般是 这样:
grub4dos-BIOS:
title chainloader-hd1
map (hd1) (hd0)
map --hook
chainloader (hd0)+1

点评

哦,是的,我写漏掉了。  详情 回复 发表于 2022-2-16 19:37
回复

使用道具 举报

21#
 楼主| 发表于 2022-2-16 19:37:34 | 只看该作者
2011whp 发表于 2022-2-16 19:29
drivemap (hd1) (hd0)  应该 交换是 必须的 吧

——————————————————

哦,是的,我写漏掉了。上面的菜单已添加。
回复

使用道具 举报

22#
发表于 2022-2-16 21:33:30 | 只看该作者
硬盘2添加grub2用grub2菜单直接引导不是更好

点评

我在6楼说了,不想这样子做。只是做个尝试。  详情 回复 发表于 2022-2-17 07:27
回复

使用道具 举报

23#
 楼主| 发表于 2022-2-17 07:27:26 来自手机 | 只看该作者
2011cwj6958 发表于 2022-2-16 21:33
硬盘2添加grub2用grub2菜单直接引导不是更好

我在6楼说了,不想这样子做。只是做个尝试。
回复

使用道具 举报

24#
发表于 2022-2-17 10:27:39 | 只看该作者
liuzhaoyzz 发表于 2022-2-16 19:17
果然如此!
grub2-BIOS:
menuentry "chainloader-hd1"  {

你写的grub4dos菜单似乎有问题,实际启动的是(hd0)。

切换成文本模式与交换磁盘,都是为了规避bios可能有的问题。

点评

刚才尝试了下,g4d title chainloader-hd1 map (hd1) (hd0) map --hook chainloader (hd1)+1 title chainloader-hd1 map (hd1) (hd0) map --hook chainloader (hd0)+1 都可以启动。 grub2: menuentry  详情 回复 发表于 2022-2-17 12:23
那个g4d菜单我测试过的可以启动,去掉map语句就无法启动,晚点再试试chainloader (hd0)+1试试看是什么结果,可能与硬盘1里面grub2菜单 set root='hd0,msdos1'语句有关吧。  详情 回复 发表于 2022-2-17 10:57
回复

使用道具 举报

25#
 楼主| 发表于 2022-2-17 10:57:53 来自手机 | 只看该作者
本帖最后由 liuzhaoyzz 于 2022-2-17 10:59 编辑
wintoflash 发表于 2022-2-17 10:27
你写的grub4dos菜单似乎有问题,实际启动的是(hd0)。

切换成文本模式与交换磁盘,都是为了规避bios可 ...


那个g4d菜单我测试过的可以启动,去掉map语句就无法启动,晚点再试试chainloader (hd0)+1试试看是什么结果。
必须交换磁盘,可能与硬盘1里面grub2菜单set root='hd0,msdos1'语句有关吧。
回复

使用道具 举报

26#
 楼主| 发表于 2022-2-17 12:23:12 | 只看该作者
wintoflash 发表于 2022-2-17 10:27
你写的grub4dos菜单似乎有问题,实际启动的是(hd0)。

切换成文本模式与交换磁盘,都是为了规避bios可 ...

刚才尝试了下,g4d
title chainloader-hd1
map (hd1) (hd0)
map --hook
chainloader (hd1)+1

title chainloader-hd1
map (hd1) (hd0)
map --hook
chainloader (hd0)+1
上面的两个菜单都可以启动。

grub2:
menuentry "chainloader-hd1" {
terminal_output console
drivemap (hd1) (hd0)
chainloader (hd1)+1
}
上面的菜单启动正常。

换成chainloader (hd0)+1提示Missing helper,不能启动。

点评

对于 GRUB4DOS 来说,执行 map --hook 之后磁盘交换就生效了。 因此你想启动的磁盘由 (hd1) 变为了 (hd0),最后应该执行 chainloader (hd0)+1 至于为什么 chainloader (hd1)+1 也能成功启动,我怀疑 GRUB4DOS chai  详情 回复 发表于 2022-2-18 11:17
回复

使用道具 举报

27#
发表于 2022-2-18 11:17:03 | 只看该作者
liuzhaoyzz 发表于 2022-2-17 12:23
刚才尝试了下,g4d
title chainloader-hd1
map (hd1) (hd0)

对于 GRUB4DOS 来说,执行 map --hook 之后磁盘交换就生效了。 因此你想启动的磁盘由 (hd1) 变为了 (hd0),最后应该执行
chainloader (hd0)+1
至于为什么 chainloader (hd1)+1 也能成功启动,我怀疑 GRUB4DOS chainloader 可能有问题。
对于 GRUB2 来说,磁盘交换是执行 boot 命令的时候生效的,所以应该执行 chainloader (hd1)+1。

点评

我感觉 map (hd1) (hd0) map --hook 之后,这两个磁盘,在g4d环境下是一样的,所以用chainloader (hd0)+1或者chainloader (hd1)+1结果是一样的,但是理论上来说,chainloader (hd0)+1的确更加合理。  详情 回复 发表于 2022-2-18 18:16
回复

使用道具 举报

28#
发表于 2022-2-18 16:08:00 | 只看该作者
liuzhaoyzz:那为啥要交换磁盘呢?以前看帖子说windows下面才需要交换磁盘,linux下面不需要啊?看样子我被误导了。


也许,linux  不需要  磁盘交换 正确的

如果 CentOS 用的 是lnboot.img 而且定置 时 有 -c 参数 内置菜单  动态确认root分区

可以 试下 不交换分区  chainloader (hd1)+63   
或看mbr后面 扇区有多少  如 chainloader (hd1)+200

点评

chainloader (hd1)+63 chainloader (hd1)+200 实测不行,原因之前wintoflash已经说过了。 chainloader (hd0)+1正解  详情 回复 发表于 2022-2-18 18:47
回复

使用道具 举报

29#
发表于 2022-2-18 16:39:25 | 只看该作者
不懂不懂,千奇百怪。
回复

使用道具 举报

30#
 楼主| 发表于 2022-2-18 18:16:31 | 只看该作者
wintoflash 发表于 2022-2-18 11:17
对于 GRUB4DOS 来说,执行 map --hook 之后磁盘交换就生效了。 因此你想启动的磁盘由 (hd1) 变为了 (hd0) ...

我感觉
map (hd1) (hd0)
map --hook
之后,这两个磁盘,在g4d环境下是一样的,所以用chainloader (hd0)+1或者chainloader (hd1)+1结果是一样的,但是理论上来说,chainloader (hd0)+1的确更加合理。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-11-28 14:24

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表