无忧启动论坛

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

[发布] 基于GRUB4DOS的BOOTSECT

[复制链接]
发表于 2011-5-7 16:41:45 | 显示全部楼层 |阅读模式
Bootsect for grub4dos v1.0 by sgw888 20110507
首先感谢chenall sratlf zhaohj 的帮助

BOOTSECT 初步设计测试完成.
请chenall sratlf zhaohj 帮忙检查测试BUG以及修正存在的语法错误。
我已初步测试,未发现问题。但一个人力量毕竟有限。

2011-6-14 更新日志: 菜单版BUG修正. 上一版本中在选择硬盘界面,如果取消当前的选择,会直接返回主菜单,而不是返回硬盘选择界面,现已修正,在核心执行部分,提示是否继续执行操作时,选择否仍会继续执行,现已修正。 上传两个附件。 附件一为 菜单版修正。 附件二为演示ISO。方便菜鸟测试。其中有UNIFONT 跟中文字库,分别有中英文显示的BOOTSECT,另外还有磁头数检查与修正程序。对于喜欢中文显示的可以选择切换到中文菜单,提示为中文显示。

2011-6-3 更新日志: 在zhaohj的帮助下,BOOTSECT 菜单版已完工,请大家帮忙测试反馈。菜单版如果没有BUG,那对于菜鸟来说应该有帮助,可以不用进入PE而进行引导代码的刷新操作了。

2011-5-26 更新日志:  在CHENALL 上次的优化之后,根据C大的建议,增加了清除1-62扇区的判断代码,防止破坏用户数据.增加安全性.如果此版没有BUG,会停止命令行版的更新. 包括代码优化.
如果不出意外,此次更新为 命令行版的终结版了.   此次上传两个附件.  一个附件是 BOOTSECT 单文件封装版.  另一个附件是ISO映像,其中包含了 BOOTSECT 单文件版,另外,其中还有一个 HEADCHK 活动分区磁头数检查与修正的程序.


2011-5-22 更新使用帮助:

bootsect 因为是基于GRUB4DOS的,所以必须在GRUB4DOS的环境下才可以使用。它就是一个批处理,跟DOS下的批处理类似。因为GRUB4DOS 本身的内部命令就很强大,所以可以直接利用GRUB4DOS的内部命令来进行扇区读写的操作,更新引导代码无非就是写扇区的操作。有人提到写DOS下的,以我的水平显然做不到,我个人认为根本没有必要。启动GRUB4DOS容易,还是启动DOS更容易??首先GRUB4DOS它是一个引导器 menu.lst 是它的菜单,在普通的情形下,按 c 键可以进入GRUB4DOS的控制台。 bootsect 就是在它的控制台模式下运行的一个批处理。你可以理解为XP的CMD。 bootsect 是命令行模式的。它不是菜单模式的。所以,一定要进入GRUB4DOS的命令行才可以运行。

如果BOOTSECT 存放于当前根目录,运行方法是:    /bootsect 如果是光盘启动  运行方法是  /BOOTSECT
默认的GRUB4DOS运行外部命令的存放位置是 (bd)/boot/grub/   如果你把BOOTSECT 存放于该目录,那么无需指定路径,可以直接 bootsect

更新主引导示例:
bootsect /nt52 /mbr
bootsect /nt60 /mbr
bootsect /nt52 /mbr (hd0)
bootsect /nt52 /mbr (hd1)
bootsect /nt52 /mbr (hd2)
更新DBR示例:
bootsect /nt52 sys           sys 指的是活动分区
bootsect /nt60 sys
bootsect /nt52 sys /mbr    同时更新MBR
bootsect /nt52 (hd0,0)    更新 (hd0,0) 的DBR为 NT52
清除扇区示例:
bootsect clear            清除 (hd0)  1-62
bootsect clear (hd1)    清除 (hd1) 1-62

注意: 如果是从U盘引导的GRUB4DOS , U盘可能被认为是 (hd0)  ,如果想对硬盘进行操作,一种方法是 手动指定 分区或者磁盘,比如
bootsect /nt52 (hd1,0)
bootsect /nt60 (hd2,0)
bootsect clear (hd1)
bootsect /nt52 /mbr (hd1)  不能省略参数,并且不能使用 sys 参数
另一种方法是 先进行磁盘交换。
map (hd1) (hd0)
map (hd0) (hd1)
map --hook
然后再进行操作。



2011-5-14 更新日志: 几处BUG修正。 代码优化微调。如果测试没有问题,不再更新。不打算做成菜单版的了。会用GRUB4DOS 就会用这个程序。 毕竟这个是救急用的,也是为了方便一部分人。菜鸟完全可以在PE下用BOOTICE。 或者用微软的BOOTSECT。如果对GRUB4DOS都不熟悉,还是不建议用了,怕出问题。
上传一个ISO映像。ISO映像中BOOT/GRUB中的BOOTSECT 就是封装过的了。可以直接提取。

2011-5-9 更新日志:  增加刷新FAT32 分区 MSDOS引导代码的功能,可以启动IO.SYS 。主要是为了自己方便。
修正: 当活动分区为扩展分区或者是其它未知分区时出现的GRUB4DOS 命令出错提示。
上传 封装版。  使用 jianliulin 大侠的FB工具制作。


2011-05-08 严重BUG修正!
发现NTFS刷新代码部分 有BUG,DD命令使用有误!!! 另外,更新成NT52代码时,如果原来是NT60代码,没有将原来的清除掉。已修正。
FAT32 刷新代码部分问题更大!! 原来以为只是更新DBR扇区就完事了,结果发现,DBR开始的12扇区还有代码。不懂程序代码的悲哀啊,只能是一个扇区一个扇区的去比较。

对于程序出现的BUG,非常报歉。没有认真测试就发布了。还好,我估计大部分人都没有真正去使用跟测试。

请下载的朋友,立刻删除原来的,重新下载新上传的!!!!



程序使用帮助:
以实例说明:
bootsect clear
bootsect clear (hd0)
bootsect clear (hd1)
以上清除指定磁盘 1-62扇区。功能很简单 echo -n > (hd0)1+62
bootsect /nt52 sys /mbr 刷新活动分区的DBR以及磁盘的MBR 引导代码为NT52
bootsect /nt60 sys /mbr 同上,引导代码为 NT60
/mbr 参数为可选
bootsect /nt52 (hd0,0) 更新 (hd0,0) 的DBR代码 NT52
bootsect /nt60 (hd0,0) /mbr 更新 (hd0,0)的DBR代码为NT60 同时更新MBR
bootsect /nt52 /mbr 仅执行MBR更新操作
bootsect /nt52 /mbr (hd1)

以下是牵涉到程序执行的内容:

更新MBR很简单 只要把相应的代码直接写到 硬盘开始的扇区0 只改写从0开始的440个字节就可以了。
更新DBR 需要先判断出是NTFS格式还是FAT32格式。

NTFS分区的标志是DBR扇区 从第四个字节有一个明文的NTFS的标志,如果NTFS被修改,磁盘会无法访问.
FAT32没有跟NTFS一样的标志。但第一个字节必须是0XEB 如果改写,磁盘也无法访问。
从0X52 有一个FAT32 的标志,但改成其它的,并不影响系统(xp) 的正常访问 ,用DISKGEN发现如果该标志被修改,会认为磁盘没有格式化。 这儿采取跟DISKGEN一样的判断标准,如果该处不是FAT32则认为是无法识别的分区格式,程序不执行更新引导代码的操作。

更新FAT32的引导代码,程序改写开始的三个字节 这三个字节为跳转代码 0XEB 0x58 0x90
然后从0x5A 到 0x1FF 全部为程序代码,其实最后两个字节为55AA,一块刷新也不会有问题
NT52 跟NT60的代码占用两个扇区,占用DBR第一个扇区0X5A 至结尾的部分。 还有一部分代码在DBR开始的12扇区。

MSDOS 的FAT32 代码存放于DBR开始的第一个扇区以及DBR 开始的第3个扇区。

FAT32 代码位置是固定的,只是代码的不同。

NTFS 代码除了代码本身的不同,占用的空间也不相同。跟FAT32 一样,开始三个字节为跳转代码。
从0x54 开始为代码部分。  NT52 的NTFS代码占用了3362字节 (0xD22)  也就是从 0x54 一直到代码结束
NT60 也是从 0x54 开始,但代码长度占用 4052 字节.

NTFS跟FAT32的区别是FAT32由于文件系统布局问题,程序代码是不连续的。 而NTFS分区DBR程序代码是连续的。


附件说明: 附件1为 bootsect 跟 bootldr.img 的压缩包.
          附件2为 bootsect 的 启动光盘 .

[ 本帖最后由 sgw888 于 2011-6-14 16:35 编辑 ]

bootsect.rar

18.4 KB, 下载次数: 243, 下载积分: 无忧币 -2

0508 修正BUG

bootsect.iso.rar

147.77 KB, 下载次数: 191, 下载积分: 无忧币 -2

0508 修正BUG

BOOTSECT.rar

18.73 KB, 下载次数: 210, 下载积分: 无忧币 -2

2011-05-09 更新单文件封装版

bootsect.rar

148.44 KB, 下载次数: 142, 下载积分: 无忧币 -2

2011-5-14 更新

bootsect.rar

148.4 KB, 下载次数: 202, 下载积分: 无忧币 -2

修正显示BUG

BOOTSECT单文件封装.rar

19.3 KB, 下载次数: 209, 下载积分: 无忧币 -2

单文件封装版2011-5-26命令行终结

bootsect.rar

156.7 KB, 下载次数: 187, 下载积分: 无忧币 -2

ISO 启动映像,包含了BOOTSECT 命令行终结

BOOTSECT.rar

14.91 KB, 下载次数: 130, 下载积分: 无忧币 -2

菜单版初步测试

BOOTSECT.rar

14.77 KB, 下载次数: 279, 下载积分: 无忧币 -2

菜单版BUG修正

bootsect.part1.rar

400 KB, 下载次数: 352, 下载积分: 无忧币 -2

ISO演示 附带UTF-8中文显示

bootsect.part2.rar

94.7 KB, 下载次数: 301, 下载积分: 无忧币 -2

ISO演示,附带磁头数检查与修正程序

 楼主| 发表于 2011-5-7 16:51:01 | 显示全部楼层
#2 提个问题,有没有方法确定是从U盘启动的? 就是USB-HDD 被认为是HD0 有没有方法可以检测出来呢??? 如果有方法可以判定USB-HDD 被识别为HD0,或许我们可以用批处理自动执行交换磁盘的操作。

如果上面问题无解,只能是让用户自己去交换磁盘了。
回复

使用道具 举报

发表于 2011-5-7 17:32:40 | 显示全部楼层
目前无解,没发区分是硬盘启动还是usb-hdd启动,(bd)都一样是0x80
回复

使用道具 举报

发表于 2011-5-7 17:38:10 | 显示全部楼层
如果是ud启动可以判断  (fd0,0)/fb.cfg 是否存在
回复

使用道具 举报

发表于 2011-5-7 19:53:17 | 显示全部楼层
先支持一下,要改天才能测试了。
回复

使用道具 举报

发表于 2011-5-7 20:31:00 | 显示全部楼层
为什么搞一个BOOTLDR.IMG?,体积变大了,能否直接把里面的mbr文件放到外面来?
bootsect /nt52 /mbr (hd1)
就是把nt52文件直接放到根目录,然后这样就刷进去了
回复

使用道具 举报

 楼主| 发表于 2011-5-7 20:53:56 | 显示全部楼层
回楼上, bootldr.img 是可以压缩成 GZ格式的。压缩后,并不大。 就算是把 mbr文件放到外面也不会减少它的大小。 另外 bootldr.img 中有多个引导代码文件。放到外面就更乱了。 如果你觉得很有必要全部放到外面,也不是不可以。 你可以自己调整 批处理。 把IMG包中的所有文件放到一个固定的目录。 然后用记事本打开批处理。 替换所有的 (fd0) 为你存放引导代码的位置,并且把刚开始的加载映像到内存的语句删除就行了。
回复

使用道具 举报

发表于 2011-5-7 21:47:05 | 显示全部楼层
很好 啊  dos下  mbr引导 修复工具 又来了个 支持!!!!!!!
回复

使用道具 举报

发表于 2011-5-7 21:57:05 | 显示全部楼层
如果没问题了,就不要扩展其它功能了,稳定第一

希望正式版就是终结版
回复

使用道具 举报

 楼主| 发表于 2011-5-8 09:02:00 | 显示全部楼层
目前主要是测试BUG。功能不会再增加了。因为微软的BOOTSECT也就是上面那些功能。我个人觉得,功能已经够用了。 会用微软的BOOTSECT,这个应该也不成问题。只要懂得GRUB4DOS的磁盘跟分区表示法就行了。
另外需要注意,如果是从U盘启动,被识别为HD0的情况,需要用户自己去确定硬盘的磁盘号是HD0还是HD1。#2已经说过了,目前这个问题无解。

另外,有帮忙测试的,请使用虚拟机测试。万一使用真实机导致启动不了机器,那我可成罪人了。

下面是一些使用常识: 如果你的主引导使用了 1JF9 GRLDR.MBR 阿文的F10等第三方主引导,请不要随意使用 清除1-62扇区的功能,建议在使用清除1-62 扇区之前先执行重写主引导的操作。因为上述第三方主引导管理软件占用了1扇区跟后面的扇区,只清除1-62,不重写主引导可能会造成一些预料不到的错误。
另外,WIN7使用软激活的,如果你的软激活代码存放于主引导或者是DBR,请不要执行代码更新操作,那样,你的软激活会失效。。。。。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2019-12-10 06:09

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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