无忧启动论坛

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

[讨论] 关于分区表项法中grldr的写法

[复制链接]
跳转到指定楼层
1#
发表于 2014-9-2 20:55:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 lbw2007 于 2014-9-3 16:59 编辑

自从使用了P大的分区表项法制作双启FBA以后(原帖http://bbs.wuyou.net/forum.php?mod=viewthread&tid=328601),原来的启动本地windows系统菜单便不好使了:

title 1.启动本地windows系统
find --set-root --devices=h /bootmgr || find --set-root --devices=h /ntldr
map () (hd0)
map (hd0) ()
map --rehook
find --set-root --devices=h /bootmgr || find --set-root --devices=h /ntldr
chainloader /bootmgr|| chainloader /ntldr

直接执行的话会进入uefi启动的win8pe。因为没看见过相关的帖子,我自己分析了一下
*没有映射efi映像,即没有将8pe.img这个分区映像添加到分区表之前,分区表的结构为:
(ud)——UD区
(hd0,0)——U盘可见区
*映射EFI区之后,分区结构变为:
(ud)——UD区
(hd0,0)——U盘可见区
(hd0,1)——uefi区

也就是说,按照原来的写法:grub会先在hd0中的uefi区中搜索到bootmgr并set root(因为我的uefi分区下存在bootmgr文件);接下来的两条map命令其实也仅仅是自己和自己调换并仿真;最后加载了uefi区中的bootmgr。实际执行效果等同于:
find --set-root --devices=h /bootmgr || find --set-root --devices=h /ntldr
chainloader /bootmgr|| chainloader /ntldr

因为我是小白,对grub命令不甚了解,所以我用小白的方法改良了一下:(红色字体代表有所改动)

title 1.启动本地windows系统
map (hd1) (hd0)
map (hd0) (hd1)
map --rehook
find --set-root --devices=h /bootmgr || find --set-root --devices=h /ntldr
chainloader /bootmgr|| chainloader /ntldr
改了以后在一部分机器上正常了,但是还有一小部分机器依然无效。我对此非常的费解:grub不是会把引导分区(即grldr所在分区)的设备设为hd0吗?百般无奈下,我又改了改:

title 1.启动本地windows系统
find --set-root --devices=h /SOURCES/boot.wim
map (hd1) ()
map () (hd1)
map --rehook
find --set-root --devices=h /Boot/BCD || find --set-root --devices=h /ntldr
chainloader /bootmgr|| chainloader /ntldr

以前不能正常启动的现在都能进到本地系统了。简单解释一下:我用的8pe是我心如水8pe,其中/SOURCES/boot.wim只有8pe中才存在,其他分区内检测不到自然就不会被set root了。
先搜索一个只有8pe中才包含的文件并将所在分区设为root区;然后将root区所在磁盘和hd1互换并仿真;最后搜索只有硬盘中win7或XP才存在的文件,将其分区set root并引导。

这样写确实解决了问题,但还是感觉怪怪的,不专业。
咱们g4d区相对来说还有挺有人气的,如果能帮忙提提意见的话,我也没白写,您也没白看。菜单嘛虽然挺小众化,但是也不是很好弄。本人不才,请指正!

2#
发表于 2014-9-3 14:49:00 | 只看该作者
分区表项法那个帖子里,某楼曾经有网友提供一个现成bootmgr(好像还有bcd),可以放在efi而不是boot文件夹下。
回复

使用道具 举报

3#
 楼主| 发表于 2014-9-3 16:28:58 | 只看该作者
谢谢P大,现在是BIOS启动U盘之后,g4d找不到本地系统。改不改bootmgr路径好像没什么关系……
回复

使用道具 举报

4#
发表于 2014-9-5 15:43:37 | 只看该作者
本帖最后由 mdyblog 于 2015-1-14 17:15 编辑

这样写可能清楚些(0x80 就是hd0的数值形式):
title 1.启动本地windows系统
    rootnoverify (hd1,0) || rootnoverify (hd1,1) || rootnoverify (hd1,2) || rootnoverify (hd1,3) || rootnoverify (hd1,4) || set _=
    find --set-root --devices=h /boot/BCD || find --set-root --devices=h /ntldr
    set /A rootdrv=*0x82A0 & 0xFFFF
    if not %rootdrv% == 0x80 map (%rootdrv%) (0x80)
    if not %rootdrv% == 0x80 map (0x80) (%rootdrv%)
    if not %rootdrv% == 0x80 map --rehook
    if not %rootdrv% == 0x80 rootnoverify  (0x80) || set _=
    find --set-root --devices=h /boot/BCD || find --set-root --devices=h /ntldr
    chainloader /bootmgr || chainloader /ntldr


要注意,如P大所说:
8pe的 /bootmgr 不要 放在 /下面。否则 和 本地硬盘混淆。

其实 原来也没错的。

其实你碰到的问题就是:8pe的 /bootmgr  和 本地硬盘的/bootmgr , 混淆。
上面菜单 鲁棒点。


点评

学到新知识了!谢谢您的回答!  发表于 2014-9-5 16:51

评分

参与人数 1无忧币 +5 收起 理由
lbw2007 + 5 很给力!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-11 17:55

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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