无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: sgw888
打印 上一主题 下一主题

[发布] 基于GRUB4DOS的BOOTSECT

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

使用道具 举报

2#
发表于 2011-5-9 09:26:28 | 显示全部楼层
在命令行环境下对硬盘进行读写操作,具有很大的风险。
既然有风险,我们就要做到把风险降到最低。所以,我建议:
1:对操作对象,先进行分区信息显示,活动分区文件及目录显示,确认后再操作
2:现在的操作命令,虽然按照ms的风格,但GRUB4DOS下可以进行适当的改良,如:
   bootsect (hd0) clear
    bootsect (hd0,0) /nt52
    第一参数总是对象
3:强制第一参数是(hd开头,因为这个参数太关键,没有或默认风险太大
4:sys参数我认为可以省略
================
     
我认为,bootsect的主要功能是重新注入mb及dbr,我们能否更加简单呢?
如bootsect (hd0) /nt52,就重新注入了mbr (440字节),相应的清除1-62扇区的,并自动注入活动分区的DBR,除非没有活动分区。

另外bootsect是否可以加入新功能,如分区表检查?
回复

使用道具 举报

3#
发表于 2011-5-9 09:36:41 | 显示全部楼层
map --mem=0x10000 %run% (rd)

这句话的就是把%run%加载到基地址0x10000扇区开始的内存中,即内存地址=0x10000*0x200字节=0x2000000字节=0x20 *0x100000(32M)
回复

使用道具 举报

4#
发表于 2011-5-9 11:28:58 | 显示全部楼层
我也同意P大的意见。
回复#27:
首先通过0x475判断有几个硬盘(包括USB-HDD):
set /a hdn=*0x475&0xff  (等于1表示存在hd0,等于2表示存在hd0、hd1...)
我们可以给个菜单:title select hdddisk
这样我们可以动态获得硬盘号

geometry (hd?)可以列出当前硬盘分区情况
回复

使用道具 举报

5#
发表于 2011-5-9 17:34:38 | 显示全部楼层
是否有问题,无参数时,变成这样了。
(pxe启动,bootsect放在/boot/grub下)

Snap1.jpg (31.48 KB, 下载次数: 100)

Snap1.jpg
回复

使用道具 举报

6#
发表于 2011-5-9 17:46:18 | 显示全部楼层
因为批处理直接放在/boot/grub/下,pxe启动可以直接运行批处理的。
经测试
/boot/grub/bootsect 运行正常

难道批处理改变(bd)了?

/bootsect肯定不行。

[ 本帖最后由 zhaohj 于 2011-5-9 17:48 编辑 ]
回复

使用道具 举报

7#
发表于 2011-5-9 23:57:32 | 显示全部楼层
要问下jianliulin:
批处理打包后,怎么还原?
回复

使用道具 举报

8#
发表于 2011-5-10 08:20:16 | 显示全部楼层
确实转向太多,待测试无误后需要优化处理。
重复处理的代码 call 变量
回复

使用道具 举报

9#
发表于 2011-5-10 10:02:02 | 显示全部楼层
怎样优化,我举例一下:
checkrange 0x80 calc *0x401be&0xff && set cpfq=(hd0,0) && goto :_fqdqjc
checkrange 0x80 calc *0x401ce&0xff && set cpfq=(hd0,1) && goto :_fqdqjc
checkrange 0x80 calc *0x401de&0xff && set cpfq=(hd0,2) && goto :_fqdqjc
checkrange 0x80 calc *0x401ee&0xff && set cpfq=(hd0,3) && goto :_fqdqjc
goto :noap

:_fqdqjc
#检查分区是否可以访问
echo
echo The Activate Partition : %cpfq%
cat --length=0 --hex %cpfq%+1 || goto :fqdqcw
goto :_fqgs
==========改成========
set cpfq=
checkrange 0x80 calc *0x401be&0xff && set cpfq=(hd0,0)
checkrange 0x80 calc *0x401ce&0xff && set cpfq=(hd0,1)
checkrange 0x80 calc *0x401de&0xff && set cpfq=(hd0,2)
checkrange 0x80 calc *0x401ee&0xff && set cpfq=(hd0,3)
set cpfq || set err=1 && goto :err
:检查分区是否可以访问
echo
cat --length=0  %cpfq%+1 || set err=2 && goto :err
echo The Activate Partition : %cpfq% may be access!
goto :_fqgs
.....
错误处理用变量代替,统一用err
:err
if %err%==1 ....
if %err%==2 ....
回复

使用道具 举报

10#
发表于 2011-5-10 17:49:26 | 显示全部楼层
查找是否包含“,”来区分是是磁盘还是分区
set cpfq=%2
echo %cpfq% > (md)0x300+1
cat --locate=, (md)0x300+1 | set a=
set a && echo %cpfq% is partition ! echo %cpfq% is disk

当然严格点需要再检查前面是否是(hd开头及最后是否是)结尾

[ 本帖最后由 zhaohj 于 2011-5-10 17:52 编辑 ]
回复

使用道具 举报

11#
发表于 2011-5-26 14:11:35 | 显示全部楼层
@sgw888:
还是传到这里吧,你自己先测试一下。接口部分留着你自己P处理处理。

MENU.rar

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

回复

使用道具 举报

12#
发表于 2011-5-27 08:29:32 | 显示全部楼层
根据tuxw的建议,为了防止活动分区在逻辑分区后面(逻辑分区很多的情况)有可能找不到活动分区,修改菜单如下:

MENU.rar

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

回复

使用道具 举报

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

sw888.rar

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

回复

使用道具 举报

14#
发表于 2011-6-3 17:29:11 | 显示全部楼层
支持一下,请大家先虚拟机测试!

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

使用道具 举报

15#
发表于 2011-6-4 12:04:45 | 显示全部楼层
原来考虑想在这里停留一下,没有写完,应该是
\&\& pause --wait=10 这样的语句。
回复

使用道具 举报

16#
发表于 2011-6-14 16:58:06 | 显示全部楼层
收下了,下次清理mbr方便了。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-6-17 11:28

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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