2011IVAIO 发表于 2011-5-19 10:03:53

终于做好了每次重启后都恢复初始状态的VHD,虽然比较简单,但很好用

在无忧混了1个礼拜,看了以下两个帖子
1、winxp、win7双VHD系统的安装、启动、快速还原、更改启动项密码方法简介
2、winxp、win7双VHD系统的重大缺陷!请qj_tzy老师进来看看!
觉得太复杂了,不是我等菜鸟能搞定的,本着越简单越好的原则,换了个思路终于解决了每次重启后都恢复初始状态的VHD,共享下,大家拍砖啊。
思路如下:
1、备好一个装好所有软件的VHD,再做一个CHILD-VHD,然后就以这个77K的VHD做文章了。
2、在WINPE环境中,根据这个77K的CHILD-VHD母本,复制为一个77K的CHILD1-VHD和77K的CHILD2-VHD。
3、然后启动VHD,在其中的启动加入start.vbs,静默运行start.bat。
4、在BCD中加入VHD、CHILD1-VHD和VHILD2-VHD三个启动项(可以用bcdedit加入,也可以用图形化工具)。
5、每次重启后都会恢复到CHILD-VHD状态,相当于就是一个影子系统了。
6、如果需要在VHD中安装软件或者更新用户配置,只要在启动时选择用VHD启动或者在CHILD1-VHD和CHILD2-VHD中系统属性-高级-“启动和故障恢复”中将VHD设置为默认操作系统就可以了,安装完后重启又进入了CHILD1-VHD中,然后每次重启后交替进入CHILD1-VHD和CHILD2-VHD中。
注意事项:
1、更新完VHD后,CHILD-VHD、CHILD1-VHD和CHILD2-VHD不需重做就可以启动VHD了,很方便。
2、VHD、CHILD1-VHD和CHILD2-VHD的启动ID如{03f4d39c-812f-11e0-9734-92a053c5fccb}需要根据自己的机器用bcdedit查看后进行修改,否则运行start.vbs后,系统无法启动。
附件:
1、start.vbs
Set ws = CreateObject("Wscript.Shell")
ws.run "cmd /c start.bat",vbhide
2、start.bat
del E:\WIN7_VHD\WIN7_VHD_CHILD1.VHD
del E:\WIN7_VHD\WIN7_VHD_CHILD2.VHD
if exist E:\WIN7_VHD\WIN7_VHD_CHILD1.VHD goto 1
goto 2
:1
copy E:\WIN7_VHD\WIN7_VHD_CHILD_BAK.VHD E:\WIN7_VHD\WIN7_VHD_CHILD2.VHD
bcdedit /default {03f4d39c-812f-11e0-9734-92a053c5fccb}(注:此ID为CHILD2的启动ID,需用bcdedit等查看后进行修改,括号中内容不包含在批处理命令中。)
goto end
:2
copy E:\WIN7_VHD\WIN7_VHD_CHILD_BAK.VHD E:\WIN7_VHD\WIN7_VHD_CHILD1.VHD
bcdedit /default {fc29435a-812e-11e0-9734-92a053c5fccb}(注:此ID为CHILD1的启动ID,需用bcdedit等查看后进行修改,括号中内容不包含在批处理命令中。)
if exist E:\WIN7_VHD\WIN7_VHD_CHILD2.VHD goto end
copy E:\WIN7_VHD\WIN7_VHD_CHILD_BAK.VHD E:\WIN7_VHD\WIN7_VHD_CHILD2.VHD
:end

[ 本帖最后由 2011IVAIO 于 2011-5-19 10:35 编辑 ]

yjq635 发表于 2011-5-19 11:37:26

ewf在VHDxp下可以实现这个功能,但不能保存

2011IVAIO 发表于 2011-5-19 12:27:30

楼上有没有相关介绍的帖子?
VHD不是原生支持xp,需要其他第三方软件吧?
好像ewf是写内存的,不知道能不能释放,不能释放就不能支持长时间挂机了,内存总有爆的时候。

victor888 发表于 2011-5-19 19:14:36

为LZ的思路击掌叫好!
我看好半天才搞明白,构思很巧妙!

这就做应该也可以:GRLDR启动OMNIFS镜像,删除使用过的VHD-CHILD,从其备份还原,再次在DOS下启动GRLDR,启动CHENALL的BOOTNT工具盘,直接启动VHD文件即可。

这样不需要使用硬盘上的启动文件,只需要启动GRLDR以及OMNIFS和BOOTNT两个软盘镜像。

2011IVAIO 发表于 2011-5-19 23:00:57

我能达到的结果:不需任何人工参与,重启后就恢复到初始状态。
1、如果使用“winxp、win7双VHD系统的安装、启动、快速还原、更改启动项密码方法简介”方法,仍需要在启动时选择快速还原,达不到不需人工参与的目的。
2、如果使用“victor888”方法,仍需人工在启动时选择OMNIFS镜像和BOOTNT工具盘两次,其实更复杂,虽然最终的结果是一样的。

victor888 发表于 2011-5-20 08:07:32

我说的方法是不需要人工参与的,启动就执行文件替换工作,之后自动启动新VHD。
当然,如果想更新父VHD,则需要在GRLDR中加入此启动选项。

2011dingfei 发表于 2011-5-20 08:23:40

很好,不过我想说的是,grub4dos已经足够强大,不需要用任何镜像
直接使用grub4dos脚本执行就行了,grub4dos可以完成所有的操作。

find --set-root --ignore-floppies --ignore-cd /Win7_CHILD_BAK.vhd
dd if=()/Win7_CHILD_BAK.vhd of=()/Win7_CHILD.vhd
chainloader /bootmgr

使用Win7_CHILD_BAK.vhd替换Win7_CHILD.vhd,再引导bootmgr启动vhd,就这么简单。

2011IVAIO 发表于 2011-5-20 09:24:43

关于grub4dos的dd命令,“grub4dos初级教程_CHM图文版_090411.CHM”有下面这样的描述:
dd 目前不支持创建文件,也不支持改变文件的长度,所以,不存在的文件是不能写入的。
把一个大的文件写入一个小的文件,这个小的文件不会变长。多余的部分扔掉了。
把一个小的文件写入一个大的文件,这个大的文件不会变短。未写的部分保持不变。

根据这样原理,每次快速恢复系统并再次运行VHD系统后,这个winxp_child.vhd文件的体积只会不断的变大。
如果用grub4dos的话,Win7_CHILD.VHD会不断加大。
见winxp、win7双VHD系统的重大缺陷!

qj_tzy 发表于 2011-5-20 10:48:56

回复 #8 2011IVAIO 的帖子

这其实已不是一个问题,您可能未仔细看“winxp、win7双VHD系统的重大缺陷”中网友的回复。

chenall 发表于 2011-5-20 12:50:43

我自己一直在使用GRUB4DOS配合NTBOOT来启动VHD系统。

想要达到楼主的效果用GRUB4DOS超简单的。

一个例子菜单:
title 自动还原
dd if=(hd0,0)/vhd/WIN7.gz of=(hd0,0)/vhd/TEST.VHD
%NTBOOT% nt6=(hd0,0)/vhd/TEST.VHD
boot

不使用NTBOOT启动的方法,需要硬盘上有引导文件
dd if=(hd0,0)/vhd/WIN7.gz of=(hd0,0)/vhd/TEST.VHD
chainloader (hd0,0)/bootmgr


我更喜欢使用NTBOOT来启动,这样硬盘上不需要有引导文件,并且可以随意引导任意支持的VHD文件不需要写BCD
页: [1] 2 3
查看完整版本: 终于做好了每次重启后都恢复初始状态的VHD,虽然比较简单,但很好用