分类 网络启动 下的文章

用了很久的syslinux了,虽然已经实现了PXE网络启动DOS、PE1.0、PE2.0、PE3.0、网络安装各种Linux(Redhat、CentOS、Debian等),但老版本的syslinux是基于TFTP来传输所有的启动文件的,这个在跨网段的情况下,传输速度会比较慢,一直想解决。
听说gPXE有一段时间了,它支持通过HTTP和FTP方式传输引导文件,一直没时间研究,最近研究了下,加上朋友的参考,基本上把功能实现了。
原理非常简单,新版本的syslinux已经支持gPXE了,直接更改DHCP配置文件,指向到gpxelinux.0就可以了,我是直接把gpxelinux.0改名成pxelinux.0,原始配置文件基本不变。
旧版本引导dos镜像的方法

 LABEL dostools
 #MENU PASSWD 1
 MENU LABEL ^A- DOS Disk Tools
 kernel gpxe/memdisk c=938 h=2 s=32 floppy
 append initrd=grub/dos.img

gPXE引导方式支持HTTP和FTP协议

 LABEL dostools
 #MENU PASSWD 1
 MENU LABEL ^A- DOS Tools FTP
 kernel ftp://192.168.1.1/gpxe/memdisk c=938 h=2 s=32 floppy
 append initrd=ftp://192.168.1.1/gpxe/dos.img

旧版本引导PE的方法分为PE1.x和PE2.0/PE3.0
引导多个PE1.x需要修改startrom.0、ntldr和winnt.sif,引导PE2.0/PE3.0则需要bootmgr.exe等等,在此不详细说了,有兴趣的可以上无忧上搜索
旧配置文件

 LABEL PE1.x
 #MENU PASSWD 1
 MENU LABEL ^B- PE XP
 kernel startrom.0
 LABEL PE3.0
 #MENU PASSWD 1
 MENU LABEL ^C- PE Win7
 kernel Boot/pxeboot.0

gPXE引导方式

 LABEL PE XP FTP
 #MENU PASSWD 1
 MENU LABEL ^D- PE XP FTP
 linux ftp://192.168.1.1/gpxe/memdisk
 append raw iso
 initrd ftp://192.168.1.1/win/RAMXP.iso

Linux网络安装和引导dos的img基本类似,另外,关于引导PE,旧版本的方式速度太慢,而gPXE已经可以直接通过HTTP/FTP方式实现了,免去很多繁琐的制作过程了,只要找个自己喜欢的PE的ISO就好啦。

由于需要实现pxe启动winpe,而在windows下实现没出什么问题,可是在Linux服务端上就有问题了,原因是启动所需的文件大小写不一致,导致linux服务端无法提供正确的文件而无法启动pe,下面我们来进行以下操作,让Linux下的tftp忽略大小写:

首先,创建规则文件,来让所有tftp的文件请求中的所有字符都变成小写创建如下文件

#cat /tftpboot/rules
 ri ^[a-z]: # Remove “drive letters”
rg \\ / # Convert backslashes to slashes
 rg \# @ # Convert hash marks to @ signs
 rg /../ /..no../ # Convert /../ to /..no../
 rg A a
 rg B b
 rg C c
 rg D d
 rg E e
 rg F f
 rg G g
 rg H h
 rg I i
 rg J j
 rg K k
 rg L l
 rg M m
 rg N n
 rg O o
 rg P p
 rg Q q
 rg R r
 rg S s
 rg T t
 rg U u
 rg V v
 rg W w
 rg X x
 rg Y y
 rg Z z
 r ^/(.*) \1

再输入:wq保存退出,然后修改tftp配置文件

#cat /etc/xinetd.d/tftp 
 service tftp 
 { 
disable = no 
socket_type = dgram 
protocol = udp 
wait = yes 
user = root 
server = /usr/sbin/in.tftpd 
server_args = -m /tftpboot/rules -s /tftpboot 
per_source = 11 
cps = 100 2 
flags = IPv4 
 }

注:实际上就是在server_args里增加“ -m /tftpboot/rules”这个参数

好啦,这个时候重新启动xinetd服务即可

#/etc/init.d/xinetd restart

最后把所有文件都改成小写,就可以完全使用Linux服务端用于网络启动pe了

才搞定PXE启动PE3.0,现在想将多个wim的PE文件做为多启动使用,由于一时没有找到现成的BCD文件,于是打算自己做

在无忧论坛上逛了逛,有了不少启发,经过结合多篇文章的结晶,终于制作出PE3.0用的BCD文件,以下是具体方法.

先随便找个工作目录,如D:test,没有则创建一个,必须以管理员身份运行“命令提示符”
首先创建一个BCD文件(最好在Vista/Win7/PE3.0下操作),使用如下代码

d: 
cd test 
bcdedit -createstore BCD

创建ramdisk设置,由于网络启动pe,必须创建ramdisk设置

bcdedit -store BCD -create{ramdiskoptions} /d "Ramdisk options" 
bcdedit -store BCD -set {ramdiskoptions} ramdisksdidevice boot 
bcdedit -store BCD -set {ramdiskoptions} ramdisksdipath \\boot\\boot.sdi

创建bootmgr菜单,我设置的菜单名称为 “Windows PE 3.0″

bcdedit -store BCD -create {bootmgr} /d "Windows PE 3.0" 
bcdedit -store BCD -set {bootmgr} timeout 30

接下来为第一个PE镜像创建配置,标识符为\”Windows 7 PE x86\”

bcdedit -store BCD -create /d "Windows 7 PE x86" /application osloader

如果输入正常会返回类似下面的信息
项 {1a7d9362-37d7-11df-a714-000c29c75111} 成功创建。
拷贝这段id备用,将以下代码存到d:testbcd.bat

set WINPE_GUID={1a7d9362-37d7-11df-a714-000c29c75111} 
bcdedit /store bcd /set %WINPE_GUID% systemroot \\windows 
bcdedit /store bcd /set %WINPE_GUID% detecthal yes 
bcdedit /store bcd /set %WINPE_GUID% winpe yes 
bcdedit /store bcd /set %WINPE_GUID% osdevice ramdisk=[boot]\\Boot\\winpe.x86.wim,{ramdiskoptions} 
bcdedit /store bcd /set %WINPE_GUID% device ramdisk=[boot]\\Boot\\winpe.x86wim,{ramdiskoptions} 
bcdedit -store BCD -set {bootmgr} displayorder %WINPE_GUID% /addlast

将第一行的id替换为你刚刚生成的,winpe.x86wim替换为你自己的wim文件名,运行这个脚本(以管理员身份运行)

接下来配置第二个PE镜像的配置,注意标识符已经改为 “Windows 7 PE x64″

bcdedit -store BCD -create /d "Windows 7 PE x64" /application osloader

正常运行后也会生成一个id,将bcd.bat中的id替换,并修改winpe.x86.wim为你的第二个PE镜像文件名

再运行以管理员身份运行bcd.bat文件即可

按此方式创建更多的选项即可,最后把制作好的bcd文件拷贝到tftp的boot目录下即可