【分享】WIMBoot辅助工具 For Windows 7/8
发表于把WINDOWS 8的WIMBOOT功能应用到WINDOWS 7上,目前使用一切正常.
使用WIMBOOT可以节省大量的磁盘空间,特别是多系统的情况下更是明显.另外还具有WIM
文件的特性,比如增量备份,如果每隔一段时间就使用增量更新一下WIM那以后就可以随时恢复到每个更新点的状态.
正常安装的话一个64位的系统就差不多需要40GB了,我现在两个系统最多也才40GB,是不是很心动呢!
首先来秀一下最终的文件列表,很简洁.两个系统最多才占用40GB的空间.我使用用一个60G的固态硬盘.启动速度飞快.7秒左右进桌面
另外这两个系统还是打完了所有补丁再安装了所有需要的常用软件的,还包括了好几个G的VS2012,因为WIM文件相同的文件只会占用一个空间,所以我两个系统的所有的软件都装C盘.
注: 这个40G
是指最多会占用空间,实际上只使用了15G
左右,考虑到以后要安装软件还有更新什么的,64位保留15G,32位保留10G.
注:1. 以下只是我的系统情况演示,只供参考
2. 2015-05-01 感觉差分VHD是不必要的,以后更新的话只要更新主VHD就行了。并且由于我的内存有8G所以重新制作了一下,增加了一个5G的内存系统(win7.ram)。
有三个系统,并且以后可以随时增加
1. win7 x86 wimboot ==>x86\win7.vhd
2. win7 x86 wimboot(内存模式) ==>x86\win7.ram
3. win7 x64 wimboot ==>x64\win7.vhd
BOOTMGR ==>启动文件
wimboot.wim ==>和wimboot目录下的一样,只是为了方便更新系统
├─boot ==>启动文件目录
│ │ memtest.exe
│ │
│ ├─Fonts ==>启动界面字体
│ │ chs_boot.ttf
│ │ cht_boot.ttf
│ │ jpn_boot.ttf
│ │ kor_boot.ttf
│ │ wgl4_boot.ttf
│ │
│ │
│ └─zh-CN
│ bootmgr.exe.mui
│ memtest.exe.mui
│
└─wimboot ==>系统文件夹
│ wimboot.wim ==>系统WIM WINDOWS 7 x86/x64二合一镜像 占用14G空间
│
├─x64 ==>64位系统
│ win7.vhd ==>64位系统主15G VHD文件 ==>使用非固实模式只占用400MB左右
│
└─x86 ==>32位系统
Win7.vhd ==>32位系统主10G VHD文件 ==>使用非固实模式只占用400MB左右
Win7.ram ==>32位系统RAM模式镜像40MB(使用grub4dos map --mem --top来启动)
再来一张截图对比(整个系统有16G实际只占用了703MB的空间)
看了上面的简单介绍是不是很心动,也想自己改造一个呢?别急慢慢来.
先来介绍一下WIMBOOT
WIMBoot是Windows image file boot的简称,是Windows 8.1 的一项新型启动方式。这种启动方式让电脑从一个高度压缩的文件启动,大大减少了磁盘空间的占有,还具有快速升级、快速恢复出厂设置等优点.
- Windows 映像文件启动 (WIMBoot) 使你可以设置电脑以便它从压缩的 Windows 映像文件 (WIM file) 直接运行。
- WIMBoot 可以大幅减少 Windows 文件使用的空间量。这有助于你为用户提供更多可用空间,并且帮助你在带有较小驱动器的电脑上部署 Windows。
让Windows 7支持WIMBOOT
方式启动
WINDOWS 7 使用WIMBOOT的方法在网上论坛上有很多介绍,不过太部份操作起来都比较复杂,经过我的改造,现在简化了一些步骤,现在不需要任何输入,一键就可以实现了。
功能:
- 可以备份或恢复系统。
- 支持直接增量更新.
- 支持WINDOWS 7及以上系统包括win10(未完全测试)
- 可以作为系统备份工具来使用。
- 自动识别WIMBoot系统WIM文件。
- 自己去发现.
提示:
- 增量更新功能需要格式化目标系统磁盘,所以如果WIM文件和系统同盘无法使用该功能。
- 增量更新功能需要使用SYSTEM权限否则应用的时候可能会出现错误.(最新版应该解决了这个问题,不需要SYSTEM权限了)
- 更新或捕获镜像名字格式为
Win_系统版本_日期时间
,例子: Win_6.1_201505101200 - 本程序只在WIN7系统测试通过,如果你有WIN8的系统也可以测试一下估计应该也是可以使用的。
更新记录
2015-09-07 v2.5版
1. BUG修正.
2. 支持自定义实体化文件列表(同目录下的WimbootExtract.ini)
2015-07-27 v2.4版
1. BUG修正.
2015-07-17 v2.3版
1. 驱动更新到10240版,服务改为wofadk.
2. 修正局域网打印机安装问题和浏览器DLL错误问题(感谢无论[2012liujingxion](http://bbs.wuyou.net/forum.php?mod=viewthread&tid=367490))
3. BUG修正.
2015-06-29 v2.2版
1. 修正增量更新的一个BUG。
2. 自适合DPI
2015-06-28 v2.1版
1. BUG修正.
2. Add English Language
2015-06-18 v2.0版
1. BUG修正(长路径名恢复失败).
2. 界面调整,改成了使用进度条(之前是直接显示WIMLIB执行的所有信息)
3. 添加压缩率选项.
2015-06-17 v1.9版
1. BUG修正.
2. 盘符重置功能修改,增加自动判断.
2015-06-16 v1.8版
1. 修正一个BUG.
2. 驱动更新,解决NTFS软硬链接的问题.(已经有装过的,可以删除原系统drivers目录下的wof.sys文件,然后再使用增量更新或原地转换功能即可更新为最新版驱动)
2015-05-29 v1.7版
1. 支持修改WIM信息(wim info)(新版的E按钮)
2. 增加更多可选项,具体看后面的最新版截图
3. 修正上个版本在PE下多次执行出错的问题.
2015-05-22 v1.6版
1. 支持Windows 10
2. 增量备份支持单独存放(不合并)
3. 捕获或恢复时可以选择不使用WIMBoot.
4. 界面调整程序优化并增加一些操作提示信息。
5. 新的wimlib-imagex程序,支持显示中文镜像名称。
2015-05-18 v1.5版
1. 新增仅捕获选项
2. 新版本对于部份操作不再强制要求格式化。
3. 对于已经是WIMBOOT的系统,现在可以正确识别该系统所使用的WIM文件,并自动选择该WIM文件
4. BUG修正,界面调整。
2015-05-14 v1.4版
1. 再次修改NTFS分区识别错误的问题
2. 其它BUG修正
3. 支持拖放操作,基本参数框内可以拖放WIM文件或WimBootCompress.ini文件
4. 支持使用命令行修改默认的WIM文件存放目录, 格式如下:
WIMBoot.exe -WIMPATH:目录名
例子:使用WIMBOOT目录
WIMBoot.exe -WIMPATH:\WIMBOOT
2015-05-12 v1.3版
1. 修正部份PE检测Wof驱动失败的问题。
2. WIMBoot.exe同目录下有存在WimBootCompress.ini捕获时会自动使用该配置。
3. 几个小BUG修正,继续完善.
2015-05-11 v1.2版
1. 禁用精简捕获模式,只使用完整捕获模式。
2. 选择目标系统会自动判断是否已经是WIMBoot的,是的话会自动查找对应的WIM文件(目前不是很准确,先将就着).
2015-05-10 更新: v1.1 使用我自己修改编译的WIMLIB程序,现在终于实现一步到位的更新操作,不再需要SYSTEM权限,修复了上个版本的两个小BUG。
2015-05-09 更新: 现在可以直接在PE下一步到位进行转换或更新操作(更新操作需要SYSTEM权限或WIN8PE),并且支持WES7 64位
2015-04-21 第一版,使用了两个批处理脚本来实现,需要两步来实现。
操作方法
- 从以下地址下载我修改优化的WIMBOOT辅助工具 WIMBOOT.7Z
链接: http://pan.baidu.com/s/1mgIbMyc 密码: 83qe - 启动进入PE,如果原系统是VHD的,需先挂载VHD。
- 启动wimboot.exe选择系统盘和WIM文件存放磁盘。根据提示操作。
部份错误参考和问题解答
使用WIMBoot之后启动动画变成了滚动条,这个可以使用最新版本,选中启动动画参数即可恢复原来的启动动画.
使用WIMBoot之后系统盘将会不支持hardlink特性,也就是所有系统盘的软硬链接目录都不能正常使用.这个目前还没有办法解决.
注:最新版本已经更新了驱动,应该解决了该问题
Error reading data (status=c000046e): %2 0x%1
[ERROR] "E:\MSOCache\All Users\{90150000-0011-0000-1000-0000000FF1CE}-C\OWOW32WW.cab": Error reading data (status=c000046e): %2 0x%1 ERROR: Exiting with error code 50: Could not read data from a file.
出现上面错误的原因是由于在已经是WIMBOOT启动的目标系统上用了原地转换功能,这是不受支持的。
解决方法:在PE中安装WOF驱动,或使用WIN8PE(一般会有带WOF驱动),再使用原地转换功能。
找到你之前的WIMBOOT.WIM复制一份到System Volume Information目录(你想存放WIM文件的磁盘分区下).再启动WIMBoot.exe,程序会自动检测到这个新的WIMBOOT.WIM并且可以使用增量更新功能,如果没有自动检测到,可以手工选择一下你的WIM文件存放磁盘。
最新V1.2会已经实现自动识别目标分区并且自动查找对应的WIM文件
Couldn’t set WIMBoot pointer data
[WARNING] Retrying after 100ms... [WARNING] FSCTL_SET_EXTERNAL_BACKING failed (err=1314); data was 48 bytes: 0100000001000000010000000000000001000000000000008ccd4ce7b554c8f11c8a5fd5231de42e d4085f6b00000000 [WARNING] Too many retries; returning failure [ERROR] "f:\test\WIMBOOT\Readme.TXT": Couldn't set WIMBoot pointer data (err=131 4): ERROR: Exiting with error code 75: Failed to set WIMBoot pointer data.
注: v1.1以上版本出现以上问题,请选中格式化功能,在应用的时候格式化目标系统分区就可以解决该问题。
出现类似以上的错误提示说明需要SYSTEM权限,目前可以使用以下两种方法解决。
使用NSudo或psexec软件来获取SYSTEM权限,用SYSTEM权限运行WIMBOOT.EXE
或
直接重启系统进入PE运行WIMBOOT.EXE使用系统恢复功能进行恢复最新的镜像就行了。
以上是旧版本才会出现的问题,如果使用V1.1版本也有这些问题请留言回复
为什么使用该工具应用之后很多文件无法读取?
这是正常的,因为使用WIMBoot大部份的系统文件其实只是一个指向WIM文件的指针,需要安装WOF驱动才可以正常访问,另外程序在应用之前也会禁用该分区的Wof所以即使是已经安装了wof驱动应用之后也是不能直接访问的,重启系统只要有WOF驱动就可以正常访问。
程序是如何获取到WIMBoot系统对应的WIM文件的?
如果在WIMBoot启动的,那在系统盘的System Volume Information目录下有一个文件WimOverlay.dat,这个文件记录了对应WIM文件的位置信息,如果目标WIM文件在MBR磁盘上,则记录了分区偏移和磁盘签名信息,若是GPT磁盘记则记录分区GUID和磁盘GUID
我编写了一个小程序(自己提取资源 EXEDATA#1023),你可以通过它来快速读取这些信息,例子:
fwim c:\System Volume Information\WimOverlay.dat 168 32768 661951F1
第一个数字168是WIM文件路径在文件中的位置,可以通过PECMD的GETF来读取完整路径信息
GETF# x:\System Volume Information\WimOverlay.dat,168#*,SYSWIM
然后再通过分区偏移和磁盘签名等信息就可以获取到对应的盘符,以下是相关代码
_SUB GetALLPartInfo PART list disk,&&全部磁盘 forx * %全部磁盘%,&磁盘, { PART list disk %磁盘%,&&磁盘信息 MSTR * &磁盘签名=<8>&&磁盘信息 PART list part %磁盘%,&&全部分区 forx * %全部分区%,&分区, { IFEX #%&分区%<0,EXIT CONTINUE PART -hextp -phy# -fill list part %磁盘%#%分区%,&&分区信息 SED &&GPT=?,GPT,,%&&分区信息% IFEX #%GPT%>0,MSTR * &&偏移,&&盘符,&&DN=<-3><-1><-2>&&分区信息 ! MSTR * &&偏移,&&盘符,&&DN=<4><-1><-2>&&分区信息 SET. 所有分区=%所有分区%%盘符% %偏移% %&磁盘签名% \Device\Harddisk%磁盘%\Partition%&&DN%\n } } _END SET-def 所有分区= CALL GetALLPartInfo EXEC* &&N=!fwim "c:\System Volume Information\WimOverlay.dat" CALL GetWoCf c: %&&N% _SUB GetWoCf IFEX #%2<0,EXIT _SUB ENVI &P= FORX *NL &所有分区,&T, { SED &&a=?,%3 %4,,%T% IFEX #%&&a%>0, { LSTR &P=2,%T% FIND $%&P%=*, { //对应的分区未分配盘符,临时分配一个@: SUBJ &- @: MSTR$ * &p=<-1>T SUBJ & @:,%&P% ENVI &P=@: } EXIT FORX } } GETF# %1\System Volume Information\WimOverlay.dat,%2#*,SYSWIM ENVI SYSWIM=%&p%%SYSWIM% _END
相关截图
增量更新功能
系统恢复功能
首次使用的情况
界面和相关介绍.
最新版本界面截图
附我上面演示系统的制作方法(仅供参考)
需要准备的文件 下载: http://pan.baidu.com/s/1mgIbMyc 密码: 83qe
- WIMBOOT.WIM (上面有提供)
这个从三蛋win7提取修改的,包含了32位和64位两个版本. - WinNTSetup (上面有提供)
- 一个顺手的PE (自备)
- WIMBOOT.WIM (上面有提供)
先创建wimboot目录列表,并复制wimboot.wim到wimboot目录下和根目录下(备用).
- 进入PE用WinNTSetup分别安装两个系统到VHD中
- 在WinNTSetup的标题栏上右键先修改WIM API为wimlib.
- 注意要勾选 Windows 映像文件启动(WIMBoot).
- 使用WinNTSetup的安装到VHD功能分别安装两个系统到
x64\win7.vhd
和x86\win7.vhd
并安装.
- 分别安装x86和x64的系统要安装的驱动和软件.
- 现在可以重新更新一下WIMBOOT文件.
- 进入x86系统挂载x64的VHD文件.使用以下命令捕获x64的新系统(y:是x64系统的分区号,#是wimboot系统分区号).
wimlib-imagex append y:\ #:\wimboot.wim x64new —wimboot - 进入x64系统挂载x86的VHD文件,捕获x86的新系统同上
wimlib-imagex append y:\ #:\wimboot.wim x86new —wimboot
- 进入x86系统挂载x64的VHD文件.使用以下命令捕获x64的新系统(y:是x64系统的分区号,#是wimboot系统分区号).
- 进入PE把根目录下的wimboot.wim覆盖到wimboot目录下,用WinNTSetup把系统用wimboot方式安装到x86\win7.vhd和x64\win7.vhd中.
- 搞定收工.
一些需要注意的事项:
- 必须使用NTFS文件系统.
- 为了方便更新系统WIMBOOT.WIM需要有两个,像我就是根目录一个(备用),WIMBOOT目录一个(主要).
- 更新系统就是使用一个系统挂载另一个系统的VHD文件用wimlib-imagex append进行更新,这个注意要更新到备用的WIMBOOT.WIM中.
- 重新安装必须进入PE先把备用的WIMBOOT.WIM复制到WIMBOOT目录下覆盖,然后重新用新的镜像进行安装.
- 个人比较懒,就不上图了,有兴趣看得懂的可以自己搞.有不明白的地方可以留言,我会抽时间回复.
文件名称: wimboot.wim
文件大小: 3.71 GB (3,979,257,171 字节)
修改时间: 2015年04月30日,23:47:38
MD5: 1A98B453AB3F516FAC5C084D85028F42
SHA1: DD3701475BF7F4C478A9A0A7AF485157EFB48BE7