|
本帖最后由 博丽灵梦 于 2020-1-19 23:28 编辑
我来回答 包好!
实现完整win7网络启动一般是通过PxE启动,然后引导位于iSCSI上的硬盘镜像。
这里需要的东西有:
1. 支持PxE启动的电脑一台,UEFI或者BIOS都行
2. 一个能广播PxE启动信息的DHCP服务器,比如Openwrt里面的DNSMASQ(IPv4)
3. 一个TFTP服务器,用于提供PxE启动所需要的一些文件
4. 一个iSCSI Target,用于提供Win7的安装磁盘
2,3,4这里可以是Windows或者Linux,而且2,3,4可以是不同的电脑。我这里实际成功的情况是:
3,4由64位的Debian 10提供, 2号的DHCP服务器是运行Openwrt的。具体步骤如下:
1. 在Openwrt的shell上为/etc/dnsmasq.conf添加如下内容:
- dhcp-match=set:bios,60,PXEClient:Arch:00000
- dhcp-boot=tag:bios,undionly.XXXXX,dell,192.168.x.x
- dhcp-match=set:efibc,60,PXEClient:Arch:00007
- dhcp-boot=tag:efibc,ipxe.efi,XXXXX,192.168.x.x
- dhcp-match=set:efi64,60,PXEClient:Arch:00009
- dhcp-boot=tag:efi64,ipxe.efi,XXXXX,192.168.x.x
复制代码
这里192.168.x.x是你提供TFTP服务的地址。添加完成后运行/etc/init.d/dnsmasq restart让配置生效。
2. 在要提供TFTP的那台Debian主机上运行apt install tftpd-hpa来安装tftp服务器,然后编辑vi /etc/default/tftpd-hpa来改TFTP的根目录,这里设定为/srv/tftp。然后运行systemctl restart tftpd-hpa让配置生效。
3. 在/srv/tftp/里放ipxe.lkrn ipxe.efi wimboot这些文件,并把win7安装盘里的bcd boot.sdi bootmgr还有boot.wim都放到/srv/tftp/里。ipxe.lkrn ipxe.efi是经过我编译的ipxe启动软件,默认初始化DHCP并加载main.ipxe作为菜单。
ipxe.part2.rar
(104.4 KB, 下载次数: 5)
ipxe.part1.rar
(400 KB, 下载次数: 5)
4. 编辑/srv/tftp/main.ipxe,内容:
- #!ipxe
- # dhcp
- # HTTP and iSCSI
- set iscsi-server ${next-server}
- # Some menu defaults
- set menu-timeout 10000
- set submenu-timeout ${menu-timeout}
- set menu-default windows7_iscsi
- :start
- menu iPXE boot menu
- item test Test
- item --gap -- ------------------------- Operating systems ------------------------------
- item windows7_iscsi Boot from iSCSI
- item --gap -- ---------------------------- Installers ----------------------------------
- item windows7_inst Install Windows 7 (WIM)
- item --gap -- ------------------------- Advanced options -------------------------------
- item shell Drop to iPXE shell
- item reboot Reboot
- item
- item --key x exit Exit iPXE and continue BIOS boot
- choose --timeout ${menu-timeout} --default ${menu-default} selected || goto cancel
- set menu-timeout 0
- goto ${selected}
- :cancel
- echo You cancelled the menu, dropping you to a shell
- :shell
- echo Type 'exit' to get the back to the menu
- shell
- set menu-timeout 0
- set submenu-timeout 0
- goto start
- :reboot
- reboot
- :exit
- exit
- ###
- ### Custom menu entries
- :windows7_inst
- set keep-san 1
- # Has to be 0x80 otherwise installer wont accept the disk
- sanhook --drive 0x80 iscsi:${iscsi-server}:tcp:3260:1:myiscsi:lun0
- kernel wimboot
- initrd BCD
- initrd boot.sdi
- initrd boot.wim
- boot
- goto start
- :windows7_iscsi
- set gateway 0.0.0.0
- clear net0.dhcp/gateway:ipv4
- set keep-san 1
- sanboot --drive 0x80 iscsi:${iscsi-server}:tcp:3260:1:myiscsi:lun0
- goto start
复制代码 这里的“set iscsi-server ${next-server}”假设TFTP和ISCSI运行在同一台服务器上。现在可以在要远程启动的那台PC上测试了,如果能看到IPXE的启动菜单则说明TFTP和DHCP服务配置正确。
5. 安装iSCSI Target,这里选用TGT在Debian上做Target,其实Windows Server好像也能做iSCSI Target。在Debian上运行sudo apt install -y tgt安装tgt,之后新建/etc/tgt/conf.d/TecMint_iscsi.conf,内容为:
- <target myiscsi:lun0>
- # Provided device as an iSCSI target
- backing-store /win7.img
- </target>
复制代码 创建win7.img,用于提供储存安装win7,运行:dd if=/dev/zero of=/win7.img bs=1M count=20480,这里20480单位MB。
之后让配置生效:sudo service tgt restart
然后查看下tgt暴露的iSCSI驱动:sudo tgtadm --lld iscsi --op show --mode target, 如果看到LUN1,则说明成功。
6. 启动那台要远程启动的PC,通过网络启动,选择Install Win7 (WIM)。进PE之后,按Shift+F10打开CMD窗口,运行wpeutil initializenetwork启动网络支持。之后运行IPCONFIG看看是否有获取到IP,如果没有,则需要为PE加载网卡驱动。如果有IP,运行diskpart然后list disks,如果能看到iSCSI磁盘说明成功。插入win7安装磁盘,之后按照正常方式安装win7,分区选那个iSCSI设备。
7. 等复制完文件的重启之后,选择Boot from iSCSI,继续Win7安装。等安装好之后,想再进系统,都选Boot from iSCSI。安装驱动过程和本地安装win7无异。
注意:如果是用win7安装盘而不是IPXE网络启动的安装程序,则看不到iSCSI设备,这点要特别注意!!!
差不多写这么多吧,后面有问题也可以问
|
|