无忧启动论坛

标题: FAT外部命令读取PXE上文件问题,C大检验一下 [打印本页]

作者: zhaohj    时间: 2010-7-10 15:19
标题: FAT外部命令读取PXE上文件问题,C大检验一下
今天测试网友http://bbs.wuyou.net/forum.php?mod=viewthread&tid=166776&extra=page%3D1
发现fat连续COPY速度很慢(文件很小的文本文件),

源   盘:PXE上
目标盘:fat分区

首先说一下,FAT外部命令,源盘如果是非PXE上,一点问题都没有。
下面语句,在TFTP上查看,读取了两次:
map --mem (pd)/menu.lst (rd)
fat copy (rd)+1 (hd0,5)/menu.lst

上面(hd0,5)是fat32分区。
而直接COPY,读取了6次:
fat copy (pd)/menu.lst (hd0,5)/menu.lst

---------------------------------
问题:
直接从PXE上COPY,效率很低,连续COPY几个小文件5次以上,会很卡。

fat copy /o (pd)/menu.lst (hd0,5)/menu.lst
fat copy /o (pd)/menu.lst (hd0,5)/menu.lst
fat copy /o (pd)/menu.lst (hd0,5)/menu.lst
fat copy /o (pd)/menu.lst (hd0,5)/menu.lst
fat copy /o (pd)/menu.lst (hd0,5)/menu.lst

[ 本帖最后由 zhaohj 于 2010-7-25 09:23 编辑 ]

Snap1.jpg (91.72 KB, 下载次数: 95)

Snap1.jpg

作者: zhaohj    时间: 2010-7-10 16:56
6.26的TEST版,直接错误

Snap1.jpg (78.5 KB, 下载次数: 107)

Snap1.jpg

作者: renchmin    时间: 2010-7-10 22:44
看不懂啊,楼主能否详细解释一下啊。
作者: chenall    时间: 2010-7-11 00:39
1.暂时不知,需要更具体的。也许和环境有关。
2.内存冲突,一般情况下不要使用20mb以内的内存,外部命令是在16mb处执行的。
作者: zhaohj    时间: 2010-7-11 15:41
6.26grub4dos测试版本无法使用外部命令FAT。

6.21及之前grub4dos版本测试FAT,连续COPY5个以上文件卡住,我这样测试的:
debug on
map --mem /SRS_F6/SRS_F6.IMG (fd0)
map --hook
FAT copy /GRUB/FAT (fd0)/
FAT copy /GRUB/ECHO (fd0)/
FAT copy /GRUB/CAT (fd0)/
FAT copy /GRUB/GOTO (fd0)/
FAT copy /GRUB/WENV (fd0)/
FAT copy /GRUB/FATMINI (fd0)/
pause
commandline
-----------------
命令行下用configfile调用,到复制FATMINI时卡住。C大有空测试一下。
作者: sgw888    时间: 2010-7-11 16:53
问一下,MAP命令 把映像虚拟到内存的时候是怎样分配的,会不会跟外部命令占用的内存相冲突?还是G4D会自行处理内存占用问题???
进而联想到其它一些问题,我们在利用G4D虚拟映像的时候,会不会产生内存相冲突的情况,记得好像看过帖子提到ATI显卡在某些情况下会跟G4D的应用相冲突。
作者: zhaohj    时间: 2010-7-11 17:47
map --mem不加参数使用内存高端地址,如果map --mem=xxxx,使用低端开始的地址,如map --mem=0xb000
那就从0xb000*0x200=22M开始处。
C大讲过了,外部命令使用内存16M~20M的地方,有的也用4M~6M处。
作者: zhaohj    时间: 2010-7-12 13:02
不开新帖了,比较0603与0621版grub.exe,pxe启动grldr-io.sys-grub.exe,中断向量的不同。
步骤:
pxe keep
map --mem /debug.img (fd0)  ;这是纯DOS,无任何DOS命令
map --hook
chainloader (fd0)+1
rootnoverify (fd0)
----------
a:>grub0603.exe --keep-pxe
dd if=(md) of=(hd0,5)/20100603.txt bs=512 count=10
再重启运行grub0621.exe

[ 本帖最后由 zhaohj 于 2010-7-12 14:55 编辑 ]

1.rar

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

grldr.rar

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

未改动的中断向量


作者: 不点    时间: 2010-7-12 22:09
试试今天上载的版本:http://nufans.net/grub4dos/tinybit/
作者: zhaohj    时间: 2010-7-13 08:26
"PXE stack unloaded",成功卸载!

万分感谢不点大百忙中解决此问题!
作者: chenall    时间: 2010-7-13 17:39
原帖由 zhaohj 于 2010-7-11 15:41 发表
6.26grub4dos测试版本无法使用外部命令FAT。

6.21及之前grub4dos版本测试FAT,连续COPY5个以上文件卡住,我这样测试的:
debug on
map --mem /SRS_F6/SRS_F6.IMG (fd0)
map --hook
FAT copy /GRUB/FAT ( ...


小试了一下没有发现问题?到fatmini后面是 pause命令,也许是pause命令暂停的关系吧。

你可以试试多复制几个文件,看看到哪里卡了。
作者: netwinxp    时间: 2010-7-13 19:15
...有的也用4M~6M处。

windows(NT32内核)从4M开始加载驱动程序,如果可能的话要尽量避免在这个位置设置RAM盘。
从80000000~4G这段空间很多为PCI/AGP/PCIE设备ROM、RAM、PCI空间使用(从4G往下一小段为BIOS映射,不是BIOS ROM,而是真正的BIOS),所以也要避开2G以上空间做RAM盘。
和实模式有0000~05FF、A0000~FFFFF不要轻易使用一样,32位模式同样有很多地址雷区,低端被系统使用,高端被硬件使用,建议要设置RAM盘尽量从7FFFFFFF往下算。

[ 本帖最后由 netwinxp 于 2010-7-13 19:24 编辑 ]
作者: ly372184487    时间: 2010-7-13 19:19
是不是grldr的版本问题?
作者: zhaohj    时间: 2010-7-21 16:16
今天再次测试FAT命令,每次COPY5个文件后都会卡住一下(大概10秒以上),见图:
1.txt文件大小12K,2.txt~11.txt文件与1.txt内容是一样的。

debug on
map --mem ()/TEST/GETDRV.IMG (fd0)  ;1.44标准软盘镜像,G4DEXT存放外部命令
map --hook
command --set-path=(fd0)/G4DEXT/
FAT copy ()/TEST/1.TXT (fd0)/
FAT copy ()/TEST/2.TXT (fd0)/
FAT copy ()/TEST/3.TXT (fd0)/
FAT copy ()/TEST/4.TXT (fd0)/
FAT copy ()/TEST/5.TXT (fd0)/
FAT copy ()/TEST/6.TXT (fd0)/
FAT copy ()/TEST/7.TXT (fd0)/
FAT copy ()/TEST/8.TXT (fd0)/
FAT copy ()/TEST/9.TXT (fd0)/
FAT copy ()/TEST/10.TXT (fd0)/
FAT copy ()/TEST/11.TXT (fd0)/

[ 本帖最后由 zhaohj 于 2010-7-21 16:20 编辑 ]

Snap1.jpg (181.8 KB, 下载次数: 74)

Snap1.jpg

作者: chenall    时间: 2010-7-22 09:01
原帖由 zhaohj 于 2010-7-21 16:16 发表
今天再次测试FAT命令,每次COPY5个文件后都会卡住一下(大概10秒以上),见图:
1.txt文件大小12K,2.txt~11.txt文件与1.txt内容是一样的。

debug on
map --mem ()/TEST/GETDRV.IMG (fd0)  ;1.44标准软盘 ...



汗一下,原来是PXE的,你有没有试试本地的?
作者: zhaohj    时间: 2010-7-22 11:48
呵呵,问题出在PXE,硬盘上一点问题都没有。

但PXE上连续COPY几个小文件很容易堵塞。

[ 本帖最后由 zhaohj 于 2010-7-22 12:01 编辑 ]
作者: zhaohj    时间: 2010-7-24 15:30
很晕,硬盘上一点问题都没有,PXE上大文件拷贝也很快,为何小文件连续几个COPY会这么慢?
比如(hd0,5)是FAT分区,命令行下这样试验一下就很有感觉:
fat copy /o /menu.lst (hd0,5)/
连续5次以上肯定卡住。

我从TFTP的记录上分析,问题可能出在校验上,COPY一个文件要从TFTP读6次

[ 本帖最后由 zhaohj 于 2010-7-24 17:26 编辑 ]

Snap1.jpg (91.72 KB, 下载次数: 84)

Snap1.jpg

作者: zhaohj    时间: 2010-7-24 17:38
而正常的情况下应该是2次。
如:
map --mem /menu.lst (rd)
fat copy (rd)+1 (hd0,5)/menu.lst

就出现两次
作者: chenall    时间: 2010-7-26 10:16
已经更新,麻烦你再试一下。
作者: zhaohj    时间: 2010-7-26 10:38
总算把C大盼来了,马上测试...
正常了,速度飞一样
把fatmini也编译一下

[ 本帖最后由 zhaohj 于 2010-7-26 10:53 编辑 ]

Snap1.jpg (61.98 KB, 下载次数: 81)

Snap1.jpg

作者: zhaohj    时间: 2010-7-26 10:59
另,PXE启动时加载grldr及menu.lst也有这样的问题,多读了两次。导致有时卡一下。

[ 本帖最后由 zhaohj 于 2010-7-26 11:00 编辑 ]

Snap1.jpg (35.88 KB, 下载次数: 78)

Snap1.jpg

作者: chenall    时间: 2010-7-26 17:27
fatmini已更新,
关于后面的问题,以后有空再看看。
作者: zhaohj    时间: 2010-7-27 09:28
新版的FAT、WENV命令用在CSPE上,到DOS阶段就中断了,没调试出来。
作者: chenall    时间: 2010-7-27 12:41
原帖由 zhaohj 于 2010-7-27 09:28 发表
新版的FAT、WENV命令用在CSPE上,到DOS阶段就中断了,没调试出来。


需要修改菜单
应该只有FAT命令有变动。也就是把菜单里面的fat file全部替换成fat 也许就可以了。还有wenv新版的没有init等命令。
作者: zhaohj    时间: 2010-7-27 13:47
原帖由 chenall 于 2010-7-27 12:41 发表


需要修改菜单
应该只有FAT命令有变动。也就是把菜单里面的fat file全部替换成fat 也许就可以了。还有wenv新版的没有init等命令。


这些当然改了,怀疑内存有冲突。你测试一下就知道了。
使用7.25的grldr及grub.exe

[ 本帖最后由 zhaohj 于 2010-7-27 14:42 编辑 ]

Snap1.jpg (113.05 KB, 下载次数: 78)

Snap1.jpg

Snap2.jpg (119.92 KB, 下载次数: 72)

Snap2.jpg

cspe.rar

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


作者: chenall    时间: 2010-7-27 15:44
原帖由 zhaohj 于 2010-7-27 13:47 发表


这些当然改了,怀疑内存有冲突。你测试一下就知道了。
使用7.25的grldr及grub.exe



可能你没有改到。。。。

很明显的EXT.ZIP文件不存在或者错误。

我用我的U盘使用新版GRLDR,FAT,WENV看起来没有问题?

[ 本帖最后由 chenall 于 2010-7-27 15:47 编辑 ]
作者: chenall    时间: 2010-7-27 16:36
对不起,发现新版FAT的一个问题。

请等待修复,暂时请使用旧版FAT。
作者: zhaohj    时间: 2010-7-27 16:56
是FAT命令问题,很奇怪,在其他PE中使用竟然没发现问题。
FAT、WENV命令太重要了。
作者: chenall    时间: 2010-7-27 19:26
FAT以前的版本是没有问题的,问题在于PXE服务端。默认因为HanewinTFTP默认只允许同时10个客户端在线。。



复制小文件时因为速度比较快,前一个连接刚断开,后一个又接上了,服务器上显示的客户端还是连接着的。
前面卡住的原因就是因为连接数超过限制了。

只要把这个值改大一些就没关系了。

新版的FAT为了避免重复打开关闭文件,没想到过度优化。导致出错。基于目前GRUB4DOS的文件读写机制,看来没有什么好优化的了。只能尽量减小开闭文件的次数了。
作者: zhaohj    时间: 2010-7-27 23:09
7.26版本,如果直接COPY不会出现问题。
而经过(rd)中转的都有问题。
作者: chenall    时间: 2010-7-27 23:50
原帖由 zhaohj 于 2010-7-27 23:09 发表
7.26版本,如果直接COPY不会出现问题。
而经过(rd)中转的都有问题。


你试试超过3M的,就会出问题了。

有空试试27号的版本,发前面的贴子时已经上传了。

从PXE上复制小于3M的文件都不需要中转,效果一样的。大于3M的才需要。
作者: zhaohj    时间: 2010-7-28 10:40
已经测试,很好!速度也没什么影响。
C大最近好忙啊!
作者: canmao    时间: 2010-7-28 18:13
对FAT copy作了点精确测试(给出的 数值/18 为秒数):

文件VIA5X.CAB,2788630个字节
     直接拷贝(3次)分别为 20, 19, 19;
     中转拷贝(3次)分别为 20, 20, 20;

文件NV19107.CAB,4356601个字节
     直接拷贝(3次)分别为 48, 48, 48;
     中转拷贝(3次)分别为 28, 29, 28;

看来文件 > 3M 时,效果还是很显著的!

同发现向物理硬盘拷贝时,速度慢得不是一般:拷贝VIA5X.CAB,到IDE硬盘需21秒、到STAT硬盘需14秒;

还发现一个"秘密":如果目的存在同名文件,FAT copy会先比较,然后决定是否拷贝?

测试用的菜单:
debug on
map --mem ()/TEST/HD.IMG (hd0)
map --mem ()/TEST/TEST.IMG (fd0)
map --hook
command --set-path=(fd0)/G4DEXT/

calc *0x60000=*0x46c
write 0x60004=0
FAT copy /o ()/PEDRVS/VIDEO/VIA5X.CAB (hd0,0)/T1.CAB
calc *0x60008=*0x46c
write 0x6000c=0
calc *0x60010=*0x60008 - *0x60000
pause

calc *0x60000=*0x46c
write 0x60004=0
map --mem=0xb000 ()/PEDRVS/VIDEO/VIA5X.CAB (rd) && FAT copy /o (rd)+1 (hd0,0)/T2.CAB
calc *0x60008=*0x46c
write 0x6000c=0
calc *0x60010=*0x60008 - *0x60000
pause

rootnoverify (fd0) && chainloader ()/io.sys || chainloader --force ()/io.sys
boot


内存0x46C~0x46F处,是由 BIOS(int 8) 维护的时钟计数器,每1 / 18.2 秒 +1。

[ 本帖最后由 canmao 于 2010-7-29 00:31 编辑 ]
作者: chenall    时间: 2010-7-28 23:17
@canmao
我自己测试也不会感觉有多慢啊。复制一个ISO文件(30MB)左右,也才20秒左右。
可能和环境有关。另外如果你的FAT分区文件比较多,很乱的情况下会更慢(因为需要找到可用簇)。
作者: canmao    时间: 2010-7-29 00:20
有可能碎片比较多,有时间整理一下磁盘再试试。
作者: mfkwgij    时间: 2010-7-29 09:38
是不是grldr的版本问题?
作者: canmao    时间: 2010-7-29 10:05
在那台IDE的老本上,进pe用 MMC 对 FAT32 分区连续整理碎片3次。再用FAT copy 从TFTP上拷贝VIA5X.CAB,依旧21秒左右。
除了测试,通常不会这样使用FAT copy,所以忽略吧!
作者: zhaohj    时间: 2010-7-29 10:49
你这台老机是够慢的,呵呵,现在至少不会卡就可以了。

发觉一个问题:
因为我是域环境(服务器已开启GUEST,密码空),在使用net use的时候,XPPE与03PE有点不同。如:
net use r: \\192.168.1.11\tftp "" /user:guest
上面XPPE通过,03PE不行

如我的域名是abc.com
net use r: \\192.168.1.11\tftp "" /user:abc.com\guest
xppe、03pe都通过

[ 本帖最后由 zhaohj 于 2010-7-29 10:59 编辑 ]
作者: canmao    时间: 2010-7-29 14:12
汗啊,到现在还没有弄过域(一直回避着,太麻烦)。
03为服务器版本,更严谨和严格?正常03不加域前缀可以不?
作者: zhaohj    时间: 2010-7-29 15:50
原帖由 canmao 于 2010-7-29 14:12 发表
汗啊,到现在还没有弄过域(一直回避着,太麻烦)。
03为服务器版本,更严谨和严格?正常03不加域前缀可以不?


这有点讲不通,都是访问同一个03服务器。

刚才在虚拟机装了个XP系统,不加入域,net use z: \\服务器ip\TFTP ""/user:guest ,正常连接。

虚拟机装个03再测试一下:
在虚拟机装了个03系统,不加入域,net use \\服务器ip\TFTP ""/user:guest  ,也正常。

晕死了,正常系统下没有问题。

可能是哪个服务没有启用有关:
1:lanmanworkstation   workstation服务
2:Dnscache                DNS client
3:Netman                  Network Connections
4:LmHosts                 TCP/IP netbios helper
...
其他的服务都启用了。

[ 本帖最后由 zhaohj 于 2010-7-29 17:21 编辑 ]
作者: zhaohj    时间: 2010-7-29 18:17
改成下面这样竟然成功了,可能主要是AFD.SYS吧

START /Wait %TP%\InfCacheBuild.exe %SystemRoot%
PECMD.EXE UPNP -pnp
NET START EVENTLOG
PECMD.EXE UPNP -pnp -cn WinPE%RANDOM% -wg WORKGROUP
REGSVR32 /S RSAENH.DLL
REGSVR32 /S NETCFGX.DLL
REGSVR32 /S NETSHELL.DLL
REGSVR32 /S NETMAN.DLL
REGSVR32 /S HNETCFG.DLL
PECMD.EXE UPNP -c p -i MS_TCPIP
PECMD.EXE UPNP -c c -i MS_MSCLIENT
PECMD.EXE UPNP -c s -i MS_SERVER
NET START DHCP
::NET START TCPIP
NET START NLA
NET START LMHOSTS
NET START RpcLocator
SET K=HKLM\SYSTEM\CurrentControlSet\Services&&SET W=AutoShareServer&&SET S=AutoShareWks
REG ADD %K%\Lanmanserver\parameters /v %S% /t REG_DWORD /d 0 /f
REG ADD %K%\Lanmanserver\parameters /v %W% /t REG_DWORD /d 0 /f
REG ADD %K%\lanmanworkstation\parameters /v %S% /t REG_DWORD /d 0 /f
REG ADD %K%\lanmanworkstation\parameters /v %W% /t REG_DWORD /d 0 /f
NET START SERVER
DEL /Q %SystemRoot%\INF\*.PNF %SystemRoot%\INF\INFCACHE.1
reg add "HKLM\SYSTEM\CurrentControlSet\Services\afd" /v ImagePath /t REG_EXPAND_SZ /D "%windir%\System32%\DRIVERS\afd.sys" /f >nul
作者: canmao    时间: 2010-7-29 20:22
afd这个Services,在SETUPREG.HI_ 里就有,如果没有或路径错误,很多网络相关服务都无法启动。
我 dy 的PE里,因网络部件放在%systemroot%\system下,加载网络时第一件事就是修正这个ImagePath。且其串值写法比较特别:
\SystemRoot\system32\drivers\afd.sys

按你的 reg add, 串值应该是:
X:\WXPE\System32%\DRIVERS\afd.sys

也就是说....,嘿嘿。




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