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

2011IVAIO 发表于 2011-5-20 13:04:40

因为DD无法删除文件,不停的用DD来还原会不会存在目标文件写满的情况?导致目标文件WIN7.GZ不断加大?我最想知道的是这个。。。

2011IVAIO 发表于 2011-5-20 13:07:43

如果DD无法删除,那么用grup4dos就没法完美解决重启后自动还原系统的问题。完美的解决办法要么就是如版主说的加载一DOS镜像删除目标文件后用源文件覆盖再重新加载VHD,要么就是像我这样在进入系统后自动删除替换。

2011IVAIO 发表于 2011-5-20 13:08:46

不过我属于菜鸟,还不会做这个DOS镜像,也不知道如何用grldr再加载VHD,所以想出这个弯弯绕的办法:)

freefree 发表于 2011-5-20 15:44:55

直接装个影子系统进去?

2011IVAIO 发表于 2011-5-20 16:30:39

一是目前影子系统收费,二影子系统非系统原生,经常报错,说硬件缓存失败,原生支持多好?

2011pilothi 发表于 2011-5-29 08:51:56

菜乌不懂start.bat的内容,有人能解释一下吗

2011xys 发表于 2011-5-30 15:25:39

这个影子系统好且最小、占用资源也最小:ShadowDefender中文已注册版
我一直用这个,实机、VHD都可以。
但是用在VHD,重启后一切可恢复原状态,不过VHD文件的大小却会不断增大,没影响的。

wanghh 发表于 2011-10-30 17:35:21

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

hbby 发表于 2011-10-30 19:09:49

回复 #1 2011IVAIO 的帖子

给你个更简单的每次重启都恢复初始状态VHD的方法吧

利用的VBOOT的immutable参数即可实现开机时自动还原VHD系统,修改Vboot启动菜单:

menuentry "启动 WinXP VHD 初始状态 保护模式" {
vboot harddisk=(hd0,1)/Winxp/Winxp.vhd immutable
}

caoshilian 发表于 2011-11-11 23:23:40

Press 'i' to boot the selected OS as immutable session.

小豪diao 发表于 2012-7-28 17:20:58

觉得最有效的是载入dos,删除子VHD,再拷贝bak的vhd。启动

而楼主的那个批处理其实有待改善。
09年的时候就有帖子做启动还原的VHD,后来有好几次的批处理优化。
不过在启动vhd前,就删除新建子vhd,是最完美了

szfhx 发表于 2012-7-31 11:39:06

支持                      顶

szfhx 发表于 2012-8-1 19:33:51

支持                      顶

2012networkax 发表于 2014-10-7 07:01:17

下载试试 谢谢

neatGz 发表于 2014-10-18 14:05:19

学习了,谢谢楼主分享这个方法。
:curse:

wangjf 发表于 2014-12-2 23:17:13

思路巧妙,需要好好消化。
页: [1]
查看完整版本: 终于做好了每次重启后都恢复初始状态的VHD,虽然比较简单,但很好用