这个是Q2要完成的项目《WDS服务器快速搭建上手》当中遇到的一个小问题☺☺。
历史
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
使用管理员身份运行命令行
-
查看映像信息:
dism /get-wiminfo /wimfile:D:\Work\WIM\boot.wim
-
解压,挂载到临时目录:
dism /mount-wim /wimfile:D:\Work\WIM\boot.wim /index:2 /mountdir:D:\Work\MOUNT
-
添加驱动(可以先后添加多个驱动,如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
-
保存对挂载的 WIM 映像的更改。
dism /commit-wim /mountdir:D:\Work\MOUNT
-
卸载,重新打包:
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软件,使用方法的话,自己搜索吧~