无忧启动论坛

标题: MAP MEM VHD报错 [打印本页]

作者: 2011star21cn    时间: 2013-1-13 23:17
标题: MAP MEM VHD报错
情况如下:
闪迪CZ80 32G U盘
上面放了个12G的VHD

若把U盘格式化为NTFS,且U盘内只有这个VHD文件,可以成功map mem进入ramos win7

若把U盘格式化为EXFAT,且U盘内只有这个VHD文件,则报错,error 13 :Invalid or unsupported executable ........
报错后进入命令行用uuid查看,可以看到VHDmap出的hd0,用ls命令可以列出hd0中的目录

试过g4d版本0.4.6a  2012.12.31
0.4.5c  2012.12.05
结果是一样的

title Full RamOS (Windows 7) USB
find --set-root /Ramos7/win7u.vhd
map --mem --top /Ramos7/win7u.vhd (hd0)
map (hd0) (hd2)
map --hook
chainloader (hd0,0)/bootmgr
作者: 不点    时间: 2013-1-14 09:07
感到比较蹊跷。

初步怀疑,exFAT 的驱动程序有 bug。

既然都是映射到内存,那么,差别应该不大才对。

而在 exFAT 的情况下,chainloader (hd0,0)/bootmgr 导致 Error 13 失败信息,说明 bootmgr 已经被破坏。这间接说明了,从 exFAT 读 VHD 文件的扇区数据的时候,读错了位置。因此怀疑是 exFAT 驱动程序的问题。

也有另外一种可能,那就是,当格式化为 NTFS 时,BIOS 能够以 LBA 模式访问 U 盘,因而没有出现问题。而当格式化为 exFAT 时,BIOS 对于这个 exFAT 感到陌生,不认识这个 exFAT,因此,BIOS 可能不采用 LBA,而只采用 CHS 模式,当然要出问题了。因为 CHS 模式最大只能访问 U盘上 8G 的内容。

你可以在那条 find 命令之后立即用 geometry () 命令,查看 VHD 所在盘是否支持 LBA。
作者: 2011star21cn    时间: 2013-1-14 17:52
收到,今晚试试 geometry
作者: 2011star21cn    时间: 2013-1-14 18:56
find --set-root /Ramos7/win7u.vhd
geometry ()

得到结果
drive 0x81(LBA): C/H/S = 3893/255/63, Sector Count  / Size = 62541045/512
Partition num:0, Filesystem type is fat, partition type 0x07
作者: 不点    时间: 2013-1-14 19:07
结果表明,支持 LBA。

那么就怀疑是 exFAT 驱动程序的 bug 了。等待 yaya,看看他有没有什么看法。
作者: 2011yaya2007777    时间: 2013-1-15 11:04
测试环境:
朗科 N100  250M u盘,exfat 分区
搭载 100M ntfs 分区的 vhd

菜单:
title bcd USB
find --set-root /Ramos7/bcd.vhd
map --mem --top /Ramos7/bcd.vhd (hd0)
map (hd0) (hd2)
map --hook
chainloader (hd0,0)/bootmgr

从u盘启动,一切OK!
作者: 2011star21cn    时间: 2013-1-15 11:56
100M的 VHD
我也是正常的
12G的就error13了

我再换一个U盘试试,看看是不是CZ80特例,一会来反馈
不过是usb2.0的,拷12G进去好累

[ 本帖最后由 2011star21cn 于 2013-1-15 12:01 编辑 ]
作者: 2011star21cn    时间: 2013-1-15 12:44
换了一个USB2.0的16G u盘
exfat依然是error13
作者: 2011yaya2007777    时间: 2013-1-15 13:39
请把 exfat 分区参数贴上来。(启动分区1扇区数)
作者: 2011star21cn    时间: 2013-1-15 15:09
标题: 回复 #9 2011yaya2007777 的帖子
我是小菜鸟
请问如何得到这个参数?
用什么命令?
作者: 2011yaya2007777    时间: 2013-1-15 16:03
使用 BOOTICE (在综合区顶部):
1. 在“物理磁盘处理”选项卡,从“目标磁盘”选择你的磁盘,点“扇区编辑”
2. 观察 0x01c6 的值(是 16 进制,比如 20 即 32, 3f 即 63 )
3. 点顶部输入框(现在应当是 0),输入上述对应的十进值(如32,63),点“确定”
4. 点顶部“备份扇区到文件”,在“选择备份文件”输入框写入文件名,如“aaa”,点“备份”
作者: 2011star21cn    时间: 2013-1-15 16:38
不知道做的对不对
我看到偏移1C6处是80,于是换成10进制128,输入进去查看是一个全0的图
我这个U盘不是启动盘,只是把vhd文件放在了U盘

01.PNG (57.21 KB, 下载次数: 106)

01.PNG

02.PNG (53.36 KB, 下载次数: 94)

02.PNG

作者: 2011yaya2007777    时间: 2013-1-15 16:46
是0x1f80,对应的是8064,把8064扇区贴上来
作者: 2011star21cn    时间: 2013-1-15 17:02
8064的图和bin备份

03.PNG (53.96 KB, 下载次数: 105)

03.PNG

8064.zip

350 Bytes, 下载次数: 3, 下载积分: 无忧币 -2


作者: 2011yaya2007777    时间: 2013-1-15 17:29
看来每簇扇区数=32k,也不大。得研究一下内核。
作者: 2011yaya2007777    时间: 2013-1-15 21:48
上面放了个 12G 的 VHD,而且还 --mem ,那内存有越多大?
作者: 2011star21cn    时间: 2013-1-15 23:31
16G内存,也不算大啊,现在内存便宜了
作者: 2011yaya2007777    时间: 2013-1-20 15:57
看来一下 fsys_fat.c ,2个因素。
1. g4d 内核是 32 位的,缓存指针是 32 位,意味着内存不能超过 4G。
2. 虽然 exfat 文件名字节长度使用 8 字节,但内核只读取了低 4 字节,也就是把 12G 的零头装进了内存。
作者: 不点    时间: 2013-1-20 20:31
但 NTFS 分区是可以超过 4G 的。

你想想,一定能够解决。

map --mem 会把很大的文件装到 4G 以上的空间。

虽然 grub4dos 本身的代码运行于 32 位保护模式,但是,内存处理部分已经完全支持 64 位了。

有两套函数都在使用,一套是 4G 以内的(32位),一套是 64 位的。

你再仔细看看吧。
作者: 2011yaya2007777    时间: 2013-1-30 13:34
Re 2011star21cn:
请测试。

请有条件的网友测试:在exfat分区放置1个大于4Gb的硬盘映像文件,然后使用grldr加载。

[ 本帖最后由 2011yaya2007777 于 2013-1-30 13:38 编辑 ]

grldr.7z

132.01 KB, 下载次数: 17, 下载积分: 无忧币 -2


作者: 2011star21cn    时间: 2013-1-31 11:19
看到了,这就试一下,谢谢yaya
作者: 2011star21cn    时间: 2013-1-31 20:59
问题解决了,顺利进去ramos
作者: 2011yaya2007777    时间: 2013-2-1 08:34
谢谢2011star21cn认真反馈bug,耐心测试!




欢迎光临 无忧启动论坛 (http://wuyou.net./) Powered by Discuz! X3.3