深入解析DISM命令
2015-03-18■
■
DISM功能简介
从Windows 7开 始,DISM命令就被集成到了系统内部,它是部署服务和管理的工具,主要用来管理和处理Windows映像文件。也就是说,我们可以利用该工具对系统进行备份,装载Windows映像文件或者虚拟硬盘,来获取其相关信息以及采用捕捉拆分等方法来管理映像文件。在Windows 8中,已经提供了最新版本的DISM。对于Windows 7来说,可以下载安装微软提供的Windows 评估和部署工具包,来获得最新版本的DISM工具。但是,该包体积巨大,下载需要花费一定的时间,为了简单起见。可以将Windows 8中的DISM工具复制到Windows 7中使用。当然,因为两者都提供了严格的文件保护机制,所以需要借助WinPE优盘来实现文件复制和替换动作。例如将Windows 8中的“DISM.exe”文件和“DISM”文件夹复制到老毛桃WinPE优盘中,之后利用该优盘启动系统,进入WinPE环境后替换Windows 8中的同名文件。
对磁盘进行备份操作
在Windows 8中点击“Win+X”键,选择“命令提示符(管理员)”项,在CMD窗口中执行“DISM”命令,就可以到关于该命令的参数信息和用法说明。我们先了解一下其备份功能。例如执行“dism /Capture-Image /ImageFile:E:akspdata.wim /CaptureDir:D: /Name:DPAN-1 /Descrip tion:2015-01-01” 命 令,可以将D上的所有文件备份到E盘中“bak”文件夹中的“spdata.wim”文件中,注意,必须确保目标文件夹存在。之后显示备份进度信息,备份时间取决于所备份的文件数量多少和体积大小。当提示“100%”信息时,说明备份操作完成。
命令行中的“/Capture-Image”参数表示将驱动器的映像捕获到新的WIM文件中,包括其包含所有的子文件夹和数据。“/ImageFile”参数用来指定映像文件路径,如果路径中有空格的话需要要加上引号。“/CaptureDir”参数指定捕获的目标路径,“/Name”参数指定映像文件名称,本例是对非系统盘执行备份操作,如果直接对系统盘进行备份的话,系统会提示“另一个程序正在使用此文件,进程无法访问”。
其原因在于DISM不支持对系统盘执行热备份,也就是说,不能在Windows工作环境中对系统盘进行备份。如果本机上安装有Windows7/8双系统,则可以在Windows 7中使用DISM命令,对Windows 8系统盘进行备份。或者在WiinPE 3.0以上环境中,执行备份操作。实际测试表明,同Ghost相比,DISM的备份速度更快,备份文件体积更小。
使用DISM命令,实现增量备份
当备份文件创建完毕后,如果想在其中追加数据的话该如何操作呢?例如,希望将别的磁盘中的内容添加到目标备份文件中,来更新原备份文件的内容。这就需要用到备份更新功能。Ghost无法更新备份文件,而DISM没有此限制。还以上例进行说明,在CMD窗口中执 行“Dism /Append-Image/ImageFile:E:akspdata.wim /CaptureDir:g: /Name:GPAN-1 /Description:2015-01-07”命令。就可以将G盘中内容添加到目标映像文件中,实现增量备份操作。其中 的“/Append-Image” 参数表示将其它映像添加到目标WIM文件中。细心的朋友会发现,经过上述两次备份操作,在同一个映像文件中存在“DPAN-1”和“GPAN-1”等名称,它们又有什么作用呢?其 实,“spdata.wim”是 备 份文件名称,其中包含了多个磁盘的映像信息,“DPAN-1”和“GPAN-1”对应的就是这些不同映像的名称信息。例如,在CMD窗口中执行“Dism /Get-WimInfo /Wimfile:E:akspdata.wim”命令,就可以查看“spdata.wim”文件的详细信息,可以看到,其中包含的每一个映像都有其索引,名称,描述,大小等信息,其中的“DPAN-1”和“GPAN-1”就是不同映像的显示名称。其中的“/Get-WimInfo”参数表示有关WIM文件中映像的信息,“WIMfile”参数指定目标WIM文件路径。/Commit”命令,执行备份文件保存和卸载操作。
在备份文件中集成驱动程序
此外,还可以使用DISM命令,向已经存在的备份文件中添加新的文件,例如驱动程序,补丁包,病毒库等等。例如,对系统盘进行了备份之后,如果想将最新的驱动文件添加进来,就可以使用DISM命令轻松实现。从网上下载某个硬件的最新驱动程序,假设其位于“F:driver”文件夹,安装文件名为“XXX.inf”。以管理员身份打开命令提示符窗口,执行“Dism /mountwim /winfile: e:Win8sysWin8pan.wim /index:1 /mountdir:F:win8file”命令,将与系统盘对应的备份文件“Win8pan.wim”加载到“F:win8file”文件夹中。执行“Dism/image:f:win8file /adddriver /driver f:driverxxx.inf”命令,如果出现驱动程序包已经成功安装之类的提示信息,说明该驱动安装完成。执行“Dism /Unmount-Wim /MountDir f:win8file
将补丁包集成到备份文件内部
微软会不定期的发布补丁包,但是在原始的安装文件或者自制的备份文件中,却没有集成这样的升级包。如果有新的补丁包出现,就需要将其添加到安装文件或者备份文件中,这样当重装或者恢复系统盘后,就省去了安装补丁包的繁琐。例如,以Windows 7旗舰版为例,首先需要下载所有需要的补丁包。在控制面板中打开“系统和安全”界面,在“Windows 更新”栏中点击“查看更新历史记录”项,记录下安装更新的标号。点击“检查更新”项,在更新类型中点击“X个重要更新可用”项,可以显示所有为安装的更新包,记录下其更新编号,这两类更新信息就是需要集成的全部补丁包。打开“http://catalog.update.microsoft.com/v7/site/install.aspx”页面,依次输入对应的补丁编号将将其添加到选择栏,之后点击下载链接,将全部补丁包下载到本地。
如果想将名称为WindowsX.X-KBXXXXXX.msu的补丁包添加带安装映像文件中,只需以管理员身份启动命令提示符窗口,在其中执 行“Dism /mount-wim /wimfile:f:win7sourcesinstall.wim /index:5/mountdir:e:win7setup” 命令,将旗舰版安装文件加载到“e:win7setup” 文 件 夹中。 执 行“Dism /Image:e:win7setup /Add-PackagePath:g:udingWindowsX.X-KBXXXXXX.msu”命令,就可以将该补丁包集成到加载路径中假设所有的补丁包保存在“g:uding”文件夹中。
按照同样的方法,可以将所有的补丁包全部集成到安装映像文件中,运行“Dism /image: e:win7setup /Get-Packages”命令,可以查看集成的补丁包信息。随后执行“Dism/Unmount-WIM /MountDir:e:win7setup /Commit”命令,保存并卸载原映像文件。之后将封装好的“Install.wim”文件存放到Windows 7的安装镜像ISO文件中,这样以后使用其安装系统时,就会自动安装所有的补丁包。
处理补丁安装失败的方法
除了可以集成补丁外,DISM命令还可以清除和版本相关的垃圾信息。例如在Windows 8中当安装补丁后,会在“c:windowswinsxs”文件夹中发现每个补丁会保留两个版本的文件。如果您想仅仅保留当前所需版本文件的话,可以执行“Dism /online /cleanupimage /startcomponentcleanup/resetbase”命令,就可以解决以上关于补丁的双重版本问题。此外,有时在Windows 8中安装补丁时,可能会出现更新失败的情况,系统会显示各种错误代码。具体的修复方法是以管理员身份启动命令提示符窗口,执行“Dism/online/remove-package/packagename:package_for_KBXXXXXX”命令,就可以卸载对应的补丁包。其中的“KBXXXXXX表示具体的补丁包名称。重启系统后进入CMD窗 口,执 行“?Dism/online/cleanup-image/startcomponentcleanup”命 令,执行对应的清理操作,然后在控制面板中启动Windows Update程序,重新安装对应的补丁包。
在备份文件中直接添加数据
如果您仅仅想向备份文件添加一些文件,例如添加病毒库,收藏夹信息等,可以使用上述将备份文件挂载到指定的文件夹中,然后进入该文件夹,会发现挂载的内容和原来的系统盘结构基本相同,进入对应的路径,直接将所需的文件复制进来,例如打开对应的杀软病毒库所在位置,将最新病毒库文件添加进来。也可以直接对其中的某些文件进行删除或者修改。最后将其保存并卸载即可。因为WIM文件其实就是一种特殊的压缩文件,利用DISM这把钥匙可以轻松将其打开。
查看和导出映像文件
对目标备份文件执行多个更新操作后,会导致其体积逐渐增大。其实,其中包含的有些映像其实已经过期失效,我们感兴趣的只是其中某个映像。将其从备份文件中提取出来,而将原来的备份文件删除,可以有效节省磁盘空格键。例如,在CMD窗口中执行“DISM /Export-Image /SourceImageFile:E:akspdata.wim /SourceIndex:2/DestinationImageFile:D:Gpan.wim”命 令,就 可 以从“spdata.wim”中将索引编号为2的映像提取出来,并将其保存为“Gpan.wim”文件。之后可以将原来的“Dfile.wim”删除。其中的“/Export-Image”参数将指定的映像的副本导出到其它文件。“/SourceImageFIle” 参数指定映像文件来源路径,“/SourceIndex”参数执行映像索引编号。
使用DISM命令,执行磁盘还原操作
备份操作的最终目的在于当原数据受损后,对其进行恢复操作,例如,当原G盘数据受损后,可以在CMD窗口执行“Dism /applyImage /ImageFile:E:akspdata.wim /index:2 /applyDir:G: /Verify” 命令,就可以从“spdata.wim”备份文件中提取索引编号为2的映像,来恢复G盘中的数据。其中的“/Apply-Image”参数表示应用一个映像,“/ApplyDir”参数表示指定目标路径,“Verify”参数表示执行校验操作,用来检测错误和文件重复,“/Index”参数用来指定映像索引信息。当然,如果对系统盘执行恢复操作的话,需要在另外一个系统(例如Windows 7)或者WinPE环境中进行,假设在D盘“sysbak”文件夹中存在一个针对C盘的备份文件“Cfile.wim”,可以执行命令“Dism /applyImage /ImageFile:D:sysbakCfile.wim /index:1/applyDir:C: /Verify”,就可以恢复C盘数据了。之后重启系统,就可以让Windows 8恢复如初了。
恢复磁盘时需要注意的问题
在这里要特别指出,对于安装了Windows 7/8双系统的电脑来说,最好配置有双硬盘结构,让两个系统分别独立活动在不同的硬盘年中。如果当前系统的启动引导文件位于需要备份的分区中,而两个系统都安装在同一个分区中,就会出现备份失败的情况。因为Windows 7内置的DISM版本较低,无法直接备份系统盘,需要将Windows 8的DISM工具移植过来。方法是先进入WinPE环境,之后在Windows 8系统盘中打开“WindowsSystem32”文件夹,将其中的“Dism”文件夹以及“Dism.exe”文件复制到Windows 7系统盘中对应位置。
如果在Windows 8中使用DISM命令备份Windows 7系统盘的话,需要暂时关闭Windows Defender程 序,防止其自动扫描备份文件,造成CPU占用率过高而事备份时间过长的问题。点击“Win+R”键,执行“gpedit.msc”程序,在组策略窗口左侧选择“本地计算机策略”→“计算机配置”→“管理模板”→“Windows组件”→“Windows Defender”项,在右侧窗口双击“关闭Windows Defender”项,选择“已启用”项,来关闭Windows Defender组件。
WinPE来执行DISM命令,需要面临两种情况,对于常规启动模式,可以使用老毛桃Win 8 PE 加强版来创建WinPE优盘,对于UEFI+GPT启动模式,则最好使用大白菜超级优盘制作工具,来创建支持UEFI的WinPE优盘。例如,运行大白菜超级优盘制作工具,在其主界面左侧选择“ISO制作”项,在右侧点击“自定义”按钮,设置镜像ISO文件存储路径,点击“一键制作ISO文件”按钮,得到所需的ISO文件,之后使用UltraISO等工具,将其写入优盘中,完成WinPE优盘的创建操作。
使用该优盘引导系统,进入WinPE环境,以管理员身份打开命令提示符窗口,执 行“Dism /Capture-Image /ImageFile:F:Win8sysWin8pan.wim /CaptureDir:C: /Name:Win8DataBAK0”命令,就可以将C盘备份到“F:Win8sys”文件夹中的名为“Win8pan.wim”的备份文件中。当以后系统盘内容发生变化后,可以执 行“Dism /append-image/imagefile: F:Win8sysWin8pan.wim /capturedir c: /name: Win8DataBAK1/description: "2015-01-01"”命令,将当前系统盘追加到“Win8pan.wim”的备份文件中,其索引编号为2。当以后系统出现问题时,可以根据需要恢复对应的映像数据。例如可以在WinPE环境中执行“format c:/q/y”命令,对系统盘执行快速格式化,之后执 行“Dism /Apply-image/imagefile: F:Win8sysWin8pan.wim /indes:2 /applydir:c:”命令,可以将该备份文件中编号为2的映像恢复到系统盘中,之后执行“wpeutil reboot”命令重启系统。
使用DISM命令,为Windows 8创建虚拟运行环境
当升级到Windows 8.1 Update 1后,系统允许将Windows 8.1备份为WIM文件,并可以使用该文件来启动系统。这样,即使原系统出现问题,也可以在开机时进入由该WIM文件创建的虚拟系统中,对原系统执行维护操作。不过执行上述操作,必须首先对WinPE进行升级,将其升级到Update1状态,之后才可以执行wIM问渐渐的捕捉动作。
准备好Windows 8.1安装文件和Update1升级包,使用UltraISO,WinMount等工具加载Windows 8.1安装文件,将其中的“Sources”文件夹中的“boot.wim”提取出来,放置到系统盘根目录下。将其中的“Boot”文件夹中的“Boot.sdi”文件提取到系统盘根目录下的“Boot”文件夹中。将WIndows 8.1的Update1补丁包准备好,其中包括 KB2919442、KB2919355、KB2932046、KB2937592、KB2938439等补丁文件。注意,对于采用EFI启动的电脑,需要将“Boot.sdi”文件复制到系统盘中的“EFIMicrosoftoot”文件夹中。但是由于默认的EFI分区无法正常访问,可以借助于DiskGenius等工具,实现文件复制操作。
运行DISM管理器,在其主界面中点击“挂载映像”按钮,按照提示挂载上述“Boot.wim”文件,在映像信息窗口中选择“Microsoft WindowsSetup(X86)” 项,在“挂载路径”栏中选择目标路径,点击确定按钮,将其挂载到指定路径中。之后返回主界面,选中当前挂载的映像,点击“开始”,在弹出窗口中的“Windows更新”面板中依次添加Update 1各补丁文件。点击“安装更新”按钮,执行补丁包更新操作。返回DISM管理器主界面,点击“保存映像”,将“Boot.wim”卸载并保存,就得到了包含升级信息的WinPE文件。
运行BOOTICE程序,在“BCD编辑”面板中点击“智能编辑模式”按钮,在弹出窗口左侧点击按钮菜单“添加”→“新建WIM启动项”项,在右侧窗口中的“设备类型”中选择“RamDisk”项,在“启动磁盘”列表中选择当前硬盘,在“启动分区”中选择系统盘分区,在“设备文件”栏中输入“oot.wim”。在“SDI”文件栏中输入“ootoot.sdi”,如 果 采用EFI模式启动,则设置为“EFIMicrosoftootoot.sdi”。在“菜单标题”栏中输入“Windows 8 WinPE 环境”,在“启动文件”栏中输入“Windowssystem32ootwinload.exe”。 如 果采用EFI启动模式,则输入“Windowssystem32ootwinload.efi”。之后分别点击“保存当前系统设置”和“保存全局设置”按钮。为便于使用WIM启动系统,需要准备一个分区用来存储指针文件,这里使用最后一个分区L盘来存储相关数据。DISM管理器的下 载 地 址 为 :http://www.xiazaiba.com/html/24749.html。
重新启动系统,在启动菜单中选择“Windows 8 WinPE环境”项,进入WinPE环境。在CMD窗口中执行“Dism /Capture-Image /WIMBoot/ImageFile:E:wimboot.wim /CaptureDir:C: /Name:”WimBoot 81”” 命令,将系统盘捕捉为E盘中的“WIMBoot.wim”文件中。执行“Dism /Apply-Image /ImageFile:E:Winboot.wim/ApplyDir :L: /Index:1 /WIMBoot”命令,将上述备份文件内容释放到L盘。执行“bcdboot L:windows /l zh-cn”命令,将指针文件所在分区配置到启动菜单中。
之后重启系统,在启动菜单中选择“Windows 8.1(在分区XX)”项,就可以进入WIM虚拟系统中了。因为不同的分区其编号不同,这里的XX表述具体的编号。在该虚拟系统中,所有的内容和真实的系统完全相同,所不同的是所有的操作全部封闭在该WIM文件中。而指针分区会显示“WIM引导”标记,WIM文件所在分区会显示“支持WIM”标记。当然,您也可以在真实系统损坏时,在启动菜单中选择“Windows 8 WinPE 环境”项,在WinPE环境中打开CMD窗口,执行“Dism.exe /Apply-Image /ImageFile:E::winboot.wim/index:1 /ApplyDir:C:”命令,来完整恢复系统盘数据,让Windows 8 恢复到正常状态。
使用DISM命令,为WinPE添加USB3.0驱动
现在很多电脑都是配置了USB3.0端口,利用USB 3.0优盘等设备,可以大大提高数据传输速度。但是,在常用的各版本WinPE中,并没有提供对USB 3.0的支持。当进入WinPE环境后,USB 3.0设备的高速数据传输功能无法发挥。其实,完全可以利用DISM命令,将USB 3.0驱动集成到WinPE环境中。先运行驱动人生,驱动精灵等工具,下载所需的USB 3.0驱动文件。本例中假设将驱动程序存放到“d:usbdrv”文件夹中,对应的安装文件为“usb30..inf”。
这里为了保证兼容性,使用系统自带的WinPE包。使用WinRAR等工具打开系统安装镜像文件,将其中的“Sources”文件夹中的“boot.wim”文件提取出来。运行Gimagex这款小工具,在其主界面中的“制作映像”面板中的“装载到”栏中点击浏览按钮,选择加载目录,该目录必须事先建好,假设为“d:winpe”。在“选择映像”栏中点击浏览按钮,选择上述“boot.wim”文件。在“要装载的映像卷”栏中输入“2”。勾选“读取和写入”项,点击“装载”按钮,将“boot.wim”文件加载到“d:winpe”文件夹中。之后以管理员身份启动命令提示符窗口,执行“Dism/image:d:winpe /adddriver /drive: d:usbdrvusb30.inf”命令,当出现“驱动程序包已成功安装”的提示后,返回Gimagex主界面,勾选“提交更改”项,选择已经加载的映像文件并点击“卸载”按钮,将USB 3.0的驱动添加到WinPE模块中。之后使用UltraISO等工具,将该“Boot.wim”文件写入到优盘中,以后就可以使用该优盘引导系统进入WinPE环境,系统就会自动识别USB3.0设备了,
打造WinPE 5.1维护盘,维护系统更省心
对 于Windows 8.1系统来说,利用其提供的新版WinPE 系统,可以在系统出现问题后,对系统进行更加出色的维护操作。但是,如果您想在其中使用WIMBoot方式安装系统,或者离线部署系统,维护局域网其它设备等操作,是无法实现的。但是,在WinPE 5.1系统中,可以完美支持各种新功能,让您可以更加得心应手的维护系统。
首先打开网址“http://www.microsoft.com/zh-cn/download/details.aspx?id=39982”,下 载 Win dows ADK(即 Windows评估和部署工具包)组件。运行下载的Windows ADK在线安装工具,选择“将Windows评估和部署工具包 for Windows 8.1安装到计算机”项,点击浏览按钮,设置安装路径。在下一步窗口中勾选“部署工具”和“Windows预安装环境”项,点击“安装”按钮,执行安装操作。
要想创建WinPE 5.1系统,还需要在Windows 8.1的基础上安装对应的补丁包,包括 KB2919442,KB2919355,KB2932046,KB2937529,KB2938439,KB2939087等。 首 先 打 开“http://www.microsoft.com/zh-cn/download/details.aspx?id=42135”页 面,下 载安装KB2919442。打开网址“http://www.microsoft.com/zh-cn/download/details.aspx?id=42335”,可以下载其它的补丁包。当然,要针对32或者64位版本,下载对应的补丁包。
将下载的补丁包存储在“g:update”文件夹中,以管理员身份运行“部署和映像工具环境”程序,进入其自带的命令行窗口。执行“copype x86 c:winpe_x86”命令,将对应文件复制到“c:winpe_x86”文件夹中。注意,如果您使用的是64位系统,需要将命令行中的“x86”更换为“amd64”(以下命令与之相同)。执 行“Dism /mount-image/imagefile: " c:winpe_x86mediasourcesoot.wim" /index:1 /mountdir:"c:winpe_x86mount"” 命令,将“boot.wim”文件加载到“c:winpe_x86mount”目录中。
执 行“Dism /Add-Package /PackagePath:g:updateWindows8.1-KB2919442-x64.msu /image:c:winpe_x86mount/LogPath:AddPackage.log”命令,将KB2919442补丁包添加到WinPE映像中。注意,其 中 的“Windows8.1-KB2919442-x64.msu” 为 补丁包名称,您可以根据实际情况更改。执行“Dism /Add-Package /PackagePath:g:updateWindows8.1-KB2919355-x64.msu /image:c:winpe_x86mount/LogPath:AddPackage.l o g”,“ D i s m /A d d-Package /PackagePath:g:updateWindows8.1-KB2932064-x64.msu /image:c:winpe_x86mount/LogPath:AddPackage.log”命令,将KB2919355和KB2932064补丁包集成到WinPE加载路径中。
注意,创建Win PE 5.1系统,需要这三个补丁包就可以了。
之 后 执 行“Dism /image:c:winpe_x86mount /cleanup-image /startcomponentcleanup /resetbase” 命 令,对 当 前WinPE环境进行优化操作。执行“Dism /unmount-image/mountdir: " c:winpe_x86mount" /commit”命令,卸载加载的WinPE映像。
执 行“Dism /exportimage /sourceimagefile:c:winpe_x86mediasourcesoot.wim /sourceindex:1/destinationimagefile:c:winpe_x86mediasources ewboot.wim”命令,对原映像进行压缩处理,创建新的映像文件。之后将“c:winpe_x86mediasources”中的“boot.wim”文件删除,将其中的“newboot.wim”更名为“boot.wim”。
之 后 执 行“makewinpe media /iso c:winpe_x86 c:winpe_x86winpe_x86.iso”命令,将生成的映像文件刻录为ISO镜像文件。连接优盘后,运行UltraISO这款工具,在其主窗口中点击菜单“文件”→“打开”项,选择上述ISO镜像文件,点击菜单“启动”→“写入硬盘映像”项,在弹出窗口中的“写入方式”列表中选择“USBHDD+”项,选择目标优盘后,点击“写入”按钮,将该镜像文件写入到优盘中。以后就可以利用该优盘引导系统进入WinPE5.1环境中。
当然,也可以将其刻录到光盘中,点击菜单“工具”→“刻录光盘映像”项,在弹出窗口中的“写入速度”列表中选择合适的速度,例如16X等,如果刻录速度过快,可能会造成有些数据无法写入的问题。选择好刻录设备后,点击“刻录”按钮,就可以得到WinPE 5.1版的启动光盘。