无忧启动论坛

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

GRUB4DOS ghostid命令测试(01-15更新)

  [复制链接]
跳转到指定楼层
1#
发表于 2010-1-2 11:18:36 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
添加了ghostid命令的grub4dos测试.
http://grub4dos-chenall.googlecode.com/files/grub4dos-0.4.5a-2010-01-02.zip
用法
1.直接执行ghostid获取当前磁盘的id
2.ghostid (hdx,y) 获取对应磁盘的id
3.find --ghost-id /xxxx 获取最后一个找到以上文件的磁盘的id
4.find --set-root --ghost-id /xxx 获取第一个找到以上文件的磁盘的ID并设置为当前root.

请测试一下获取到的ID是否正确.

另外可以在内存的0x4FF00处得到这个的字符串值.可以通用DD命令把这个数据写入到配置文件中
例子.
#硬盘上查找/ghost/myghost.flg
find --ignore-cd --ignore-floppies --ghost-id /ghost/myghost.flg
#把上面找到的id写入到(fd0)/ghost.bat的0x70位置
dd if=(md) of=(fd0)/ghost.bat bs=1 skip=0x4FF00 count=5 seek=0x70

注:count=3,一般情况下是3个字节,如果磁盘分区数量大于9就要用4.(新版直接使用5就可以了);

2010-01-15
1.修正一个排序算法的BUG,详见后面的贴子。

2010-01-08
1.使用外部命令实现ghostid。使用方法差不多,但由于是外部命令所以不能使用find --ghost-id
可以使用以下命令来代替(把ghostid文件放在和启动磁盘的grub目录下)
find --ignore-cd --ignore-floppies /file.ext (bd)/grub/ghostid
其它使用例子
#切换到当前磁盘最后一个可用分区
root endpart
#执行ghostid,获取当前分区的对应ID。
(bd)/grub/ghostid
#返回启动分区
root (bd)

注:新版本GRUB4DOS,可以不用加前面的(bd)/grub路径,默认会从这个位置查找外部命令,当然了当前目录下也有这个命令时优先用。

2010-01-06
修改换行符为0D也就是回车。

2010-01-04
更新,同步更新到2010-01-03版源码。并调整了0X4FF00字符串,在id后面添加了两个换行符。

http://grub4dos-chenall.googlecode.com/files/grub4dos-0.4.5a-2010-01-04-chenall.rar
http://grub4dos-chenall.googlecode.com/files/grub4dos-0.4.5a-2010-01-04-chenall.zip

使用方法参考#8
使用一个变量代替GHOSTID
例子
值最好等于5个字符。
例子:
set p=ghost

使用dd写入后会变成像下面的
set p=2:1


多余的字符被换行代替了,所以不影响使用。

[ 本帖最后由 chenall 于 2010-1-15 11:18 编辑 ]
2#
 楼主| 发表于 2010-1-4 19:10:30 | 显示全部楼层
你这样子确定不会出错?
当使用5个字节时,
set P=+::--
后面的--会被替换为00 00。不知DOS对00的处理是怎么样的。
回复

使用道具 举报

3#
 楼主| 发表于 2010-1-4 20:59:24 | 显示全部楼层
更新了一下,有条件的可以再试试。

现在比较好兼容多分区多硬盘的处理了。
回复

使用道具 举报

4#
 楼主| 发表于 2010-1-5 22:05:24 | 显示全部楼层
说明下

由于这个命令使用者比较少,或者说属于不是很必要的命令,所以不会加入到以后的GRUB4DOS版本中,目前只是为了方便测试。。

以后有空再考虑是否可以使用外部命令的形式来实现。
回复

使用道具 举报

5#
 楼主| 发表于 2010-1-6 13:13:25 | 显示全部楼层
晕,不是不支持,而且把它做为一个外部命令,这样只要是0.4.5以上的版本GRUB4DOS中都可以使用。也方便维护。

#14
我搞错了,应该是使用0D,DOS是使用0D作为换行的。
新的版本已经上传了,可以再试试。
http://grub4dos-chenall.googleco ... 4.5a-2010-01-06.rar
回复

使用道具 举报

6#
 楼主| 发表于 2010-1-6 13:34:21 | 显示全部楼层
@Hwlon
这里可以下载源码
http://code.google.com/p/grub4dos-chenall/source/checkout
只要再打上2010-01-06.RAR附带的补丁文件就可以了。

其实只要懂得一点C语言你也可以对GRUB4DOS进行修改,就看你想不想做这些事了。
回复

使用道具 举报

7#
 楼主| 发表于 2010-1-6 21:53:24 | 显示全部楼层
原帖由 Hwlon 于 2010-1-6 20:09 发表
chenall :
还是由我来测试吧!本来今天早晨我也想顺便测试一下0D的,因为急着上班,没测试。看到你又改成0D,我就知道脱不了还要测试的,呵呵!其实在dos下要想完美换行也需要0D 0A。如果只是0D相当于空,在do ...


其实DOS默认是0D换行的。。。。,0D0A是WINDOWS 的风格。

用00 00反而不好,有可能会出错,因为万一这里面原来已经有一些数据,那写入的时候数据就会出错。
使用0D 0D就没关系了,只要DD读取是的5个字符
当只有1:1时后面会有两个回车,
如果是1:10就会读到一个回车,
10:10就不会读到回车了。

不管最终得到几个字符,多余的就是回车换行掉了。

[ 本帖最后由 chenall 于 2010-1-6 21:56 编辑 ]
回复

使用道具 举报

8#
 楼主| 发表于 2010-1-7 11:34:23 | 显示全部楼层
0D是回车,但不换行,换行符是0A(但在显示的时候可能是都显示成换行的)

还有一点你可能理解错了。。
并不是GHOST忽略0D和00等字符。而是由于DOS批处理来决定的
像你使用的命令
set P=+::--

如果不经修改最终的%P%就是上面的+::--
经过DD写入以后会变成
SET P=1:1XX
注:后面的XX是不可显示的字符。像0D 00之类的。
有些DOS核心碰到00字符会当做是一个语句结束。一般情况下0D会是一个语句结束符。
可能和DOS的版本也有关系吧,我使用MSDOS7.1测试是正常的。
回复

使用道具 举报

9#
 楼主| 发表于 2010-1-7 17:59:26 | 显示全部楼层
原帖由 gmy 于 2010-1-7 17:32 发表
不知是否支持畸形文件夹 \...\ (显示为~1)?


这个没有必要,因为不一定全部是~1,有可能是~2之类的。反而不好确定。
回复

使用道具 举报

10#
 楼主| 发表于 2010-1-9 00:00:25 | 显示全部楼层
已经更新使用外部命令的GHOSTID.感谢不点....下载http://nufans.net/grub4dos/tinybit/或GRUB4DOS新版下载http://grub4dos-chenall.googleco ... 4.5a-2010-01-08.zipGHOSTID命令带源码下载(不带扩展名的就是可以直接运行的程序)http://grub4dos-chenall.googlecode.com/files/ghostid.zip

[ 本帖最后由 chenall 于 2010-1-9 01:12 编辑 ]

点评

点赞  发表于 2021-10-30 15:33
回复

使用道具 举报

11#
 楼主| 发表于 2010-1-9 22:30:01 | 显示全部楼层
再更新了一下,新版已经上传,附带了echo read ghostid命令在command目录下
http://grub4dos-chenall.googleco ... 0-01-09-chenall.zip
默认是使用(bd)/grub/目录。
也就是说只要把外部命令放在启动盘/grub目录下就可以直接使用里面的命令。
通过以下命令修改默认搜索路径
command --set-root (hdx,y)/path

如果当前目录下有该命令文件优先使用,否则就到上面设置的目录里面找。

20100109221444164.png (8.57 KB, 下载次数: 102)

20100109221444164.png

Windows XP Professional-2010-01-09-22-03-06.png (7.7 KB, 下载次数: 129)

Windows XP Professional-2010-01-09-22-03-06.png
回复

使用道具 举报

12#
 楼主| 发表于 2010-1-13 09:46:22 | 显示全部楼层
ghost可以识别01:02这样的格式吗?
前置0一般代表8进制。
回复

使用道具 举报

13#
 楼主| 发表于 2010-1-13 09:48:47 | 显示全部楼层
用外部命主要是维护修改方便。
适合范围更广。

也许以后会有一个直接把外部打包能内置的方法。
回复

使用道具 举报

14#
 楼主| 发表于 2010-1-13 20:49:11 | 显示全部楼层
我是说直接
ghost 01:08 可以直接正确使用?

之前我最早弄的时候发现,
boot.ini里面不能这样使用,所以我后面就没有用0对齐了。


我自己也要用这个所以才会想办法弄这个东西,只是为了方便使用。

就像我现在的学习写的GRUB4DOS外部命令FAT(可以在FAT文件系统上直接创建文件,也许会考虑加入快速格式化功能,因为格式化是最好处理的了),其实主要还是因为自己需要使用。

[ 本帖最后由 chenall 于 2010-1-13 20:54 编辑 ]
回复

使用道具 举报

15#
 楼主| 发表于 2010-1-14 17:33:33 | 显示全部楼层
不知是否grub4dos获取到的分区起始位置有问题还是GHOSTID的问题。
@lianjiang
你可以再试试用以下命令获取一些参数。

进入GRUB4DOS命令行以后使用以下命令分区获取各个分区的分区起始位置。看看是否有问题。
root (hd0,0)
cat --length=0 ()-1

root (hd0,2)
cat --length=0 ()-1

root (hd0,3)
cat --length=0 ()-1

root (hd0,4)
cat --length=0 ()-1

如果上面的数据是正确的,那可能是GHOSTID里面的排序算法有问题了。。。

另外上面的分区果然很强,可能是分区表有问题。

[ 本帖最后由 chenall 于 2010-1-14 17:37 编辑 ]
回复

使用道具 举报

16#
 楼主| 发表于 2010-1-14 18:40:37 | 显示全部楼层
明白了,是排序算法有问题。。

看来不能偷懒,呵呵。

本来想一气呵成的,看来还是要分开。没有考虑到这种特殊情况,晕。

[ 本帖最后由 chenall 于 2010-1-14 18:45 编辑 ]
回复

使用道具 举报

17#
 楼主| 发表于 2010-1-14 20:02:47 | 显示全部楼层
试试这个,如果没错再上传到Googlecode上。

多加了一个循环。

ghostid.rar

791 Bytes, 下载次数: 116, 下载积分: 无忧币 -2

回复

使用道具 举报

18#
 楼主| 发表于 2010-1-15 11:06:00 | 显示全部楼层
新的版本GHOSTID已经上传,麻烦 lianjiang 再测试一下。

http://grub4dos-chenall.googlecode.com/files/ghostid.rar

ghostid.rar

2.1 KB, 下载次数: 133, 下载积分: 无忧币 -2

回复

使用道具 举报

19#
 楼主| 发表于 2010-1-15 11:08:52 | 显示全部楼层
@Hwlon
使用新的版本GRUB4DOS,
只需要把这些命令文件放在MENU.LST同磁盘的GRUB目录下就可以直接使用,就像是内置命令一样的。

@lianjiang
如果这些命令文件是放在(bd)/grub/目录下的使用时可以不用加路径。
直接ghostid就可以了。

新版的GRUB4DOS会自动使用(bd)/grub目录下的命令文件。

这个路径可以通过
command命令来改变

http://bbs.znpc.net/viewthread.php?tid=5830


以后统一使用
command --set-path=PATH来修改这个默认路径。

[ 本帖最后由 chenall 于 2010-1-15 11:12 编辑 ]
回复

使用道具 举报

20#
 楼主| 发表于 2010-1-22 21:34:55 | 显示全部楼层
不存在就不应该执行下面的语句了吧....

不想提示可以使用||
试试
find --ignore-cd --ignore-floppies /boot/WTool.lst (bd)/boot/ghostid || pause --wait=0
回复

使用道具 举报

21#
 楼主| 发表于 2010-1-22 22:37:38 | 显示全部楼层
如果不提示也就是相当于忽略错误检查.

相当于
errorcheck off
find --ignore-cd --ignore-floppies /boot/WTool.lst (bd)/boot/ghostid
errorcheck on
回复

使用道具 举报

22#
 楼主| 发表于 2010-1-23 16:34:19 | 显示全部楼层
#67
lianjiang
ghostid是根据分区的起始位置来识别ID的。

另外好像没有这样的分区吧。第二个主分区也是一个逻辑分区的。
回复

使用道具 举报

23#
 楼主| 发表于 2010-1-23 16:37:35 | 显示全部楼层
现在很多人都喜欢鱼,不想渔了。

read读取内存数值。
0x8280 内存位置 ,这个位置是存放了当前的启动设备的磁盘号码
0x80第一个硬盘。

我比较喜欢渔,呵呵

上面在readme_grub4dos中都有介绍。
回复

使用道具 举报

24#
 楼主| 发表于 2010-1-23 17:01:52 | 显示全部楼层
只要grub4dos能认到这个分区一般就没有问题.
回复

使用道具 举报

25#
 楼主| 发表于 2010-1-23 19:20:20 | 显示全部楼层
@lianjiang
也就是说ghost只能认到5个分区了.

不知GRUB4DOS对这个的识别情况如何?
回复

使用道具 举报

26#
 楼主| 发表于 2010-1-24 14:27:19 | 显示全部楼层
很奇怪,非要用DD。。。

直接用write不是更简单吗?想写入什么内容都可以。
write --offset=12 (fd0)/autoexec.bat res1.bat\r\n
write --offset=12 (fd0)/autoexec.bat res2.bat\r\n

autoexec.bat内容只要如下
@echo off
:::::::::::::::::::::::::::::::::::::::::::::::


注::::::::::::::::::::::::::::::::::::::::::::::::是预留的空位,供write写入,

只要写入的长度不超过原文件长度就可以随意写入。

[ 本帖最后由 chenall 于 2010-1-24 14:28 编辑 ]
回复

使用道具 举报

27#
 楼主| 发表于 2010-1-24 16:51:06 | 显示全部楼层
因为0x80是代表第一硬盘。

你从第一硬盘启动的就是0x80。
从第二硬盘就是0x81

如果只想检测是否从硬盘启动可以使用
0x80:0x9F
回复

使用道具 举报

28#
 楼主| 发表于 2010-1-26 11:57:56 | 显示全部楼层
GRUB4DOS和加载USB2.0驱动应该没有多大关系吧。。

楼上可以再详细测试一下。

启动时看看U盘是(hd0)还是(hd1)
然后进入DOS。加载驱动。

再进入GRUB看看U盘是(hd0)还是(hd1)

另外如果你的启动菜单有类似如下语句
map (hd0) (hd1)
也会有影响。
回复

使用道具 举报

29#
 楼主| 发表于 2010-1-26 12:04:19 | 显示全部楼层
修改了CAT命令,让它可以获取当前磁盘的大小以G算(目前假设每个扇区是512字节)
使用方法,复制CAT文件到启动盘GRUB目录下。

(大写的CAT或/cat)
#获取(hd0)的大小
CAT --length=0 (hd0)

#获取当前磁盘的大小
CAT --length=0

cat.rar

2.07 KB, 下载次数: 48, 下载积分: 无忧币 -2

回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-6 07:43

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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