初探Windows启动映像boot.wim

这个是Q2要完成的项目《WDS服务器快速搭建上手》当中遇到的一个小问题☺☺。 e2adae119313b07e4f64c93c0dd7912396dd8c8c.jpg

历史

WDS服务器其实早就搭建好了,遇到的一个瓶颈是:不同型号的电脑拿到了IP地址并成功和WDS服务器握手了。 但是转而就跳出了一个错误,缺少wdsclient 网卡驱动(wdsclient 启动网络时出错),由于懒癌发作,这个问题直到今天才重拾。

在WDS服务器一篇中我们讲到,Windows映像其实是分为启动映像安装映像的。 他们分别对应的是我们很熟悉的iso镜像展开后sources目录下的 boot.wim以及install.wim,大部分人对install.wim可能比较熟悉。

分析

由于一些电脑只支持USB3.0放弃了USB2.0的支持,导致直接使用U盘或者光盘安装的时候,会被提示找不到驱动而中止安装,而当使用PE用同一个ISO镜像部署时可以成功。

这个本质原因我分析了一下大概是: 当我们的电脑选择其他介质如U盘安装时,实质是将boot.wim加载到内存当中,这个时候可以理解成boot.wim是一个PE去引导后续的系统安装。 我们展开这个wim文件可以发现其实他和Windows的系统根目录很相像。 我使用了tree /f > tree.txt列出了内容,有兴趣的可以看看。 tree.txt

win7的iso映像文件当中,boot.win里面是不带USB3.0驱动的,也就是说当前引导我们安装系统的程序是不支持USB3.0的,这就导致了当我们把U盘插入计算机,实际上电脑识别不到他们,原因也很简单,boot.win里面找不到驱动文件。

所以就算安装映像install.wim里包含了USB3.0驱动,跟上面的能否正常安装程序毫无关系。

而同样的道理wdsclient 启动网络时出错也是由于boot.win不包含当前PC的网卡驱动导致。

解决问题

那么我们得开始拿boot.wim做文章了。

其实有两种方式利用DISM可以实现将现有的驱动程序添加到boot.wim中的,命令行和图形界面,原理都是一样的。

注意DISM版本问题:低版本DISM不能处理高版本的boot问题(如win7的不能处理win10的)

前期准备:

  • 在D盘上新建一个工作目录,并命名,例如:D:\Work
  • 在工作目录下新建一个文件夹WIM,用于后续放置boot.wim文件
  • 在工作目录下新建一个文件夹MOUNT,用于wim文件的展开
  • 在工作目录下再新建一个文件夹Driver,用于存放驱动文件

Do

使用管理员身份运行命令行

  1. 查看映像信息:

    dism /get-wiminfo /wimfile:D:\Work\WIM\boot.wim

  2. 解压,挂载到临时目录:

    dism /mount-wim /wimfile:D:\Work\WIM\boot.wim /index:2 /mountdir:D:\Work\MOUNT

  3. 添加驱动(可以先后添加多个驱动,如USB3.0驱动和各个网卡驱动等):

    dism /image:D:\Work\MOUNT /add-driver /driver:D:\Work\iusb3xhc.inf

也可以让它自动到某一个目录下寻找驱动

dism /image:D:\Work\MOUNT /add-driver  /driver:D:\Work\Driver /recurse
  1. 保存对挂载的 WIM 映像的更改。

    dism /commit-wim /mountdir:D:\Work\MOUNT

  2. 卸载,重新打包:

    dism /unmount-wim /mountdir:D:\Work\MOUNT /commit

然后将boot.wim拷贝到sources覆盖再进行安装即可。

另:打补丁命令参考

FOR /F usebackq %i IN (`dir D:\WORK\HOTFIX\Windows6.1-KB*.msu /b`) DO start /wait dism /image:D:\Work\MOUNT /add-package /packagepath:D:\WORK\HOTFIX\%i && move D:\WORK\HOTFIX\%i D:\WORK\HOTFIX\added\

还有一种图形界面的方式,功能更多,使用更方便。 可以从DISM GUI官网下载DISM GUI软件,使用方法的话,自己搜索吧~

点击刷新🚌