无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 20028|回复: 36
打印 上一主题 下一主题

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

  [复制链接]
跳转到指定楼层
1#
发表于 2012-1-2 11:35:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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 编辑 ]
2#
发表于 2012-1-2 18:17:58 | 只看该作者
留个记号。不错,与o大的原理差不多
回复

使用道具 举报

3#
发表于 2012-1-5 07:08:08 | 只看该作者
文件放置可有要求?谢谢!
回复

使用道具 举报

4#
 楼主| 发表于 2012-1-5 10:28:03 | 只看该作者

回复 #3 wanghh 的帖子

VHD文件放置分区(可为EISA隐藏)、VHD所在目录、主VHD文件名、子VHD文件名、子VHD文件的备份文件名,均可任意,但要在grub4dos调用的菜单restore_vhd.lst中作相应的修改,但IMG文件restore_vhd.img的内容不需作修改。
回复

使用道具 举报

5#
发表于 2012-1-5 17:40:20 | 只看该作者
测试了一下,效果灰常好

[ 本帖最后由 ducs 于 2012-1-6 11:24 编辑 ]
回复

使用道具 举报

6#
发表于 2012-1-6 12:19:19 | 只看该作者
认真学习之后,下载实机体验!
回复

使用道具 举报

7#
发表于 2012-1-6 16:02:36 | 只看该作者
今天给8岁的女儿用的那台电脑做了WIN7.VHD系统,正好试试兄弟的成果。不懂的地方请多多指教。
回复

使用道具 举报

8#
发表于 2012-1-20 04:32:19 | 只看该作者
EISA 是什麼來的,如果正常系統用此格式可以嗎?
回复

使用道具 举报

9#
 楼主| 发表于 2012-1-20 09:03:34 | 只看该作者

回复 #8 2010iris 的帖子

若双系统或多系统均安装在分区(包括逻辑分区)中,在启动某一分区的系统时,可把其余系统所在的分区置为EISA隐藏的分区(由启动菜单自动完成)。

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

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

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

[ 本帖最后由 qj_tzy 于 2012-1-20 09:04 编辑 ]
回复

使用道具 举报

10#
发表于 2012-1-20 14:23:01 | 只看该作者

回复 #9 qj_tzy 的帖子

不錯,詳細解答。

我正是要比較安全的系统,會試下用。多謝
回复

使用道具 举报

11#
发表于 2012-2-14 08:00:17 | 只看该作者
if "%sysno%"=="2" set diskno=1.3:

请问如何获取磁盘序号?
回复

使用道具 举报

12#
发表于 2012-2-14 11:42:21 | 只看该作者
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
这句是什么意思?
回复

使用道具 举报

13#
发表于 2012-2-14 11:42:52 | 只看该作者
是不是VHD文件是目录?
回复

使用道具 举报

14#
 楼主| 发表于 2012-2-14 13:55:30 | 只看该作者

回复 #12 wanghh 的帖子

是VHD文件所在的目录。
回复

使用道具 举报

15#
 楼主| 发表于 2012-2-14 13:58:06 | 只看该作者

回复 #11 wanghh 的帖子

在winpe或windows中使用omnifs32 info命令,可列出存放VHD文件的分区的编号diskno的值
回复

使用道具 举报

16#
发表于 2012-2-14 17:07:02 | 只看该作者

回复 #15 qj_tzy 的帖子

谢谢!辛苦了!学习了。
回复

使用道具 举报

17#
发表于 2012-2-14 17:09:52 | 只看该作者
不知为何快速还原后不能接着启动系统?
回复

使用道具 举报

18#
发表于 2012-2-14 17:23:47 | 只看该作者
原帖由 wanghh 于 2012-2-14 17:09 发表
不知为何快速还原后不能接着启动系统?


文件布置情况如下:

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

2012-02-14_172249.gif
回复

使用道具 举报

19#
发表于 2012-2-14 17:31:22 | 只看该作者
#本菜单用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
回复

使用道具 举报

20#
发表于 2012-2-14 17:53:31 | 只看该作者
显示恢复成功。但不能进入系统。
回复

使用道具 举报

21#
 楼主| 发表于 2012-2-15 11:16:31 | 只看该作者

回复 #18 wanghh 的帖子

要先用工具或
《在win7pe等环境下建立原生和VBOOT驱动的VHD的子VHD的批处理》
http://bbs.wuyou.net/forum.php?m ... hlight=%2Bqj%5C_tzy
提供的批处理,建立好子VHD的备份文件如xx_child_bak.vhd,再使用此菜单恢复才行。
回复

使用道具 举报

22#
发表于 2012-2-16 11:39:04 | 只看该作者
原帖由 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 ...



这些都有了啊。
回复

使用道具 举报

23#
发表于 2012-2-16 11:40:30 | 只看该作者
pause
grub.exe --config-file="chainloader (hd0)+1"
rem reboot


可能这句有问题。不知什么意思?
回复

使用道具 举报

24#
 楼主| 发表于 2012-2-19 16:06:43 | 只看该作者

回复 #23 wanghh 的帖子

好几天没上网,上句是以上工作完成后,从第一硬盘启动。
回复

使用道具 举报

25#
发表于 2012-9-23 17:36:04 | 只看该作者
本人电脑
set /p sysno=Please Input 1-6(Input Others Return Main Menu):
checkrange 1:6 calc %sysno% || goto 1

在这2句这里老是抱错unrecognized command。。。偶尔一次可以 搞不懂!
回复

使用道具 举报

26#
发表于 2012-9-24 12:28:26 | 只看该作者
如果不是手动复制网页上写的代码,看看是不是 grub4dos版本低的缘故?我也菜鸟
回复

使用道具 举报

27#
发表于 2012-10-11 18:34:01 | 只看该作者

回复 #26 zcl200563 的帖子

笨方法, restore.lst继续使用grub4dos的多个选项写法写就可以了- .-
回复

使用道具 举报

28#
发表于 2013-2-15 17:20:23 | 只看该作者
学习ing,好像vhd管理工具已经整合了这个功能了。
回复

使用道具 举报

29#
发表于 2013-5-26 13:44:02 | 只看该作者
不错,支持一下
回复

使用道具 举报

30#
发表于 2013-8-6 01:29:20 | 只看该作者
老大,网盘全挂了...再给个链接行不行啊
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-4-24 05:58

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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