无忧启动论坛

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

支持含有碎片的文件仿真

    [复制链接]
421#
发表于 2014-11-1 17:49:54 | 只看该作者
不点 发表于 2014-11-1 16:54
据我所知,0.4.5的仿真功能没改动过。一直是支持仿真扇区序列的。

0.4.5的报错,含义是未识别出文件系 ...

mkisofs 弄了个小的grub.iso grub.ISO.7z (139.05 KB, 下载次数: 1)



还是不行的。




-------------对比----------
我在IMG前面加上一个分区表,就没问题(45c,46):
回复

使用道具 举报

422#
发表于 2014-11-1 18:08:02 | 只看该作者
mdyblog 发表于 2014-11-1 17:49
mkisofs 弄了个小的grub.iso



首先需要确认执行map命令时的文件是否和你存的文件一致

使用cat --hex命令可以看到文件内容。
简单一点可以直接使用crc32命令检验一下。


使用qemu测试的话,有时候会有一个延迟,即刚在windows下写入的文件,并不能立即使用。

点评

chenall 你如果身体吃得消的话,可以建立一个环境,测试这一问题。看看是不是 grub4dos 的仿真在某个环节有漏洞。难道说,不支持没有分区表的 --in-situ 仿真?希望首先要把这个事实搞清楚,至于说能不能修复 bug,  详情 回复 发表于 2014-11-1 18:41
文件没问题的。 因为如果有问题, --mem模式也会有问题的, 对吗?  详情 回复 发表于 2014-11-1 18:34
回复

使用道具 举报

423#
发表于 2014-11-1 18:34:54 | 只看该作者
本帖最后由 mdyblog 于 2014-11-1 18:41 编辑
chenall 发表于 2014-11-1 18:08
首先需要确认执行map命令时的文件是否和你存的文件一致

使用cat --hex命令可以看到文件内容。


文件没问题的。
因为如果有问题, --mem模式也会有问题的, 分析对吗?
下面是对比图:
回复

使用道具 举报

424#
发表于 2014-11-1 18:41:06 | 只看该作者
chenall 发表于 2014-11-1 18:08
首先需要确认执行map命令时的文件是否和你存的文件一致

使用cat --hex命令可以看到文件内容。

chenall 你如果身体吃得消的话,可以建立一个环境,测试这一问题。看看是不是 grub4dos 的仿真在某个环节有漏洞。难道说,不支持没有分区表的 --in-situ 仿真?希望首先要把这个事实搞清楚,至于说能不能修复 bug,则是次要的问题。

回复

使用道具 举报

425#
发表于 2014-11-1 19:06:19 | 只看该作者
mdyblog 发表于 2014-11-1 18:34
文件没问题的。
因为如果有问题, --mem模式也会有问题的, 分析对吗?
下面是对比图:

我用qemu测试了下,没有发现问题。

也许是和文件系统有关系?

不能mount你可以用类似如下命令看一下内容是否有问题。
cat --hex (hd32)+10

点评

我给你测试的IMG。 P.IMG 是分区IMG,没有分区表。---失败 [attachimg]202250[/attachimg] HD.IMG是磁盘IMG,有分区表。--OK [attachimg]202251[/attachimg]  详情 回复 发表于 2014-11-1 19:59
回复

使用道具 举报

426#
发表于 2014-11-1 19:37:42 | 只看该作者
(hd32)+10 是不够的,应该是 (hd32)+17 才能看到 iso9660 的文件系统结构数据。

另外,map --status 也可以报告仿真盘的一些情况。比如,可以了解,宿主盘的起始扇区和长度,是否正确。



回复

使用道具 举报

427#
发表于 2014-11-1 19:59:00 | 只看该作者
本帖最后由 mdyblog 于 2014-11-1 20:04 编辑
chenall 发表于 2014-11-1 19:06
我用qemu测试了下,没有发现问题。

也许是和文件系统有关系?


我把测试的IMG给你,你按下面的图试试(保证IMG连续存放)。 测试-IMG.7z (141.45 KB, 下载次数: 1)
P.IMG 是分区IMG,没有分区表。---失败




HD.IMG是磁盘IMG,有分区表。--OK




-----
如果 我给你的P.IMG的确失败。
你可以将里面的grub.iso换成你的ISO再试试(IMG容量只有4.9M,所以得小的ISO)
回复

使用道具 举报

428#
发表于 2014-11-1 22:47:59 | 只看该作者
我估计确实是个 bug,为了程序的完美,应该解决。

另一方面,mdyblog 可以绕过这个 bug,即,不使用 --in-situ 功能,就不会碰上这个 bug。

你只要把没有分区表的 IMG 仿真为软盘,就没问题了。就是说,只要不使用 --in-situ,就不会碰上 bug。

另外需要说明的是,--in-situ 设计的目的,不是像你这样的使用,它主要是为了应付 Win98 才设计出来的。通常是用不上的。你把它作为一个中间过渡虚拟盘来用,其本身就不是常规用法。--in-situ 的盘作为中间过渡盘来用,确实还未检验过,所以这个 bug 就一直存在,直到被你 “不正常的使用” 首次发现。

你们继续报告,这个 bug 可能由我来解决比较合适,因为相关代码是我写的。

点评

我用的--in-situ 的目的, 为了避免兼容问题。 MS的系统,磁盘启动就 (hd0,x) (fd0) 【(fd1)理论上可用,实际很多程序里面没有考虑B:】 有些辅助启动的grub4dos小程序,将(fd0) 占用,小程序返回时,原来的(f  详情 回复 发表于 2014-11-2 07:33
回复

使用道具 举报

429#
发表于 2014-11-2 00:00:26 | 只看该作者
关于in-situ的用法我也不是很了解,之前我还曾经想使用这个功能来实现一键GHOST(DOS版的)..

在GRUB4DOS中,通过map功能,把要恢复/备份的分区固定映射为(hd0),来源GHO文件分区固定为(hd1)..

这样就不管什么样的分区方案不管是多硬盘还是单硬盘,都可以使用一个通用的IMG文件来实现恢复/备份了.

甚至是目前所有基于DOS版的GHOST无法解决的 GPT分区,都是可能的(我有尝试过,可以用,但不是很完美).

点评

解释一下 --in-situ 它的字面含义是 “在原地”。如果把一个 volume 卷进行 “原地” 仿真,那么仿真后的虚拟盘是原先这个 volume 卷所在的整个硬盘,而不是仅仅只包含这个 volume 卷。仿真程序只把分区表进行虚  详情 回复 发表于 2014-11-2 09:12
回复

使用道具 举报

430#
发表于 2014-11-2 07:33:29 | 只看该作者
本帖最后由 mdyblog 于 2014-11-2 07:44 编辑
不点 发表于 2014-11-1 22:47
我估计确实是个 bug,为了程序的完美,应该解决。

另一方面,mdyblog 可以绕过这个 bug,即,不使用 --i ...

谢谢!

我用的--in-situ 的目的, 为了避免兼容问题。
MS的系统,磁盘启动就 (hd0,x)  (fd0)     【(fd1)理论上可用,实际很多程序里面没有考虑B:】
有些辅助启动的grub4dos小程序,将(fd0) 占用,小程序返回时,原来的(fd0)搞没了。
所以后来默认用(hd0,0), 没有哪个小程序会将(hd0,0) 搞没的。

还有,有些程序,还是需要硬盘。

先将就着吧。等新版grub吧.


============
》》--in-situ 设计的目的,不是像你这样的使用,它主要是为了应付 Win98 才设计出来的。通常是用不上的。你把它作为一个中间过渡虚拟盘来用,其本身就不是常规用法。--in-situ 的盘作为中间过渡盘来用,
----
现在基本上是搭积木。
一个程序加载一个环境。
另一个人,在这个环境上,又来虚拟一个存储设备。
问题就是这么出来的。
还有,有些程序,还是需要硬盘。

---
正如楼上C大所说, 无分区表扇区序列(IMG)直接 --in-situ 仿真硬盘,还是很有用的。
设计者和使用者看问题不同。
东西一旦设计出来, 使用者就是新的设计者,会设计出新的使用,而这可能是原来的设计者没有现象到的或没有重视的。

回复

使用道具 举报

431#
发表于 2014-11-2 09:05:34 | 只看该作者
测试了一下,确实是BUG

看以下我测试截图,映射的起始扇区多加了一次,具体要怎么解决就等不点了,这个map的命令比较复杂,我还是看得不太明白.

回复

使用道具 举报

432#
发表于 2014-11-2 09:12:33 | 只看该作者
chenall 发表于 2014-11-2 00:00
关于in-situ的用法我也不是很了解,之前我还曾经想使用这个功能来实现一键GHOST(DOS版的)..

在GRUB4DOS中 ...

解释一下 --in-situ

它的字面含义是 “在原地”。如果把一个 volume 卷进行 “原地” 仿真,那么仿真后的虚拟盘是原先这个 volume 卷所在的整个硬盘,而不是仅仅只包含这个 volume 卷。仿真程序只把分区表进行虚拟(大家对此是理解的,那就是 “作假”)。仿真程序把 volume 所在的区域划归 (hdX,0),即,把它当作虚拟盘的第一分区,并且激活它。分区表中原有的分区项目都会向后推移。如果原来的分区表的四个项目是满的,则拒绝使用 --in-situ 进行仿真。

在 --in-situ 仿真之下,虚拟盘的第一扇区(MBR)是整个硬盘的 MBR,而不是这个 volume 卷的第一扇区。由于虚拟盘与真实盘的扇区位置完全相同,没有偏移,所以,这个仿真取名为 “在原地” 仿真。

对比一下,加深了解。

假如是不带 --in-situ 的普通仿真,那么,这个 volume 卷的第一扇区将成为虚拟盘的 MBR(即,第一扇区)。注意,volume 卷的第一扇区肯定不是真实硬盘的第一扇区,但它却成为虚拟盘的第一扇区了,这就有偏移了,所以,这就不是 “在原地” 仿真了。

通常用不上 --in-situ。有时候使用 partnew 命令真实地写入分区表,可能更好。注意微软会忽略 ID 为 00 的分区。所以,假如你在 MBR 上用 partnew 创建了一个分区 ID 为 00 的分区,那么微软的操作系统是看不见它的。但新版的 grub4dos 还能正常访问这样的分区里面的文件系统。所以,灵活运用 ID 00,会收到意想不到的效果。



点评

谢谢,这样子就比较清楚了.. 另外能不能麻烦再解释一下另一个 --in-place的用途,和--in-situ的区别  详情 回复 发表于 2014-11-2 09:29
回复

使用道具 举报

433#
发表于 2014-11-2 09:15:42 | 只看该作者
麻烦再问个问题: 什么命令可打开 grub4bdos的多扇区读(写)加速功能?
回复

使用道具 举报

434#
发表于 2014-11-2 09:29:45 | 只看该作者
不点 发表于 2014-11-2 09:12
解释一下 --in-situ

它的字面含义是 “在原地”。如果把一个 volume 卷进行 “原地” 仿真,那么仿真 ...

谢谢,这样子就比较清楚了..

另外能不能麻烦再解释一下另一个 --in-place的用途,和--in-situ的区别

点评

对呀! map --in-place ... 是何方神圣?什么时候加的。 grub4dos 随时跟进的说明书在哪儿啊? 我一直用2008的说明书,最近才用上2014-8月的。 为什么 不随发行包一起发行?  详情 回复 发表于 2014-11-2 10:19
--in-place 和 --in-situ 的字面意思相同,都是 “在原地” 的意思。它们有两个差别: 其一,--in-place 是未公开的选项。--in-situ 是已公开的选项。 其二,当分区表的四个表项已经占满时,--in-situ 会拒绝仿  详情 回复 发表于 2014-11-2 10:03
回复

使用道具 举报

435#
发表于 2014-11-2 10:03:42 | 只看该作者
chenall 发表于 2014-11-2 09:29
谢谢,这样子就比较清楚了..

另外能不能麻烦再解释一下另一个 --in-place的用途,和--in-situ的区别

--in-place 和 --in-situ 的字面意思相同,都是 “在原地” 的意思。它们有两个差别:

其一,--in-place 是未公开的选项。--in-situ 是已公开的选项。
其二,当分区表的四个表项已经占满时,--in-situ 会拒绝仿真,而 --in-place 会继续仿真。继续仿真时,有一个表项会被挤出去。具体是哪个被挤出去,我也记不得了,可以通过试验来弄清楚。

在 --in-situ 仿真已经生效以后,如果进入某个实模式操作系统环境(DOS),而且某个软件写入了 MBR 扇区,则有可能会把仿真的分区表写入到真实的分区表上,引起分区顺序的变动,连同激活标志也改变了。这个变动所带来的问题不是灾难性的,因为所有的分区项目都在。但在 --in-place 的情况下,被挤出的那个分区表项将永久丢失。所以,使用 --in-situ 或 --in-place 生效之后,最好不要再去运行那些分区软件了。运行分区软件也可以,只是注意不要让它对 --in-situ 和 --in-place 虚拟盘进行分区操作。

回复

使用道具 举报

436#
发表于 2014-11-2 10:19:20 | 只看该作者
chenall 发表于 2014-11-2 09:29
谢谢,这样子就比较清楚了..

另外能不能麻烦再解释一下另一个 --in-place的用途,和--in-situ的区别

对呀!
map  --in-place  ...  是何方神圣?什么时候加的。
grub4dos 随时跟进的说明书在哪儿啊? 我一直用2008的说明书,最近才用上2014-8月的。
为什么 不随发行包一起发行?
回复

使用道具 举报

437#
发表于 2014-11-2 10:25:12 | 只看该作者
mdyblog 发表于 2014-11-2 07:33
谢谢!

我用的--in-situ 的目的, 为了避免兼容问题。

正如前面提到的,大多数情况下可以使用 partnew 来 “实做”,取代 --in-situ 的 “弄虚作假”。如果你非要使用 --in-situ,那就等着修复 bug。
回复

使用道具 举报

438#
发表于 2014-11-2 10:38:37 | 只看该作者
本帖最后由 不点 于 2014-11-2 10:53 编辑
mdyblog 发表于 2014-11-2 09:15
麻烦再问个问题: 什么命令可打开 grub4bdos的多扇区读(写)加速功能?


geometry --lba127sector 后面可以跟着一个盘号,比如 (hd0) 或 (fd0) 之类的。如果不跟参数,那就对当前盘(即,当前 root 设备所在的磁盘)进行操作。

默认时已经是 geometry --lba127sector 的了,所以,你无需运行这条命令。

对于 buggy 的电脑,内置菜单的初始化命令的开头应该有 geometry --lba1sector 命令,控制磁盘读写都是按照慢速的单扇区模式进行的。

有一个专门讨论的帖子,谈到 geometry --lba1sector 命令应该总是放在内置菜单的开头,只不过默认时自动跳过,而在有问题的电脑上,开机启动 grub4dos 时按下某个热键(可以与 C 键和 Insert 键放在一起进行处理,比如,按 S 键表示慢速 Slow、安全 Secure、单扇区 Single Sector 启动),可以让 geometry --lba1sector 真的起作用,这样,皆大欢喜,都没问题了。希望 chenall 抽时间把这个细致的工作做好。

更新:又考虑了,可以在 init_bios_info() 函数里面直接添加并处理 geometry --lba1sector,无需更改现有的内置菜单。

点评

是的,这是比较好的方案. 另外当用户按了S之后应该要暂停并给一个提示. 这个提示的内容要怎么写才好?  详情 回复 发表于 2014-11-2 11:49
这个主意不错,这样不需要修改内置菜单,总是能起作用(因为内置菜单经常会被修改),我今天抽空处理下.  详情 回复 发表于 2014-11-2 10:45
回复

使用道具 举报

439#
发表于 2014-11-2 10:45:00 | 只看该作者
不点 发表于 2014-11-2 10:38
geometry --lba127sector 后面可以跟着一个盘号,比如 (hd0) 或 (fd0) 之类的。如果不跟参数,那就对当 ...
有一个专门讨论的帖子,谈到 geometry --lba1sector 命令应该总是放在内置菜单的开头,只不过默认时自动跳过,而在有问题的电脑上,开机启动 grub4dos 时按下某个热键(可以与 C 键和 Insert 键放在一起进行处理,比如,按 S 键表示慢速 Slow、安全 Secure、单扇区 Single Sector 启动),可以让 geometry --lba1sector 真的起作用,这样,皆大欢喜,都没问题了。希望 chenall 抽时间把这个细致的工作做好。


这个主意不错,这样不需要修改内置菜单,总是能起作用(因为内置菜单经常会被修改),我今天抽空处理下.
回复

使用道具 举报

440#
发表于 2014-11-2 10:49:48 | 只看该作者
mdyblog 发表于 2014-11-2 10:19
对呀!
map  --in-place  ...  是何方神圣?什么时候加的。
grub4dos 随时跟进的说明书在哪儿啊? 我一 ...

是未公开的,不想让普通人使用的参数。一开始就支持这个参数。在能够使用 --in-situ 的情况下,尽量不要使用 --in-place。
回复

使用道具 举报

441#
发表于 2014-11-2 11:49:55 | 只看该作者
不点 发表于 2014-11-2 10:38
geometry --lba127sector 后面可以跟着一个盘号,比如 (hd0) 或 (fd0) 之类的。如果不跟参数,那就对当 ...
可以在 init_bios_info() 函数里面直接添加并处理 geometry --lba1sector,无需更改现有的内置菜单。


是的,这是比较好的方案.

另外当用户按了S之后应该要暂停并给一个提示.
这个提示的内容要怎么写才好?

点评

不用任何提示。就像 C 键与 Insert 键一样,都没有提示。如果你想给 S 键一个提示,也是可以的。比如,可以在具体执行与 geometry --lba1sector 等价的函数之时,强制打印一条信息(这条信息不可屏蔽,并延迟 5 秒)  详情 回复 发表于 2014-11-2 12:49
回复

使用道具 举报

442#
发表于 2014-11-2 12:41:10 | 只看该作者
本帖最后由 不点 于 2014-11-2 13:34 编辑

请 mdyblog 试试这个版本,估计问题应该解决了。如果解决,就可以提交。

更新:刚刚改正了错误,请下载测试。

grub4dos-0.4.5c-2014-11-02.7z

257.18 KB, 下载次数: 1

这个是错的,不要下载。

grub4dos-0.4.5c-2014-11-02.7z

257.23 KB, 下载次数: 12

下载这个,如果没问题,就可以提交。

点评

grub4dos-0.4.5c-2014-11-02.7z (下载这个,如果没问题,就可以提交。) -------------------- 这个成功了。 如图: [attachimg]202298[/attachimg] 有没有 0.46版的啊?  详情 回复 发表于 2014-11-2 14:51
我这里测试了一下,现在正常了.应该是没有问题了.  详情 回复 发表于 2014-11-2 14:16
回复

使用道具 举报

443#
发表于 2014-11-2 12:49:44 | 只看该作者
本帖最后由 不点 于 2014-11-2 12:57 编辑
chenall 发表于 2014-11-2 11:49
是的,这是比较好的方案.

另外当用户按了S之后应该要暂停并给一个提示.


不用任何提示。就像 C 键与 Insert 键一样,都没有提示。如果你想给 S 键一个提示,也是可以的。比如,可以在具体执行与 geometry --lba1sector 等价的函数之时,强制打印一条信息(这条信息不可屏蔽,并延迟 5 秒),表示对某某 drive 执行了 geometry --lba1sector 的动作,让用户明白,S 键已经起作用了。至于说在按 S 键的时候,倒是不需要给出提示。

这其实还是一个权衡问题。这样的用户不多,所以,我们不照顾他们。如果为了照顾他们,事先显示某个信息 5 秒钟,这就影响了大多数人的使用感受,就不好了。

只是在按 S 键以后(而且等到真正处理的时候)才显示信息,这样是比较好的。这是我的看法。究竟该怎样,还要看你来权衡和定夺。



点评

那就是说把这个信息放在geometry命令里面了.,我觉得是应该要给一个提示, 你们英文比较好,麻烦提供一句比较恰当的句子,这样只要执行 geometry --lba1sector就会给出该信息,提醒用户.  详情 回复 发表于 2014-11-2 14:15
请问 Insert 键 按下有什么功能/效果?  详情 回复 发表于 2014-11-2 13:19
回复

使用道具 举报

444#
发表于 2014-11-2 13:19:38 | 只看该作者
不点 发表于 2014-11-2 12:49
不用任何提示。就像 C 键与 Insert 键一样,都没有提示。如果你想给 S 键一个提示,也是可以的。比如, ...

请问 Insert 键 按下有什么功能/效果?
回复

使用道具 举报

445#
发表于 2014-11-2 13:44:45 | 只看该作者
mdyblog 发表于 2014-11-2 13:19
请问 Insert 键 按下有什么功能/效果?

调试启动失败的时候,使用 Insert 可以在启动时,单步跟踪关键步骤的执行,每一步执行完成,会暂停,显示调试信息,并等待按键进入下一步的跟踪。

回复

使用道具 举报

446#
发表于 2014-11-2 14:15:14 | 只看该作者
不点 发表于 2014-11-2 12:49
不用任何提示。就像 C 键与 Insert 键一样,都没有提示。如果你想给 S 键一个提示,也是可以的。比如, ...

那就是说把这个信息放在geometry命令里面了.,我觉得是应该要给一个提示,

你们英文比较好,麻烦提供一句比较恰当的句子,这样只要执行 geometry --lba1sector就会给出该信息,提醒用户.
回复

使用道具 举报

447#
发表于 2014-11-2 14:16:56 | 只看该作者
不点 发表于 2014-11-2 12:41
请 mdyblog 试试这个版本,估计问题应该解决了。如果解决,就可以提交。

更新:刚刚改正了错误,请下载 ...

我这里测试了一下,现在正常了.应该是没有问题了.

点评

那说明,问题的症结找到了,于是就可以提交了。  详情 回复 发表于 2014-11-2 14:29
回复

使用道具 举报

448#
发表于 2014-11-2 14:26:16 | 只看该作者
本帖最后由 不点 于 2014-11-2 14:27 编辑

我的意思是不用改动现在的 geometry 命令。

只是在 init_bios_info() 里面,在其结尾处,检查用户是否按过了 S 键,如果有按 S 键,就执行

geometry_func ("--lba1sector", 0); 或者类似的命令。

在执行这条命令的前后,给出一条信息,并等待 5 秒。信息可以像是这样的:

You pressed the S key, and "geometry --lba1sector" is successfully executed for drive 0x%X.

回复

使用道具 举报

449#
发表于 2014-11-2 14:29:49 | 只看该作者
chenall 发表于 2014-11-2 14:16
我这里测试了一下,现在正常了.应该是没有问题了.

那说明,问题的症结找到了,于是就可以提交了。

回复

使用道具 举报

450#
发表于 2014-11-2 14:51:02 | 只看该作者
不点 发表于 2014-11-2 12:41
请 mdyblog 试试这个版本,估计问题应该解决了。如果解决,就可以提交。

更新:刚刚改正了错误,请下载 ...

grub4dos-0.4.5c-2014-11-02.7z (下载这个,如果没问题,就可以提交。)

--------------------
这个成功了。
如图:



有没有 0.46版的啊?
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-27 13:28

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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