无忧启动论坛

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

grub4dos 在 GPT 盘上有 bug

[复制链接]
发表于 2019-6-25 06:22:51 | 显示全部楼层 |阅读模式
本帖最后由 不点 于 2019-6-25 06:26 编辑

http://reboot.pro/topic/21905-grub4dos-and-gpt-support/page-2

来自俄罗斯的 tte 报告了他的两个 GPT 盘上的 NTFS 分区无法被 grub4dos 识别。

他从 USB 启动,能够正常访问 USB (hd0) 以及本地的第一块硬盘 (hd1),但不能访问 (hd2) 和 (hd3) 的分区上的文件。他有一个分区,正好是 2T 的长度。有可能是这个 2T 的分区,让 grub4dos 表现失常了。

cat --hex 能够访问 (hd2) 或 (hd3) 上的扇区数据(测试 100G 处的一个扇区是可以访问的)。我已经让他提供 BIOS 可访问的最大扇区号,但目前他还没有提供此数据。

另外,当他使用 vol 命令的时候,死机了,只能按 ctrl-alt-del。这说明,vol 命令就有 bug 了。我猜是 vol 访问某个靠后的扇区时,BIOS 产生了死机。但也可能是 vol 的代码有 bug。
发表于 2019-6-25 07:18:42 | 显示全部楼层
grub4dos不支援uefi開機模式,早就已是不爭的事實,
現在又說grub4dos在GPT有bug,看到一點都不意外,
uefi+GPT已是趨勢,沒必要再用不支援的grub4dos。

BCD、GRUB2、XORBOOT...,使用這些支援uefi開機模式的開機軟體才是主流。

点评

g4d是不支持efi启动,但对gpt分区的访问是支持的,所以出现了访问分区的bug还是要解决的  详情 回复 发表于 2019-6-25 08:26
回复

使用道具 举报

发表于 2019-6-25 08:26:27 | 显示全部楼层
Foster_yen 发表于 2019-6-25 07:18
grub4dos不支援uefi開機模式,早就已是不爭的事實,
現在又說grub4dos在GPT有bug,看到一點都不意外,
ue ...

g4d是不支持efi启动,但对gpt分区的访问是支持的,所以出现了访问分区的bug还是要解决的

点评

确实是这样子,虽然g4d不能直接从GPT分区启动,但是访问GPT里面的文件很有必要,不说多的,能够访问GPT分区的2TB以内的扇区就足够了。虽然未来是UEFI的,但是BIOS下很多场景下引导器比如grub2、xorboot、bootmgr是  详情 回复 发表于 2019-6-25 08:41
回复

使用道具 举报

发表于 2019-6-25 08:41:56 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2019-6-25 09:06 编辑
bfgxp 发表于 2019-6-25 08:26
g4d是不支持efi启动,但对gpt分区的访问是支持的,所以出现了访问分区的bug还是要解决的


确实是这样子,虽然g4d不能直接从GPT分区启动,但是访问GPT里面的文件很有必要,不说多的,能够访问GPT分区的2TB以内的扇区就足够了。虽然未来是UEFI的,但是BIOS下很多场景下引导器比如grub2、xorboot、bootmgr是无法胜任的,比如用于RAMOS的场景。
    UEFI下,目前没有什么引导工具能够实现grub4dos的map功能。      
回复

使用道具 举报

发表于 2019-6-25 10:21:28 来自手机 | 显示全部楼层
可能是2t的原因。低于这个级别,没遇到过。
回复

使用道具 举报

发表于 2019-6-25 12:19:23 来自手机 | 显示全部楼层
在命令行下:debug=3  然后:vol
回复

使用道具 举报

发表于 2019-6-25 13:29:58 | 显示全部楼层
虽然不太懂,支持不点大师,期待结果来学习下
回复

使用道具 举报

发表于 2019-6-25 15:10:07 | 显示全部楼层
我好喜欢grub4dos的,可惜换了新笔记本uefi+GPT,g4d完全不能用了
回复

使用道具 举报

 楼主| 发表于 2019-6-26 04:17:21 | 显示全部楼层

vol 命令输出,第二张图片

vol 命令输出,第二张图片

vol 命令输出,第一张图片

vol 命令输出,第一张图片
回复

使用道具 举报

 楼主| 发表于 2019-6-26 04:29:14 | 显示全部楼层
本帖最后由 不点 于 2019-6-26 04:39 编辑

vol 命令输出,第二张图片

vol 命令输出,第二张图片

vol 命令输出,第二张图片
回复

使用道具 举报

 楼主| 发表于 2019-6-26 04:29:49 | 显示全部楼层
vol 命令输出,第三张图片

vol 命令输出,第三张图片

vol 命令输出,第三张图片
回复

使用道具 举报

 楼主| 发表于 2019-6-26 04:35:50 | 显示全部楼层
vol 命令输出,第四张图片

这张应该是死机时的图片了。



vol 命令输出,第四张图片

vol 命令输出,第四张图片
回复

使用道具 举报

 楼主| 发表于 2019-6-26 05:35:21 | 显示全部楼层
本帖最后由 不点 于 2019-6-26 06:57 编辑

从图片可以看到,vol 命令先查找软盘,从软盘 0 一直查到软盘 A。这是一个错误。

看 vol 执行过程中的这段代码:
  /* Search in hard disks first, since floppies are slow */
        for (drive = 0; drive <= 0xff; drive++)

在注释中说,先查找硬盘,但实际的代码,却是先查找软盘。

第二个错误是,当启动盘是 (hd0) 而不是 (fd0) 的时候(这也正是报告者的实际情况),grub4dos 会在 bios 数据区中设定软盘个数为 0, 有效屏蔽掉软盘操作。但 vol 和 uuid 命令不管软盘个数的设置,直接使用软盘 0 ~ 10。

第三个错误是,bios 的软盘个数不可能超过 4 个,而 uuid 和 vol 命令使用了 11 个软盘(软盘0 ~软盘10,也就是图片中显示的软盘 0 ~ A,十六进制)。

所查找的这 11 个软盘,正好与 uuid 和 vol 中的代码是吻合的:

        if ((drive > 10 && drive < 0x80) || (drive > (*((char *)0x475) + 0x80) && drive < 0x9f))
                        continue;

可能还有其它错误。

11 个软盘查找结束后,该去查找硬盘了。然而此时却死机了。就不知道,究竟是访问硬盘时死机了呢,还是在没开始访问硬盘之前就已经死机了。

这个 BIOS 确实在误导我们。它没有那么多软盘,却让那么多软盘的 EBIOS 接口返回成功。

而且,所有的软盘,其扇区 0 都是可读的,而且,能够从其扇区 0 计算出 H=255, S=63。怀疑这全都是 USB 硬盘的数据。就是说,这个 BIOS 让所有的软盘的扇区 0 的数据,都取自 USB 硬盘的扇区 0。

此时估计一下,死机的原因。

当 grub4dos 去访问不存在的那些软盘的时候,BIOS 本身可能发生了错乱(或者是 BIOS 故意自杀),导致此后在访问硬盘时死机。这个可能性较大。当然,死机还可能是别的原因。


补充:

刚刚看了 0.4.5c 里面的 uuid 命令,是正确的,不存在上述问题。

回复

使用道具 举报

 楼主| 发表于 2019-6-27 07:02:06 | 显示全部楼层
最新进展——

报告者不耐烦了,他表示不想继续提供报告了,他说他已经提供了足够的信息。但他并没有充分地回应大家的要求,他是一种敷衍了事的态度。针对他的表白,我也给出了同样的表示。我说,如果你放弃,我也放弃,就当成不曾发生过这些 issues/bugs/reports。

我原打算在 wuyou 和 reboot.pro 之间当个翻译(传话筒),方便开发者和 bug 报告者互相交流、对话。现在不需要了。我可以把节省下来的时间用在别的方面了。

回复

使用道具 举报

发表于 2019-6-27 07:39:08 来自手机 | 显示全部楼层
已经对vol做了些改进,正在测试中。

点评

vol 的毛病只是一个小毛病,不影响大局。真正的问题是,grub4dos 无法访问那个 4T 大硬盘上 GPT 里面的分区中的文件。yaya 若有时间,可以去那里看看。如果能解决问题,当然是最理想的了。  详情 回复 发表于 2019-6-27 08:43
回复

使用道具 举报

 楼主| 发表于 2019-6-27 08:43:16 | 显示全部楼层
2011yaya2007777 发表于 2019-6-27 07:39
已经对vol做了些改进,正在测试中。

vol  的毛病只是一个小毛病,不影响大局。真正的问题是,grub4dos 无法访问那个 4T 大硬盘上 GPT 里面的分区中的文件。yaya 若有时间,可以去那里看看。如果能解决问题,当然是最理想的了。
回复

使用道具 举报

发表于 2019-6-27 09:01:16 来自手机 | 显示全部楼层
我看了,但是无法发言。建议他把vhd放到第一分区,如果能找到,就肯定是读2T扇区的问题。现在虽然可以读64位,但是不少函数任然使用32位读。

点评

我暂时抽不处时间弄这个事了。  详情 回复 发表于 2019-6-27 09:17
回复

使用道具 举报

 楼主| 发表于 2019-6-27 09:17:36 | 显示全部楼层
2011yaya2007777 发表于 2019-6-27 09:01
我看了,但是无法发言。建议他把vhd放到第一分区,如果能找到,就肯定是读2T扇区的问题。现在虽然可以读64 ...

我暂时抽不处时间弄这个事了。
回复

使用道具 举报

发表于 2019-6-27 14:56:40 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2019-6-27 14:59 编辑

         关于grub4dos访问GPT分区的情况,在一个网友的电脑上似乎遇到过,他发来了截图。但我不确定是什么原因,另外由于是网友的电脑,操作系统没有启动,grub4dos没法远程,操作不方便,所以我也无法准确地汇报和反馈问题。大概的情况是,vdf所在的分区是GPT分区,vdf放在磁盘靠后面的扇区可能vdf无法被找到,会出现我的电脑里面能够看到vdf存在,但是引导的时候find --set-root xxxx.vdf提示“File not found”的问题,grub4dos版本是2019-03-25,最后似乎是把vdf放在MBR硬盘上解决问题,记不清了。
        反馈这些问题需要一定的操作能力才行,不是自己的电脑很难反馈,因为需要较多测试来定位问题。
回复

使用道具 举报

发表于 2019-11-9 12:07:23 | 显示全部楼层
真的好希望Grub4dos能够移植到UEFI+GPT模式下,真的很难找到一个能与grub4dos匹敌的启动管理器,为了方便使用grub4dos,我把所有使用UEFI启动的新机硬盘都改成MBR模式,然后安装grub4dos,在我看来,一个没有grub4dos的硬盘是无法使用的。

点评

要使用EFI的话, 我倒是觉得可以研究一下GRUB2 然后想办法把一些GRUB4DOS特有的功能移稙过去. 要完全移稙一是比较麻烦,二是目前没有人做这个事情. 我还没有使用过GRUB2,也不知目前GRUB2的具体情况(有大  详情 回复 发表于 2019-11-13 13:20
回复

使用道具 举报

发表于 2019-11-10 11:48:39 | 显示全部楼层
我把所有使用UEFI启动的新机硬盘都改成MBR模式,然后安装grub4dos


氏啊,屮也用惯了 grub4dos 。。。
现在见着块硬盘,就想搞 grub4dos 装上去,不装就不舒服。

回复

使用道具 举报

发表于 2019-11-12 13:59:15 | 显示全部楼层
大大们商讨下G4D支持UEFI+GPT的方法吧,真的感觉G4D很方便
回复

使用道具 举报

发表于 2019-11-13 13:20:05 | 显示全部楼层
Climbing 发表于 2019-11-9 12:07
真的好希望Grub4dos能够移植到UEFI+GPT模式下,真的很难找到一个能与grub4dos匹敌的启动管理器,为了方便使 ...

要使用EFI的话,

我倒是觉得可以研究一下GRUB2

然后想办法把一些GRUB4DOS特有的功能移稙过去.

要完全移稙一是比较麻烦,二是目前没有人做这个事情.

我还没有使用过GRUB2,也不知目前GRUB2的具体情况(有大致看了下应该功能还是挺强的)

因工作的关系,现在没有太多时间研究这些.

点评

grub2我倒是用过一些,用法已经跟grub4dos差别很大(还需要个人定制),而且,过于繁琐。当然,能够将Grub4dos的主要功能移植上去也是一个比较好的解决方案。另一个兄弟(@wintoflash) 已经解决了map的问题,对于我来  详情 回复 发表于 2019-11-13 16:08
回复

使用道具 举报

发表于 2019-11-13 16:08:09 | 显示全部楼层
chenall 发表于 2019-11-13 13:20
要使用EFI的话,

我倒是觉得可以研究一下GRUB2

grub2我倒是用过一些,用法已经跟grub4dos差别很大(还需要个人定制),而且,过于繁琐。当然,能够将Grub4dos的主要功能移植上去也是一个比较好的解决方案。另一个兄弟(@wintoflash) 已经解决了map的问题,对于我来说,如果能够如同Grub4dos那样识别ntldr、io.sys、bootmgr及其他可以chainloader的东西,那么基本上就实现了90%的主要功能。

点评

感谢提醒,我很久没关注过grub2了,因为我前面说过,我一直是使用mbr+grub4dos方式。新来的机器我都将硬盘从gpt改成mbr,然后UEFI改成Legacy优先。看来可以研究一下grub2的用法了。  发表于 2019-11-15 18:36
我看了下识别ntldr/bootmgr的已经有了 ntldr模块应该就可以使用, io.sys的没有发现 不过EFI模式下这些都没有用处^_^  发表于 2019-11-14 17:20
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-30 11:30

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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