尝试在WIN7(或者win7PE) 下使用GHost32快速还原windows 2008 backup and recovery 所生成的vhd文件备份失败总结

总结:

1.windows re环境下恢复2008系统镜像的时候,如果gui的还原没有办法找到备份媒体,可以使用命令行下wbadmin,另外注意windows RE环境的时间区域要和你原来备份的机器的时间区域一致,否则无法还原,因为在winre下没有图形界面来更改时间区域,必须使用命令行,你可以使用wmic computersystem set currenttimezone=480 (+8:00 +8*60=480,-8:00  -8*60=-480)

2.ghost备份镜像时时不管你备份的分区空间是否已满的,但是在还原的时候会考虑这个因素,因此如果你源分区的剩余空间不到10%,例如20GB的分区,剩余空间不到2G,那么在还原到同样大小(20gb)的目标分区的时候,目标分区会显示为灰色而不可选,在下面我的失败过程中,主要的原因就是ghost的这项很恶心的限制,备份的时候也不提示,恢复得时候却要求更多的空间,如果我备份的c盘原来有2gb的剩余空间的话,可能我的尝试就成功了

3.shrink VHD只能使VHD所代表的磁盘中的分区大小变动,但是disk size还是老样子,也就是说如果你的vhd maximum=20gb,那么你再shrink ,disk maximum还是20gb,唯一变动的应该是 vhd所代表disk中的partition size

4.vista 以及windows2008(r2之前)的版本不能直接imagex install.wim来进行安装,否则启动后会抱错,但是win7,以及windows 2008 r2好像是可以直接imagex /apply install.wim number target这样来安装。然后再加个启动菜单就可以了。(网上很多使用imagex 直接apply intall.wim的方法安装的系统似乎都是win7或者win2008 r2,至于vista以及windows 2008(r2之前都是调用setup,或者安装后再capture image ,然后用imagex /apply 安装)

5.ghost32 在vista以及以后的版本上,版本需求为11或者更新才不会出现兼容性问题

6.还没有工具可以直接apply vhd到分区,像的apply一样,也或者类似ghost的image to parttion一样,至少我找了几天没有发现类似的工具,windows 的recovery工具虽然应该包括这样的功能,但限制太多,就算是recovery 自己备份的vhd文件,还原的时候都提示找不到备份媒体,以及timezone等限制,如果有程序调用windows 2008 recovery的组件,然后去掉很多限制,或者功能只是partition to vhd ,以及vhd to parttion那就很爽了

7.VHD启动需要操作系统原生支持,我曾经尝试为备份的VHD文件加个启动菜单(类似win7 in VHD)但是却报错,因为windows 2008(r2 之前是不支持从VHD启动的)

8.为系统添加WINRE在硬盘的方法如下:

在win7下有一个隐藏得目录recovery,启动的时候按f8就可以进入winre的修复环境,2008默认从安装光盘安装时是没有winre的,我们可以自己添加,在2008aik中有一个为系统添加winre的批处理,默认是在分区的根目录,我修改了一下,可以从建立的recovery来启动这个修复环境,把安装光盘的boot.wim(sources目录),boot.sdi(boot 目录)复制到c盘新建的recovery目录下,改名boot.wim为winre.wim,然后为recovery目录添加隐藏和系统属性(这步可以做也可以不做)

然后运行修改过的SetAutoFailover.cmd
SetAutoFailover.cmd /target c:\recovery /wim /nohide
重新启动后,敲几下空格,按f8,选择"修复计算机",就可以进入winre了

setautofailover.cmd的关键代码部分
    set RAMDISK_OPTIONS={ad6c7bc8-fa0f-11da-8ddf-0013200354d8}

    set WINPE_GUID={572bcd56-ffa7-11d9-aae0-0007e994107d}
    %BCDEDIT% -create %RAMDISK_OPTIONS% -d "Ramdisk Device Options" -device
    %BCDEDIT% -set %RAMDISK_OPTIONS% ramdisksdidevice partition=%DRIVE%
    %BCDEDIT% -set %RAMDISK_OPTIONS% ramdisksdipath \recovery\boot.sdi

    %BCDEDIT% -create %WINPE_GUID% -d "Windows Recovery Environment" -application OSLOADER
    %BCDEDIT% -set %WINPE_GUID% device ramdisk=[%DRIVE%]\recovery\winre.wim,%RAMDISK_OPTIONS%

    if {%GPT%}=={} (
        %BCDEDIT% -set %WINPE_GUID% path \windows\system32\boot\winload.exe
    ) else (
        %BCDEDIT% -set %WINPE_GUID% path \windows\system32\boot\winload.efi
    )

    %BCDEDIT% -set %WINPE_GUID% osdevice ramdisk=[%DRIVE%]\recovery\winre.wim,%RAMDISK_OPTIONS%
    %BCDEDIT% -set %WINPE_GUID% systemroot \windows
    %BCDEDIT% -set %WINPE_GUID% detecthal yes
    %BCDEDIT% -set %WINPE_GUID% nx optin
    %BCDEDIT% -set %WINPE_GUID% winpe yes

9.加载其他操作系统注册表,然后进行修改时,找不到currentcontrolset,原因要看下面的说明

     在注册表HKLM\system注 册表项中包括用于windows启动的三个控件组(额外还可能存在一个备份控件组),在初始状态下,它们分别是ControlSet001、 ControlSet002以及CurrentControlSet。这些控件组中包含了操作系统配置的信息,比如服务、驱动、系统控制、枚举信息等等。
     默认情况下,ControlSet001是系统真实的配置信息,但是为了避免序号混乱,windows启动时会从ControlSet001复制一份副 本,作为操作系统当前的配置信息,也就是CurrentControlSet。我们对于计算机配置所作的修改都是直接写入到 CurrentControlSet,在重启过程中,windows会用CurrentControlSet的内容覆盖掉ControlSet001,以 保证这两个控件组一致。
     当操作系统每成功启动一次(指成功登录),它都将CurrentControlSet和ControlSet001中的数据复制到 ControlSet002中。这样,ControlSet002就成了“最近一次成功启动的配置信息”(很熟悉吧?在启动windows前按下F8所调 出的菜单中有这个选项)。所以我们一般系统注册表中都只是有这三个控件组,并且序号都是current、001和002。(此后均用简称
     但是,这个顺序和数目不是一成不变的,改变就发生在使用过“最近一次的正确配置”之后。这个时候,系统会把002当作系统真实的配置信息,而001这个存 在问题的控件组会被备份封存起来。系统启动时会从002复制副本到current,启动成功后又会把002和current的信息复制一份到一个新的控件 组作为新的“最近一次的正确配置”,也就是003。这个时候系统就存在4个控件组:current、002、003和备份的001,这里的001是一个存 在问题的组,除非我们想把系统恢复到上次使用“最近一次正确配置”之前的状态,否则001的内容将不再被使用。
HKLM\system注册表项中还有一个select的子项,其中有几个整数键,分别是:
“Current”数据项目表示 Windows XP 在这次启动过程中使用的控件组。 
“Default”数据项目表示 Windows XP 在下次启动时将使用的控件组,它与这次启动使用的控件组相同。 
“LastKnownGood ”数据项目表示您在启动过程中选择“最近一次的正确配置”时 Windows XP 将使用的控件组。 
“Failed”数据项表示 Windows XP 在其中保存失败启动产生的数据的控件组。 此控件组在用户第一次调用“最近一次的正确配置”选项之前并不实际存在。 
对应上面,系统默认时其顺序是:001、001、002、无;
第一次使用“lastknowngood”后:002、002、003、001
第二次使用“lastknowngood”后:003、003、004、002(之前的备份001被002覆盖掉,001组消失)
第三次使用“lastknowngood”后:004、004、001、003(002被003覆盖,而当004要生成新的“lastknowngood”时,001正好可用,于是001重生,002消失)

     依此类推,第四次1、1、2、4,第五次2、2、3、1…………  

控制集存储在 HKEY _ LOCAL _ MACHINE 子树在 SYSTEM 项下。 可能有几个控件设置,具体取决于频率更改系统设置或有问题所选择的设置。 典型安装的 Windows NT 将包含四个:

\ControlSet001
\ControlSet002
\CurrentControlSet
\Clone

ControlSet 001 可能上次的控件集与,启动而 ControlSet 002 可能是称为因此最后一个的已知完好的控件集内也上次成功启动 Windows NT 的控件组。 CurrentControlSet 子项实际上是一个指针 ControlSetXXX 项之一。 克隆是 CurrentControlSet 的克隆,并由内核初始化过程创建每次启动计算机。 为了更好地了解如何使用这些控件集,您需要知道其他子项选择。
选择也是在系统项下。 选择包含以下值:

当前
默认值
失败
LastKnownGood

如下面的图

image

每个这些值包含 REG _ DWORD 数据类型,并引用具体来说要控件设置。 是例如如果当前值设置为 0x1,然后 CurrentControlSet 指向 ControlSet 001。 同样,如果 LastKnownGood 设置为 0x2,上次的已知的正确控件集将是 ControlSet 002。 默认值通常同意与当前,和失败是指成功程序无法启动 Windows NT 的一个控件组。
最有价值、 可靠控件集是 CurrentControlSet。 如果您需要修改注册表中的系统设置,CurrentControlSet 将是最佳的子项选择,因为您知道它是正确的控件组。 您也知道是否您的修改会损害您的系统配置,您仍将能够使用上次的已知的正确控件集启动。

前言:

我的笔记本上安装了两个操作系统,一个windows 2008 ,直接安装在c盘上,一个win7 ,安装在d:\win7.vhd中,最近使用autorun 删除了淘宝的一个输入插件驱动,重新启动后键盘和触摸板都不能使用了,只能外接一个鼠标来用,但是外接的键盘却无法识别和安装,很是郁闷,幸亏通过WDS从网络上装了一个win7在D盘的一个vhd文件中,因此我有了一个系统来进行操作,首先是在win7下加载了windows 2008的注册表文件,修改了autologon注册表项目,以让windows 2008 自动登录,因为无法按ctrl+alt+del三个键(使用软键盘是不能发送这三个键的)进入windows 2008后使用设备管理器看了下硬件设备,发现ps/2 keyboard 和ps/2 mouse都打个感叹号还好在挂之前做了一个备份,有19GB大小,应该就是整个操作系统分区的镜像,这个备份格式是VHD格式的文件,本来想还原windows 2008的,但是进入到windows 2008的recovery 环境,却怎么都找不到我的备份的文件,又不能手动选择备份文件作在的位置,所以很是郁闷,备份实实在在的摆在眼前,就是用不了。

苦思瞑想有了个主意,备份不是VHD格式的么?我在win7下面是可以把vhd挂载成为一个磁盘的,那么我再使用ghost 来个partition to partion 不就可以实现还原了,而且我不用进recovery 环境了。

想到就干,在windows 7下下载了ghost32 11.5版本的,低版本的win7会报告有兼容性问题,

image

使用diskpart 挂载vhd镜像(以管理员身份运行diskpart)

image

我们使用磁盘管理器来看看被挂载后的VHD是怎么样的

image

挂载后的vhd现在是上图DISK3并且所示的卷标为SYSTEM的分区(您可能也注意到了disk1,那个是我win7所在的VHD,其被挂载了为C:)

接下来,使用ghost 32 来个partition to partition ,我的目标分区是disk0的system分区

image

注意上图黄色部分(Model为msfr virtual disk 1.0,并且drive 为 2 的磁盘是我现在win7所在的磁盘)红色部分(model 为Model为msfr virtual disk 1.0,并且drive 为 4 的磁盘是我挂载的windows 2008 vhd镜像所在的磁盘)其实可以直接用这里的drive 来判断哪个磁盘是哪个,因为这个drive的值和我们在磁盘管理器中所载看到的diskn中的n是对照的。

下面选择源磁盘以及分区

image

image

选择目标磁盘和分区

image

image

上面的目标分区H:竟然成了灰色的,郁闷阿,什么原因呢??google了很多文章出来,发现最有可能的是目标分区可能空间不足,因为两个分区的大小是一样的,ghost本身可能判断也有点问题,先尝试下能否把vhd的大小压缩下,因为实际文件总量没有19GB那么多,19gb只是原来磁盘的大小。(事实上通过后来的观察,确实是因为源分区(19.34GB)比目标分区大(19.33),也就是目标分区容量小于源分区,而且ghost在还原时会估计目标分区还原后是否有10%的剩余空间,如果没有那么就显示为灰色)见下图

 image

在磁盘管理器中,我找到了挂载 vhd的右键菜单中有个shrink volume的选项,

image

image

有600mb可以shrink 掉,那我就先尝试下吧,结果shrink的时候,需要该vhd所在的磁盘空间有VHD(无论是dynamic或者是fix类型的maximum大小的空间,也就是说如果我的VHD的最大容量是20gb,那么shrink的时候,必须在该vhd所在的磁盘分区上至少有20gb的剩余空间,就算你其他盘可能空间很足够,也不行,这程序写的真是烂哈,一点都不人性化。另外有个vhdresizer说是可以shrink vhd的,但是我的尝试是不行的,但是这个工具可以expand(扩大vhd的容量)另外还可以选择被扩大后VHD放在哪里,这就不会产生像上面的磁盘容量的限制

此条目发表在未分类分类目录。将固定链接加入收藏夹。

1 Responses to 尝试在WIN7(或者win7PE) 下使用GHost32快速还原windows 2008 backup and recovery 所生成的vhd文件备份失败总结

  1. 晨奇说道:

    详细!有空了试下.

留下评论