ysj-1 发表于 2016-4-8 12:49:45

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

map --mem 使用的内存能否从最大值→最小值使用。现行的命令是最小值→最大值,这点和Windwos的内存管理相同。本人太菜求问开发人员能否实现?

不点 发表于 2016-4-8 14:27:19

--top 参数是你想要的吗?它会尽量使用最高端的可用内存。

ysj-1 发表于 2016-4-8 16:55:28

非常感谢不点大师的指点,就是这个--top参数,已经可以使用最高端的可用内存。另求教一个问题,进PE后如何能自动加载map的硬盘盘符;现在只能手动分区和分配盘符,好麻烦哟。望大师指点迷津。

ysj-1 发表于 2016-4-8 17:14:32

再次求教:追问一个问题,现在最新版的grldr map一个img映像最大为多少?望大师指点,谢谢。

不点 发表于 2016-4-8 20:34:17

我只知道有 firadisk 和 winvblock 驱动可以让 windows 能够识别出 grub4dos 的虚拟盘,我不知道你不用这两个驱动,竟然也能让 windows 识别出虚拟盘,我觉得这好像天方夜谭啊。另外,我从未在 windows 下使用过 grub4dos 虚拟盘,因此,我不了解,无法帮忙。

grub4dos 支持的最大内存盘大小为 500G。

ysj-1 发表于 2016-4-9 01:06:11

非常感谢不点大师的指点,我用的是firadisk驱动上面忘了说明,不好意思。不过这个驱动版本很多,最新的0.0.1.30那个版本在03PE中好象不稳定要蓝屏现在在测试原先的0.0.1.24版。不知最新的0.0.1.30版是否已是稳定的版本?还有IMG镜象用 winvblock 驱动还是firadisk驱动更好?望大师指点,再次感谢你的指点。

不点 发表于 2016-4-9 08:18:08

蓝屏死机,有可能是 Windows 驱动程序的 bug 引起的。据说,把 XP 的显卡驱动“升级”成 Win7 的版本,就可避免蓝屏死机。如果你实在不知道如何替换显卡驱动,你也可以试试 map --e820cycles=3 ,这条命令在 map --hook 之前执行。其中 3 可以试试不同的值,大概从 0 到 20,总可以找到一个成功的值,躲避 XP 显卡驱动的 bug。你最好贴出蓝屏的错误代码,看看是不是与其他人报告的代码一样(我印象中好像是 F4,不过脑子老化,恐怕记不清)。如果是这个代码,那么用刚才所说的 map --e820cycles=? 的方法即可解决问题。

好像最新的 0.0.1.30 就是最好的,没听说过需要换成旧版的情况。至于说 firadisk 和 winvblock 作比较,很抱歉,我两个都不曾用过,不能给出可信的答复。我看到别人对这两个都有使用,你可以在网上寻找这方面的信息。

不点 发表于 2016-4-9 08:32:05

ysj-1 发表于 2016-4-8 16:55
非常感谢不点大师的指点,就是这个--top参数,已经可以使用最高端的可用内存。另求教一个问题,进PE后如何 ...

后文你提到你已经使用了 firadisk(或winvbock)驱动。我猜想,可能你的虚拟盘的内容有错误,不能让 Windows 识别为一个有效的文件系统。你可以先试试一个标准软盘的 img,看看 Windows 是否可以自动为它分配盘符。你也可以检查 firadisk/winvblock 的配置参数,看看有没有指定盘符的选项(我不曾接触过,只是瞎猜)。

ysj-1 发表于 2016-4-9 12:42:32

首先感谢不点大师的指点,我的机子好象不是显卡驱动造成的;我是在把虚拟内存设在MAP --mem -- top出来的硬盘上;同时测试系统是否调用了我设置的虚拟内存时出现的。我是用imdisk设置内存盘占用内存的方式来测试的,有时会出现不稳定蓝屏的情况。好象0.0.1.24版要稳定些,最新的 0.0.1.30版蓝屏的情况要多些。我 是在03PE中测试的不是在正常的Windows 2003系统中做的测试,所以这个蓝屏问题和论坛上提到的情况不太一样。下图是我把虚拟内存设在MAP --mem -- top出来的硬盘上后在任务管理器中内存的情况(我的机子4G内存)在没设虚拟内存时在“内存使用:”这栏是395M/2855M设了之后是395M/3605M。不知还有的内存哪儿去了。(IMG占用54M、256M的FBWF缓存;还有系统缓存不清楚用了多少)总之好象没用完4G内存。最后再次感谢不点大师的指点。不能分配盘符是系统认为MAP --mem -- top出来的硬盘没有初始化,只要分区格式化之后就可以了;另外我还没来得及测试标准软盘镜象。最后再请教大师一个问题,能否用GRLDR直接在高位内存中MAP一个虚拟硬盘(如:748M的)菜单命令该怎么写呢?我现在是先用IMDISK制作一个空的IMG镜象GZ压缩MAP --mem --top的;在MAP时会解压一会儿了,如*.GZ是更大的IMG镜象可能用的时间会更长;不知能用其它方式实现呢?请大师指点迷津。

ysj-1 发表于 2016-4-9 12:42:36

首先感谢不点大师的指点,我的机子好象不是显卡驱动造成的;我是在把虚拟内存设在MAP --mem -- top出来的硬盘上;同时测试系统是否调用了我设置的虚拟内存时出现的。我是用imdisk设置内存盘占用内存的方式来测试的,有时会出现不稳定蓝屏的情况。好象0.0.1.24版要稳定些,最新的 0.0.1.30版蓝屏的情况要多些。我 是在03PE中测试的不是在正常的Windows 2003系统中做的测试,所以这个蓝屏问题和论坛上提到的情况不太一样。下图是我把虚拟内存设在MAP --mem -- top出来的硬盘上后在任务管理器中内存的情况(我的机子4G内存)在没设虚拟内存时在“内存使用:”这栏是395M/2855M设了之后是395M/3605M。不知还有的内存哪儿去了。(IMG占用54M、256M的FBWF缓存;还有系统缓存不清楚用了多少)总之好象没用完4G内存。最后再次感谢不点大师的指点。不能分配盘符是系统认为MAP --mem -- top出来的硬盘没有初始化,只要分区格式化之后就可以了;另外我还没来得及测试标准软盘镜象。最后再请教大师一个问题,能否用GRLDR直接在高位内存中MAP一个虚拟硬盘(如:748M的)菜单命令该怎么写呢?我现在是先用IMDISK制作一个空的IMG镜象GZ压缩MAP --mem --top的;在MAP时会解压一会儿了,如*.GZ是更大的IMG镜象可能用的时间会更长;不知能用其它方式实现呢?请大师指点迷津。

ysj-1 发表于 2016-4-9 12:48:33

真是失败上面9楼的图片没带上,请管理员删一下。谢谢。

ysj-1 发表于 2016-4-9 13:44:16

回复不点大师:我用标准软盘镜象测试,结果同样是系统认为没有格式化。我用的是1.4M的DOS启动软盘,而且可启动;可是到了PE系统里只是分配了A盘的盘符认不了盘里的内容,属性为没有格式化;看来是不能用MAP的方式获得一个分配了盘符的高位内存硬盘了哟。最后再次谢谢不点大师的指点。谢谢。

不点 发表于 2016-4-9 15:56:35

本帖最后由 不点 于 2016-4-10 08:21 编辑

你是不是在用很多年前的 grub4dos?恕我直言,那样的话,你是自找麻烦。出现莫名其妙的问题,就只有你自己去解决了。

完全可以建立一个未格式化的虚拟盘,用
map   --top   --mem=-2880   (md)+8   (fd0)
【此处已经修正。原来写成 2880 是错的,应该是负数 -2880。详见下文】
就可以创建一个 1.44M 的虚拟内存盘(未格式化)。2880 是扇区数。(fd0) 表示是虚拟软盘。如果是虚拟硬盘,应该使用 (hd0) 或 (hd1) 等等。


顺便分享一点思路。假如虚拟盘无法被 Windows 识别的话,我感觉 firadisk 和 winvblock 都没有意义了,换句话说,是垃圾;再继续推理,一定没人用它们了。可是实际上用它们的人很多,所以,这反过来就说明了,虚拟盘一定能够被 Windows 识别的。不过你说 PE 识别不了。这我不清楚。你可以先试试正常的 Windows 能不能识别。你也可以搜索 Internet,看看别人的 PE 是否可以识别 grub4dos 的虚拟盘。我没有经验,完全是个想法,分享一下。不敢保证有用。



ysj-1 发表于 2016-4-9 21:27:42

非常感谢不点大师的指点,上面的(md+8)是否是指将整个内存的前 8个扇区当作一个文件;这是1.44M 的虚拟软盘的引导扇区数吗?我太菜了别笑话我,如果是的话,那么虚拟硬盘的引导扇区数是否是16(ntfs)、1(fat32、fat12、fat)呢?后面的参数(md+8)可以不要吗?如我要MAP一个144M 的虚拟硬盘可否可以这样写:map   --top   --mem=288000   (hd-1)还是要只能这样写:map   --top   --mem=288000(md)+16(hd-1)或是map   --top   --mem=288000(md)+8(hd-1)我不太懂,肯请大师不烦指点迷津。谢谢。另回复大师:我不是说在PE系统中不能识别虚拟盘而是好象没能识别文件系统;另外我的PE在文本模式阶段没有加载IDE控制器驱动和disk驱动而是在登录系系统后用NT角本安装的;不知是否与这有关,但是MAP的虚拟硬盘又是安装上了disk驱动的,真是把我搞糊涂了。最后再次感谢不点大师的指点。谢谢。

ysj-1 发表于 2016-4-9 22:06:39

回复不点大师:我用的GRLDR是最新的版本(2016-3-26)来MAP的,firadisk驱动用的0.0.1.24版,PE中的系统文件打上了最终补丁,蓝屏的问题好象是我在测试是用的imdisk造成的,用Primo Ramdisk Server Edition没有蓝屏了。当然在4G内存环境这些都用不上了,现在可以用MAP --mem -top来用高位内存的虚拟盘了;低位内存全留给系统了。现在我只是考虑map出来的虚拟出来的内存盘的稳定性,所以才请教大师关于firadisk驱动的问题。最后谢谢大师的指点,也感谢GRLDR的开发人员的付出;让我们可以用上32位系统上的高位内存。虽然不是能够让系统程序也能用上全部的高位内存但也不会让大内存在32位环境里睡大觉了。(即不开PAE不能识别大内存,开了PAE又有兼容性的问题)最后再次感谢不点大师的指点,另希望大师能回复我上面请教的问题。谢谢

不点 发表于 2016-4-9 22:37:22

(md)+8 确实是内存开头的 8 个扇区,也就是从“中断向量表”开始的 8 个扇区(内存物理地址 0 ~0x1000)。它的内容不重要,map 命令会把它的内容复制到内存顶部的内存盘开头处。内存盘建立之后,需要重新格式化才能用(如果是虚拟硬盘,则需要重新分区)。你可以在进入 Windows 后再对其执行重新分区和格式化的操作。当然你也可以在进入 Windows 之前就对其进行分区和格式化。不过一定要在 map --hook 之后,才可以对虚拟盘执行这些操作,否则,你是对真实盘执行分区和格式化的动作,那你的真实盘就可能被毁掉了!

用 8 个扇区表示虚拟盘的扇区数最少是 8 个。低于 8 个扇区的虚拟盘,可能会被当作别的意义来处理。所以,这里采用 8 个扇区,并无别的意思,它就是让 grub4dos 对此不会产生歧义。grub4dos 知道你是想建立虚拟盘,而不是别的意思。参数 (md)+8 不能省略,map 命令要求必须有这个参数。用 (md)+16 也行,不过有点多余了。8 个扇区已经够了,不会产生歧义了,没必要用更多的扇区数。

不点 发表于 2016-4-9 22:52:24

本帖最后由 不点 于 2016-4-9 22:57 编辑

你的盘未能被识别,可能是格式问题。比如说,如果是虚拟软盘,Windows 好像不允许它有分区表。但如果是虚拟硬盘,则需要有分区表,才能让 Windows 找到它里面的分区。我估计你的虚拟硬盘没有分区表,虚拟硬盘的开头直接就是 Volume 卷,这可能让 Windows 不舒服,所以 Windows 就忽略了它。

另外,我觉得 firadisk 不可以使用旧版。它这个新版已经好几年没有改动了,说明很稳定。旧版肯定有问题,否则不会开发新版的。

ysj-1 发表于 2016-4-9 23:40:28

我用大师的命令测试了一下,失败了,虚拟硬盘是可以MAP出来,可是它占用的是低位内存,下面是附图:

而用MAP --mem --top /*.gz (hd-1)则可以,下面是附图:

不知是哪儿出了问题,如果用大师的命令能成功就好了啊。最后再次谢谢大师的指点。另回复大师:关于firadisk驱动的问题,我的一点感受是开发人员是否为了实应新的系统而作出的(如:win7、win8等);如是这样,新版可能未必有老版稳定(如对于xp、2003等)。不知对于xp、2003那个版本更好?谢谢。

不点 发表于 2016-4-10 07:27:06

本帖最后由 不点 于 2016-4-10 08:12 编辑

分享一点想法,供参考。

第一、你的 xp 系统在仿真盘存在的情况下没碰上蓝屏死机,很幸运,值得高兴,也值得珍惜。这是个大事。其它都是小事,无足挂齿。其它事情,比如说遇到 grub4dos 的 bug,都可以报告给开发者,而且通常很快就得到解决。但是假如 xp 系统有 bug,我们可能就一筹莫展了。

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

第三、firadisk 已经很多年没任何改动了。我扳着脚趾头想了想,那时候 win8 还没出现,xp 横行天下,win7 也刚刚开始露头。那时候的改进完善,应该全都是针对 xp 的。后来再也没改动,说明很稳定。再后来也没改动,说明也能用于 win8 或 win10。当然也有可能是因为没有 win8、win10 的用户使用 grub4dos 仿真盘,所以没人发现问题。真实情况究竟是怎样的,谁也说不准。

你可以作出你自己的判断,采取你认为最合适的方法、对策。不要受到我的影响。在 windows 下我从未用过这些仿真盘。我只是分享看法,没有任何强迫的意思。希望你玩得开心。


很抱歉,我犯了个低级错误,给你带来麻烦。

幸亏只是把内存盘的位置映射错了,没有造成什么实质性的伤害。

举例来说,map 命令应该修正为这样的:
map   --top   --mem=-2880   (md)+8   (fd0)
此处扇区数应该用负数。负数的绝对值表示内存盘最少占用的空间量(以 512 字节的扇区为单位)。如果是正数,则表示内存盘的绝对地址,也就是说,内存盘起始于参数所指定的物理地址处(单位是 512 字节的扇区)。

这个功能是我开发的,居然搞错,实在抱歉。

ysj-1 发表于 2016-4-10 08:49:09

非常感谢不点大师的指点,用修正后的命令已经成功实现。非常感谢大师的回贴,另请教一个问题:扇区数和空间量如何计算的,我按大师的map   --top   --mem=-2880   (md)+8   (fd0)的命令按比例想MAP 750M的虚拟盘写成:map --top --mem=-1500000 (md)+8 (hd-1) 可是MAP 出来的虚拟盘的容量只有732.4M,是我算错了吗?2880是1.44M还是1.4M呢?如是1.4M的话我上面就应写成:map --top --mem=-1542857 (md)+8 (hd-1)对吗?我太菜了,别笑我。请指点迷津,最后再次感谢你指点。谢谢。

2011yaya2007777 发表于 2016-4-10 11:07:18

实践出真知。试一试不就知道了。既然知道 -1500000 对应 732.4M,加一些就好了。
750*1024*1024/512=1536000.
1Kb=1024b
1Mb=1024Kb
1扇区=512b

yueyezhan 发表于 2016-4-10 12:20:16

用firadisk做过xp 2003 vista win7 8 10的ramos,都能正常使用

ysj-1 发表于 2016-4-10 12:28:15

感谢2011yaya2007777 的指点,也感谢不点大师的指点。谢谢你们的帮助。

ysj-1 发表于 2016-4-10 12:28:36

感谢2011yaya2007777 的指点,也感谢不点大师的指点。谢谢你们的帮助。

ysj-1 发表于 2016-4-10 12:34:31

另求问:yueyezhan 你在RAMOS中用GRLDR MAP的虚拟硬盘能否识别呢?(注意不是RAMOS本身所在的分区。)

不点 发表于 2016-4-10 13:17:50

1.44M 软盘——这是数学在作弄人。

什么是 T?什么是 G?什么是 M?什么是 K?

不同的人,不同的场合,有不同的理解。西方人喜欢用“千”来作单位。这 K 本来就是 1000 的意思。
一公斤就是 1000 克,也写成 1kg。

可是在计算机领域,二进制是机器语言,所以习惯上把所有的东西都往“2”上靠拢。
2 的 10 次方,等于 1024,这与 1000 很接近,所以,在计算机领域,也习惯把 1024 作为 1K 来对待。
同理,1M = 1024K,1G = 1024M,1T = 1024G。

但有时候,1000 和 1024 是混合使用的,可能让人感到困惑。不过现实世界就是这样的,存在皆合理。

也不能因为世界存在这些小毛病,就整天生闷气。

标准软盘的精确大小是 2880 扇区。我们知道 2 个扇区就是 2×512=1024 个字节,即 1K。

那么,2880 个扇区,就是 1440K。

所以,标准软盘的精确大小就是 1440KB,此处 K=1024,B 是“字节”的意思。

但是,1440KB 念起来可能不顺口,就被说成 1.44M 了。

这里其实就是把 1440 除以 1000 变成 1.44 了。它不是除以 1024。

如果除以 1024,那会是这样的:1440 / 1024 =1.40625

所以,准确地说,标准软盘应该是 1.40625M。



ysj-1 发表于 2016-4-10 16:49:49

非常感谢不点大师的回贴指点,解除了我心中的疑惑。也感谢2011yaya2007777 的指点,另外我用WinVBlock驱动做的xp 的ramos中用MAP 的方式MAP 出来的虚拟硬盘同样不能被ramos xp 识别,ramos xp 可以正常使用,可就是不能识别出用MAP 方式MAP出来的虚拟硬盘。看来这可能是Firadisk驱动或WinVBlock驱动的问题,即只能识别OS系统所在分区的文件系统,而不能识别OS系统之外分区的文件系统;当然也可能是OS系统的问题。难到要识别MAP 方式出来的虚拟硬盘非要把OS系统放在这个MAP出来的虚拟硬盘上吗?这是什么造成的呢?不解中,可是把GRLDR菜单写成MAP --top --mem= -2880 (md)+8 (fd0),MAP出来的虚拟软盘系统会直接分配盘符A:只是不能识别A:盘中的文件,这真是奇怪。我用DiskGenius查看MAP 方式出来的虚拟硬盘它识别出这个硬盘的接口是SCSI,而我的硬盘识别为IDE接口。是否与这有关呢?我们知道SCSI硬盘是不能直接被系统识别的,需要SCSI硬盘的驱动才能识别。如果是这样的话,就需要Firadisk驱动或WinVBlock驱动具有SCSI硬盘的驱动的性质,从我在PE中用MAP方式出来的虚拟硬盘可以被识别来看;Firadisk驱动或WinVBlock驱动具有SCSI硬盘的驱动的性质,只是没能传递MAP方式出来的虚拟硬盘的其它性质,所以不能分配盘符。不知这个问题出在BIOS层面还是驱动本身层面呢?可是RAMOS系统能识别自身的文件系统,这说明这与BIOS无关而是驱动本身的问题,或是OS系统的问题。真不知Firadisk驱动或WinVBlock驱动是如何配合OS系统来完成GRLDR MAP出来的虚拟盘的,希望不点大师及各位高人的指点迷津。最后感谢不点大师的指点,真希望OS系统能为GRLDR MAP出来的虚拟硬盘分配盘符,并能识别其文件系统啊!能实现吗?

ysj-1 发表于 2016-4-10 17:18:18

一点感慨:1.44M 软盘——这是数学在作弄人。同感啊!确实在BIOS中软盘也是说成1.44M 或2.88M在软件WinImage中同样也是说的是1.44M 或2.88M。不过我确实是个菜菜,不知这些:

计算机领域,二进制是机器语言,所以习惯上把所有的东西都往“2”上靠拢。
2 的 10 次方,等于 1024,这与 1000 很接近,所以,在计算机领域,也习惯把 1024 作为 1K 来对待。

1Kb=1024b
1Mb=1024Kb
1扇区=512b

最后感谢各位的指点。

不点 发表于 2016-4-10 17:36:12

ysj-1 发表于 2016-4-10 16:49
非常感谢不点大师的回贴指点,解除了我心中的疑惑。也感谢2011yaya2007777 的指点,另外我用WinVBlock驱动 ...

你提出了一个有趣的问题。假如你说的是真实情况,我怀疑 firadisk 和 winvblock 都只能驱动一个虚拟磁盘,不能同时驱动多个虚拟磁盘。

如果是自己在驱动程序的配置文件中没能把多个虚拟盘的信息填写完整,那属于自己使用方法不当造成的。

如果这些驱动本来就没有什么配置文件可以用来处理多个虚拟磁盘,那就属于驱动程序设计者的问题了。

具体究竟是哪种情况,我不知道。

ysj-1 发表于 2016-4-10 18:09:51

感谢不点大师的回贴,我是按论坛上firadisk 和 winvblock 驱动的教程做的,感谢不点大师的指点,我又查了一下教程找到这样的说法:(我不理解,请指点)

①请向该系统映像文件中的boot.ini添加 /firadisk=disk,vmem=你的系统映像文件的路径

boot.ini例子:


timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS

multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect /firadisk=disk,vmem=x:\filename.img

其中x:\filename.img是指你的系统映像文件的完整路径,而且要求filename.img所在分区盘符已经在mounteddevices注册表中存在了

filename.img所在分区盘符已经在mounteddevices注册表中存在了这个怎么实现呢?主要是用MAP方式MAP出来的虚拟硬盘是未知的,(如:大小、mounteddevices注册表的值等)。
你说道在驱动程序的配置文件中把多个虚拟盘的信息填写完整,该在哪儿配置,是注册表吗?
还有该怎么配置呢?我太菜了不理解,请指点迷津,谢谢。




页: [1] 2 3 4
查看完整版本: map --mem 使用的内存能否从最大值→最小值使用