无忧启动论坛

标题: PXE下chkpci命令自动判断千兆网卡类型8倍加速WIN7PE启动 [打印本页]

作者: buger    时间: 2012-5-26 17:50
标题: PXE下chkpci命令自动判断千兆网卡类型8倍加速WIN7PE启动
这个也是折腾了好久才成功的,分享给各位。
    问题的由来
   在使用PXE的应用时,由于TFTP协议过于老旧效率比较低,和HTTP FTP ISCSI相比,百兆网络环境约为6M对12M,当网络环境为千兆时,差距更明显为6M对38M,在TFTP下载如今越来越大的wim文件时更是让人心烦。
   步骤1
  WINDOWS7开始,微软为了解决这个问题,公布了修改BCD的一个参数ramdisktftpblocksize,可有效提升TFTP下的传输效率。具体命令为
  bcdedit /enum all /store d:\vvv\bc7
  bcdedit /store d:\vvv\bc7 /set {ramdiskoptions} ramdisktftpblocksize 8192
以上的bc7是网络启动win7PE的bcd文件,当然是在管理员模式下修改。8192这个值也可换成 4096, 8192, 16384,但实测8192最好,网上还可搜到这个参数ramdisktftpwindowsize,实测没什么效果。
  步骤2
  以上修改好了BCD的WIN7PE在千兆PXE环境下可立刻感受到速度的提升,实测和硬盘启动PE接近。但也出现了一个问题,改过了参数的BCD在百兆的网卡使用时会卡在下载boot.sdi时不动。解决办法就是在menu菜单中增加一项菜单,分别在终端为百兆和千兆时选不同的菜单启动不同的BCD来启动同一个pe.wim,这当然不够方便。
步骤3
借助grub4dos的外置工具chkpci和fat,参考chenall大侠的dpms.bat以及网上下载的pcidevs.txt写了个批处理gbit.bat,终于解决了这个问题。能够在终端为百兆和千兆时自动判断网卡类型自动选择不同BCD文件启动pe.wim,千兆速度飞快,百兆也正常。
gbit.bat内容
!BAT
;下面这个是发现千兆网卡的标志位
write 0x60000 0
;装载CHKPCI外部命令
insmod CHKPCI
;创建的内存盘存放临时文件
map --floppies=2
map --mem (md)+5760 (8)
map --hook
echo -n 膻 > (8)+40
write --offset=0xc (8) \2\2\1\0\2\xf0\0\x80\x16\xf0\x9\0\x24\0\2
write --offset=0x26 (8)+1 \x29DPMSchenall.netFAT12
write --offset=0x1fe (8)+2 \x55\xAA\xf0\xff\xff
/fat mkfile size=4096 (8)/chkpci.pci
;下面这句是将本机的网卡信息保存到chkpci.pci文件中
/CHKPCI -net /pcidevs.txt > (8)/chkpci.pci
;这是在网卡信息文件chkpci.pci中寻找千兆网卡的标志Gigabit,并在标志位写1
cat --locatei=Gigabit (8)/chkpci.pci  &&  write 0x60000 1
;这是去掉内存盘
map --unmap=8
map --rehook
read 0x60000 && goto :OK
:NO
;这是启动百兆的BCD
echo    ONLY 100M SLOW
chainloader --force (pd)/pxeboot7.7pe
goto :exit
:OK
;这是启动千兆的BCD
echo    YES 1000M FAST
chainloader --force (pd)/pxeboot5.7pe
:EXIT

menu.lst中的内容

title WINPE7全能___400M
pxe keep
/gbit7.bat


附件中包含相关的文件。

2012-05-26-[1].png (4.19 KB, 下载次数: 66)

2012-05-26-[1].png

2012-05-26-[2].png (9.81 KB, 下载次数: 51)

2012-05-26-[2].png

gbit.rar

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


作者: fyqingshan    时间: 2012-5-26 20:37
这个严重支持,有能学到点技术了
作者: 527104427    时间: 2012-5-26 20:43
又一技术强人出来,膜拜中…………
作者: zhanguser    时间: 2012-6-21 11:22
这个一定要学习学习,好贴~收藏!
作者: zhaohj    时间: 2012-6-21 12:29
有个微软补丁,但只支持windows2008
http://support.microsoft.com/kb/968718/en-us

经测试,效果明显。

[ 本帖最后由 zhaohj 于 2012-6-21 13:42 编辑 ]
作者: zhaohj    时间: 2012-7-13 16:39
ramdisktftpblocksize这个参数加了后,确实在某些主板上会卡住。
但我分析,千兆网卡也分两种:
1:交换机是支持千兆的;
2:交换机不支持千兆的,只支持百兆及以下的;
---------------
我实际应用中,百兆的交换机都会卡住(而网卡是千兆的)。
作者: notepad    时间: 2012-7-17 09:19
批处理中有一行是这样的:echo -n 膻 > (8)+40,不知道是否乱码?
作者: zhaohj    时间: 2012-7-17 10:00
pxe没必要这么复杂,文件都在服务器上,简单处理就可以了:

!BAT
debug off
chkpci -net %@path%pci.txt > (md)0x200+1
cat --locatei=vmware  (md)0x200+1 && chainloader --force /w7pe/w7_pxemg.0 && boot
cat --locatei=gigabit (md)0x200+1 && chainloader --force /w7pe/w7_pxemg.0 ! chainloader --force /w7pe/w7_pxemg.00
boot

上面w7_pxemg.0加了ramdisktftpblocksize=8192
VM网卡测试排除,我测试虚拟机不影响。
作者: buger    时间: 2012-7-17 18:29
楼上的批处理简单有效,确实是同样的效果。
我已经改过测试了。
!BAT
debug off
CHKPCI -net pcidevs.txt > (md)0x200+1
cat --locatei=Gigabit (md)0x200+1  && chainloader --force (pd)/pxeboot5.7pe ! chainloader --force (pd)/pxeboot7.7pe

[ 本帖最后由 buger 于 2012-7-17 18:31 编辑 ]
作者: .....    时间: 2013-6-3 15:09
为什么我启动个别的WIM为找不到File:\windows\system32\boot\winload.exe
status:0xc000000f
作者: .....    时间: 2013-6-3 15:10
为什么我PXE启动个别的WIM为找不到File:\windows\system32\boot\winload.exe
status:0xc000000f
作者: 百分网络    时间: 2015-6-4 11:58
没有这个选项是不是要手动添加哇

C:\Users\a304a009>bcdedit  /enum all /store c:/boot/bcd

Windows 启动管理器
--------------------
标识符                  {bootmgr}
device                  partition=C:
description             Windows Boot Manager
locale                  zh-CN
inherit                 {globalsettings}
default                 {default}
resumeobject            {25ad65f9-dd0b-11e4-8021-b0566c9259fa}
displayorder            {default}
                        {fdbbe622-dd0b-11e4-9750-fa7664c3d722}
                        {fdbbe623-dd0b-11e4-9750-fa7664c3d722}
                        {fdbbe624-dd0b-11e4-9750-fa7664c3d722}
toolsdisplayorder       {memdiag}
timeout                 30

Windows 启动加载器
-------------------
标识符                  {default}
device                  partition=C:
path                    \Windows\system32\winload.exe
description             Windows 7 Ultimate
locale                  zh-CN
inherit                 {bootloadersettings}
recoverysequence        {fdbbe620-dd0b-11e4-9750-fa7664c3d722}
recoveryenabled         Yes
osdevice                partition=C:
systemroot              \Windows
resumeobject            {25ad65f9-dd0b-11e4-8021-b0566c9259fa}
nx                      OptIn

Windows 启动加载器
-------------------
标识符                  {fdbbe620-dd0b-11e4-9750-fa7664c3d722}
device                  ramdisk=[C:]\Recovery\fdbbe620-dd0b-11e4-9750-fa7664
22\Winre.wim,{fdbbe621-dd0b-11e4-9750-fa7664c3d722}
path                    \windows\system32\winload.exe
description             Windows Recovery Environment
inherit                 {bootloadersettings}
osdevice                ramdisk=[C:]\Recovery\fdbbe620-dd0b-11e4-9750-fa7664
22\Winre.wim,{fdbbe621-dd0b-11e4-9750-fa7664c3d722}
systemroot              \windows
nx                      OptIn
winpe                   Yes

从休眠状态恢复
---------------------
标识符                  {25ad65f9-dd0b-11e4-8021-b0566c9259fa}
device                  partition=C:
path                    \Windows\system32\winresume.exe
description             Windows Resume Application
locale                  zh-CN
inherit                 {resumeloadersettings}
filedevice              partition=C:
filepath                \hiberfil.sys
debugoptionenabled      No

Windows 内存测试程序
---------------------
标识符                  {memdiag}
device                  partition=C:
path                    \boot\memtest.exe
description             Windows 内存诊断
locale                  zh-CN
inherit                 {globalsettings}
badmemoryaccess         Yes

实模式启动扇区
---------------------
标识符                  {fdbbe622-dd0b-11e4-9750-fa7664c3d722}
device                  boot
path                    \Avldr.bin
description             Chameleon

实模式启动扇区
---------------------
标识符                  {fdbbe623-dd0b-11e4-9750-fa7664c3d722}
device                  boot
path                    \Avldr.bin
description             Chameleon

实模式启动扇区
---------------------
标识符                  {fdbbe624-dd0b-11e4-9750-fa7664c3d722}
device                  boot
path                    \Avldr.bin
description             Chameleon

EMS 设置
------------
标识符                  {emssettings}
bootems                 Yes

调试器设置
-----------------
标识符                  {dbgsettings}
debugtype               Serial
debugport               1
baudrate                115200

RAM 故障
-----------
标识符                  {badmemory}

全局设置
---------------
标识符                  {globalsettings}
inherit                 {dbgsettings}
                        {emssettings}
                        {badmemory}

启动加载器设置
--------------------
标识符                  {bootloadersettings}
inherit                 {globalsettings}
                        {hypervisorsettings}

虚拟机监控程序设置
-------------------
标识符                  {hypervisorsettings}
hypervisordebugtype     Serial
hypervisordebugport     1
hypervisorbaudrate      115200

恢复加载器设置
----------------------
标识符                  {resumeloadersettings}
inherit                 {globalsettings}

设备选项
--------------
标识符                  {fdbbe621-dd0b-11e4-9750-fa7664c3d722}
description             Ramdisk Options
ramdisksdidevice        partition=C:
ramdisksdipath          \Recovery\fdbbe620-dd0b-11e4-9750-fa7664c3d722\boot.

C:\Users\a304a009>bcdedit /store c:/boot/bcd /set {ramdiskoptions} ramdisktf
ocksize 8192
尝试引用指定项时出错。
系统找不到指定的文件。
作者: 百分网络    时间: 2015-6-4 16:50
可以支持无盘服务启动的系统吗。。我测试了下貌似没什么效果读取还是每秒5M左右




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