无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 7430|回复: 19
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
1#
发表于 2011-10-24 18:38:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
再次谢谢2011IVAIO大侠

原文http://bbs.wuyou.net/forum.php?m ... ;tid=193806&extra=page%3D5

对于原文,提供的方法,我感觉有两点不完美

第一必须要关闭uac,如果不关闭UAC,是没办法更改启动项的,所以会失败,但是有个折中办法,把vbs添加到任务计划中,勾选最高权限运行,也可以解决。

第二,如果在系统中突然断电等等,会导致vhd文件不会自动缩小,比如,建立的15g

动态扩展盘, vhd1.vhd 正常关机后比如用掉500mb占用就是500mb,突然断电呢,他会保持15g的大小,并且启动项也更改为另一个vhd2.vhd,如果这也就是说,硬盘最少要留出30g的空间。

后来我想,如果关机时候再更改启动项不就可以完美解决啦,突然断电也不怕,因为这时候非正常关机,启动项并没有被更改为vhd2.vhd还是vhd1.vhd。

然后就用到关机脚本,运行输入gpedit.msc然后展开“计算机配置”--windows设置--脚本启动关机,双击关机,在里面添加bat文件。这样在不关闭uac情况下也可以正常更改启动项,并且还原。

不过这有个缺点,就是遇到非正常关机不能正常还原。对于硬盘空间剩余比较多可以按  2011IVAIO大侠方法去做,如果空间小,像我这样的,那只有用关机脚本了。

原文:

在无忧混了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
2#
发表于 2011-10-24 19:52:41 | 只看该作者
太复杂了吧!
回复

使用道具 举报

3#
发表于 2011-10-24 20:51:18 | 只看该作者
不要用删除命令
删除一个10多g的文件很费时间
直接用几十k的备份拷贝覆盖就可以了
回复

使用道具 举报

4#
 楼主| 发表于 2011-10-24 22:10:18 | 只看该作者
删除只是判断现在进入的是哪个vhd,正在使用的vhd肯定无法删除,然后判断出来再拷贝更名。
删除10多g这个情况很少,只发生在断电情况下,正常使用vhd肯定是无法达到10多g的一般2g已经很大了。
回复

使用道具 举报

5#
 楼主| 发表于 2011-10-24 22:11:35 | 只看该作者

回复 #2 2011wan06 的帖子

太高深的不懂,我知道高手有方法,可惜没人分享。说的有些也不懂。
回复

使用道具 举报

6#
发表于 2011-10-25 03:26:14 | 只看该作者
删除2g多还少吗 时间也长啊 看硬盘灯狂亮
你直接用小文件覆盖大文件 不就完了

我用的方法
做vhd父盘 win7.vhd
生成3个子盘 wina.vhd  winb.vhd  winc.vhd
启动菜单挂 wina.vhd 和winb.vhd
进入win系统 执行批处理
用winc.vhd 覆盖 wina.vhd 和winb.vhd
如果用wina.vhd启动 则winb.vhd会被覆盖 wina.vhd被占用 无法覆盖
如果用winb.vhd启动 则wina.vhd会被覆盖 winb.vhd被占用 无法覆盖
winc.vhd只有不到80k 感觉不出拷贝覆盖 瞬间完成
反正不能一次启动两个vhd子盘 总能保证不启动的另一个是最原始的子盘
回复

使用道具 举报

7#
 楼主| 发表于 2011-10-25 13:50:35 | 只看该作者

回复 #6 amei 的帖子

好像也不错,那怎么判断出现在启动的是哪个vhd,然后更改启动项,达到“影子”系统要求

[ 本帖最后由 425360202 于 2011-10-25 13:56 编辑 ]
回复

使用道具 举报

8#
发表于 2011-10-25 17:00:19 | 只看该作者
copy "E:\WinC.vhd" "E:\WinA.vhd" /y
copy "E:\WinC.vhd" "E:\WinB.vhd" /y
bcdedit /default {current}
bcdedit /set {A的} description "Windows 7 还原"
bcdedit /set {B的} description "Windows 7 还原"
bcdedit /set {current} description "Windows 7 启动"
回复

使用道具 举报

9#
发表于 2011-10-25 20:56:00 | 只看该作者
用c的子盘覆盖A  
用C的子盘覆盖B   ‘如果A启动的 则B会被覆盖 A被占用 不会覆盖 如果B启动的 则上一句会覆盖A B则不会被覆盖
修改引导菜单 现在使用的为以后的默认启动项
修改引导菜单 原来A的提示修改为还原  
修改引导菜单 原来B的提示修改为还原
修改现在运行的系统的提示为启动 ’现在运行的可能是A或者是B都会被修改成启动

这样还是一个菜单为引导 一个菜单为还原
不需要判断是哪一个启动的

如果说有一个还原过程过程的话 就是一个80多k的文件拷贝的过程
回复

使用道具 举报

10#
 楼主| 发表于 2011-10-25 21:56:27 | 只看该作者

回复 #9 amei 的帖子

多谢了,明天补考完试试效果。
bcdedit /default {current}
这句话不太懂,百度了下说是“将当前启动硬盘/分区中的操作系统设置为默认启动的系统”
回复

使用道具 举报

11#
发表于 2011-10-25 23:47:22 | 只看该作者
是的
打比方
如果你原来一直用A 那么现在的菜单就是
A Windows 7 启动
B Windows 7 还原
现在想还原了 就用B进去系统
copy "E:\WinC.vhd" "E:\WinA.vhd" /y
命令就会把干净的C覆盖成A (也就还原了)
copy "E:\WinC.vhd" "E:\WinB.vhd" /y
命令就会失败 因为你现在用着B呢 被占用着呢
(这样做的目的是为了AB交替还原 始终保持一个是干净的子盘)
bcdedit /default {current}
修改引导菜单 现在使用的为以后的默认启动项
原来你用的是A 原来的默认启动项是A 现在用B进系统
所有就会修改成现在的B是默认了 以后开机默认进B了

bcdedit /set {A的} description "Windows 7 还原"
bcdedit /set {B的} description "Windows 7 还原"
因为不知道是哪一个系统 所有我们也不判断
直接把A和B的引导名称都修改成还原

bcdedit /set {current} description "Windows 7 启动"

就是将现在使用的系统启动项名称修改成 Windows 7 启动

刚才不是修改的A和B为还原的启动名称了吗
现在又修改其中的一个成Windows 7 启动
也就是我们现在用的B 会被修改成 Windows 7 启动

以后菜单就会显示 A 是还原 B是启动 了


再想还原了 就会反之
回复

使用道具 举报

12#
 楼主| 发表于 2011-10-26 12:15:27 | 只看该作者

回复 #11 amei 的帖子

刚补考回来,***,还有两门。
多谢详细解释了。待会试试
回复

使用道具 举报

13#
发表于 2011-10-26 14:34:04 | 只看该作者
原帖由 amei 于 2011-10-25 23:47 发表
是的
打比方
如果你原来一直用A 那么现在的菜单就是
A Windows 7 启动
B Windows 7 还原
现在想还原了 就用B进去系统
copy "E:\WinC.vhd" "E:\WinA.vhd" /y
命令就会把干净的C覆盖成A (也就还原了)
...


具体的批处理呢?
回复

使用道具 举报

14#
发表于 2011-10-26 23:10:26 | 只看该作者
能不能直接在G4D下直接覆盖vhd文件呢?
回复

使用道具 举报

15#
发表于 2011-10-28 05:47:54 | 只看该作者
omnifs copy 能在dos下实现

我现在的想法是
bcd多重引导  
1 正常启动win7 vhd
2 还原

还原使用gurb启动一个dos 使用omnifs copy 将备份的子vhd覆盖使用的子vhd
然后使用dos版的gurb 启动另一个修改过的bootmgr 让他直接启动win 7 vhd
回复

使用道具 举报

16#
发表于 2011-11-11 23:27:58 | 只看该作者
Press 'i' to boot the selected OS as immutable session.
回复

使用道具 举报

17#
发表于 2012-2-16 13:38:22 | 只看该作者
一个例子菜单:
title 自动还原
dd if=(hd0,0)/vhd/WIN7.gz of=(hd0,0)/vhd/TEST.VHD
%NTBOOT% nt6=(hd0,0)/vhd/TEST.VHD
boot
回复

使用道具 举报

18#
发表于 2012-2-17 07:01:24 | 只看该作者
WIN7.gz 是什么文件?如何制作。
回复

使用道具 举报

19#
发表于 2012-2-26 15:02:19 | 只看该作者
太高深的不懂,知道高手有方法
回复

使用道具 举报

20#
发表于 2012-5-28 17:37:08 | 只看该作者
晕了了!!!!!!!!!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-12-1 04:47

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表