无忧启动论坛

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

[发布] 基于GRUB4DOS的BOOTSECT

[复制链接]
跳转到指定楼层
1#
发表于 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, 下载次数: 250, 下载积分: 无忧币 -2

0508 修正BUG

bootsect.iso.rar

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

0508 修正BUG

BOOTSECT.rar

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

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

bootsect.rar

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

2011-5-14 更新

bootsect.rar

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

修正显示BUG

BOOTSECT单文件封装.rar

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

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

bootsect.rar

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

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

BOOTSECT.rar

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

菜单版初步测试

BOOTSECT.rar

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

菜单版BUG修正

bootsect.part1.rar

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

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

bootsect.part2.rar

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

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

100#
发表于 2011-10-20 14:13:09 | 只看该作者

回复 #1 sgw888 的帖子

能不能增加激活某分区为活动分区?
回复

使用道具 举报

99#
发表于 2011-6-14 16:58:06 | 只看该作者
收下了,下次清理mbr方便了。
回复

使用道具 举报

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

使用道具 举报

97#
发表于 2011-6-4 12:04:45 | 只看该作者
原来考虑想在这里停留一下,没有写完,应该是
\&\& pause --wait=10 这样的语句。
回复

使用道具 举报

96#
 楼主| 发表于 2011-6-3 19:34:20 | 只看该作者
echo -e checkrange 0x80 read 0x82a0 \&\& echo If be USB-HDD Boot,your first harddisk may be U-Pan \&\& >> (rd)+1

上面这一句似乎有问题.

应该把最后面的  \&\& 去掉吧?? 好像没什么作用啊. 实际上不去掉也不会有什么问题.
回复

使用道具 举报

95#
发表于 2011-6-3 17:29:11 | 只看该作者
支持一下,请大家先虚拟机测试!

大概看了一下没问题!
回复

使用道具 举报

94#
 楼主| 发表于 2011-6-3 17:16:26 | 只看该作者
感谢 zhaohj 的帮助。zhaohj 的动态菜单真的很棒。
现在 BOOTSECT 菜单版已完工,请大家帮忙测试。

BOOTSECT 是一个经过封装的单文件。在批处理执行开始,会把所有的文件载入到内存,并虚拟软驱 (fd9)  
主要文件介绍:

main.lst  主菜单
choose.lst 引导代码选择菜单
MENU.BAT 硬盘选择  动态菜单  生成批处理
maincall  调用批处理
bootsec 程序执行主体,核心操作批处理  由原来的命令行版修改而来。 简单修改。

main.lst 内容:
#主菜单框架
debug off
color white/blue blue/yellow light-red/blue 10
default 5
timeout 50
#0
title       GRUB4DOS BOOTSECT
clear
#1
title
clear
#2
title   Update MBR [Master Boot Record]
set czlx=mbr
configfile (fd9)/CHOOSE.LST

#3
title   Update DBR [Partition Boot Record]
set czlx=dbr
configfile (fd9)/CHOOSE.LST

#4
title   Clear Hard Disk 1-62 sectors
set czlx=clear
(fd9)/MENU.BAT
boot

#5
title   Return BOOTSECT Main Menu
configfile (fd9)/MAIN.LST

#6
title   Return GRUB4DOS Boot Menu
set *
map --unmap=9
map --rehook
configfile (md)4+8

#7
title   GRUB4DOS Commandline
commandline

#8
title   Reboot
reboot

#9
title   Halt
halt


choose.lst 内容:
debug off
color white/blue blue/yellow light-red/blue 10
default 5
timeout 50
#0
title       Choose Boot Code Type
clear
#1
title
clear
#2
title          nt5x
set yddm=/nt52
(fd9)/MENU.BAT
boot
#3
title          nt60
set yddm=/nt60
(fd9)/MENU.BAT
boot
#4
title          dos
set yddm=/dos
(fd9)/MENU.BAT
boot
#5
title   Return BOOTSECT Main Menu
configfile (fd9)/MAIN.LST



maincall 内容:
!BAT by sgw888
#主调用菜单
goto %czlx%

:clear
(fd9)/BOOTSEC clear %hddisk%
goto :end

:mbr
(fd9)/BOOTSEC %yddm% /mbr %hddisk%
goto :end

:dbr
(fd9)/BOOTSEC %yddm% %acpart%

:end
set nn=
set ac=
set gt=
set hdn=
set hdp=
set hddisk=
set acpart=
set czlx=
set yddm=
configfile (fd9)/main.lst


MENU.BAT 内容:
这个文件才是关键!!! 在 zhaohj 的基础上做了少许改动。
!BAT
# changelog 2011.05.25
# 考虑到U盘usb-hdd模式启动,(hd0)会被U盘占用,这在处理时要特别小心。
debug off
set ac=
set hdp=
set /a hdn=*0x475&0xff
calc %hdn% || clear && pause --wait=10 NO Harddisk && configfile (fd9)/main.lst
set /a nn=0
set /a gt=%hdn%+2
map --rd-base=0x40000 && map --rd-size=0x1000
echo debug off > (rd)+1
echo color white/blue blue/yellow light-red/blue 10 >> (rd)+1
echo default 2 >> (rd)+1
#0
echo title ==== please select Harddisk   %@date% ==== >> (rd)+1
echo clear >> (rd)+1
#1
echo title >> (rd)+1
echo clear >> (rd)+1
#2
:hdd
echo title          select hd%nn% >> (rd)+1
echo clear >> (rd)+1
echo echo hd%nn% harddisk Partition information: >> (rd)+1
echo echo >> (rd)+1
echo -e checkrange 0x80 read 0x82a0 \&\& echo If be USB-HDD Boot,your first harddisk may be U-Pan \&\& >> (rd)+1
echo geometry (hd%nn%) >> (rd)+1
echo echo >> (rd)+1
echo -e geometry (hd%nn%) \x3e (md)0x300+1 >> (rd)+1
echo -e set hddisk=(hd%nn%) >> (rd)+1
echo -e cat --locate=active (md)0x300+1 \| set ac= >> (rd)+1
echo -e if not exist ac \&\& if /i \x25czlx\x25==dbr \&\& pause --wait=10 NO Active Partition,DBR can not be updated! \&\& goto %gt% >> (rd)+1
echo -e if not exist ac \&\& echo NO Active Partition! >> (rd)+1
echo -e if not exist ac \&\& set /p sfzx=Do you want to continue?(y/n) >> (rd)+1
echo -e if not exist ac \&\& if /i #\x25sfzx\x25==#y \&\& (fd9)/MAINCALL >> (rd)+1
echo -e if not exist ac \&\& if /i not #\x25sfzx\x25==#y \&\& goto %gt% >> (rd)+1
echo -e set ac=0x\x25ac\x25 >> (rd)+1
echo -e set /a ac=\x25ac\x25-3 >> (rd)+1
echo -e cat --skip=\x25ac\x25 --length=1 (md)0x300+1 \| set hdp= >> (rd)+1
echo -e echo List Active Partition (hd%nn%,\x25hdp\x25) files: >> (rd)+1
echo echo >> (rd)+1
echo -e ls (hd%nn%,\x25hdp\x25)/ \|\| echo (hd\x25nn\x25,\x25hdp\x25) partition read error, unable to list files. >> (rd)+1
echo echo >> (rd)+1
echo -e set hddisk=(hd%nn%) >> (rd)+1
echo -e set acpart=(hd%nn%,\x25hdp\x25) >> (rd)+1
echo set /p ac=Whether correct for selected harddisk or Partition (y/n)? >> (rd)+1
echo -e if /i not \x25ac\x25==y goto %gt% >> (rd)+1
echo (fd9)/MAINCALL >> (rd)+1
echo kernel  >> (rd)+1
set /a nn=%nn%+1
if not %nn%==%hdn% && goto :hdd

#变量gt 指向本菜单
#返回bootsect 主菜单
echo title    Return BOOTSECT Main Menu >> (rd)+1
echo clear >> (rd)+1
echo configfile (fd9)/main.lst >> (rd)+1
configfile (rd)+1
exit



以上是菜单版主要文件的源码。
回复

使用道具 举报

93#
发表于 2011-5-28 13:51:51 | 只看该作者
菜单简单写了一下,你自己要补充。
menu.bat任务完成后,你要做什么事情,需要自己完善。如menu.bat任务完成,想返回主菜单,需要在合适的地方加上configfile (fd9)/MAIN.LST

sw888.rar

749 Bytes, 下载次数: 34, 下载积分: 无忧币 -2

回复

使用道具 举报

92#
发表于 2011-5-28 13:21:16 | 只看该作者
原帖由 sgw888 于 2011-5-27 17:40 发表 回 blithewind :目前的功能够用了吧? 可以更新NT52 NT60 DOS的,你还想要什么的呢? 目前也就是XP,WIN7 DOS了吧?
只是需要对mbr/dbr的备份与恢复.支持.mbr及.bin文件就可以了。存放位置可置可bootsect同级目录中.比如我要恢复wee.bmr到mbr或将我的xorldr的MBR备份到默认目录,或者进行相反的操作,在进行某些启动测试时,只要启动到grub命令行就可方便地操作,而不必进PE或其它工具进行,还是很有意义的.
回复

使用道具 举报

91#
 楼主| 发表于 2011-5-27 17:40:06 | 只看该作者
回 blithewind :

目前的功能够用了吧? 可以更新NT52 NT60 DOS的,你还想要什么的呢?
目前也就是XP,WIN7 DOS了吧?
回复

使用道具 举报

90#
发表于 2011-5-27 15:54:46 | 只看该作者
原帖由 blithewind 于 2011-5-27 14:49 发表
这个工具很好,在命令行下操作方便呀.收入合盘了,感谢LZ等人的努力.

来点建议,可将各种常用的MBR数据用尾续法封装下,现在只有nt5、nt6的,类型太少了。

另外,应增加对MBR、DBR的备份与恢复功能.

MBR不用备份,重建一个就行,可以用DG或者BOOTICE

MBR、DBR的备份与恢复功能,BOOTICE就有这种功能吧....
回复

使用道具 举报

89#
发表于 2011-5-27 14:49:31 | 只看该作者
这个工具很好,在命令行下操作方便呀.收入合盘了,感谢LZ等人的努力.

来点建议,可将各种常用的MBR数据用尾续法封装下,现在只有nt5、nt6的,类型太少了。

另外,应增加对MBR、DBR的备份与恢复功能.
回复

使用道具 举报

88#
 楼主| 发表于 2011-5-27 12:48:23 | 只看该作者
回楼上,这个工具有些功能跟BOOTICE是一样的,当然,BOOTICE功能更加强大。
只是这个工具是基于GRUB4DOS的,可以在启动系统之前进行操作。只是为了方便。  有些用户对GRUB4DOS是很陌生的,那就没有办法了。
回复

使用道具 举报

87#
发表于 2011-5-27 12:25:00 | 只看该作者
这个bootsect和bootice工具有何区别呢?

如果说和系统自带的bootsect区别的话,我觉得就是系统自带的只能局限于系统自身。xp系统的只能nt52.
回复

使用道具 举报

86#
发表于 2011-5-27 08:29:32 | 只看该作者
根据tuxw的建议,为了防止活动分区在逻辑分区后面(逻辑分区很多的情况)有可能找不到活动分区,修改菜单如下:

MENU.rar

976 Bytes, 下载次数: 16, 下载积分: 无忧币 -2

回复

使用道具 举报

85#
 楼主| 发表于 2011-5-26 20:31:55 | 只看该作者
#以下代码用于判断1-62扇区是否有数据
#可能代码段比较长,但是增加了安全性
set fqbkx=
cat --length=0 --hex %disk%+1 || goto :cpdqcw
dd if=%disk%+1 of=(md)0x200+1 || goto :cpdqcw
#以下用于检查分区表55AA标志
checkrange 0x55 calc *0x401fe&0xff || goto :wxfqb
checkrange 0xAA calc *0x401ff&0xff || goto :wxfqb
#0,80检查用于检查分区表是否有效
checkrange 0,0x80 calc *0x401be&0xff || goto :wxfqb
#分区起始LBA检查用于确定分区表项是否为空
checkrange 0 read 0x401c6 || set fqbkx=ok
checkrange 1:62 read 0x401c6 && goto :myzgkj
checkrange 0,0x80 calc *0x401ce&0xff || goto :wxfqb
checkrange 0 read 0x401d6 || set fqbkx=ok
checkrange 1:62 read 0x401d6 && goto :myzgkj
checkrange 0,0x80 calc *0x401de&0xff || goto :wxfqb
checkrange 0 read 0x401e6 || set fqbkx=ok
checkrange 1:62 read 0x401e6 && goto :myzgkj
checkrange 0,0x80 calc *0x401ee&0xff || goto :wxfqb
checkrange 0 read 0x401f6 || set fqbkx=ok
checkrange 1:62 read 0x401f6 && goto :myzgkj
if not exist fqbkx && goto :wxfqb


以上是修改的 清除1-62 扇区的判断代码.虽然比原来复杂很多,但是增强了安全性. 如果找不到分区,就是空分区表的情况下会拒绝刷新,起始扇区小于63扇区也拒绝刷新. 判断不是分区表,通过检查四个表项开始字节是不是80或者是00 来决定,如果出现了无效的取值,会拒绝刷新.
在CHENALL最后一次修改后,一直没有上传最新版,今天上传最后一个命令行版.如果没有BUG,不再修改,也不再优化或者是更新代码.算是命令行版的终结版吧.
我已在虚拟机测试过,更新主引导,分区引导,NT52 NT60 DOS  清除扇区. 有时间,会继续编写菜单版的批处理.感谢ZHAOHJ大侠的帮忙. 可能要过一段时间才能写出来,大家要等等了.
回复

使用道具 举报

84#
发表于 2011-5-26 14:11:35 | 只看该作者
@sgw888:
还是传到这里吧,你自己先测试一下。接口部分留着你自己P处理处理。

MENU.rar

1005 Bytes, 下载次数: 25, 下载积分: 无忧币 -2

回复

使用道具 举报

83#
 楼主| 发表于 2011-5-26 11:20:22 | 只看该作者
回楼上,如果你U盘进的G4D,那么 bootsect /nt52 /mbr 这样的操作可能会把U盘当成 (hd0) 而进行刷新主引导的操作。 所以,在操作之前,请使用  geometry (hd0)   
geometry (hd1) 的方式来查看一下硬盘分区表。 以确认要进行更新操作的硬盘。 如果U盘做为USB-HDD 启动,那么上述命令操作的肯定是U盘。  需要 bootsect /nt52 /mbr (hd1) 来操作,这样就可以了。

另外,ZHAOHJ正在帮我写一部分 菜单,如果写成,改进之后,就会发布菜单版了。那时候,可能会比使用命令行版要简单易懂。期待ZHAOHJ有空的时候,帮我完成一部分重要的菜单,然后,我开始改进,把命令行版变成菜单版的。
回复

使用道具 举报

82#
发表于 2011-5-26 11:03:06 | 只看该作者
如果我的U盘启动进的G4D,那么我用bootsect /nt52 /mbr这样的操作。会不会误把U盘当硬盘或者多硬盘搞错的可能。
回复

使用道具 举报

81#
 楼主| 发表于 2011-5-22 16:15:03 | 只看该作者
原帖由 木头人 于 2011-5-22 11:07 发表
如果写成DOS下运行多好。方便多了
另外帮助档写的太不明白了,测试半天,不知道怎么使用。
GRUB4DOS似乎连 CD 命令都没有,怎么切换到 boot/grub 目录下呢


无需切换 目录

/boot/grub/bootsect

或者
command --set-path=/boot/grub/
bootsect
回复

使用道具 举报

80#
 楼主| 发表于 2011-5-22 15:53:35 | 只看该作者
回#78
因为GRUB4DOS 接管优先权,所以根本没必要在DOS下运行。GRUB4DOS比DOS强大。
如果你一定想用DOS。DOS有可以刷新引导的工具。
回复

使用道具 举报

79#
发表于 2011-5-22 12:53:50 | 只看该作者

回复 #1 sgw888 的帖子

谢谢楼主,学习一下,如何dos。
回复

使用道具 举报

78#
发表于 2011-5-22 11:07:08 | 只看该作者
如果写成DOS下运行多好。方便多了
另外帮助档写的太不明白了,测试半天,不知道怎么使用。
GRUB4DOS似乎连 CD 命令都没有,怎么切换到 boot/grub 目录下呢
回复

使用道具 举报

77#
 楼主| 发表于 2011-5-19 17:24:02 | 只看该作者
在 chenall 的基础上小改了一下关于清除扇区 判断是否安全清除1-62 扇区的问题。
加了点判断。但并不是说,一定不会出问题。 如果是从U盘启动的GRUB4OS,并且U盘没有分区表,一开始就是一个DBR扇区,并且恰巧偏移0x1BE 开始的地方到0x1FE 结束的地方全是0 可能还会通过检查,并且仍旧会执行  清除1-62 扇区的清除操作。

所以在执行清除1-62 扇区操作时,一定要小心,不要把U盘给清了。
U盘在很多情况下可能会被认为是 (hd0)

BOOTSECT 20110519sgw.rar

3.29 KB, 下载次数: 22, 下载积分: 无忧币 -2

回复

使用道具 举报

76#
发表于 2011-5-19 15:41:30 | 只看该作者
嗯,这样就是多加了判断,安全性高一点。
回复

使用道具 举报

75#
 楼主| 发表于 2011-5-19 15:20:33 | 只看该作者
分区表判断:
代码初步构想

# :cpdqcw 磁盘读取错误
# :wxfq 无效分区表错误

dd if=(hd0)+1 of=(md)0x200+1 || goto :cpdqcw
checkrange 0x55 calc *0x401FE&0xff || goto :wxfq
checkrange 0xAA calc *0x401FF&0xff || goto :wxfq
checkrange 0,0x80 calc *0x401be&0xff || goto :wxfq
checkrange 1:62 read 0x401c6 && goto :err
checkrange 0,0x80 calc *0x401ce&0xff || goto :wxfq
checkrange 1:62 read 0x401d6 && goto :err
checkrange 0,0x80 calc *0x401de&0xff || goto :wxfq
checkrange 0:62 read 0x401e6 && goto :err
checkrange 0,0x80 calc *0x401ee&0xff || goto :wxfq
checkrange 1:62 read 0x401f6 && goto :err
goto :ok
:err
echo
echo The (hd0) 1-62 sectors may be present data.
echo Clear Stop.
goto :end
:ok echo will clear....
:end
exit 1


# 情形判断 假如整个hd0 第一扇区是空的。 会提示无效分区表,终止清除操作,虽然限制加多,但还是防止了误操作
# 既然整个硬盘都是空的,清除62可能没必要。如果真的要清除,建立分区之后再清除也可以。另外,因为是G4D下面的,直接 echo -n > 手

动清除也不麻烦。
# 55 AA 标志正常,但是可能不是分区表,可能是DBR。针对80,00 的判断会起作用。
# 如果第一个字节不是80或者0那肯定不是分区表直接跳到无效分区表
# 80,0的判断通过检查后,再检查分区开始是不是在1到62 ,如果在提示错误。
回复

使用道具 举报

74#
 楼主| 发表于 2011-5-19 14:28:09 | 只看该作者
想了下,好像还不是太完善。因为,即使通过上面的检查,也不能保证MBR空间是否有63个扇区。
如果简单判断的话是可以的。但如果是U盘启动,很有可能会破坏U盘数据。这个还是要用户自己使用的时候小心。
回复

使用道具 举报

73#
发表于 2011-5-19 13:54:04 | 只看该作者
看了一下,判断MBR空间是否有63个扇区的代码如下
只需要判断这个值是否在1-62之间就行了。大于或等于63都是合法的,0:该分区表无效,不理会。

这些只需在clear的时候判断一下就行了。

checkrange 1:62 calc 0x401C6 && goto :err
checkrange 1:62 calc 0x401D6 && goto :err
checkrange 1:62 calc 0x401E6 && goto :err
checkrange 1:62 calc 0x401F6 && goto :err

[ 本帖最后由 chenall 于 2011-5-25 22:38 编辑 ]
回复

使用道具 举报

72#
 楼主| 发表于 2011-5-19 13:08:53 | 只看该作者
分区表判断:
代码初步构想
# :cpdqcw 磁盘读取错误
# :wxfq 无效分区表

dd if=(hd0)+1 of=(md)0x200+1 || goto :cpdqcw
checkrange 0x55 calc *0x401FE&0xff || goto :wxfq
checkrange 0xAA calc *0x401FF&0xff || goto :wxfq
checkrange 0x00 calc *0x401c2&0xff && goto :fq2jc
checkrange 0:62 read 0x401c6 && goto :err
set fqgs=1
:fq2jc
checkrange 0x00 calc *0x401d2&0xff && goto :fq3jc
checkrange 0:62 read 0x401d6 && goto :err
set fqgs=1
:fq3jc
checkrange 0x00 calc *0x401e2&0xff && goto :fq4jc
checkrange 0:62 read 0x401e6 && goto :err
set fqgs=1
:fq4jc
checkrange 0x00 calc *0x401f2&0xff && if not exist fqgs && goto :wxfq
checkrange 0:62 read 0x401f6 && goto :err
goto :ok
:err
echo
echo The (hd0) 1-62 sectors may be present data.
echo Clear Stop.
goto :end
:ok echo will clear....
:end
exit 1

初步的代码。这样应该可以。
需要优化。请CHENALL 有空看一下,帮忙改一下。改好后,我把它加到批处理中。
或者,CHENALL 帮忙加进去,我就感激不尽了。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

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

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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