无忧启动论坛

标题: grub4dos调用IMG映像通用模块实现快速恢复VHD_支持NTFS隐藏分区及长文件名 [打印本页]

作者: qj_tzy    时间: 2012-1-2 11:35
标题: grub4dos调用IMG映像通用模块实现快速恢复VHD_支持NTFS隐藏分区及长文件名

grub4dos调用IMG映像通用模块实现快速恢复VHD_支持NTFS隐藏分区及长文件名

在原贴《[重发]快速恢复VHD软盘映像_支持中文菜单、NTFS隐藏分区及长文件名》http://bbs.wuyou.net/forum.php?mod=viewthread&tid=197753&highlight=%2Bqj%5C_tzy的基础上进行修改,将img映像改为较为通用的模块后,用grub4dos进行调用实现该功能。

下载1
http://data.99pan.com/download/149748_49_12852710386581350342.html

下载2:
http://115.com/file/clylyzkb#
grub4dos+img.rar



grub4dos调用映像方式说明

一、grub4dos主菜单menu.lst调用restore_vhd.lst
title win2008r2/win7/win2008/winvista/win2003/winxp快速还原(调用软盘映像方式)
configfile /grub4dos/restore_vhd.lst


二、restore_vhd.lst内容
#本菜单用grub4dos调用软盘映像方式快速还原:原生win2008r2/win7.vhd,及vboot驱动的win2008/winvista/win2003/winxp.vhd
default 0
timeout 0

title 0. Fast Restore System
echo Select Fast Restore's System:
echo 1-win2008r2
echo 2-win7
echo 3-win2008
echo 4-winvista
echo 5-win2003
echo 6-winxp
set /p sysno=Please Input 1-6(Input Others Return Main Menu):
checkrange 1:6 calc %sysno% || goto 1

if "%sysno%"=="1" set sysname=win2008r2
if "%sysno%"=="1" set diskno=1.3:
#在DOS下使用omnifs info命令,或在winpe或windows中使用omnifs32 info命令,可列出存放VHD文件的分区的编号diskno的值,下同
if "%sysno%"=="1" set vhddir=\vhd_sys
if "%sysno%"=="1" set subvhd=my_win2008r2_CHILD.vhd
if "%sysno%"=="1" set subvhdbak=my_win2008r2_CHILD_BAK.vhd

if "%sysno%"=="2" set sysname=win7
if "%sysno%"=="2" set diskno=1.3:
if "%sysno%"=="2" set vhddir=\vhd_sys
if "%sysno%"=="2" set subvhd=my_win7_CHILD.vhd
if "%sysno%"=="2" set subvhdbak=my_win7_CHILD_BAK.vhd

if "%sysno%"=="3" set sysname=win2008
if "%sysno%"=="3" set diskno=1.3:
if "%sysno%"=="3" set vhddir=\vboot_vhd
if "%sysno%"=="3" set subvhd=win2008_child.vhd
if "%sysno%"=="3" set subvhdbak=win2008_child_bak.vhd

if "%sysno%"=="4" set sysname=winvista
if "%sysno%"=="4" set diskno=1.3:
if "%sysno%"=="4" set vhddir=\vboot_vhd
if "%sysno%"=="4" set subvhd=winvista_child.vhd
if "%sysno%"=="4" set subvhdbak=winvista_child_bak.vhd

if "%sysno%"=="5" set sysname=win2003
if "%sysno%"=="5" set diskno=1.3:
if "%sysno%"=="5" set vhddir=\vboot_vhd
if "%sysno%"=="5" set subvhd=win2003_child.vhd
if "%sysno%"=="5" set subvhdbak=win2003_child_bak.vhd

if "%sysno%"=="6" set sysname=winxp
if "%sysno%"=="6" set diskno=1.3:
if "%sysno%"=="6" set vhddir=\vboot_vhd
if "%sysno%"=="6" set subvhd=winxp_child.vhd
if "%sysno%"=="6" set subvhdbak=winxp_child_bak.vhd

map --mem /grub4dos/restore_vhd.img (fd0)
map --hook

#使用以下命令通过环境变量传递参数
#echo @ECHO OFF > (fd0)/autoexec.bat
#echo set sysname=%sysname% >> (fd0)/autoexec.bat
#echo set diskno=%diskno% >> (fd0)/autoexec.bat
#echo set vhddir=%vhddir% >> (fd0)/autoexec.bat
#echo set subvhd=%subvhd% >> (fd0)/autoexec.bat
#echo set subvhdbak=%subvhdbak% >> (fd0)/autoexec.bat
#echo STOREVHD >> (fd0)/autoexec.bat

#或使用以下命令通过批处理文件直接传递参数
echo @ECHO OFF > (fd0)/autoexec.bat
echo STOREVHD %sysname% %diskno% %vhddir% %subvhd% %subvhdbak% >> (fd0)/autoexec.bat

rootnoverify (fd0)
chainloader +1

title 1. return Main menu
configfile (md)4+8


三、映像中的autoexec.bat内容(原autoexec.bat的内容可任意,关键是其大小要足够,否则,grub4dos重写autoexec.bat时,因其大小不够,其后内容被截断)

@ECHO OFF
set sysname=
set diskno=
set vhddir=
set subvhd=
set subvhdbak=
STOREVHD

rem xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
rem xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
rem xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
rem xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
rem xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
rem xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
rem xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
rem xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
rem xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
rem xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx


四、映像中的STOREVHD.bat内容

@ECHO OFF
rem 此法支持普通隐藏或EISA隐藏的NTFS分区及长文件名,且还原后,子VHD文件的大小与时间,与备份VHD文件的大小与时间完全相同

if not %1#==# set sysname=%1
if not %2#==# set diskno=%2
if not %3#==# set vhddir=%3
if not %4#==# set subvhd=%4
if not %5#==# set subvhdbak=%5

PATH A:\
LH DOSKEY.COM
DOSLFN
SET COMSPEC=A:\COMMAND.COM
set cp=936
if not %6#==# set cp=%6
lh hdpmi32
lh ndos -lfn -mountall -cp:%cp%
ndlist -
set cp=
LH tw /ns /np>nul
mode 80

omnifs attrib -s -r -h %diskno%"%vhddir%\%subvhd%" >nul
omnifs copy %diskno%"%vhddir%\%subvhdbak%" %diskno%"%vhddir%\%subvhd%"
echo Restored %sysname% OK!
pause
grub.exe --config-file="chainloader (hd0)+1"
rem reboot


五、特别说明
在restore_vhd.lst中,无论采用何种方式传递参数,均不需要修改映像文件restore_vhd.img的内容,即该映像文件已修改为了通用模块。





[ 本帖最后由 qj_tzy 于 2012-1-3 10:49 编辑 ]
作者: bfgxp    时间: 2012-1-2 18:17
留个记号。不错,与o大的原理差不多
作者: wanghh    时间: 2012-1-5 07:08
文件放置可有要求?谢谢!
作者: qj_tzy    时间: 2012-1-5 10:28
标题: 回复 #3 wanghh 的帖子
VHD文件放置分区(可为EISA隐藏)、VHD所在目录、主VHD文件名、子VHD文件名、子VHD文件的备份文件名,均可任意,但要在grub4dos调用的菜单restore_vhd.lst中作相应的修改,但IMG文件restore_vhd.img的内容不需作修改。
作者: ducs    时间: 2012-1-5 17:40
测试了一下,效果灰常好

[ 本帖最后由 ducs 于 2012-1-6 11:24 编辑 ]
作者: 2011SHENGAI    时间: 2012-1-6 12:19
认真学习之后,下载实机体验!
作者: HY    时间: 2012-1-6 16:02
今天给8岁的女儿用的那台电脑做了WIN7.VHD系统,正好试试兄弟的成果。不懂的地方请多多指教。
作者: 2010iris    时间: 2012-1-20 04:32
EISA 是什麼來的,如果正常系統用此格式可以嗎?
作者: qj_tzy    时间: 2012-1-20 09:03
标题: 回复 #8 2010iris 的帖子
若双系统或多系统均安装在分区(包括逻辑分区)中,在启动某一分区的系统时,可把其余系统所在的分区置为EISA隐藏的分区(由启动菜单自动完成)。

若所有系统均安装为VHD系统,只需把存放启动菜单和存放VHD系统(包括子VHD及其备份VHD)所在的分区置为EISA隐藏的分区即可。

本人觉得,这样做相对较安全。

不知我所答,是否是您所需的。

[ 本帖最后由 qj_tzy 于 2012-1-20 09:04 编辑 ]
作者: 2010iris    时间: 2012-1-20 14:23
标题: 回复 #9 qj_tzy 的帖子
不錯,詳細解答。

我正是要比較安全的系统,會試下用。多謝
作者: wanghh    时间: 2012-2-14 08:00
if "%sysno%"=="2" set diskno=1.3:

请问如何获取磁盘序号?
作者: wanghh    时间: 2012-2-14 11:42
if "%sysno%"=="2" set sysname=win7
if "%sysno%"=="2" set diskno=1.3:
if "%sysno%"=="2" set vhddir=\vhd_sys
if "%sysno%"=="2" set subvhd=my_win7_CHILD.vhd
if "%sysno%"=="2" set subvhdbak=my_win7_CHILD_BAK.vhd

"2" set vhddir=\vhd_sys
这句是什么意思?
作者: wanghh    时间: 2012-2-14 11:42
是不是VHD文件是目录?
作者: qj_tzy    时间: 2012-2-14 13:55
标题: 回复 #12 wanghh 的帖子
是VHD文件所在的目录。
作者: qj_tzy    时间: 2012-2-14 13:58
标题: 回复 #11 wanghh 的帖子
在winpe或windows中使用omnifs32 info命令,可列出存放VHD文件的分区的编号diskno的值
作者: wanghh    时间: 2012-2-14 17:07
标题: 回复 #15 qj_tzy 的帖子
谢谢!辛苦了!学习了。
作者: wanghh    时间: 2012-2-14 17:09
不知为何快速还原后不能接着启动系统?
作者: wanghh    时间: 2012-2-14 17:23
原帖由 wanghh 于 2012-2-14 17:09 发表
不知为何快速还原后不能接着启动系统?


文件布置情况如下:

2012-02-14_172249.gif (147.95 KB, 下载次数: 221)

2012-02-14_172249.gif

作者: wanghh    时间: 2012-2-14 17:31
#本菜单用grub4dos调用软盘映像方式快速还原:原生win2008r2/win7.vhd,及vboot驱动的win2008/winvista/win2003/winxp.vhd
default 0
timeout 0

title 0. Fast Restore System
echo Select Fast Restore's System:
echo 1-win2008r2
echo 2-win7
echo 3-win2008
echo 4-winvista
echo 5-win2003
echo 6-winxp
set /p sysno=Please Input 1-6(Input Others Return Main Menu):
checkrange 1:6 calc %sysno% || goto 1

if "%sysno%"=="1" set sysname=win2008r2
if "%sysno%"=="1" set diskno=1.3:
if "%sysno%"=="1" set vhddir=\vhd_sys
if "%sysno%"=="1" set subvhd=my_win2008r2_CHILD.vhd
if "%sysno%"=="1" set subvhdbak=my_win2008r2_CHILD_BAK.vhd

if "%sysno%"=="2" set sysname=win7
if "%sysno%"=="2" set diskno=1.2:
if "%sysno%"=="2" set vhddir=\win7
if "%sysno%"=="2" set subvhd=my_win7_CHILD.vhd
if "%sysno%"=="2" set subvhdbak=my_win7_CHILD_BAK.vhd

if "%sysno%"=="3" set sysname=win2008
if "%sysno%"=="3" set diskno=1.3:
if "%sysno%"=="3" set vhddir=\vboot_vhd
if "%sysno%"=="3" set subvhd=win2008_child.vhd
if "%sysno%"=="3" set subvhdbak=win2008_child_bak.vhd

if "%sysno%"=="4" set sysname=winvista
if "%sysno%"=="4" set diskno=1.3:
if "%sysno%"=="4" set vhddir=\vboot_vhd
if "%sysno%"=="4" set subvhd=winvista_child.vhd
if "%sysno%"=="4" set subvhdbak=winvista_child_bak.vhd

if "%sysno%"=="5" set sysname=win2003
if "%sysno%"=="5" set diskno=1.3:
if "%sysno%"=="5" set vhddir=\vboot_vhd
if "%sysno%"=="5" set subvhd=win2003_child.vhd
if "%sysno%"=="5" set subvhdbak=win2003_child_bak.vhd

if "%sysno%"=="6" set sysname=winxp
if "%sysno%"=="6" set diskno=1.3:
if "%sysno%"=="6" set vhddir=\vboot_vhd
if "%sysno%"=="6" set subvhd=winxp_child.vhd
if "%sysno%"=="6" set subvhdbak=winxp_child_bak.vhd

map --mem /grub4dos/restore_vhd.img (fd0)
map --hook

#使用以下命令通过环境变量传递参数
#echo @ECHO OFF > (fd0)/autoexec.bat
#echo set sysname=%sysname% >> (fd0)/autoexec.bat
#echo set diskno=%diskno% >> (fd0)/autoexec.bat
#echo set vhddir=%vhddir% >> (fd0)/autoexec.bat
#echo set subvhd=%subvhd% >> (fd0)/autoexec.bat
#echo set subvhdbak=%subvhdbak% >> (fd0)/autoexec.bat
#echo STOREVHD >> (fd0)/autoexec.bat

#或使用以下命令通过批处理文件直接传递参数
echo @ECHO OFF > (fd0)/autoexec.bat
echo STOREVHD %sysname% %diskno% %vhddir% %subvhd% %subvhdbak% >> (fd0)/autoexec.bat

rootnoverify (fd0)
chainloader +1

title 1. return Main menu
configfile (md)4+8
作者: wanghh    时间: 2012-2-14 17:53
显示恢复成功。但不能进入系统。
作者: qj_tzy    时间: 2012-2-15 11:16
标题: 回复 #18 wanghh 的帖子
要先用工具或
《在win7pe等环境下建立原生和VBOOT驱动的VHD的子VHD的批处理》
http://bbs.wuyou.net/forum.php?m ... hlight=%2Bqj%5C_tzy
提供的批处理,建立好子VHD的备份文件如xx_child_bak.vhd,再使用此菜单恢复才行。
作者: wanghh    时间: 2012-2-16 11:39
原帖由 qj_tzy 于 2012-2-15 11:16 发表
要先用工具或
《在win7pe等环境下建立原生和VBOOT驱动的VHD的子VHD的批处理》
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=205426&highlight=%2Bqj%5C_tzy
提供的批处理,建立好子VHD的备份文件如xx_child_bak ...



这些都有了啊。
作者: wanghh    时间: 2012-2-16 11:40
pause
grub.exe --config-file="chainloader (hd0)+1"
rem reboot


可能这句有问题。不知什么意思?
作者: qj_tzy    时间: 2012-2-19 16:06
标题: 回复 #23 wanghh 的帖子
好几天没上网,上句是以上工作完成后,从第一硬盘启动。
作者: zyla    时间: 2012-9-23 17:36
本人电脑
set /p sysno=Please Input 1-6(Input Others Return Main Menu):
checkrange 1:6 calc %sysno% || goto 1

在这2句这里老是抱错unrecognized command。。。偶尔一次可以 搞不懂!
作者: zcl200563    时间: 2012-9-24 12:28
如果不是手动复制网页上写的代码,看看是不是 grub4dos版本低的缘故?我也菜鸟
作者: zyla    时间: 2012-10-11 18:34
标题: 回复 #26 zcl200563 的帖子
笨方法, restore.lst继续使用grub4dos的多个选项写法写就可以了- .-
作者: 2012masterasia    时间: 2013-2-15 17:20
学习ing,好像vhd管理工具已经整合了这个功能了。
作者: muelfox    时间: 2013-5-26 13:44
不错,支持一下
作者: chensksk    时间: 2013-8-6 01:29
老大,网盘全挂了...再给个链接行不行啊
作者: szs484    时间: 2013-9-12 10:08
备份呢,还原倒是简单,改改文件名就行了,如何操作差分和合并vhd?
作者: 2012sxz    时间: 2014-12-18 12:03
本帖最后由 2012sxz 于 2014-12-18 15:47 编辑

我把VHDOS目录放在C盘上可以使用restore_vhd.lst还原XP,把VHDOS目录放在D盘上不能使用restore_vhd.lst还原XP

还原VHDXP,出现“no volume could be mounted using”,这是什么问题?

是omnifs软件的问题吗?

问题已解决
作者: fanggong    时间: 2014-12-22 08:18
好资料,谢谢分享!
作者: songnic    时间: 2016-5-21 22:52
貌似我来晚了好几年了。。。
作者: linhu6682    时间: 2016-6-22 05:56
下载失效了。
作者: qj_tzy    时间: 2016-6-22 18:55
linhu6682 发表于 2016-6-22 05:56
下载失效了。

此帖子是还原固定的VHD系统,不够灵活,现已对其进行了修正,请见:http://bbs.wuyou.net/forum.php?m ... d=320832&extra=,其中包含此修正版的下载
作者: interdev    时间: 2018-6-21 20:11
qj_tzy 发表于 2016-6-22 18:55
此帖子是还原固定的VHD系统,不够灵活,现已对其进行了修正,请见:http://bbs.wuyou.net/forum.php?mod= ...

新版对我来说有点太大了,请问还能不能找到12年这个轻量级的下载包,谢谢老师。




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