无忧启动论坛

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

[求助] map --mem 使用的内存能否从最大值→最小值使用

  [复制链接]
31#
 楼主| 发表于 2016-4-10 18:27:18 | 只看该作者
致不点大师:下面这段不理解:
驱动设置
方法1:通过注册表

1.注册表项 HKLM\SYSTEM\CurrentControlSet\Control\FiraDisk

①名为StartOptions ,类型为字符串

其数值的用途:使用FiraDisk驱动创建虚拟盘.

例如:

disk,vmem=find:\file1.img;cdrom,vmem=find:\file2.iso;floppy,vmem=c:\file3.img;disk,vmem=c:\file4.img,size=1052835840

例子含有的虚拟盘的类型有: 硬盘, 光驱, 软驱

有3种主要的媒体类型/映像 :

file=路径 : 读写文件.

vmem=路径 : 内存映射文件.

不带路径的vmem : 从虚拟内存分配 (内存+页面文件).

可选参数

offset=数值

size=数值

heads=数值

sectors-per-track=数值

ro : 只读

boot : 表明该虚拟驱动器是用于Windows的启动.

如果文件不存在和指定大小,新的文件将被创建。

如果文件存在,但小于偏移值+大小, 将被扩展.

②名为DisableDetectGrub4dos ,类型为REG_DWORD (用于关闭检测Grub4dos的仿真盘)

值:0为启用 1为关闭

③名为DisableDetectMemdisk ,类型为REG_DWORD (用于关闭检测MEMDisk的仿真盘)

值:0为启用 1为关闭

④名为DisableDetectedRAMDrives ,类型为REG_DWORD (用于关闭检测Grub4dos创建的内存盘盘)

值:0为启用 1为关闭

2.注册表项 HKLM\SYSTEM\CurrentControlSet\services\FiraDisk\Parameters

①StartOptions同上.

你可以在Windows XP安装的第一阶段通过TXTSETUP.OEM字段[Config.FiraDisk]写入该值.

②名为PnP ,类型为REG_DWORD

0为在启动时创建新的FiraDisk Enumerator device. 1为不创建FiraDisk Enumerator device.

方法2:通过GRUB4DOS内存设备

创建一个使用设备号在0-127之间的小内存盘和写一些配置进该小内存盘。

以[FiraDisk] (可不区分大小写)开始,然后接 \n ,然后StartOptions=数据\n ,最后以\0结束。

反斜杠是用于转义,你可以在数据字段使用 / 代替 \ 。当FiraDisk读到该数据,它会自动转换 / 为 \ 。

例子:

map --mem (md)0x800+4 (99)
map --hook
write (99) [FiraDisk]\nStartOptions=cdrom,vmem=find:/file1.iso;floppy,vmem=find:/file2.img;\n\0
请指点迷津,谢谢。





回复

使用道具 举报

32#
发表于 2016-4-10 20:30:08 | 只看该作者
呵呵,你迷津,我也迷糊,没法指点江山。你还找到教程了,而我从未了解过。不过,也许大家可以共同学习,互相帮助。本着盲人摸象的大无畏态度,我斗胆揣测一下。

disk,vmem=find:\file1.img;cdrom,vmem=find:\file2.iso;floppy,vmem=c:\file3.img;disk,vmem=c:\file4.img,size=1052835840

那意思可能是说,第一个是虚拟硬盘(disk),它是内存盘(vmem),它的映像文件位于根目录下(\),名字叫做 file1.img,至于说它究竟在哪个盘上,不确定,但可以找到它(find)。

第二个是虚拟光盘(cdrom),它是内存盘(vmem),它的映像文件位于根目录下(\),名字叫做 file2.iso,至于说它究竟在哪个盘上,不确定,但可以找到它(find)。

第三个是虚拟软盘(floppy),它是内存盘(vmem),它的映像文件有固定的路径 c:\file3.img,不需要查找。

第四个也是虚拟硬盘(disk),它是内存盘(vmem),它的映像文件有固定的路径 c:\file4.img,不需要查找,而且为它保留的内存盘空间有 1G 之多(size=1052835840)。
回复

使用道具 举报

33#
发表于 2016-4-10 20:52:54 | 只看该作者
而且我猜测,firadisk 的这些设置,其中有些已经与 grub4dos 无关了。也就是说,它不一定需要读取 grub4dos 的 map 信息,而是直接建立它自己在 windows 下的虚拟盘信息。也就是说,仅仅在从 grub4dos 这个“火箭发射台”启动的时候,需要 grub4dos 的实模式虚拟盘信息。一旦进入预定轨道(Windows),就不再需要 grub4dos 的信息了(第一级火箭的废铁都可以扔掉了)。

file=路径 : 读写文件.
vmem=路径 : 内存映射文件.


如果不用 vmem=,而是用 file=,则表示这不是内存盘,而是直接用硬盘上的 img 文件进行映射。

不带路径的vmem : 从虚拟内存分配 (内存+页面文件).


内存盘可以不带路径,此时它可能读取 grub4dos 的映射表,确定内存盘的起始物理地址和长度。当然也可能不使用 grub4dos 的信息,而是 firadisk 自己为这个内存盘分配内存。

回复

使用道具 举报

34#
 楼主| 发表于 2016-4-10 22:39:28 | 只看该作者
感谢不点大师的回贴,也谢谢你的指点。不过用GRLDR MAP虚拟硬盘造成在OS系统中不能分配盘符和识别文件的问题,原因已经找到。我可以确定是后面开发的GRLDR引入的BUG或则是开发者有意为之。我找到早期的GRLDR测试时发现不存在GRLDR MAP虚拟硬盘造成在OS系统中不能分配盘符和识别文件的问题。只是这个版本是早期的所以不能实现MAP到高位内存。并说明一下这个文件来自CHENGALL的NTBOOT.IMG我提取了出来。
见下面的附件:

grldr.rar

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

可识别map虚拟盘

回复

使用道具 举报

35#
 楼主| 发表于 2016-4-10 22:47:49 | 只看该作者
致不点大师:不知现在的GRLDR的开发人员能否在最新的版本中修正这个问题,让GRLDR能实现 MAP虚拟盘到高位内存的同时实现在OS系统中能分配盘符和识别文件。不点大师您还在开发吗?能否修正一下呢?谢谢。非常希望能实现这个功能啊。能实现吗?最后再次谢谢你的指点和帮助。
回复

使用道具 举报

36#
 楼主| 发表于 2016-4-10 23:48:33 | 只看该作者
再置不点大师:我用最新的GRLDR版本2016-4-9版测试时发现,最新的GRLDR也能识别MAP到低位内存的虚拟硬盘,但用MAP --MEM --TOP 命令出来的虚拟盘就不能识别。发遗憾啊!开发人员能否让GRLDR MAP到高位内存的虚拟硬盘也能识别呢?下面的附件是最新的版本:

grldr.rar

160.95 KB, 下载次数: 0, 下载积分: 无忧币 -2

低位内存可识别高位内存不可识别

回复

使用道具 举报

37#
 楼主| 发表于 2016-4-11 01:23:36 | 只看该作者
再致不点大师:从最新的GRLDR版本支持低位内存的虚拟硬盘而不支持高位的虚拟硬盘来看的话。可能不是GRLDR的问题而有可能是firadisk驱动的问题,原因在于firadisk驱动是基于32位,所以在低位内存下工作正常,而到高位内存时已经不是32位程序能够操作的了。之所以在OS系统中还能识别到高位的虚拟硬盘可能是GRLDR MAP的功能
让OS系统把它看作是一个SCSI硬盘设备而不是内存,所以在使用了firadisk驱动时基于它SCSI驱动性质所以OS系统能识别到这个硬盘,但firadisk驱动又由于基于32位所以不能对高位内存进行识别,所以在高位内存的虚拟盘不正常。看来要用高位内存虚拟盘在32位环境只能是进系统后重新分区和格式化了。(firadisk驱动时基于它SCSI驱动性质所以OS系统能识别到这个硬盘)最后再次感谢不点大师和2011yaya2007777 的指点,谢谢。
回复

使用道具 举报

38#
发表于 2016-4-11 02:23:39 | 只看该作者
感觉是驱动程序的 bug。你可试试 winvblock,看看是否也存在相同的 bug。

既然你能手动分区、格式化,说明 32 位系统也能访问虚拟盘。可能是驱动程序的 bug,未能成功获取高位内存里的扇区数据。

也可直接向驱动程序的开发者报告 bug。

回复

使用道具 举报

39#
 楼主| 发表于 2016-4-11 05:21:25 | 只看该作者
再致不点大师:这个可能不是驱动BUG,而是程序只能做到这样,原因在于基于X86指令集的32位程序只能访问到4G内存或更少,32位系统只能识别使用4G内存,而X64位系统可使用超过4G的内存。一些服务器版本32位系统可识别并使用大于4G内存是用了PAE技术。现在的OS系统采用的是分层设计,所以我才发出这个求助贴,因为在OS系统层面不能解决的问题,在BIOS层面有可能解决,原因在于BIOS直接管理硬件。而GRLDR是基于BIOS层面开发的所以应该不存在不能访问和不能识别大内存的问题。现在开发人员开发的map --mem --top 命令对于32位的03PE系统意义重大,原因在于03PE系统不能识别大内存。我发现03PE系统在使用多核CPU支持后能手动分区、格式化高位内存的虚拟盘,而在不使用多核CPU支持的情况则容易蓝屏,原因是内核不太一样。我现在并不知到这个现象只是在我的机子上才存在还是具有普遍现象,如是具有普遍现象意义就非常大了。我在用RAMOS XP中也发现map --mem --top 命令有效,同样能发现高位内存的虚拟盘只是不能正常识别;所以我现在非常的迷茫啊。最后再次感谢您的回贴和对我的帮助指点。谢谢。
回复

使用道具 举报

40#
发表于 2016-4-11 09:20:00 | 只看该作者
本帖最后由 不点 于 2016-4-11 09:33 编辑

我印象中,32 位系统,可以识别高位内存盘的。虚拟的 C: 盘放在高位内存,好像行得通啊。有没有人成功?

如果有成功,那就说明驱动程序是支持高位内存盘的。但假如它只支持一个虚拟盘,不支持多个,则属于 bug。

看来要用高位内存虚拟盘在32位环境只能是进系统后重新分区和格式化了。


这句话引起我思考:既然能够重新分区、格式化,那意思就是说,可以使用高位内存里面的虚拟盘。

因此,可能驱动程序本身没问题,而仅仅是虚拟盘的文件系统不正确造成的,比如说,虚拟硬盘的第一扇区不含分区表。

还有可能是 MBR 上的磁盘签名有问题(有冲突),Windows 拒绝为其分配盘符。更改 MBR 上的磁盘签名为随机数,可能有助于解决这个问题。

回复

使用道具 举报

41#
 楼主| 发表于 2016-4-11 13:15:04 | 只看该作者
致不点大师:"32 位系统,可以识别高位内存盘的。"这是正确的但32 位系统和程序不能识别超过4G的内存,我想原因在于OS系统在对不同设备处理方式不一样造成的。(如:32 位系统和程序不能识别超过4G的内存,但可以管理超过4G的大硬盘,如我有一个硬盘是160G,这并不矛盾。还有识别4G内存的同时,还可以在硬盘上再设虚拟内存;但系统和程序仍然不会调用超过4G的可用内存,(包括虚拟内存)这是32位系统对内存寻址能力的极限,但OS系统对硬盘却不是这样,如:我可以用完OS管理的160G的硬盘) 正因为GRLDR的MAP --MEM --TOP 把内存虚拟成了硬盘所以OS系统可以管理,因为OS才用分层设计的它不会直接管理硬件,所以OS系统并不会知到自已现在管理的是内存而不是硬盘;它只会把它作为硬盘处理,采用硬盘的管理方式。然而firadisk驱动它不会把它作为硬盘处理而是在内存中去构建。(这点我也不太懂,但它一定只会是在4G以内的内存中发挥作用,不管这4G以内的内存是从哪个扇区开始到哪个扇区结束;因为这是32位程序决定了的。)所以
你说驱动程序是支持高位内存盘的可能不成立。我的机子上测试也是如此。最后感谢你的回贴和对我的帮助。谢谢。

点评

既然不能访问 4G 以上的内存,那你格式化谁?你格式化的,不还是 4G 以上的内存吗? 我的理解是,驱动程序已经提供了 4G 以上内存的访问能力,并把它当成虚拟扇区数据。 这样是可以解释通的。 还有就是,以  详情 回复 发表于 2016-4-11 15:32
回复

使用道具 举报

42#
发表于 2016-4-11 15:32:38 | 只看该作者
ysj-1 发表于 2016-4-11 13:15
致不点大师:"32 位系统,可以识别高位内存盘的。"这是正确的但32 位系统和程序不能识别超过4G的内存,我想 ...

既然不能访问 4G 以上的内存,那你格式化谁?你格式化的,不还是 4G 以上的内存吗?

我的理解是,驱动程序已经提供了 4G 以上内存的访问能力,并把它当成虚拟扇区数据。

这样是可以解释通的。

还有就是,以前早听说有人在 XP 下使用 4G 以上的内存作为虚拟盘,不浪费内存资源。

这一点你也提到过。不过,你只是希望,而别人早做到了,这是区别。

他们把 4G 以上的空间作为 C: 盘,因而 4G 以下都可以作为 XP 的系统内存了。

你可以找找看,这种情况应该是有的,如果我的记忆没骗我的话。

回复

使用道具 举报

43#
 楼主| 发表于 2016-4-11 18:24:01 | 只看该作者
致不点大师:首先我对开发GRLDR的人员表示感谢,因为在BIOS层面虚拟的硬盘OS系统是可以管理的,这使得原先4G以上的内存在32位系统下不能使用。而现在可以把它作为高位内存虚拟盘使用,相当于为OS增加了一个高速硬盘,在这个硬盘上可以当作一个真实的硬盘使用。这是GRLDR MAP形成的,当然GRLDR还可以虚拟其它设备,如果没有涉及内存寻址,在OS系统中又能符合现有的32位系统所使用的API的话,可能都可以使用;这是有价值的。比如可把虚拟内存设在这个高位内存虚拟的硬盘上以提高系统性能和稳定性,虽然系统直接使用高位内存不可能超过几百M。(即:低位内存加上可调用虚拟内存要不大于4G)虽然我们可以把虚拟内存设得很大,但32位系统只支持最大4G寻址,所以没有意义;但我们可以把它作为高速 硬盘使用,还是有价值的。
你说的 XP 下使用 4G 以上的内存可能要打大内存补丁,这有点象服务器版本的32位系统开PAE。这样OS系统可以直接识别并调用4G以上内存,但不推荐这么做,原因在于系统的稳定性和标准化API。否则会出现各种软件或驱动的不兼容。我实际又测试了一下把RAMOS XP (用论坛上老九精减的一个英版XP的在GHO文件做的)分别MAP到低位内存和高位内存测试了一下,在低位正常而在高位蓝屏。这个系统是XP SP2的,如果用SP3的话我想可能会同样出问题。对于你说驱动程序已经提供了 4G 以上内存的访问能力这是不可能的,除非驱动不采用X86指令的32位寻址,直接访问内存;如GRLDR直接对硬件层面操作。至于说既然不能访问 4G 以上的内存,那你格式化谁?你格式化的,不还是 4G 以上的内存吗?这个问题我已说过,在OS系统中这时的高位虚拟盘OS会认为是硬盘而不是内存,因为OS不直接和硬件打交道。如果说有人成功把OS系统放到高位虚拟盘搞成功了的话,可能必须解决大内存问题,我现在是想用在03PE上不可能用PAE或打补丁。原因在于我只是一个菜菜,无法解决PAE或打补丁。(超出我的能力了)最初遇到高位内存虚拟盘不能识别时没有想到32位系统的问题后来用最新的GRLDR测试时发现低位行,高位不行才开始思考这个问题的。最后我要说明的一点,我确实是个菜菜,现在的一些说法可能不正确,望各位大师指正。这些说法都来自网上或本论坛。最后,再次感谢你的回贴,以及你对我的帮助和指点。谢谢。

点评

不知道方便网盘分享下“老九精减的一个英版XP的GHO”吗,谢谢  详情 回复 发表于 2016-4-11 21:22
学习了,很好的交流。。希望你的BIOS层面的虚拟高位内存盘能够成功。。这样对于32系统很有意义。。  详情 回复 发表于 2016-4-11 21:19
回复

使用道具 举报

44#
发表于 2016-4-11 19:09:12 | 只看该作者
你自己说的,高位内存上的虚拟盘,需要格式化才能用。既然你格式化以后可以用了,那不就等于说,32 位系统下,也能使用 4G 以上的内存盘了吗?

请不要绕太远,直接谈这个问题。我想这不复杂。
回复

使用道具 举报

45#
发表于 2016-4-11 21:19:36 | 只看该作者
ysj-1 发表于 2016-4-11 18:24
致不点大师:首先我对开发GRLDR的人员表示感谢,因为在BIOS层面虚拟的硬盘OS系统是可以管理的,这使得原先4 ...

学习了,很好的交流。。希望你的BIOS层面的虚拟高位内存盘能够成功。。这样对于32系统很有意义。。
回复

使用道具 举报

46#
发表于 2016-4-11 21:22:48 | 只看该作者
ysj-1 发表于 2016-4-11 18:24
致不点大师:首先我对开发GRLDR的人员表示感谢,因为在BIOS层面虚拟的硬盘OS系统是可以管理的,这使得原先4 ...

不知道方便网盘分享下“老九精减的一个英版XP的GHO”吗,谢谢
回复

使用道具 举报

47#
 楼主| 发表于 2016-4-11 22:19:46 | 只看该作者
先回复:pcfan120
我是一个菜菜,有的不一定正确,你最好在自已的机子上试试。我的说话有好多来自网上,我本人也并不是从事计算机行业的,是个门外汉平时也只是个伸手党至于老九精减的一个英文版XP SP2的GHO文件我现在的计算机上已没有了(我的原来的计算机坏了,现在这个计算机是今年过年后买的)现在只剩下我原来做的RAMOS。这个英文版XP SP2没有什么实际用途。当时下它是因为它很小和一个PE差不多大小(60几M)我从未用过网盘。你最好找老九索取。
回复

使用道具 举报

48#
 楼主| 发表于 2016-4-11 22:47:30 | 只看该作者
致不点大师:你自己说的,高位内存上的虚拟盘,需要格式化才能用。既然你格式化以后可以用了,那不就等于说,32 位系统下,也能使用 4G 以上的内存盘了吗?

对于这个问题有一点说明:我的机子总内存只有4G,我是在PE上测试的。我所说的高位内存盘的说法来自本论坛GRUB4DS学习笔记:在 grub4dos 中,内存在 3.25G 处被分成了高端内存和低端内存两端,镜像不能跨 3.25G 这个点。如果你的内存小于 3.25G,你就没有高端内存可用。我所说的是  3.25G不是4G因为我没有更大的内存。这点我在前面的贴子中说过,另这儿我们所聊的是MAP --mem --top 中的高位虚拟内存盘,是不是就等于4G以上的高位虚拟内存盘这我不知到,这点你应该比我清楚。我原来的PE中系统只能识别2.99G还剩下的1G的内存发现不了也用不了。我用 MAP --mem --top 750M中的高位虚拟内存盘在我的机子上格式化以后可以用了。这只是在我的机子上,而且我没有更大的内存测试MAP --mem --top 所说的高位内存盘是否就是4G 以上的内存盘。我看那个GRUB4DS学习笔记说 的是3.25G ,所以你的问题我非常迷茫啊。我只能说:MAP --mem --top 所说的高位内存盘在我的机子上可以用了。另我也想知到GRLDR的开发人员为什么是3.25G 而不是4G呢?不点大师想必知道吧,能否指点一下呢?谢谢。最后感谢你的回贴,和对我的帮助。谢谢。
回复

使用道具 举报

49#
 楼主| 发表于 2016-4-11 23:51:49 | 只看该作者
致不点大师:你在19楼说:假如你的高端内存(地址在4G以上的内存)只有  2.5 G,你的 gz 文件解压后也只有 2.5G 或更少,那么,内存盘可以放在高端。如果你在 map --top --mem=? 中给定的内存盘大小超过 2.5 G,那么,高端内存放不下这个内存盘,会自动使用低端内存。你指定的内存盘大小必须小于高端内存的大小,多一个字节都不行。grub4dos 有一条 displaymem 命令,可以查看主板上内存地址的分布情况。你可以看到主板的高端可用内存量究竟有多大。

这儿map --top --mem是否就包括4G以上的内存呢?我非常想知道啊。这个我之能咨讯你了,因为我没有更大的内存来测试了。同时也不明白GRUB4DS学习笔记说 3.25G 的问题能否指教呢?谢谢。
回复

使用道具 举报

50#
发表于 2016-4-12 06:21:06 | 只看该作者
本帖最后由 不点 于 2016-4-12 09:36 编辑
我本人也并不是从事计算机行业的,是个门外汉平时也只是个伸手党


没问题,我也是完全一样的。门外汉对门外汉,这才能你一言我一语深入学习和交谈。真正的高手是不可能浪费他的宝贵时间来跟我们聊这些小儿科话题的。

现在就说说我碰巧了解而你没了解的知识,算是我们这个级别的人,互相交流和帮助吧。

你说你的机器内存是 4G。我了解到的知识是,主板 BIOS 会把这 4G 分成两部分,一部分大约 3.25G,赋予物理地址 0~3.25G,另一部分 0.75G,赋予物理地址 4~4.75G。你要是懂得 grub4dos 的 displaymem 命令,你就可以知道,主板 BIOS 会把内存映射为很多块不同的物理地址区域。你在 grub4dos 下用 map --mem --top 最大可以映射(大约)0.75G 的盘到 4G 以上的高端区域。事实上,你做到了,应该是确信无疑了。但是你仍有疑惑,我猜你可能认为,这 0.75G 仍旧在物理地址 4G 以内。这是错误的。这 0.75G 确实是在 4G 以外,是在高于 4G 的内存物理地址上。不需要很专业的知识,你很容易验证这一点。比如说,你把你的 0.75G 硬盘的扇区全部填充为某个秘密字符串(比如说,它有 16 字节长,重复无数次,填满整个 0.75G 的 img)。把它映射到内存高端,然后,你在 0~4G 范围内查找你的秘密字符串。如果找到了,那就证明虚拟盘的物理地址是在 4G 以内。如果找不到,那就证明虚拟盘确实是在 4G 以外。在 map 的过程中,map 命令需要把你的 U 盘上的 img 读入某个低端内存区域,然后再复制到高端目的地。等它完成之后,低端内存中也残留一些扇区数据,不过,你可以把它们清除为 0。然后,在 map --hook 之后,你 cat --hex (hd0)+300 ,此处假定 (hd0) 是你的虚拟硬盘。你的秘密字符串应该出来了。

为什么 4G RAM 会被主板分成两部分呢?因为 4G 以下的一部分内存空间(大约 0.75G)要被主板和 CPU 占据,这些空间不能让用户随便使用。所以,主板就把 4G 内存当中的 0.75G 赋予物理地址 4 ~ 4.75G 了。从 3.25 ~ 4G 的地址空间,被主板芯片组、CPU 占据,用户不允许使用这部分的空间。所以,你不可能把内存盘放在 3.25 ~ 4G 这个物理地址区域。

map --top --mem 是否就包括 4G 以上的内存呢?


grub4dos 一开始是不支持内存盘的。最初只支持不带 --mem 的直接映射。后来为了支持内存盘,才增加了 --mem 参数。再后来,grub4dos 内核支持了 4G 以上的内存空间的访问,此后的某一天,才增加 --top 参数。我印象中,这个参数是 firadisk 的开发者为 grub4dos 增加的,是给 grub4dos 打的补丁。grub4dos 整体上属于 32 位系统,不能直接把 4G 以上的内存当作进程空间(即运行程序的空间)来用,只能把它当成数据空间来用。内存盘就是一堆数据,正好可以放在 4G 以外的空间上。这已经被证明是可行的了,有人能够用 map 命令创建 30G 的内存盘。前面我提到过,grub4dos 内核目前支持访问 512G 内存,因此,最大可能支持的内存盘是大约 508G;如果一个内存盘要使用高端内存,那么低端的 4G 空间是无法使用的。为了简单起见,grub4dos 的仿真程序要求一个内存盘必须占据连续的内存地址,不能跨越内存块的边界。所以,一个内存盘的最大长度是 508G。精确地说,低端可能有 3G 或 3.25G,等等,不确定(因主板的不同而不同);剩下的空间都分配给了 4G 以上的物理地址了,因此,4G 以上有大约 508.75G 的地址空间是连续内存块。然而 grub4dos 只能访问 508G,不能访问剩余的 0.75G,这是因为(目前) grub4dos 最大只能访问 512G 的地址空间(4G 低端内存空间 + 508G 高位的内存空间)。

回复

使用道具 举报

51#
 楼主| 发表于 2016-4-12 10:47:41 | 只看该作者
致不点大师:非常感谢你的回贴和指点,解出了我心中的疑惑;听到这个结果我非常高兴,这下我可以放心的把它用在我的PE上了。不点大师能否有什么程序能检查一个没有分区和格式化了的硬盘(虚拟硬盘)的容量呢?若有就可能实现自动为map --mem --top出来的虚拟硬盘实现分区和格式化从而使用它。我非常想实现自动分配盘符啊,不知能否实现呢?最后再次感谢你的回贴和对我的帮助和指点。谢谢。
回复

使用道具 举报

52#
发表于 2016-4-12 11:15:57 | 只看该作者
本帖最后由 不点 于 2016-4-12 11:19 编辑

我觉得这内存盘不能被识别的问题,属于 Windows 的问题。我前面提到了我的揣测以及处理的方法,不过你好像没有留意。

我揣测是由于内存盘 “磁盘签名” 有冲突,导致 Windows 拒绝为它分配盘符。我猜测只要把内存盘的分区表上的 “磁盘签名” 设置好,就可避免被 Windows 拒绝了。

你可以做如下的试验:

建立内存盘映像文件,要带上 MBR,不要只是一个 volume 的卷。这是因为 “磁盘签名” 是在 MBR 扇区上。如果你没有 MBR 扇区,就无法设定你的磁盘签名。

1. 为这个映像文件分区,格式化,让它具有非 0 的磁盘签名,并且确认这个磁盘签名不会与你电脑上其他硬盘的磁盘签名相同。

2. 把它 map 到高端内存,进入 Windows,看看能否自动为它分配盘符。

关于 MBR 上的磁盘签名,你可以百度一下。
回复

使用道具 举报

53#
 楼主| 发表于 2016-4-12 15:13:36 | 只看该作者
致不点大师:关于 MBR 上的磁盘签名,你可以百度一下。

我去百度了一下,百度说不知道;一个链接回无忧论坛了,找到了你回某个贴子上的一段话:这是一个巨大的误区。

MBR 中,除了古老的末尾 64 字节分区表 + 2 字节的 55 AA 引导记录合法标志之外,微软在 NT 系统中还定义了新的磁盘签名域,位于偏移 0x1B8 处,占用 4 字节。

你应该保持 MBR 扇区末尾的 72 字节不动才可以安全启动 Windows。你修改的 446 字节,修改多了,你破坏了微软保存的磁盘签名。你应该只修改 440 字节才正确。

我用BOOTICE编辑了一下测试用的IMG中的MBR,你所提到的位于偏移 0x1B8 处,占用 4 字节的内容,模仿硬盘相同位置的值修改了一下;测试时发现可以分配盘符了,可是还是没有格式化;怎么回事呢?下面是我修改测试用的一个压缩文件。希望不烦指点下下。谢谢。

yy.img.gz

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

可分配盘符但没格式化

回复

使用道具 举报

54#
 楼主| 发表于 2016-4-12 15:29:40 | 只看该作者
致不点大师:请教一个问题:
你在50楼说“另一部分 0.75G,赋予物理地址”,我在想一个问题。这是现在的通一标准吗?以后主板和其它硬件发展了,会不会变化呢?如果要变化就麻烦了啊。我原来坏掉的一个计算机只有256M的内存,主板怎么样不知道,不知这样的机子是否也是“另一部分 0.75G,赋予物理地址”,这儿我没别的意思,而是担心高低位内存之说只能用于新机。哪样的话现在最新版的GRLDR用在老机上会不会有问题?谢谢。望指点迷津。最后再次感谢您对我的帮助和指点。谢谢。

点评

不用关心这些问题。当 BIOS 被取缔的时候,没人再去使用 grub4dos 了,也就没人再去关心 0.75G 的问题了。 没有标准。跟着微软走就是标准(当然前提是:微软有能力继续统治 PC 行业)。微软不喜欢 BIOS,它正在强  详情 回复 发表于 2016-4-12 17:43
回复

使用道具 举报

55#
发表于 2016-4-12 15:45:47 | 只看该作者
本帖最后由 不点 于 2016-4-12 17:26 编辑

你试验的 img,含有 2 个分区,一个是主分区 203.9M,一个是逻辑分区 188.2M。

这有可能会让 Windows 不舒服。Windows 有时候只认一个分区,在可移动磁盘的情况下,这问题经常出现。

所以,虚拟盘也有可能碰上这个问题。

因此可以说,这不是应用程序的问题,而归结为 Windows 系统的问题(我猜可能是它的资源管理器的问题,我不懂,只是瞎猜)。

你不妨试试,删除 yy.img 里面的扩展分区,只保留那个 203.9M 的主分区,看看情况怎样。分区表还得存在,否则会出现前面所说的问题。


关于磁盘签名,我找到这样一张图片,供参考【看来百度还是没用啊,囧】:



又找到这样一篇博文:Vista 的 MBR 磁盘签名(Disk Signature)

http://blog.sina.com.cn/s/blog_6fed14220100qq71.html



disk_signature.JPG (146.83 KB, 下载次数: 133)

MBR 上的磁盘签名:4 个字节,从偏移 1B8 至 1BB

MBR 上的磁盘签名:4 个字节,从偏移 1B8 至 1BB
回复

使用道具 举报

56#
发表于 2016-4-12 17:43:45 | 只看该作者
ysj-1 发表于 2016-4-12 15:29
致不点大师:请教一个问题:
你在50楼说“另一部分 0.75G,赋予物理地址”,我在想一个问题。这是现在的通 ...

不用关心这些问题。当 BIOS 被取缔的时候,没人再去使用 grub4dos 了,也就没人再去关心 0.75G 的问题了。

没有标准。跟着微软走就是标准(当然前提是:微软有能力继续统治 PC 行业)。微软不喜欢 BIOS,它正在强制推行 EFI。新电脑都是 EFI 了。你学习 EFI 就行了。BIOS 的老知识都没用了,要淘汰了。grub4dos 也只能在 BIOS 下运行,不能在 EFI 下运行。你可以学习 EFI 下的启动知识,也许根本就不存在 0.75G 的问题。有很多用于 EFI 的软件,例如 grub2。本论坛也有一个叫做 MBROS 的软件,你也可以去了解一下。
回复

使用道具 举报

57#
 楼主| 发表于 2016-4-12 18:47:11 | 只看该作者
致不点大师:我觉得BIOS不可能被淘汰,原因在于EFI太灵活了,升级换代会无序的,整个计算机硬件底层会大乱;更加没有标准了;要是EFI取带了BIOS可能微软真的要玩完了。原因在于标准哪,还是标准哪。没有标准计算机硬件底层大乱,最终会导致OS的大乱的。我之所以问标准的问题,也是因为这个原因啊。我希望GRLDR能够在更新时也考虑一下向下兼容的问题。现在版本越来越多了,变化也越来越大当然功能也越来越强;希望GRLDR不要象EFI啊。另外GRLDR map --mem --top 出来的虚拟硬盘的识别问题,我始终搞不定;看来也只有进OS系统用BOOTICE分区格式化了。最后再次感谢你的回贴以及对我的帮助。谢谢。
回复

使用道具 举报

58#
发表于 2016-4-12 19:29:12 | 只看该作者
我刚好有一台电脑是 4G 内存,安装 XP,只识别了 3G,那么剩下的 1G 一定是在 4G 以上了。

于是我在 XP 系统当中安装了 firadisk 驱动。

开机重启,我进入 grub4dos 命令行,执行:

map   --top   --mem   /dos.ima   (fd0)
map   --hook
chainloader /ntldr
boot

进入系统后,发现了 3.5 英寸软驱(A:),里面的内容就是 dos.IMA 的内容。

改天试试 PE 看行不行。

回复

使用道具 举报

59#
 楼主| 发表于 2016-4-12 22:31:32 | 只看该作者
致不点大师:
能否把你安装的firadisk 驱动传上来,我在我的PE上测试一下呢?不好意思,又当伸手党了。谢谢。
回复

使用道具 举报

60#
发表于 2016-4-12 23:00:20 | 只看该作者
就在置顶的帖子里面:
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=185938&extra=page%3D1

下载的文件是 firadisk-driver-0.0.1.30.zip

http://bbs.wuyou.net/forum.php?mod=attachment&aid=MTE1NDEwfDAyNmY4YzRmfDE0NjA0NzI1MjZ8MjUwNjkyfDE4NTkzOA%3D%3D

安装很简单,鼠标右键点击其中的 inf 文件,选“安装”即可。如果要在 PE 下安装,我估计可能需要参照置顶的教程中关于 firadisk 安装的部分了。



回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-30 07:43

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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