无忧启动论坛

标题: 充分发挥VHD的还原系统优势 [打印本页]

作者: jebbs    时间: 2010-12-15 19:12
标题: 充分发挥VHD的还原系统优势
有更新,到这里下载:
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=202619

VHD差分系统的其中一个重要的优势就在还原系统上,只需要简单的文件替换即可完成。但相对于启动到图形界面,再打开资源管理器进行替换,我们花在启动图形界面上的时间远远超过“还原”操作本身。
因此,我有个想法,是否有高手可以开发一个可配置的,自动替换VHD的程序,可以挂到BCD启动项中,即可实现1秒系统还原,更好的情况可能是,该程序替换完成后,直接跳转回引导界面,甚至不用重启电脑,直接进入还原后的系统。这种快捷将会是目前所有一键还原无可比拟的。

我没有这方面编程的经验,无法实现,不知道有没有高手对这个想法有没有兴趣?

=====================================

基于0cat0的DD写文件的方法,用VB写了一下,可以根据不同的环境配置。自己这边测试成功了。实测整个还原过程只有2秒钟不到。

适用情景:
使用动态VHD差分的形式安装的WIN7系统,并且在安装过程中,对需要还原的子VHD有做好备份。使用此程序配置后,即可实现瞬间还原的效果。

使用方法:
打开后,选择系统所在的VHD,选择备份的VHD,输入要定义的名称,点配置;
然后在启动WIN7时可以看到还原菜单.选择后瞬间还原完成,无需重启.

程序发出来,算是抛砖引玉,希望有人可以按类似的思路完善一下。

程序在VHD系统中运行,主要就是做几个事:
根据选择的VHD文件,把“RESTORE.MBR”和“RESTORE.SYS”复制到VHD所在分区根目录
在VHD所在的分区,根据填写的启动项名称,生成RESTORE.CMD,运行后加入启动项、自动删除自己
在VHD所在的分区,根据选择的VHD文件,生成RESTORE.LST,即GRUB菜单

所以完成后,VHD所在分区会多出三个文件:”RESTORE”、“RESTORE.MBR”和“RESTORE.SYS”

还原的流程就是:bootmgr->Grub4dos->用dd写VHD->bootmgr。
好处就是不用自己理解和修改代码,当然可以更完善,也最好不用VB写。本人水平有限,哪个大侠有兴趣就出手吧,呵呵


=================================
2011.04.08 更新
停止下载,有空时更新新版
抱歉,一直没能在这里投入精力,上一个程序确实存在路径判断的问题。修正了一下。
另外优化了操作过程,添加了删除旧还原启动项的功能,不用另找工具去删了。


=================================
2011.01.22  更新,主要是对VHD差分链进行检测,实现了列出差分链列表,检测所选的VHD还原后是否会破坏差分链,选择的还原用VHD是否有效(与被还原VHD有相同的父VHD),避免配置还原后造成一些不必要的问题。不过目前还只能添加其中一个差分链的还原
但是检测的原理是基于观察总结的不知是否可靠,有待测试(原理:VHD&H240&中记录了父VHD信息)
下面是截图,下载见“VHD瞬间还原1.2[待测试].rar”(附件大小限制307.2 kb ,真是崩溃!!):
http://u.115.com/file/t32627601a


=================================

晚上又搞了一下,现在可以防止误操作了(把g4d的password命令当验证码来用了),免得一下按错,抱憾终生,呵呵
另外,还原前后会有中文提示,在VHD分区生成的文件自动隐藏

见附件“VHD瞬间还原2.rar”





[ 本帖最后由 jebbs 于 2011-11-21 19:23 编辑 ]
作者: epjtg    时间: 2010-12-15 20:51
这个也许就是你要的那种。
http://bbs.wuyou.net/forum.php?m ... 9619&highlight=
作者: lhtlht    时间: 2010-12-15 22:37
我觉得这位老大的贴子http://bbs.wuyou.net/forum.php?m ... &extra=page%3D1里的工具可以满足楼主的要求啊!
作者: jebbs    时间: 2010-12-15 22:47
谢谢LS两位,不过你们没有真正理解我的意思<br />VHD的差分系统我已经装好在用了,我重要的一个观点就是,还原VHD,花在启动操作环境的时间远远多于还原操作本身(也就是替换VHD这个操作),比如你们提供的链接中的批处理,是需要启动WIN7PE的,大概需要2,3分钟的时间;<br />如果我的想法是可行的,那么这个时间可以由2,3分钟降到几秒钟,巨大的差别。并且对于菜鸟来说,只是选择一下菜单,而不是去找PE,找操作的方法。

刚看了一下epjtg介绍的那个批处理,莫非VHD系统支持在开机时,直接替换正在使用的子VHD??!!

我每创建一次子VHD都会有备份,因此还原时并不像那个批处理里的那么复杂,只是文件的替换而已,但能是VHD WIN7里替换正在使用的VHD,我还是不信



[ 本帖最后由 jebbs 于 2010-12-15 23:21 编辑 ]
作者: jebbs    时间: 2010-12-15 22:50
可能的一个做法会是,用GRUB启动一个支持NTFS的DOS镜像,这个镜像启动后只做一件事,就是替换VHD
但是这样这个镜像本身做起来就不是通用的,也不易配置,并且也不知道如何在替换完VHD后返回BCD引导而不用重启
作者: 0cat0    时间: 2010-12-16 00:34
楼主的想法很好,不过真的要做也不是不可能的,只要在启动菜单里面加上G4D启动,用G4D替换就行了,不过具体的实现方法我是无能为力了,呵呵。。。
作者: jebbs    时间: 2010-12-19 16:56
沉了~~~~~~~~
作者: ming6595    时间: 2010-12-19 21:03
http://bbs.wuyou.net/forum.php?m ... &extra=page%3D1
作者: 0cat0    时间: 2010-12-24 09:54
已经可以用G4D加菜单替换了,呵呵,看下面的帖子:

http://bbs.wuyou.net/forum.php?m ... &extra=page%3D1
作者: jebbs    时间: 2010-12-27 11:11
谢ls,回去就试试~~~
作者: 0cat0    时间: 2010-12-27 11:18
标题: 回复 #10 jebbs 的帖子
具体方法已经添加到自己的教程里面的:

http://bbs.wuyou.net/forum.php?m ... &extra=page%3D1
作者: jebbs    时间: 2010-12-28 20:35
标题: 回复 #11 0cat0 的帖子
呵呵,不错,一站式教程~~~
我觉得下面可以研究一下,使用G4D+WENV,实现一个可以通用的menu.lst,可以通用地安装和使用

貌似我这边在>grub 命令行下,执行WENV就不行,设好根分区后,用/WENV就可以,不知道什么原因,刚开始接触WENV~~~

PS:运行你帖子中的批处理,不能正常工作,BCDTEMP.TXT中的内容是:
The boot configuration data store could not be opened.
系统找不到指定的文件。

我的情况是,有个100M的启动用分区,启动后是自动隐藏的

[ 本帖最后由 jebbs 于 2010-12-28 21:31 编辑 ]
作者: 0cat0    时间: 2010-12-29 09:17
标题: 回复 #12 jebbs 的帖子
我的那个CMD是不能隐藏BCD所有盘的,不然会找不到的,还有,CMD里面已经设置了VHD文件的完整路径为/My_BOOT/WIN7_X86.VHD,如果跟我的不一样,要自己改的。。。

因为想做得傻瓜一点,所以所有的东西就是把路径和文件名都设置到里面去了。。。
作者: jebbs    时间: 2011-1-4 22:27
更新了,顶。。。。。
作者: ming6595    时间: 2011-1-5 19:01
还是用g4d方便 这个思路非常好
作者: xiaoy    时间: 2011-1-5 20:05
http://bbs.wuyou.net/forum.php?m ... &extra=page%3D1
作者: 浊辅音    时间: 2011-1-16 15:41
我想还原多个子VHD,想多增加一个还原选项,请问如何设置?
再多请教一下,那个RESTORE.SYS是干嘛用的?能否删除?
作者: jebbs    时间: 2011-1-16 19:56
标题: 回复 #17 浊辅音 的帖子
所有文件都不能删除,呵呵
RESTORE.SYS实际就是GRLDR,为了不与引导用的其它GRLDR冲突,也为了好记就改了这个名
还原多个子VHD:
你是指有多个VHD系统?如果是,目前这个不行,除非按这个原理手工配置了。
如果是同一个系统的多个差分VHD,应该不能还原中间一级的VHD的
作者: 浊辅音    时间: 2011-1-16 20:24
谢谢回复。多个VHD指的是我有多个同属于同一个父VHD系统的子VHD,比如两个。我想在恢复的时候选择两个子VHD之间的其中一个恢复。
是否可以做两个g4d,改为不同的名字,再配置不同的恢复的任务?
作者: jebbs    时间: 2011-1-17 18:41
标题: 回复 #19 浊辅音 的帖子
嗯,手工的话,有技术没约束啊~~呵呵
再用一份G4D也是可以的,只是下面这样更快:
你只要把RESTORE.LST打开(在隐藏的RESTORE文件夹里),手工再复制修改加一个就完了,对,还有把timeout也改一下。
timeout 0
default 0

fontfile /RESTORE/fonts.gz
#splashimage /RESTORE/back.xpm.gz

title 瞬间还原系统
pause --wait=0 为确认这不是误操作,请输入验证码(0978):
password 0978
dd if=()/BACK/Win7Normal.vhd of=()/Win7Normal.vhd
pause --wait=3 还原完成,返回启动菜单
find --set-root --ignore-floppies --ignore-cd /bootmgr
map () (hd0)
map (hd0) ()
map --rehook
find --set-root --ignore-floppies --ignore-cd /bootmgr
chainloader /BOOTMGR

title 放弃还原,返回引导菜单
find --set-root --ignore-floppies --ignore-cd /bootmgr
map () (hd0)
map (hd0) ()
map --rehook
find --set-root --ignore-floppies --ignore-cd /bootmgr
chainloader /BOOTMGR

比如复制粘贴中间的,改成:

title 瞬间还原系统2
pause --wait=0 为确认这不是误操作,请输入验证码(0978):
password 0978
dd if=()/BACK/Win7Normal2.vhd of=()/Win7Norma2l.vhd
pause --wait=3 还原完成,返回启动菜单
find --set-root --ignore-floppies --ignore-cd /bootmgr
map () (hd0)
map (hd0) ()
map --rehook
find --set-root --ignore-floppies --ignore-cd /bootmgr
chainloader /BOOTMGR

[ 本帖最后由 jebbs 于 2011-1-17 18:50 编辑 ]
作者: 浊辅音    时间: 2011-1-17 19:38
嗯,的确是省事多了,谢谢!
作者: 425360202    时间: 2011-1-22 20:18
怎么选择vhd路径后再选择同目录下系统vhd提示请勿选择指定路径外的vhd?
作者: jebbs    时间: 2011-1-23 13:13
标题: 回复 #22 425360202 的帖子
你确定是同一个目录吗?不是子目录或其它目录?
作者: 425360202    时间: 2011-1-23 19:19
确定是同一目录,我是在vhd的win7里运行的。

[ 本帖最后由 425360202 于 2011-1-23 19:21 编辑 ]
作者: jebbs    时间: 2011-1-24 19:47
我这边试了 是好的呀~~||
等有空深入看看
作者: xiaoy    时间: 2011-1-24 21:16
我现在用的方案是基于NTBOOT启动盘的VHD快速还原模式, 缺点,必须用GRUB4DOS引导NTBOOT.IMG后再引导VHD系统,
优点  快速还原就不说了,可以把VHD放到任意的NTFS分区,包括隐藏分区(ID为12的NTFS分区也行),而且可以复制新VHD子系统  让一台电脑的VHD系统变成真正意义上的多用户
作者: jebbs    时间: 2011-1-26 18:44
标题: 回复 #26 xiaoy 的帖子
发个帖弄出来学习学习啊,呵呵
作者: xiaoy    时间: 2011-1-26 20:13
debug off
command --set-path=(fd0)/grub/
fontfile (fd0)/grub/fonts
default 1
timeout 3
menuset 15 15 15 15 15 21 20 40 5 3 10
write 0x60000 0
insmod (fd0)/grub/WENV
find --set-root --devices=h /win7/vhdparent.bak && default 0      //父VHD存在就以第一项启动  可在任意分区下创建win7目录来存放VHD文件
find --set-root --devices=h /win7/win7.vhd && wenv set name=win7   //公用版假定为win7.vhd  子VHD文件

title 启动您的Win7系统\n\t请输入您的系统名称。
find --set-root --devices=h /asus.bin && slic /asus.bin    //免激活处理
wenv get name && WENV call pause --wait=4 5秒后将启动公用版win7系统,按ESC键启动您的专用版win7. || wenv set name=$input,请输入您的系统名称: || configfile (fd0)/menu.lst
wenv get name || wenv set name=$input,请输入您的系统名称: || configfile (fd0)/menu.lst
wenv set tmp=/win7/${name}.vhd
wenv call find --set-root --devices=h ${tmp} || fallback --go 3
write --offset=0x4E74 (fd0)/boot/bcd b
wenv get tmp=0x600000
cat --locate=\\x2F --replace=\\x5C (md)0x3000+3
wenv call write --offset=0x7D72 (fd0)/boot/bcd *0x600000$
wenv call write --offset=0x82EA (fd0)/boot/bcd *0x600000$
WENV calc cur_drv=*0x82A0 & 127
WENV calc cur_pri=*0x829C>>16 & 65535
write 0x60004 0
write 0x60000 0
WENV calc cur_drv=*0x82A0 & 127
wenv call dd if=(hd${cur_drv})+1 of=(md) bs=1 count=4 skip=0x1b8 seek=0x60000
cat --length=0 ()-1
dd if=(md) of=(md) bs=1 count=8 skip=0x8290 seek=0x60008
cat --locate=\x2E\xB5\x41\x7D --replace=*0x60000 (fd0)/boot/bcd
cat --locate=\0\x7E\0\0 --replace=*0x60008 (fd0)/boot/bcd
chainloader (fd0)/boot/bootmgr
boot                                    

title 启动常规版Win7或XP系统\n\t优先搜索启动Win7,其次XP。      //不存在父VHD则搜索启动正常安装版的WIN7或XP
find --set-root --devices=h /asus.bin && slic /asus.bin        //免激活处理
errorcheck off
find --set-root --devices=h /ntldr && unhide && chainloader /ntldr     
find --set-root --devices=h /bootmgr && unhide && chainloader /bootmgr
errorcheck on
boot

title 创建或还原您的专用版win7系统\n\t输入已有用户名则还原,新用户名则创建。
wenv get name && WENV call pause --wait=5 5秒后将还原公用版win7系统,按ESC键还原或新建您的专用版win7. || wenv set name=$input,请输入您需要还原或新建的系统名称: || configfile (fd0)/menu.lst
wenv get name || wenv set name=$input,请输入您需要还原或新建的系统名称: || configfile (fd0)/menu.lst
WENV call find --set-root --devices=h /win7/${name}.vhd || fallback --go 4
WENV call pause --wait=9 原系统中的资料将丢失! 不想还原请按ESC键取消。 || configfile (fd0)/menu.lst
diskid && wenv set part=*0x4ff00$                 //获取GHOSTID
WENV call write --offset=0x19 (fd0)/autoexec.bat ${part}
write --offset=0x1a (fd0)/autoexec.bat .    //修改:为.
WENV call write --offset=0x7c (fd0)/autoexec.bat ${name}.vhd   //修改autoexec.bat中的变量
chainloader (fd0)/io.sys

#3
title
pause 输入错误,按任意键返回选择菜单 && configfile (fd0)/menu.lst

#4
title
wenv check "${name}"<>"" || fallback --go 3
WENV call pause --wait=0 输入密码后将创建${name}的专用win7系统!
password =wuyou || fallback --go 3
WENV call find --set-root --devices=h /win7/win7vhd.bak || WENV call pause win7系统的一键还原已被破坏,请联系XX电脑,电话:XXX。&& chainloader (hd0)+1   // win7vhd.baK为子VHD备份文件 97KB
diskid && wenv set part=*0x4ff00$
WENV call write --offset=0x19 (fd0)/autoexec.bat ${part}
write --offset=0x1a (fd0)/autoexec.bat .
WENV call write --offset=0x7c (fd0)/autoexec.bat ${name}.vhd && chainloader (fd0)/io.sys

[ 本帖最后由 xiaoy 于 2011-1-26 20:21 编辑 ]
作者: xiaoy    时间: 2011-1-26 20:16
autoexec.bat
内容为
@ECHO OFF
cls
set part=       //分区号由GRUB写入
echo Please wait a while...
        
echo omnifs copy %part%:\win7\win7vhd.bak %part%:\win7\            >a:\vhd.bat    /空白处由GRUB写入
call a:\vhd.bat
      
GRUB --time-out=0 --config-file=(fd0)/menu.lst
作者: jebbs    时间: 2011-1-26 21:41
先研究了~~
你开个贴啊,反正这个区也这么冷清~~~,最好弄成个成品发出来,哈哈
作者: jebbs    时间: 2011-1-26 21:49
标题: 回复 #29 xiaoy 的帖子
find --set-root --devices=h /asus.bin && slic /asus.bin    //免激活处理

提个建议啊:上面这句应该可以不用在这些代码里弄的吧?
不论如何,如果你改成从bootmgr引导到GRUB的话,就不会破坏软件模拟激活的,因为bootmgr之前已经有软激活了。相当于 软激活-> bootmgr->Grub->bootmgr->VHD.这样兼容性好一点。(我猜的,因为我WIN7一直都是刷主板,没用过软激活)
如果是从GRUB开头引导的,就要考虑和软激活冲突的问题。
作者: xiaoy    时间: 2011-1-26 22:07
发过一半成品 没人顶就放弃了

我现在是GURB写MBR 引导 GRUB 再NTBOOT。IMG 以上内容均为此映像文件中的相关内容
作者: jebbs    时间: 2011-4-8 21:38
修正更新一下。。。。这么方便的东西,没人感兴趣?
作者: 0cat0    时间: 2011-4-9 00:06
标题: 回复 #33 jebbs 的帖子
这么久了还更新,呵呵,支持一下,可惜我自己用的就只是一个DD命令就搞定了,现在C大的NTBOOT模块好像比较好用,楼主可以试试结合一下。。。
作者: ljy3282393    时间: 2011-4-9 10:48
支持一下楼主,下载来一个试用一下。
作者: 0cat0    时间: 2011-4-9 11:33
标题: 回复 #31 jebbs 的帖子
算了,内容删除。。。。。。。还是用mbr_slic_0623可能更好。。。

[ 本帖最后由 0cat0 于 2011-4-9 11:36 编辑 ]
作者: jebbs    时间: 2011-4-9 20:06
标题: 回复 #34 0cat0 的帖子
我也是自己装WIN7 SP1的,要用到才又更新了一下...工作后懒了..连装个系统都磨蹭一个月...
mbr_slic_0623是什么啊?好久没研究,OUT了..如果是软激活的话,这个还原挂在BOOTMGR下,应该不会和激活冲突吧
作者: 0cat0    时间: 2011-4-9 23:42
标题: 回复 #37 jebbs 的帖子
http://mbr-slic.narod.ru/

自己去看一下吧
作者: 2011902    时间: 2011-4-10 21:08
差分系统已经可以做成多启动,最后一个差分为启动的第一选项.如果系统有问题,直接进入第二选项等于直接进入还原后的系统,有空再把第一选项的启动信息去掉,然后把有问题的差分删掉.
作者: jebbs    时间: 2011-4-10 21:21
标题: 回复 #39 2011902 的帖子
呵呵,那岂不是很麻烦,无论是配置过程还是还原的过程
试试我这个吧
作者: jebbs    时间: 2011-4-10 21:23
标题: 回复 #38 0cat0 的帖子
全是俄文,不懂..谷歌翻译大概来看,好像也是软件模拟SLIC激活
作者: 2011902    时间: 2011-4-10 21:43
标题: 回复 #40 jebbs 的帖子
Windows VHD 辅助处理工具 2011 里面就有快速还原的选项,我没有使用.也许你的方法很好,但是我没有兴趣使用,因为我不是干电脑装机和维护的.
作者: jebbs    时间: 2011-4-11 18:58
标题: 回复 #42 2011902 的帖子
当然,只为分享给感兴趣的人..
作者: yaojy    时间: 2011-4-12 22:32
感谢楼主的努力,越来越完善了。
特来支持!
作者: 879792799    时间: 2019-11-28 14:45
http://bbs.wuyou.net/forum.php?m ... &extra=page%3D1
这个是你要的 哈哈




欢迎光临 无忧启动论坛 (http://wuyou.net/) Powered by Discuz! X3.3