无忧启动论坛

标题: GRLDR无法启动硬盘上的bootmgr(已解决) [打印本页]

作者: pppfj    时间: 2013-10-4 17:17
标题: GRLDR无法启动硬盘上的bootmgr(已解决)
本帖最后由 pppfj 于 2013-10-4 20:45 编辑

这几天给电脑上装多系统,折腾毁了,花了3天就是搞不定,不知是不是bug。情况如下:
1、硬件环境:
   thinkpad X201i,60G的kingmax固态硬盘,等分为3个主分区,各20G空间。BIOS为Phoenix 1.15。
2、软件环境:
   grub4dos 0.4.5c,C盘为win$7。
3、故障现象:
   安装win系统后,安装程序自动修改了MBR,C盘系统可以顺利启动。
   使用winhex小心把grub4dos 0.4.5c版本中的grldr.mbr写入mbr前18扇区,第1扇区只写入446字节,保留分区表。并把第1扇区的512字节一个不拉拷贝到了第2扇区。把grldr悄悄放入C盘根目录,并在每个分区根目录下都放了一个。
   重启系统后,顺利进入grub>提示符,执行chainloader /bootmgr,顺利载入,boot后出错,出错信息见下图:


4、排错过程:
   重新启动到grub>提示符下,执行命令:
  1. grub>root
  2. root is (hd0,0)
  3. grub>find
  4. (hd0,0)
  5. (hd0,1)
  6. (hd0,2)
  7. grub>blocklist /bootmgr
  8. (hd0,0)16160248+750
复制代码
无论如何处理,都无法启动第一分区的bootmgr,但可以用grldr启动第三分区上的PE。插上U盘,从U盘启动grldr,仍无法启动硬盘第一分区的bootmgr。
5、改回原MBR:
   无奈,U启后进入PE,重新用winhex把备份在mbr区第2扇区的512字节写回第1扇区,重启后,又可以顺利启动第一分区的w7系统。
   更奇怪的是,此时如果用U盘启动机器,进入grub>提示符,执行:
  1. grub>chainloader (hd1,0)/bootmgr
  2. grub>boot
复制代码
可以顺利引导系统进入C盘系统,实在是奇怪。
    请教大师,这种情况是bug吗?我是不是无法在硬盘上通过grldr引导多系统了?
作者: sgw888    时间: 2013-10-4 17:19
这个问题与G4D 没有关系.
你肯定是修改了 磁盘签名,导致BCD出错,所以才会这样的.
作者: sgw888    时间: 2013-10-4 17:21
你最好用BOOTICE安装到主引导. 不建议用这种手动的方式去安装,在你不熟悉的情况下.
作者: pppfj    时间: 2013-10-4 17:45
本帖最后由 pppfj 于 2013-10-4 17:51 编辑
sgw888 发表于 2013-10-4 17:19
这个问题与G4D 没有关系.
你肯定是修改了 磁盘签名,导致BCD出错,所以才会这样的.


我用chainloader (hd0,1)+1的命令得到的结果和上图完全一样。
难道nt6的MBR的功能不是载入活动分区的第一扇区并移交控制权吗?我一直在怀疑bootmgr启动时是不是检查mbr的某些字节或标志。
如您所述,难道nt6短短的的446字节的mbr中还存有磁盘签名吗?——我印象里磁盘的uuid是存在于分区中的pbr中的。
作者: 不点    时间: 2013-10-4 18:23
这是一个巨大的误区。

MBR 中,除了古老的末尾 64 字节分区表 + 2 字节的 55 AA 引导记录合法标志之外,微软在 NT 系统中还定义了新的磁盘签名域,位于偏移 0x1B8 处,占用 4 字节。

你应该保持 MBR 扇区末尾的 72 字节不动才可以安全启动 Windows。你修改的 446 字节,修改多了,你破坏了微软保存的磁盘签名。你应该只修改 440 字节才正确。


作者: pppfj    时间: 2013-10-4 18:46
不点 发表于 2013-10-4 18:23
这是一个巨大的误区。

MBR 中,除了古老的末尾 64 字节分区表 + 2 字节的 55 AA 引导记录合法标志之外, ...

谢谢大师点拨。
    看到sgw888的回复后,我一直在google bcd方面的知识,费了半天劲,刚刚搞明白,可巧大师就出手点拨了,双双收获了。这就着手去处理这几个字节。
    还是大师的点拨更切中要害,再次谢谢!
作者: pppfj    时间: 2013-10-4 18:54
    多系统启动可以很简单,如grldr。我想,ms搞了这么一个不直观的、巨复杂的、很晦涩的BCD,目的就是极为严格限制win系统运行的硬件环境,为各种ghost版本满天飞制造更多障碍。
作者: sgw888    时间: 2013-10-4 20:09
pppfj 发表于 2013-10-4 18:46
谢谢大师点拨。
    看到sgw888的回复后,我一直在google bcd方面的知识,费了半天劲,刚刚搞明白,可巧 ...

本来只是想让你用 工具去解决这个问题的.  因为我觉得你用WINHEX这样直接安装实在不是太方便.
所以也就没细说 磁盘签名的事.
作者: pppfj    时间: 2013-10-4 20:26
sgw888 发表于 2013-10-4 20:09
本来只是想让你用 工具去解决这个问题的.  因为我觉得你用WINHEX这样直接安装实在不是太方便.
所以也就没 ...

谢谢你的回复,给我指引了线索,经过学习增加了知识。
作者: pppfj    时间: 2013-10-4 20:44
  感谢两位大师的指点,问题已经成功消除。标题修改为已解决,为其它遇到类似问题的人留个线索。
  原来,我写入grldr.mbr后的磁盘签名位置全是0x00,当更正问题再次打开的时候,发现签名位置已经不是00了,不知何时、不知被哪个程序写入了另外的、不同的4个字节。
  不能启动后,我只用U盘启动过PE,只有两个程序有嫌疑:一是被grldr引导但没有成功启动系统的硬盘上的bootmgr启动引导程序;二是PE内核。二者之一在发现磁盘没有签名,偷偷增加了一个?
  MS这么干,很耐琢磨。
作者: 不点    时间: 2013-10-4 21:37
多系统启动可以很简单,如grldr。我想,ms搞了这么一个不直观的、巨复杂的、很晦涩的BCD,目的就是极为严格限制win系统运行的硬件环境,为各种ghost版本满天飞制造更多障碍。


关于磁盘签名,微软并未给开源启动软件制造太多障碍,它是明文,没有加密。至于说微软是否在 Windows 系统中把这个磁盘签名用于加密的目的,比如用于正版验证或用户身份验证,这我就不清楚了。这或许就是你所说的 “限制运行的条件”,达到控制用户的目的。

微软从 VISTA 开始,用 bootmgr (和 BCD) 取代了 NTLDR (和 boot.ini),对当时的 GRLDR 造成了冲击。grub4dos 的开发者被迫做出调整,以适应这种变化。但此后的变化均不影响 grub4dos 本身的启动逻辑。直到 Win8 之后主板制造商取缔 BIOS,才又一次影响了 grub4dos。






欢迎光临 无忧启动论坛 (http://bbs.c3.wuyou.net/) Powered by Discuz! X3.3