引言: 随着企业服务器的维护工作量日益增多,尽管使用最新内核的各种WinPE系统能将大多数服务器的磁盘阵列卡驱动都包含其中,也不排除有极个别的服务器,由于WinPE系统中缺少服务器特殊的阵列卡所需的驱动程序而无法使用。我们可以按照本文介绍的方法,将维护服务器所需的各类驱动程序添加进WinPE中。
大多数系统维护员对于WinPE系统应该都不会陌生的,WinPE系统即是Windows预安装环境(Windows Preinstallation Environment,简称 WinPE)在Windows内核上构建的具有有限服务的最小Win32子系统,它用于向准备安装Windows操作系统的计算机提供安装环境,启动Windows安装程序,复制文件或者制作磁盘映像,是计算机技术保障人员日常工作中的有效工具。
目前,随着单位服务器的维护工作量日益增多,尽管使用最新内核的各种WinPE系统能将大多数服务器的磁盘阵列卡驱动都包含其中,也不排除有个别的服务器,由于WinPE系统中缺少服务器特殊阵列卡所需的驱动程序,从而无法使用。实际上,我们按照下面的方法,可以将维护服务器所需的各类驱动程序添加进WinPE中,制作出针对某种型号服务器的WinPE系统来帮助我们做好维护工作。下面,笔者以添加服务器的磁盘阵列卡驱动为例和大家一同探讨。
在制作专用WinPE系统之前,首先要对WinPE调用磁盘阵列卡驱动程序的过程有一些简单的了解。计算机启动之后,WinPE系统首先会读取磁盘阵列卡里面的硬件标识,完成对磁盘阵列卡的识别工作。接下来,WinPE系统会根据系统安装信息文件的信息,通过磁盘阵列卡的标识找到对应驱动程序的名称,然后WinPE系统进入驱动程序所在的子目录,将驱动程序拷贝到指定的安装目录下面。完成驱动程序的拷贝操作之后,WinPE系统会在运行中调用驱动程序对磁盘阵列卡进行驱动。
对WinPE调用磁盘阵列卡驱动程序流程有一定的了解后,我们就可以逆向把磁盘阵列卡驱动程序添加到WinPE中了。首先,用专用软件将WinPE系统的核心文件从压缩的镜像文件中提取出来,然后把磁盘阵列卡驱动程序添加到这个提取出来的文件中,再修改系统安装信息文件,确保WinPE系统能够正确调用新添加的驱动程序。最后,将修改后的文件封装压缩,替换原先的文件,完成WinPE系统的制作。具体步骤如下。
首先使用ULTRAISO或其他光盘映像文件制作编辑软件,将WinPE系统镜像文件中扩展名为“IS_”的文件提取出来,将这个扩展名改为“cab”,然后用WinRAR或其他解压缩软件将其解压缩,得到相应的ISO镜像文件。
在获得ISO镜像之后,接下来的工作是将磁盘阵列卡驱动程序添加到ISO镜像的相应位置。首先查出磁盘阵列卡的型号以及WinPE系统的内核版本,然后找出与磁盘阵列卡以及WinPE系统相匹配的驱动程序。在文件夹中,服务器阵列卡的驱动程序扩展名为“SYS”,用WinCAB软件将其打包,生成对应的CAB文件,然后,将该文件的扩展名改为“SY_”。最后,将该文件通过ULTRAISO添加到ISO镜像文件中存放驱动程序的位置中,通常位于文件夹“SYSTEM32DRIVERS”中,不同的WinPE系统可能会有差异。
将服务器磁盘阵列卡驱动程序添加到ISO镜像文件之后,还需要修改系统相应的安装信息文件,使得WinPE系统能够正确读取并安装该驱动程序。因此,我们需要对系统的“txtsetup.sif”文件进行配置,“txtsetup.sif”是 WinPE系统在安装时加载驱动程序的信息文件,且该文件不在系统保护文件的范畴内,这意味着我们可以对这个文件任意修改而不用担心遭到操作系统的阻止。
(1)获取“txtsetup.sif”文件。在ISO镜像文件里面可以直接找到“txtsetup.sif”文件或者“txtsetup.SY_”文件。对于“txtsetup.SY_”文件,将其提取出来,后缀名修改为“CAB”,然后解压缩生成“txtsetup.sif”文件,可以通过ULTRAEDIT或者记事本程序进行编辑。
(2)设置系统的预安装显示参数。为了便于叙述,假设磁盘阵列卡驱动程序的文件名为“XXXX.SYS”,在“txtsetup.sif”文件中的“[SCSI]”段增加:XXXX="YYYY"。这项的作用是告诉WinPE系统,有一个名为XXXX的硬盘控制器是被操作系统所支持的,“YYYY”是对控制器进行注释的内容。
(3)设置硬件标识。在“txtsetup.sif”文件中的“[HardwareIdsDatabase]”段增加:硬件标识="XXXX"。硬件标识是用来描述被硬盘控制器的硬件标识,是硬件出厂时被写入的,不会改变。硬件标识可以通过以下两个方法获取:一是在驱动程序文件夹中的扩展名为“INF”的文件中查找;二是进入操作系统的设备管理器,查看存储控制器的驱动器详细信息,可以查到硬件标识的信息。
(4)设置系统挂载驱动参 数。 在“txtsetup.sif”文件中的“[SCSI.Load]”段增加 :XXXX=XXXX.SYS,4。这行代码表示WinPE系统将使用程序“XXXX.SYS”对服务器阵列卡进行驱动,最后的数字4定义了驱动程序存放的目录,可以在“winntDirectories”段中查看。
(5)设置驱动程序拷贝的具体细节。在“txtsetup.sif”文件中的“[SourceDisksFiles]”段增加: XXXX.SYS=1,,,,,,4_,4,1,,,1,4,设定了驱动程序拷贝的具体细节。第一个数字“1”代表的是驱动程序拷贝的目标文件夹。
完成前面的几项工作后,就可以把TXTSETUP.SIF用ULTRAISO添加到ISO文件里面用以取代之前的文件。或者用WinCAB压缩成CAB格式,改成SI_扩展名,然后用ULTRAISO添加到ISO文件里面取代以前的那个SI_文件。再用WinCAB软件将修改后的WINPEO3.ISO文件进行压缩,然后将其改名为 WINPEWH.IS_,并通过ULTRAISO覆盖原先光盘ISO镜像中的对应文件。
写到这里,对于普通映像的WinPE系统加载SCSI驱动程序就可以实现,如果是WIM映像格式的WinPE系统的话,可以按照以下步骤进行驱动的加载。
随着Windows操作系统的发展,微软开始使用WIM映像格式来进行操作系统的安装,与之相适应的WinPE系统也对此做了针对性的改动。早期,主要使用ImageX工具来处理WIM映像文件,我们需要安装Windows AIK来获取ImageX,也可以从网络上下载到ImageX。到了Windows 8时代,最新版的DISM工具经过改进已经具备了ImageX原有的功能,并且已经包含在了Windows 8/8.1以 及Windows 8/8.1 PE中。为了把驱动添加进WinPE系统,我们可以使用驱动程序服务命令DISM来完成这一任务。它可以在脱机映像中用于添加和删除基于INF文件的驱动程序,而且可以在处于运行状态的应用程序(联机)上枚举驱动程序,其操作流程如下。
通过使用DISM工具将基本映像装载到本地的Windows PE目录,假设默认路径在D盘。其命令如下:
通过Add-driver将驱动添加进WinPE包。在这里要注意两点,一是对于包含很多目录的Drivers,可以附加/recurse来做递归添加;二是对于Windows或者早期的驱动,都是没有签名机制的,ForceUnsigned是必不可少的参数。驱动程序所在路径为:
添加完驱动程序后,需要将变更提交,并卸载此映像。命令如下:
这里要注意的是,使用DISM工具有两个限制:一是驱动程序服务命令仅支持 *.inf文 件,Windows Installer或其他驱动程序包类型(如*.exe文件)不受支持;二是如果要添加多个驱动程序,它们将按照在命令行中列出的顺序进行安装。
通过反向的方法将服务器的阵列卡驱动程序集成在WinPE系统中,同样我们也可以将服务器网卡、主板等驱动程序添加到WinPE系统,虽然步骤稍稍有点麻烦,但对于后期的维护还是值得的。