无盘启动在早年间的网吧盛行,对于那段历史中使用到了哪些集成化的软件,我不清楚也不想去了解,且不说那些软件收费与否、兼容性怎么样,即使完全免费,我也是不会用的,因为我不知道这些软件安全性如何,更重要的原因是我喜欢折腾,同样的,我知道网上有tiny pxe server这种集成好的程序,它的内部其实就是ipxe方案,只是作者把众多工具揉在一起了,如果使用它就要按照它的套路去配置,而且有些服务我不需要,再者,它是一款windows下的软件,用它得开一台windows服务器,我是不能接受得。之所以选择win10无盘而不是linux无盘,是因为win10比linux复杂很多,linux的安装不需要借助PE,只要启动安装镜像就能够安装,win10在ipxe环境下必须要PE才能安装。
研究无盘启动技术的原因是因为在很多次虚拟机或者物理机的系统安装中总是会有这么一项LAN启动或者PXE,当时也没太关注,后来就想试着折腾折腾,这一折腾就是连续的几天几夜,研究pxe究竟是怎么回事,整个引导的流程是怎么样的,市面上有哪些网络引导技术?我该怎么实现无盘安装与启动?因为这些技术涉及面很广,所以博客会分很多篇去写,大致会将我所研究的一些技术点、知识点以及实现给罗列清楚,有些名词我会使用我自己的语言去解释。
首先聊一聊系统的启动流程,说到启动流程对于底层硬件来说就一套流程,但是我们在软件层面分为BIOS以及UEFI。
BIOS:Basic Input Output System 基本的输入输出系统
UEFI: Unified Extensible Firmware Interface 统一可扩展的固件接口
两者的区别:bios闭塞,uefi开放、支持键鼠操作。
其实常说的BIOS、UEFI,本质上他们都是固件,都固化在主板的CMOS芯片中,BIOS固件只支持传统引导也就是常说的BIOS引导。UEFI固件既支持传统引导,也支持UEFI引导,两者可以在UEFI固件中选择启用与否。
其实这两个概念现在越来越模糊,因为计算机启动出现的那个界面,人们普遍已经习惯称作BIOS,刷BIOS就是刷主板固件,这个层面上来说UEFI就是BIOS。
当计算机电源按下的那一刻,发生了一系列事情,大致如下:
POST(power on self test 开机自检)-->进入BIOS(传统BIOS或者UEFI)-->BOOT SEQUENCE(选择启动载体)--->加载MBR的bootloader(传统BIOS)或者寻找分区中的efi文件(UEFI引导)
如果是centos系统的传统bios引导在加载mbr的时候就将引导交给了grub,如果是efi引导就会交给grub.efi,计算机引导就是一个接力的过程,cmos固件接过第一棒,后面和系统相关的bootloader接过第二棒,接着就加载内核、临时文件系统、载入文件系统驱动,挂载根文件系统、载入所有硬件驱动、启动初始程序等操作。
在BOOT SEQUENCE阶段,除了选择U盘、磁盘,大部分主板都支持BOOT ON LAN 也就是PXE(preboot execute environment)预引导处理环境.
PXE其实是网卡的一个固件,烧录在网卡的芯片中,如果BIOS选择PXE启动,就会将引导交给网卡处理,PXE是通过TFTP客户端去TFTP服务端获取引导文件来引导的,它只支持TFTP,TFTP的传输速度很慢,由此就诞生了IPXE。
ipxe官方网站:https://ipxe.org/start
IPXE是gpxe的升级版,它是一个开源的网络引导固件,请注意,它是一个固件,所以它可以烧录进网卡的芯片中去替换PXE来支持IPXE的新特性,前提是网卡支持。当然它也可以通过PXE的TFTP来进行引导接力,从而从PXE进入到IPXE,它既支持传统引导也支持UEFI引导,两者需要使用不同的引导文件。IPXE 支持http\https\iscsi\dns\tftp\elf\aoe等众多协议,也就是它可以使用http协议进行引导接力,这比tftp传输效率提高了非常多,在线安装系统的效率提高不少,因为支持iscsi,所以无盘启动就可以实现,配置ipxe可以分为编译期和运行期,在编译期可以通过指定脚本来配置参数,运行期可以通过命令或者链式调用指定脚本来间接配置引导。
NETBOOT.XYZ 这个本质上是开源的ipxe配置脚本,它帮你完成了很多ipxe的配置,可以帮助你更方便的使用IPXE,在学习编辑ipxe脚本的时候可以作为参考。
要实现win10无盘安装与无盘启动,涉及的技术主要有以下这些:
dhcp服务端-----使用爱快软路由的dhcp服务(配置option67、next-server 来宣告tftp服务器的信息)
tftp服务端------使用群晖tftp服务,放置ipxe引导文件
iscsi服务器----- 使用群晖iscsi服务,当作win10网络系统盘,涉及安装和安装完成后的引导
ipxe技术----- 从pxe进入ipxe引导-->pe引导-->载入网络iso文件,加载iscsi磁盘,安装windows至iscsi,最后从iscsi磁盘引导进入windows10
smb服务器---使用群晖smb服务,负责安装镜像加载
win10 pe制作-----微软官方的制作PE工具,ADK套件,地址:https://support.microsoft.com/en-us/windows/adk-download-for-windows-10-2a0b7ff2-79b7-b989-f727-43ae506e36ad,PE负责win10安装
http服务---使用群晖webstation,http服务主要放ipxe脚本和winPe相关文件
实验机(物理机或者虚拟机一台支持PXE启动)-----负责测试。
前面已经提到启动环境分bios传统引导和uefi引导,所以流程也分两套,其实很接近,只是使用的引导文件不同,这里以传统引导流程来实现,流程如下:
物理机或虚拟机启用BIOS引导---进入PXE环境---加载TFTP的ipxe引导文件---ipxe通过http加载winPe---winPe挂载iscsi磁盘,挂载win10安装盘,将win10安装进iscsi磁盘,重启后pxe进入ipxe,ipxe引导iscsi磁盘进入win10系统,win10无盘启动完成。
很好的文章,受教了
非常好,辛苦了。
老哥有试过直接把ipxe固件烧录到网卡, 然后直接通过iscsi来实现网启, 而不通过tftp来接力启动嘛? 最近在研究这个, 查资料就搜到你这博客了
没有,理论上是按照ipxe的官方文档操作完全没问题