无忧启动论坛

 找回密码
 注册
搜索
WEPE笔记本电脑手机维修小包 IT发烧友的必备工具最纯净的「微PE装机优盘」UEPON大师作品卡瑞飞系统和装机二合一超级U盘
无忧启动论坛唯一网址:bbs.wuyou.net系统gho:最纯净好用系统下载站广告联系 QQ:184822951 微信:wuyouceo
查看: 6330|回复: 54

menu.wee 的一点微调,chenall 留意一下

  [复制链接]
发表于 2015-7-22 21:58:19 | 显示全部楼层 |阅读模式
本帖最后由 不点 于 2015-7-22 21:59 编辑

背景:我用 diskgen 调整 C 盘分区大小之后,C 盘 PBR 代码(是微软的代码)失效。如果是 GRLDR 的代码,则不会失效。但微软的代码就可能失效了。用失效的代码启动,则必定是死机。我已经遇到好几次死机了。修复的办法是用 BootICE 重新建立 PBR(修复后可以正常启动)。

目前的 menu.wee 的默认启动项目如下:
  1. title 1. Windows
  2. find --set-root --active
  3. +1
  4. find --set-root /bootmgr
  5. /bootmgr
  6. find --set-root /ntldr
  7. /ntldr
复制代码


它首先查找活动分区,只要发现了活动分区,就加载并启动活动分区的 PBR。

另外,上述代码在 find 活动分区失败时,也要执行一个扇区,这个扇区就是 MBR。这样就成无限循环了:反复执行 MBR,反复找不到活动分区。这应该也是一个 bug。

确实有可能存在没有活动分区的情况。在纯粹 Linux 环境下(当用户没有安装微软的操作系统时),这就有可能不存在活动分区了。




言归正传。当存在活动分区,并且活动分区的 PBR 导致死机时,执行 +1 就是执行这个 PBR,此时必然死机。

可以改进一下,仅当活动分区中存在 bootmgr 或 ntldr 时,才启动它。

改进后的代码如下(未经测试),供 chenall 研究。改进的要点是,避免执行“+1”这个容易引起失败的引导扇区代码。

  1. title 1. Windows
  2. find --set-root --active /bootmgr
  3. /bootmgr
  4. find --set-root --active /ntldr
  5. /ntldr
  6. find --set-root /bootmgr
  7. /bootmgr
  8. find --set-root /ntldr
  9. /ntldr
复制代码


下面这个是不是更好?请 chenall 确认一下:

  1. title 1. DOS/Windows
  2. find --set-root --active /bootmgr /bootmgr
  3. find --set-root --active /ntldr /ntldr
  4. find --set-root --active /io.sys /io.sys
  5. find --set-root /bootmgr /bootmgr
  6. find --set-root /ntldr /ntldr
  7. find --set-root /io.sys /io.sys
复制代码


另外,再增加一个进入 command line 的菜单项:

  1. title 6. Command Line
  2. exit
复制代码


其好处是,可以提醒那些不太了解 Wee 的用户,此时可以进入命令行,来对付那些启动失败的情况。

这是“用户友好”的。其实也是个善意的广告,让用户知道此时有命令行可以进入。

评分

参与人数 1无忧币 +5 收起 理由
天使的魔翼 + 5 解决了大问题,

查看全部评分

发表于 2015-7-22 22:26:43 | 显示全部楼层
我在PE下用DiskGenius调整过C盘插屁大小,暂时没发现引导问题,不过不记得有没有重建过引导了...
回复

使用道具 举报

发表于 2015-7-22 23:24:34 | 显示全部楼层
  了解下,不点大师指点。
回复

使用道具 举报

 楼主| 发表于 2015-12-12 12:28:31 | 显示全部楼层
本帖最后由 不点 于 2015-12-12 12:53 编辑

又作了少量微调,贴出完整的菜单:
  1. find --set-root /boot/grub/grldr
  2. /boot/grub/grldr
  3. timeout 1
  4. default 0

  5. title 1. DOS/Windows
  6.     find --set-root --active /bootmgr /bootmgr
  7.     find --set-root --active /ntldr /ntldr
  8.     find --set-root --active /io.sys /io.sys
  9.     find --set-root /bootmgr /bootmgr
  10.     find --set-root /ntldr /ntldr
  11.     find --set-root /io.sys /io.sys

  12. title 2. GRUB4DOS
  13.     find --set-root /BOOT/GRUB/GRLDR /BOOT/GRUB/GRLDR
  14.     find --set-root /BOOT/GRUB.EXE /BOOT/GRUB.EXE
  15.     find --set-root /BOOT/GRLDR /BOOT/GRLDR
  16.     find --set-root /grldr /grldr

  17. title 3. Plop Boot Manager
  18.     find --set-root /BOOT/GRUB/PLPBT.BIN /BOOT/GRUB/PLPBT.BIN

  19. title 4. Vboot
  20.     find --set-root /vbootldr /vbootldr

  21. title 5. Burg
  22.     find --set-root /buldr /buldr

  23. title 6. Previous MBR
  24.     (hd0)1+1

  25. title 7. Command Line
  26.     exit
复制代码


解释一下。第一项菜单,是默认要执行的。先从活动分区查找 DOS、Windows 的启动文件。如果存在,就启动它。如果活动分区没有找到 Windows 的启动文件,那就在其他分区寻找。如果找到,也会试图启动它。如果都没找到,则属于启动失败。当 wee 的某个菜单项失败时,都是进入命令行,等待用户的进一步调试和处理。

第六项菜单,启动保存在第二扇区上的“先前的 MBR 代码”。如果这个扇区不含 55 AA 合法启动标志,那将拒绝启动,给出失败信息。失败后进入命令行等待用户干预。如果这个扇区含有 55 AA 合法启动标志,则把控制权交给这个扇区。

第七项菜单,进入命令行。当默认菜单会产生死机或其他不正常情况时,这个菜单就是有用的了。


点评

如果MBR安装的是wee,(hd0)1+1用法有没有问题?  详情 回复 发表于 2015-12-17 09:33
回复

使用道具 举报

 楼主| 发表于 2015-12-16 11:09:12 | 显示全部楼层
今天给别人装机时,刚好证实了,上述菜单解决了 NTLDR is missing 的问题。

BOOTICE 里面的 Wee 的默认菜单,会导致 NTLDR is missing 启动失败,把菜单更改为上述菜单之后,顺利启动 Windows。

因此,建议 BOOTICE 的作者更新 Wee 的默认菜单。

回复

使用道具 举报

发表于 2015-12-16 19:45:54 | 显示全部楼层

点评

请教: 1.在https://github.com/chenall/grubu ... 102dd173d76a6bed065贴出的用法中,每行前有一个+号或-号,不知是何意,想请解释下。 2.wee在gpt分区硬盘上测试未成功的问题: 我用bootice将以下菜单写  详情 回复 发表于 2016-1-29 10:12
回复

使用道具 举报

发表于 2015-12-16 21:08:39 | 显示全部楼层
wee最新版本在那里下了? 以前的都不能下了. 最新的可以做个release的吗?
回复

使用道具 举报

发表于 2015-12-17 09:33:00 | 显示全部楼层
本帖最后由 cchessbd 于 2015-12-17 09:45 编辑
不点 发表于 2015-12-12 12:28
又作了少量微调,贴出完整的菜单:


如果MBR安装的是wee,(hd0)1+1用法有没有问题?

第六项菜单,启动保存在第二扇区上的“先前的 MBR 代码”。如果这个扇区不含 55 AA 合法启动标志,那将拒绝启动,给出失败信息。失败后进入命令行等待用户干预。如果这个扇区含有 55 AA 合法启动标志,则把控制权交给这个扇区。

用winhex看了保存下来的wee.bin,明白了,不会启动这个扇区。
回复

使用道具 举报

发表于 2015-12-21 00:30:25 | 显示全部楼层
支持wee做的更好,让我们多一个更好的选择~
回复

使用道具 举报

发表于 2016-1-27 13:25:51 | 显示全部楼层
本帖最后由 cchessbd 于 2016-1-27 13:28 编辑

不点大大,第一、二行代码代码是应该合并为一行还是本来就是两行?

  1. find --set-root /boot/grub/grldr /boot/grub/grldr
  2. timeout 1
  3. default 0

  4. title 1. DOS/Windows
  5. find --set-root --active /bootmgr /bootmgr
  6. find --set-root --active /ntldr /ntldr
  7. find --set-root --active /io.sys /io.sys
  8. find --set-root /bootmgr /bootmgr
  9. find --set-root /ntldr /ntldr
  10. find --set-root /io.sys /io.sys

  11. title 2. GRUB4DOS
  12. find --set-root /BOOT/GRUB/GRLDR /BOOT/GRUB/GRLDR
  13. find --set-root /BOOT/GRUB.EXE /BOOT/GRUB.EXE
  14. find --set-root /BOOT/GRLDR /BOOT/GRLDR
  15. find --set-root /grldr /grldr

  16. title 3. Plop Boot Manager
  17. find --set-root /BOOT/GRUB/PLPBT.BIN /BOOT/GRUB/PLPBT.BIN

  18. title 4. Vboot
  19. find --set-root /vbootldr /vbootldr

  20. title 5. Burg
  21. find --set-root /buldr /buldr

  22. title 6. Previous MBR
  23. (hd0)1+1

  24. title 7. Command Line
  25. exit
复制代码

点评

此处一行和两行,有细微差别,差别不是很大,应该都行吧。 各菜单项里面的文件名和路径,都应该是小写字母,而我年纪大了疏忽大意,有些就弄成了大写。最好都统一成小写。  详情 回复 发表于 2016-1-27 15:41
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2019-12-7 18:34

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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