无忧启动论坛

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

GRUB4DOS硬盘工具箱(2011-09-18更新)

  [复制链接]
151#
发表于 2011-7-7 01:35:38 | 只看该作者

回复 #152 zxw 的帖子

当configfile %mypath%/menu.lst执行时会自动将(bd)修改为menu.lst所在的分区,可移植性自动获得了保证。原版menu.lst的第一句/BOOT/PRELOAD.BAT存在漏洞,configfile会修改(bd),但是不会修改(),只有root命令会修改(),如果此时()不是menu.lst所在的分区,利如menu.lst在D盘(hd0,4),()是c盘,root=(hd0,0),那么/BOOT/PRELOAD.BAT将无法执行,而且PRELOAD.BAT内部用到了root变量,但是此时root变量却是错误的,只有root (bd) && ()/BOOT/PRELOAD.BAT才能正常工作,连(bd)/BOOT/PRELOAD.BAT都不行。G4D工具箱曾经在我的系统上出错,我费了老大的劲才找到根源所在。
        另外,if命令的子命令exist也存在bug,如果一个变量var直接或者间接引用了内部变量,那么exist就认定它是不存在的,正确的做法应该是if "%var%"==""。这也是很多脚本莫名其妙的出错却找不到根源的原因所在。
        在dos的批处理中经常会用%~p0和if exist,这是dos批处理下的习惯用法,并不是非用不可,然而dos正确的做法在grub4dos下未必正确。熟悉dos批处理既是一种财富,更是一种负担grub4dos毕竟不是dos!既然我们使用的是grub4dos,请让我们适应他习惯他,容忍他的bug,帮助他改进他。请认真审查我们在dos下养成的习惯,因为它可能是错的。我们在使用批处理时一定要小心,否则一旦出错查找原因将是一件很困难的工作。
        好好检查一下你的脚本吧,如果使用了这些有bug的命令,还是赶紧改正吧!
        对于一个软件来说,在我看来,安全性和正确性是最重要的,一个软件如果不能保证安全性和正确性,那么随时可能给它的用户带来灾难
        建议你好好看看最近的更新和建议帖。

[ 本帖最后由 2011_dihuo0 于 2011-7-7 07:48 编辑 ]
回复

使用道具 举报

152#
发表于 2011-7-7 07:32:56 | 只看该作者

回复 #153 2011_dihuo0 的帖子

呵,你说得有理,但也居于一个前提:那就是所有的文件均在一个盘符。
原版确有bug.
改为如下兼容性更好:
cat --length=0 /BOOT/PRELOAD.BAT || find --set-root /BOOT/PRELOAD.BAT
/BOOT/PRELOAD.BAT

=======================================
另if命令的子命令exist,新版也纠正。

[ 本帖最后由 zxw 于 2011-7-7 07:41 编辑 ]
回复

使用道具 举报

153#
 楼主| 发表于 2011-7-7 16:09:04 | 只看该作者
@2011_dihuo0 ,@zxw
如果是按照原版的方法来使用根本就不存在这个所谓的BUG。

因为原版的启动过程如下。
WEE->GRLDR->/boot/grub/menu.lst->/boot/preload.bat

在启动/boot/preload.bat之前已经有find --set-root /boot/grub/menu.lst了。所以再用find是多此一举。

当然了也是我考虑不周,没有考虑其它启动的情况。

[ 本帖最后由 chenall 于 2011-7-7 16:10 编辑 ]
回复

使用道具 举报

154#
发表于 2011-7-7 17:26:28 | 只看该作者

回复 #155 chenall 的帖子

我是自己写菜单调用原版的menu.lst的,甚至曾经直接调用/boot/preload.bat,因此在使用的过程中发现一些问题和grub4dos的一些bug,于是就自己动手修改了,顺便提高终端用户的易用性。
我的修改有一些是回避bug的临时性的措施,将来还是要改回去的,开源软件提倡尽快地将修改返回上游,促进上游的改进,以减少重复劳动,和方便更多的用户使用。
grub4dos工具箱本来也只是c大自己使用的,只要能正常工作,能满足自己的要求也就可以了,没必要搞那么复杂。但是每个人的工作环境和要求不同的,免不了要做一些修改。将修改返回上游,促进上游的改进,以减少重复劳动,和方便更多的人使用,何乐而不为?
回复

使用道具 举报

155#
发表于 2011-7-7 17:41:15 | 只看该作者

回复 #154 zxw 的帖子

事实上我是打算在做合盘使用grub4dos工具箱代替dos工具箱,这一部分的改动比较大,我的水平不高,怕引入新的bug,所以这部分的修改我没有公开。

回复 #154 zxw 的帖子
昨晚的讨论我获益非浅,我以前并没有特别重视可移植性的问题,多谢了。

新版的试图修正这一问题,但是在我这儿表现不太稳定,时好时坏,我还不能重现,所以没有继续报告。
回复

使用道具 举报

156#
 楼主| 发表于 2011-7-7 17:58:29 | 只看该作者

回复 #156 2011_dihuo0 的帖子

有人使用,才会发现问题,有问题有报告才能修复,否则问题将会持续存在。

另外报告者也必须说清楚使用的环境,方法。否则就会像前面那样,产生误解。

[ 本帖最后由 chenall 于 2011-7-7 17:59 编辑 ]
回复

使用道具 举报

157#
发表于 2011-7-7 18:12:52 | 只看该作者

回复 #157 2011_dihuo0 的帖子

呵,交流一下彼此受益,至少可以温故巩固。
我很少用绝对路径的表达法,这样才有移植性。
当然,某些特定的除外,如封装的批处理等。
而且,就算是(bd),也有变化的时候……
回复

使用道具 举报

158#
发表于 2011-7-7 23:49:12 | 只看该作者

回复 #158 chenall 的帖子

我前一段时间无忧启动论坛上不了,就算上了也是时断时续,发帖只能尽可能的简明扼要。最近网络才恢复正常。

[ 本帖最后由 2011_dihuo0 于 2011-7-8 00:07 编辑 ]
回复

使用道具 举报

159#
发表于 2011-7-8 00:05:32 | 只看该作者

回复 #159 zxw 的帖子

是的,作为一种编程风格,硬编码应当尽量少用,这样,无论是修改还是移植都是更方便的,也有利于应对变化。软件位置的自由性就是一种自然的结果。
我个人把安全性和正确性放在第一位,遇到bug首先解决它,其他的在我看来暂时都是次要的。
回复

使用道具 举报

160#
发表于 2011-7-10 21:41:23 | 只看该作者
辛苦了  又更新了 啊
回复

使用道具 举报

161#
发表于 2011-7-12 10:50:55 | 只看该作者
0709更新,里面的PRELOAD.BAT,到底有什么改变,为何我覆盖更新,无法引导F8,直接进入win系统.

0709更新:PRELOAD.BAT
!BAT:PW:--md5 $1$U4c/$IItnjIVV/t/tYd76x14tL1
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
pager on
if exist timeout exit
pager off
terminal console
debug -1
set NTBOOT=%~dp0NTBOOT/NTBOOT
set saveroot=%@root%
clear
find --set-root --devices=h /qgho.### makeactive --status && goto :QGHO_FAST
cat --length=1 %~dp0MODBOOT/QGHO/QGHO.SET | set key=
if not "%key%"=="!" goto :QGHO_START
%~dp0grub/vfont %~dp0preload.fnt
echo
echo -P:0920 $[0105]To Restore System Press $[1004]F9
echo -P:1220 $[0106]纮羴聜脙膭艆 $[1004]F9
echo -P:2420 $[0102]GRUB4DOS 茊菄葓蓧蕣, $[0106]by chenall  http://chenall.net
echo -P:00-12 $[0103]%@DATE%
echo -P:01-12 $[0102]F9 $[0107]QGHO
echo -P:02-12 $[0102]F8 $[0107]VBOOT
pause --test-key --wait=4
set /A key=*0x4CB00
%~dp0grub/vfont
clear
debug off
goto %key% || echo Default Boot.

:0x3B00                F1
:0x3C00                F2
:0x3D00                F3
:0x3E00                F4
:0x3F00                F5
:0x4000                F6
:0x4100                F7
:0x8500                F11
:0x8600                F12
::按了非F9/F10/SIFT+F10之外的键都会执行这些,上面的那个只是为了留个示范。
::如果你在按F8的时候执行某些内容,可以把标签:0x4200放到本段EXIT后面再写上执行的命令就可以了。
:default
::如果有存在oemslic.bin文件,则尝试自动加载.
root %~d0
if exist %~dp0oemslic.bin && %~dp0grub/slic %~dp0oemslic.bin
if exist %~dp0SYS_MENU.LST && configfile %~dp0SYS_MENU.LST
find --set-root --devices=h makeactive --status
chainloader +1
boot
exit

:0x4200                F8
find --set-root --devices=h /vbootldr || goto :default
kernel /vbootldr
boot
exit

:0x4300                F9
cat --skip=8 --length=40 %~f0 | set pwd=
:check_pwd
password %pwd% || goto :check_pwd
%~dp0grub/vfont %~dp0preload.fnt
:pass
echo 藡虒蛵螏蠌袗褢覓訐詳,諘謻讞貥.
set pwd=
set /p:3 pwd=蛵螏蠌:
if not exist pwd goto :QGHO_START
set /p pwd1=贆跉:
if not %pwd%#==%pwd1%# goto :pass
md5crypt %pwd% | set pwd=
write --offset=14 %~f0 %pwd:~11%
pause 螏蠌蹧軠轁: %pwd1%
:QGHO_START
clear
%~dp0grub/vfont
%~dp0MODBOOT/MODBOOT.BAT boot=/LEVEL3/QGHO.ZIP AUTO
goto :default
:QGHO_FAST
set QGHO=%@root%
root %saveroot%
%~dp0MODBOOT/MODBOOT.BAT boot=/LEVEL3/QGHO.ZIP fast=%QGHO%
goto :default

:0x4400                F10
%~dp0MODBOOT/MODBOOT.BAT
goto :default

::#显示菜单####自动添加附加的菜单项目###########
......

[ 本帖最后由 ali88home 于 2011-7-12 20:13 编辑 ]
回复

使用道具 举报

162#
 楼主| 发表于 2011-7-12 10:54:26 | 只看该作者
:0x4200                F8
find --set-root --devices=h /vbootldr || goto :default
kernel /vbootldr
boot
exit

后面多加了一个|| goto :default

即失败了就转到default
回复

使用道具 举报

163#
发表于 2011-7-12 22:34:14 | 只看该作者
后面多加了一个|| goto :default

即失败了就转到default
.......
哦哦!这个影响好像大了,都是直接读取|| goto :default,我加了【F7】选择,也失败,直接读取|| goto :default
把他取消,才正常。

echo -P:01-16 $[0102]F10 $[0107]MODBOOT
echo -P:02-16 $[0102]F9 $[0107]QGHO
echo -P:03-16 $[0102]F8 $[0107]VBOOT
echo -P:04-16 $[0102]F7 $[0108]Ali88home
pause --test-key --wait=4
set /A key=*0x4CB00
%~dp0grub/vfont
clear
debug off
goto %key% || echo Default Boot.

:0x3B00                F1
:0x3C00                F2
:0x3D00                F3
:0x3E00                F4
:0x3F00                F5
:0x4000                F6
:0x8500                F11
:0x8600                F12
::按了非F9/F10/SIFT+F10之外的键都会执行这些,上面的那个只是为了留个示范。
::如果你在按F8的时候执行某些内容,可以把标签:0x4200放到本段EXIT后面再写上执行的命令就可以了。
:default
::如果有存在oemslic.bin文件,则尝试自动加载.
root %~d0
if exist %~dp0oemslic.bin && %~dp0grub/slic %~dp0oemslic.bin
if exist %~dp0SYS_MENU.LST && configfile %~dp0SYS_MENU.LST
find --set-root --devices=h makeactive --status
chainloader +1
boot
exit

:0x4100                F7
find --set-root /goner
chainloader /goner

:0x4200                F8
find --set-root --devices=h /vbootldr
kernel /vbootldr
boot
exit

[ 本帖最后由 ali88home 于 2011-7-12 22:43 编辑 ]
回复

使用道具 举报

164#
 楼主| 发表于 2011-7-13 08:44:08 | 只看该作者

回复 #165 ali88home 的帖子

这个是限定了硬盘的,如果你不是在硬盘上使用,那肯定出错。

否则就是GRUB4DOS的BUG,麻烦报告详细一些。
回复

使用道具 举报

165#
发表于 2011-7-13 19:03:52 | 只看该作者
想看看,学习学习
回复

使用道具 举报

166#
发表于 2011-7-14 08:20:38 | 只看该作者
我是使用在硬盘备份上面使用的。

F8-vboot功能,我想应该使用在虚拟部分,因为我没有,所以应该会|| goto :default进入系统,是不是这个意思。
下面红色,【F7】是我加入的,测试结果,不删除F8里面的|| goto :default,【F7】好像无法引导,直接进入系统。
删除F8里面的|| goto :default,操作好像进入了menu.lst菜单,是不是C大的原意操作想让他F8操作失败,直接进入系统。
才会加入|| goto :default进入系统。

附件是我修改的,覆盖PRELOAD.BAT测试,没有/goner,应该是错误信息,不会进入直接进入系统。才是正确,如果有goner,当然进入/goner菜单。

echo -P:02-16 $[0102]F9 $[0107]QGHO
echo -P:03-16 $[0102]F8 $[0107]VBOOT
echo -P:04-16 $[0102]F7 $[0108]Ali88home
pause --test-key --wait=4
set /A key=*0x4CB00
%~dp0grub/vfont
clear
debug off
goto %key% || echo Default Boot.
:0x3B00                F1
:0x3C00                F2
:0x3D00                F3
:0x3E00                F4
:0x3F00                F5
:0x4000                F6
:0x8500                F11
:0x8600                F12
::按了非F9/F10/SIFT+F10之外的键都会执行这些,上面的那个只是为了留个示范。
::如果你在按F8的时候执行某些内容,可以把标签:0x4200放到本段EXIT后面再写上执行的命令就可以了。
:default
::如果有存在oemslic.bin文件,则尝试自动加载.
root %~d0
if exist %~dp0oemslic.bin && %~dp0grub/slic %~dp0oemslic.bin
if exist %~dp0SYS_MENU.LST && configfile %~dp0SYS_MENU.LST
find --set-root --devices=h makeactive --status
chainloader +1
boot
exit

:0x4100                F7
find --set-root /goner
chainloader /goner


:0x4200                F8
find --set-root --devices=h /vbootldr
kernel /vbootldr
boot
exit


[ 本帖最后由 ali88home 于 2011-7-14 20:37 编辑 ]
回复

使用道具 举报

167#
 楼主| 发表于 2011-7-14 10:21:55 | 只看该作者

回复 #168 ali88home 的帖子

哦,原来你没有VBOOTLDR,难怪,我的本意就是这样子的,启动失败就直接进入默认的系统。

以后还是改成启动失败继续返回主界面等待好了。

另外你的语法也有错误,每个标签后面都要有一个EXIT或BOOT命令,否则会出错的。达不到你的本意。

比如你的F7,你按F7时有可能执行的是F8的内容,当F7启动失败时可能就会继续进入F8启动,因为没有EXIT。
:0x4100 F7
find --set-root /goner
chainloader /goner


[ 本帖最后由 chenall 于 2011-7-14 10:24 编辑 ]
回复

使用道具 举报

168#
发表于 2011-7-14 20:37:04 | 只看该作者

回复 #169 chenall 的帖子

果然是如此,呵呵!感谢指导。
回复

使用道具 举报

169#
发表于 2011-7-28 18:16:26 | 只看该作者
请教C大,如何去修改设定F11,F12热键,我修改了,这两个没有成功。

echo -P:2120 $[0106]纮羴聜脙膭艆 $[1004]F9
echo -P:2320 $[0107]PRESS F9 TO RECOVERY, [F10] TO WinPE
echo -P:00-16 $[0103]%@DATE%
echo -P:01-16 $[0102]F10 $[0107]TO WinPE
echo -P:02-16 $[0102]F9 $[0107]RECOVERY
pause --test-key --wait=5
set /A key=*0x4CB00
%~dp0grub/vfont
clear
debug off
goto %key% || echo Default Boot.

:0x3B00                F1
:0x3C00                F2
:0x3D00                F3
:0x3E00                F4
:0x3F00                F5
:0x4000                F6
:0x4100                F7
:0x4200                F8
:0x8500                F11
:0x8600                F12
::按了非F9/F10/SIFT+F10之外的键都会执行这些,上面的那个只是为了留个示范。
::如果你在按F8的时候执行某些内容,可以把标签:0x4200放到本段EXIT后面再写上执行的命令就可以了。
:default
::如果有存在oemslic.bin文件,则尝试自动加载.
root %~d0
if exist %~dp0oemslic.bin && %~dp0grub/slic %~dp0oemslic.bin
if exist %~dp0SYS_MENU.LST && configfile %~dp0SYS_MENU.LST
find --set-root --devices=h makeactive --status
chainloader +1
boot
exit

:0x4300                F9
map --mem /BOOT/IMGS/ONEKEY.IMA (fd0)
map --hook
chainloader (fd0)/io.sys
exit

:0x4400                F10
find --set-root /WXPE/SETUPLDR.BIN
chainloader /WXPE/SETUPLDR.BIN || chainloader --force (cd)/WXPE/SETUPLDR.BIN
boot
exit

[ 本帖最后由 ali88home 于 2011-7-28 18:28 编辑 ]
回复

使用道具 举报

170#
 楼主| 发表于 2011-7-29 08:36:08 | 只看该作者
为何不成功?有什么情况?

另外GRUB4DOS在某些些机子上面获取不到F10,F11,F12这些按键的代码.

你可以自己测试一下

pause --test-key然后按F11看看显示的数值是多少.
回复

使用道具 举报

171#
发表于 2011-7-29 15:00:35 | 只看该作者
Native子系统的 Cmd (Native Cmd) M2正式发布 -- 2011-07-22
更新了,什么时候你那个pe也更新一下。
回复

使用道具 举报

172#
发表于 2011-7-29 17:03:14 | 只看该作者

回复 #172 chenall 的帖子

F11,F12这两个按键的代码,我的键盘真的没有代码,让他如何使用啊!
呵呵!了解明白了。
感谢提醒
回复

使用道具 举报

173#
 楼主| 发表于 2011-7-29 17:32:24 | 只看该作者

回复 #173 freesoft00 的帖子

我的哪个PE呀,好久没有整PE了.至于上次的那个NATIVE版PE,我觉得没有必要修改
我的设想如下(已经用在硬盘工具箱里面).
1.核心尽量小(目前已经够小了4MB不到),使用NATIVE.EXE就足够了.
   NCMD.EXE可以放在二级内核中,作为扩展.(硬盘工具箱里里带的NTXPPE就已经支持NCMD扩展了)
  会自动运行NCMD.EXE Nautorun.BAT,
  只要把NCMD.EXE和NAUTORUN.BAT都放在二级内核就可以进行扩展.
2.使用SRSF6模块在启动的时候动态加载SRS驱动.
3.N级扩展,由二级内核决定(WXPE.WIM).

目前我没有什么想法,所以都是用现成的.也懒得去整了.
回复

使用道具 举报

174#
发表于 2011-7-30 13:43:41 | 只看该作者
7月29日更新

http://yunfile.com/ls/chenall/5b7aaefc/
多文件下载多次都都解压失败

另外那个够快网盘无法下载,提示IP无效

能否上传到115呢

[ 本帖最后由 快雪时晴 于 2011-7-30 13:44 编辑 ]
回复

使用道具 举报

175#
 楼主| 发表于 2011-7-30 14:09:37 | 只看该作者

回复 #176 快雪时晴 的帖子

不要用下载工具下载应该就可以的.

115的稍后我这里传大文件传不上去,经常传到一半就网络异常.


http://u.115.com/file/clozfm62#
SYS_TOOLS.rar

[ 本帖最后由 chenall 于 2011-7-30 14:53 编辑 ]
回复

使用道具 举报

176#
发表于 2011-7-31 10:15:49 | 只看该作者
已经成功下载了SYSTOOL、NTXPPE、SRSF6
多谢chenall
回复

使用道具 举报

177#
 楼主| 发表于 2011-7-31 10:53:05 | 只看该作者
因为SRSF6没有支持同目录下的SRS,所以目前的SRSF6模块自动调用会失败.

记得之前是支持的,后面的好像又改动了,我昨天测试的时候才发现.
回复

使用道具 举报

178#
发表于 2011-7-31 22:07:29 | 只看该作者
希望能改进一下,把"硬盘"二字去掉,能适应不同的启动环境为好
回复

使用道具 举报

179#
发表于 2011-8-1 08:07:37 | 只看该作者

回复 #1 chenall 的帖子

新版 的 里面的 MODBOOT
不能自定义 所放在路径 对不???
我用 以前的 旧版本 0225版本的  放在 /swwh/MODBOOT 目录的
可以自定义的
忘记了 怎么自定  MODBOOT 文件夹所在路径的

望大大 赐教。。。
回复

使用道具 举报

180#
 楼主| 发表于 2011-8-1 12:07:49 | 只看该作者

回复 #181 yanglin 的帖子

MODBOOT文件夹可以放在任意位置,并没有限制,出错可能是你的使用方法不对。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-23 19:39

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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