无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 8695|回复: 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, 下载次数: 180)

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

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

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

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

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

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

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

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

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

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

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

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

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

grub-menu.rar

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

2#
 楼主| 发表于 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。
回复

使用道具 举报

3#
 楼主| 发表于 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
回复

使用道具 举报

4#
 楼主| 发表于 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应该可行,不会存在你说的问题。
回复

使用道具 举报

5#
 楼主| 发表于 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了吗?
回复

使用道具 举报

6#
 楼主| 发表于 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似乎不行。
回复

使用道具 举报

7#
 楼主| 发表于 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, 下载次数: 171)

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

点评

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

使用道具 举报

8#
 楼主| 发表于 2022-2-16 19:03:07 | 显示全部楼层
2011whp 发表于 2022-2-16 18:42
意思是  每个 磁盘 第二重引导 加上 g4d

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

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

使用道具 举报

9#
 楼主| 发表于 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
回复

使用道具 举报

10#
 楼主| 发表于 2022-2-16 19:37:34 | 显示全部楼层
2011whp 发表于 2022-2-16 19:29
drivemap (hd1) (hd0)  应该 交换是 必须的 吧

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

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

使用道具 举报

11#
 楼主| 发表于 2022-2-17 07:27:26 来自手机 | 显示全部楼层
2011cwj6958 发表于 2022-2-16 21:33
硬盘2添加grub2用grub2菜单直接引导不是更好

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

使用道具 举报

12#
 楼主| 发表于 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'语句有关吧。
回复

使用道具 举报

13#
 楼主| 发表于 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
回复

使用道具 举报

14#
 楼主| 发表于 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的确更加合理。

回复

使用道具 举报

15#
 楼主| 发表于 2022-2-18 18:47:53 | 显示全部楼层
2011whp 发表于 2022-2-18 16:08
也许,linux  不需要  磁盘交换 正确的

如果 CentOS 用的 是lnboot.img 而且定置 时 有 -c 参数 内 ...

chainloader (hd1)+63   
chainloader (hd1)+200
实测不行,原因之前wintoflash已经说过了。
chainloader (hd0)+1正解
回复

使用道具 举报

16#
 楼主| 发表于 2022-2-18 18:51:28 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2022-2-18 21:54 编辑
2011yaya2007777 发表于 2022-2-18 18:27
你执行
map (hd1) (hd0)
map --hook

直接上图。g4d2021-12-17版本。
map之前(hd1,0)是CentOS的xfs启动分区,(hd1,1)是CentOS的lvm2文件分区。ls (hd1,y)/无效,不能加载分区。
map之后,(hd0)和(hd1)相同了,都有2个分区。之前hd0是3个分区,hd1是2个分区。


ls (hd0,x)/
ls (hd1,y)/
无效,可能不能识别分区格式。一楼有分区格式图,linux64 位-2022-02-16-07-30-21.png
(hd1,0)是CentOS的xfs启动分区,(hd1,1)是CentOS的lvm2文件分区。

这也就是说,由于grub4dos不支持xfs分区,不可能通过照葫芦画瓢地把grub2启动菜单“移植”到grub4dos里面,因为grub4dos环境下,由于缺乏xfs文件驱动,所以无法调用CentOS的xfs启动分区的那些启动文件,自然也就不能启动CentOS,但是可以调用(hd1)的MBR(grub2.MBR),grub2有xfs文件驱动,进而通过grub2来启动CentOS。

写一个g4d的菜单来启动centos

15楼的设想,目前是不能实现的了。





回复

使用道具 举报

17#
 楼主| 发表于 2022-2-18 18:56:22 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2022-2-18 22:15 编辑

grub2认识xfs分区格式,可以ls
grub2似乎也不认识lvm分区格式,ls无效。或者是我没有加载lvm.mod?这个我不懂。启动的时候不需要调用这个分区的文件,无所谓了。

linux64 位-2022-02-18-18-55-47.png (28.35 KB, 下载次数: 216)

linux64 位-2022-02-18-18-55-47.png

点评

你说的应该是 lvm 吧。llvm 是个编译器。 GRUB2 有 lvm 支持模块,一般情况下用得比较少。 ---------- 原来是我忘记了,map (hd1) (hd0) 并不是交换磁盘,而是把磁盘 (hd1) 映射到 (hd0)。  详情 回复 发表于 2022-2-18 20:59
回复

使用道具 举报

18#
 楼主| 发表于 2022-2-18 21:56:56 来自手机 | 显示全部楼层
2011yaya2007777 发表于 2022-2-18 19:54
和我预想的一样。
一般来说,交换磁盘,应当是这样的:
map (hd0) (hd1)

交换磁盘确实如此。
g4d菜单我只是从前面grub2照搬照抄过来,没考虑到“交换磁盘”,我只想着单向覆盖。
回复

使用道具 举报

19#
 楼主| 发表于 2022-2-18 21:58:05 来自手机 | 显示全部楼层
wintoflash 发表于 2022-2-18 20:59
你说的应该是 lvm 吧。llvm 是个编译器。
GRUB2 有 lvm 支持模块,一般情况下用得比较少。
---------- ...

确实是lvm,我写错了,写错的原因是对于linux的lvm分区不熟悉,贻笑大方了,哈哈。
回复

使用道具 举报

20#
 楼主| 发表于 2022-2-18 22:17:26 | 显示全部楼层
2011yaya2007777 发表于 2022-2-18 19:54
和我预想的一样。
一般来说,交换磁盘,应当是这样的:
map (hd0) (hd1)

title chainloader-hd1
map (hd1) (hd0)
map (hd0) (hd1)
map --hook
chainloader (hd0)+1
启动没有问题,本人亲测。
回复

使用道具 举报

21#
 楼主| 发表于 2022-2-18 22:32:14 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2022-2-18 22:33 编辑
wintoflash 发表于 2022-2-18 20:59
你说的应该是 lvm 吧。llvm 是个编译器。
GRUB2 有 lvm 支持模块,一般情况下用得比较少。
---------- ...

GRUB2 有 lvm 支持模块,果然是有,但是insmod lvm之后,lvm2分区还是无法ls,可能grub2里面的lvm.mod只支持lvm1.0?不支持lvm2.0?
不过看不到也无所谓,毕竟启动的时候,grub2不需要调用lvm2分区里面的那些文件。只是做个尝试,就事论事罢了。

linux64 位-2022-02-18-22-30-51.png (27.51 KB, 下载次数: 380)

linux64 位-2022-02-18-22-30-51.png

点评

[attachimg]495990[/attachimg]  详情 回复 发表于 2022-2-19 08:22
回复

使用道具 举报

22#
 楼主| 发表于 2022-2-19 10:07:59 来自手机 | 显示全部楼层
wintoflash 发表于 2022-2-19 08:22

那就是有效了?为啥不能ls?不懂

点评

你应该 ls (lvm/centos-root)/  详情 回复 发表于 2022-2-19 11:18
回复

使用道具 举报

23#
 楼主| 发表于 2022-2-20 19:13:19 | 显示全部楼层
wintoflash 发表于 2022-2-19 11:18
你应该 ls (lvm/centos-root)/

果然是可以。

linux64 位-2022-02-20-19-12-31.png (28.51 KB, 下载次数: 191)

linux64 位-2022-02-20-19-12-31.png
回复

使用道具 举报

24#
 楼主| 发表于 2022-2-23 07:18:54 | 显示全部楼层
2011yfrui 发表于 2022-2-21 19:37
也可简化为
menuentry "CentOS" {
set root=hd1,1

试过了,这样子的用法不行,不能把某个分区(hd1,1),drivemap成为(hd0),因为后面无法调用其MBR。
回复

使用道具 举报

25#
 楼主| 发表于 2022-2-23 11:25:26 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2022-2-23 12:19 编辑

之前我试过了,drivemap -s似乎不能启动,选择启动项之后,直接黑屏了,直接dirvemap可以启动。

grub2-BIOS:
menuentry "chainloader-hd1"  {
terminal_output console
drivemap (hd1) (hd0)
chainloader (hd1)+1
}
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-10 14:18

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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