制作winpe镜像(windows端操作)
下载windows7版本的adk
百度搜索adk
选择windows 7 版本的adk
下载adk
安装adk
解压KB3AIK_EN.iso文件,解压后的文件如图所示
双击StartCD.exe
启动adk命令行
定制WINPE ISO
定制Win PE ISO所用命令及相关配置
copype amd64 C:\winpe
imagex /mountrw c:\winpe\winpe.wim 1 c:\winpe\mount
echo ping -n 7 -l 69 192.168.56.6 >> C:\winpe\mount\Windows\System32\startnet.cmd
echo net use z: \\192.168.56.6\share >> C:\winpe\mount\Windows\System32\startnet.cmd
echo Z: >> C:\winpe\mount\Windows\System32\startnet.cmd
#win是包含windows 7 ISO解压文件的父目录
echo cd win >> C:\winpe\mount\Windows\System32\startnet.cmd
echo setup.exe /unattend:Autounattend.xml >> C:\winpe\mount\Windows\System32\startnet.cmd
imagex /unmount c:\winpe\mount /commit
copy c:\winpe\winpe.wim c:\winpe\ISO\sources\boot.wim
#"-bC"中间没有空格
oscdimg -n -bC:\winpe\etfsboot.com c:\winpe\ISO c:\winpe\win7pe.iso
解释一下上面的几行命令:
1:使用copype命令创建C:\winpe目录,并在该目录下生成Win PE预安装所需的文件。
2:使用imagex命令挂载c:\winpe\winpe.wim文件到c:\winpe\mount目录下,以便后续进行修改,因为Windows系统的很多核心文件都被打包压缩在这个文件里面,所以我们需要挂载才能读写修改。除了imagex这个工具可以完成修改之外,另一个工具DIMS也能做到,如果你熟悉该工具,则可以使用DIMS来做。
3:echo命令修改挂载后的wim文件,向C:\winpe\mount\Windows\System32\startnet.cmd文件中写入一些脚本命令。其中第5行用于测试脚本有无执行,可以删去。剩下的几行是对samba共享文件的加载并执行,具体会在后续第三步samba文件共享那里详细解释。需要注意的是,这里用到的IP地址是我Cobbler Server服务器的地址,具体请根据你自己的服务器地址进行更改。至于为什么是写入到startnet.cmd文件中,是因为Win PE第一次运行时固定使用 Wpeinit 和 Startnet.cmd 运行启动脚本。但是对于Wpeinit我多次测试却没有成功过,因此选择将命令脚本写入到startnet.cmd文件中(startnet.cmd是Win PE ISO镜像自带的脚本文件)。
一个问题:写入到脚本中的命令用到了Cobber Server端的IP地址,这个IP地址被硬编码到了Win PE ISO镜像中,一个可行的办法是在这里不直接写入具体命令,而是调用另外一个脚本,这个被掉的脚本可以放在其他地方,以方便后续修改。
4:完成修改后,提交保存修改并去除挂载。
5:拷贝修改后的winpe.wim到指定目录并重命名。
6:生成Win PE ISO镜像工具,路径及名称为C:\winpe\winpe_cobbler_amd64.iso。
不同版本的windows系统制作命令
下面是制作命令,需要根据AIK安装目录修改命令中的路径,pe镜像路径可以自行定义
windows7 32
copype x86 C:\winPE_x86
copy "C:\Program Files\Windows AIK\Tools\PETools\x86\winpe.wim" C:\winpe_x86\ISO\Sources\Boot.wim
copy "C:\Program Files\Windows AIK\Tools\x86\Imagex.exe" C:\winpe_x86\ISO\
oscdimg -n -bC:\winpe_x86\etfsboot.com C:\winpe_x86\ISO C:\winpe_x86\winpe_x86.iso
windows7 64
copype amd64 C:\winPE_amd64
copy "C:\Program Files\Windows AIK\Tools\PETools\amd64\winpe.wim" C:\winpe_amd64\ISO\Sources\Boot.wim
copy "C:\Program Files\Windows AIK\Tools\amd64\Imagex.exe" C:\winpe_amd64\ISO\
oscdimg -n -bC:\winpe_amd64\etfsboot.com C:\winpe_amd64\ISO C:\winpe_amd64\winpe_amd64.iso
windows8 32
copype x86 C:\Win8PE_x86
MakeWinPEMedia /ISO C:\Win8PE_x86 C:\Win8PE_x86\WinPE_x86.iso
windows8 64
copype amd64 C:\Win8PE_amd64
MakeWinPEMedia /ISO C:\Win8PE_amd64 C:\Win8PE_amd64\Win8PE_amd64.iso
制作完成的winpe镜像文件,我们可以直接挂在到虚拟机光盘驱动来测试下,镜像是否正常,在我们查找问题时非常有用。
最后将 C:\Win8PE_amd64\Win8PE_amd64.iso 镜像文件复制到pxe服务器上,放置路径根据之前我们配置的 /var/lib/tftpboot/pxelinux.cfg/default 文件,放置到 /var/lib/tftpboot/ 下
[root@zabbix tftpboot]# ls
memdisk menu.c32 pxelinux.0 pxelinux.cfg winpe_amd64.iso
搭建pxe服务器(CentOS服务器操作)
yum -y install dhcp tftp-server httpd syslinux
systemctl enable --now httpd tftp dhcpd
说明:这里由于dhcpd服务还未配置,加入开机自启动会报错。
mkdir -p /var/www/html/win7/os/x86_64/
mount /dev/sr1 /var/www/html/win7/os/x86_64/
启动httpd服务
systemctl start httpd
配置dhcp服务
cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf
vim /etc/dhcp/dhcpd.conf
#option domain-name-servers 180.76.76.76,114.114.114.114;
subnet 192.168.56.0 netmask 255.255.255.0 {
range 192.168.56.100 192.168.56.200;
option broadcast-address 192.168.56.255;
option routers 192.168.56.2;
option subnet-mask 255.255.255.0;
next-server 192.168.56.6;
filename "pxelinux.0";
}
启动dhcpd服务
systemctl enable dhcpd
systemctl start dhcpd
配置tftp
cd /var/lib/tftpboot/
cp /usr/share/syslinux/{pxelinux.0,menu.c32,memdisk} /var/lib/tftpboot/
cp /usr/share/syslinux/menu.c32 /var/lib/tftpboot/
创建默认的pxe启动配置菜单,winpe_amd64.iso是windows7_x64的pe镜像
mkdir /var/lib/tftpboot/pxelinux.cfg
vim /var/lib/tftpboot/pxelinux.cfg/default
UI menu.c32
label 1
menu label ^1) Install Windows 7 x64
KERNEL memdisk
INITRD win7pe.iso
APPEND iso raw
注意:UI menu.c32必须配置,否则会出现报错
配置samba
yum -y install samba
cat /etc/samba/smb.conf
# /etc/samba/smb.conf
[global]
log file = /var/log/samba/log.%m
max log size = 5000
security = user
guest account = nobody
map to guest = Bad User
load printers = yes
cups options = raw
[share]
comment = share directory目录
path = /smb/
directory mask = 0755
create mask = 0755
guest ok=yes
writable=yes
下载win7镜像
选择下载镜像 https://mp.csdn.net/postedit/85285195,移动到pxe服务器的 /iso/ 下,并挂载
mount -o loop /iso/cn_windows_7_enterprise_with_sp1_x64_dvd_u_677685.iso /mnt/
最后将挂载的文件全部复制到共享目录 /windows
cp -rf /mnt/* /windows/
ls /windows/
autorun.inf boot bootmgr bootmgr.efi efi setup.exe sources support upgrade
报错解决
报错
虚拟机自动安装系统的时候卡在wpeinit步骤。
原因:
虚拟机的操作系统类型选择错误
解决:打开虚拟机设置,选择windows的操作系统即可。
制作应答文件
提取install.wim文件
解压下载好的win7系统(cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso)
打开应答文件制作程序
加载install.wim文件
开始制作
选择File—New Answer File,生成一个空白应答文件,如下图
配置空白应答文件
配置语言
接受许可协议
key的值可以是/image/index,也可以是/image/name,当是/image/name时,value中填写欲要安装的系统版本名字,此处Windows 7 旗舰版对应的版本名字则应该为:Windows 7 ULTIMATE;当是/image/name时,value中填写数值,4表示旗舰版。具体版本名字或者数字,可以使用Windows AIK工具查看,如下:
设置磁盘
DiskID是硬盘的编号,编号从0开始,0表示第一块硬盘,1表示第二块硬盘,以此类推。
WillWipeDisk是表示是否格式化硬盘
CreatePartition中的Order表示的是硬盘分区的顺序,从1开始编号,Size表示的是分区的大小,分区的类型是主分区。
安装该系统时,使用VirtualBox测试完成的,该系统分配了32G的硬盘,所做的磁盘配置是将一块未分区的硬盘先格式化为NTFS,大小30000M,并且作为主分区,随后将系统安装在该分区上,并且分区设置为C盘,名字为“OS”。
配置用户名和计算机
计算机名使用 * 表示随机产生名字。
设置密码
这里密码可以设定为空,也可以在value中自定义写入密码的值。
说明:Windows密钥可以不填写(吐槽下百度文库某教程误导,因为这个教程浪费我接近两周时间),如果填写必须要正确,是合理的密钥(能不能激活无所谓),不能是随便填写的密钥,也必须使密钥和待安装的系统版本匹配,比如Windows7旗舰版必须用旗舰版密钥,不能使用专业版密钥,否则在实际安装过程中总是出现一个“请选择要安装的操作系统”,需要手动去选择,这就没法做到全自动安装了,如下图:
设置Windows Update保护
时区设置
到此为止,自动应答文件结束,保存即可
File—Save Answer File