本工作室主要是写一些技术文章和心得,如有问题,可联系本工作室。

微信:15312167779
QQ:149824844

自动手做win7&10PEX网络启动

Win7PE的引导方式不再使用WinNT的NTLDR方式,而是使用了Win7的BCD方式,他们在引导上的主要区别也就在于此。

 

1、pxeboot.0:由pxeboot.com或者pxeboot.n12改名而来,这两个文件可以从Win7安装盘中获得,将win7安装盘中的boot.wim提取到D盘,解压到boot文件夹中,在D:\boot\Windows\Boot\PXE文件夹下可以找到这个名为pxeboot.n12的文件。这个文件对应WinXPPE中的startrom.n12文件。它的放置位置一般是TFTP服务器的根目录下,它的主要作用是加载TFTP根目录下的bootmgr.exe文件。

 

2、bootmgr.exe它也是从Win7安装盘中获得的,也放在\Windows\Boot\PXE文件夹中。它也必须放到TFTP服务器的根目录下(与WinXPPE中的setupldr.exe对应)。它的作用主要是读取启动配置文件也就是/boot/BCD,根据BCD的配置进一步加载/boot/boot.sdi文件。

 

3、/boot/BCD:这是bootmgr的启动菜单配置文件,跟Win7的启动菜单配置文件没有什么区别,它主要对应NT的boot.ini文件,由Win7的命令行程序bcdedit.exe来进行配置和修改。一个创建BCD文件启动Win7PE的例子如下:

 

Bcdedit -createstore c:\BCD

 

Bcdedit -storec:\BCD -create{ramdiskoptions} /d "Ramdisk options"

 

Bcdedit -storec:\BCD -set {ramdiskoptions}ramdisksdidevice boot

 

Bcdedit -storec:\BCD -set {ramdiskoptions}ramdisksdipath \boot\boot.sdi

 

:: NEW GUIDCREATED HERE

 

for /f"tokens=l-3" %%a in('Bcdedit -store c:\BCD -create /d "WinPE2.0"

 

/applicationosloader') do SET GUIDl=%%c

 

Bcdedit -storec:\BCD -create {bootmgr} /d"VISTA Boot Manager"

 

Bcdedit -storec:\BCD -set {bootmgr} timeout15

 

Bcdedit -storec:\BCD -set {bootmgr}displayorder %GUIDl%

 

Bcdedit -storec:\BCD -set %GUIDl%systemroot \Windows

 

Bcdedit -storec:\BCD -set %GUIDl% detecthalYes

 

Bcdedit -storec:\BCD -set %GUIDl% winpe Yes

 

Bcdedit -storec:\BCD -set %GUIDl% osdevice

 

ramdisk=[boot]\Boot\WinPE.wim,{ramdiskoptions}

 

Bcdedit -storec:\BCD -set %GUIDl% device

 

ramdisk=[boot]\Boot\WinPE.wim,{ramdiskoptions}

 

4、boot.sdi:达个文件好像是通用的,将Win7光盘上的boot.sdi文件复制过来即可,必须放到TFTP服务器/boot目录下。

 

5、WinPE.WIM:这就是Win7PE的主映像文件了,也要放到/boot目录下。Win7PE的PXE启动过程大概是这个样子的:

 

首先,pxeboot.0获得执行权限(可以由pxelinux菜单直接调用,或者将pxeboot.0直接作为PXE服务器的启动文件),然后,该文件下载TFTP服务器根目录下的bootmgr.exe并执行, bootmgr.exe再读取/boot/BCD文件获得Win7PE的启动配置,并进一步下载/boot/boot.sdi及/boot/winpe.wim,然后执行winpe.wim中的winload.exe开始Win7PE的启动过程。

 

下面是我测试,生成bcd两种方法。

 

第一种:

 

1,把原文件bcd从iso原光盘中拷贝出来 (这里是d:\1\bcd)

 

2,执行‘1运出建立增加菜单.cmd’这个文件

 

@echo off

set path=D:\1\bcd

 

bcdedit /store %path%

 

bcdedit /store %path% /timeout 20

 

bcdedit /store %path% /set {globalsettings}locale zh-cn

 

bcdedit /store %path% /set{bootloadersettings} locale zh-cn

 

bcdedit /store %path% /set {bootmgr} localezh-cn

 

bcdedit /store %path% /set {default} localezh-cn

 

bcdedit /store %path% /set {memdiag} localezh-cn

 

bcdedit /store %path% /set {default}description "安装 Windows 7"

 

bcdedit /store %path% /copy {default} /d"启动 WinPE 3.0 (64位)"

 

bcdedit /store %path% /copy {default} /d"启动 WinPE 3.0 (32位)"

 

PAUSE

 

3,执行‘2把标识生成文本.cmd’这个文件,生成标识

 

@echo off

set path=d:\1\bcd

 

bcdedit /store %path% /enum all >bcd.txt

 

pause

 

4,查看d盘是否有一个BCD.TXT文件。这个文件的部分内容如下 {7619dcc8-fafe-11d9-b411-000476eba25f}

 

5,执行‘3把得到的标识符放到BCD里.CMD’这个文件

 

@echo off

set d_path=d:\1\bcd

 

setdev={7619dcc8-fafe-11d9-b411-000476eba25f}

 

REM 下面2行是X64的,boot\pe_x64.wim表示将引导boot目录下的pe_x64.wim文件。

 

REM {ab5b8f4b-8345-11eb-9d9c-005056c00008} 就是标识符,要跟上述查看BCD文件时要一致。

 

bcdedit /store %d_path% /set{ab5b8f4b-8345-11eb-9d9c-005056c00008} deviceramdisk=[boot]\boot\install.wim,%dev%

 

bcdedit /store %d_path% /set{ab5b8f4b-8345-11eb-9d9c-005056c00008} osdeviceramdisk=[boot]\boot\install.wim,%dev%

 

REM 下面2行是X86的,boot\pe_x86.wim表示将引导boot目录下的pe_x86.wim文件。

 

bcdedit /store %d_path% /set{abba045d-8345-11eb-9d9c-005056c00008} device ramdisk=[boot]\boot\pe_x86.wim,%dev%

 

bcdedit /store %d_path% /set{abba045d-8345-11eb-9d9c-005056c00008} osdeviceramdisk=[boot]\boot\pe_x86.wim,%dev%

 

pause

 

6,准备启动语言文件MUI,到C:\Windows\Boot\PCAT\zh-CN目录下复制bootmgr.exe.mui和memtest.exe.mui这两个文件到F:\boot\zh-cn目录下。(否则会乱码)

 

第二种:

1,第一步新建bcd.cmd

 

@echo off

Bcdedit -createstore d:\1\BCD

 

Bcdedit -store d:\1\BCD -create{ramdiskoptions} /d "Ramdisk options"

 

Bcdedit -store d:\1\BCD -set{ramdiskoptions} ramdisksdidevice boot

 

Bcdedit -store d:\1\BCD -set{ramdiskoptions} ramdisksdipath \boot\boot.sdi

 

bcdedit /store d:\1\BCD /create /d"WinPE 3.0 32bit" /application osloader

PAUSE

 

2,第二步把标识生成文本.cmd

@echo off

set path=d:\1\bcd

 

bcdedit /store %path% /enum all >bcd.txt

 

pause

 

3,第三步把id给bcd.cmd

set path=d:\1\BCD

set id={63429f05-834e-11eb-9d9c-005056c00008}

bcdedit /store %path% /set %id% systemroot\windows

bcdedit /store %path% /set %id% detecthalYes

bcdedit /store %path% /set %id% winpe Yes

bcdedit /store %path% /set %id% osdeviceramdisk=[boot]\Boot\boot32.wim,{ramdiskoptions}

bcdedit /store %path% /set %id% deviceramdisk=[boot]\Boot\boot32.wim,{ramdiskoptions}

bcdedit /store %path% /create {bootmgr} /d"Windows Boot Manager" 

bcdedit /store %path% /set {bootmgr}nointegritychecks yes

bcdedit /store %path% /set {bootmgr}timeout 0

bcdedit /store %path% /default %id%

bcdedit /store %path% /displayorder %id% 

@pause

 

这样bcd算是好了

 

下面是我架设tftp32测试效果

1,把以上文件放到tftp32的目录中,如下图



2,设置dhcp及动文件


3,看看效果




注意:用tftp32传输有如出现慢,是需要在bcd里加几个参数,会快很多

安装程序 Ramdisk 选项

---------------------

标识符                 {ramdiskoptions}

ramdisksdidevice        boot

ramdisksdipath          \BOOT\BOOT.SDI

ramdisktftpblocksize    40960

ramdisktftpwindowsize   100

 

两个涉及到TFTP的参数,分别是windows size 和block size(也就是上面最后两个)。这两个参数就是关于TFTP的传输性能弱,全在这俩参数上。把这俩参数加到bootmgr的bcd里面。

默认的网络启动过程,网卡的使用率始终在10mbps以下徘徊(我是以我家100m带宽为例),大部分情况下更低,一个3M大小的字体文件,都要拷贝好一会儿。加上参数后,网卡的利用率立刻飙升到40mbps上下,一般都不低于20Mbps。 网络加载速度一下子快乐好几倍,再也不用傻等了,非常之爽。

 

 

 

 

 

 

 

 

 

 

微信:15312167779(系统交流学习)

邮箱:149824844@qq.com

更多我的学习技术文章:

https://boysky123.lofter.com

https://user.qzone.qq.com/149824844


评论

© JC网络工作室 | Powered by LOFTER