我有一台虚拟机,运行 Windows 2008 R2 x64 作为客户机,并运行 Hyper-V R2 x64 作为主机。
我已经克隆了虚拟机的 vhd 文件,现在,我想在我的笔记本电脑上直接从它启动,我的笔记本电脑是 Windows 7 Enterprise X64 SP1(具有硬件虚拟化)。
为此,我设置了一个 BCD 条目:
bcdedit /copy {current} /d "Boot_From_VHD"
该条目已成功复制到 {1230b942-0833-11e1-abb2-d1169c7203ba}
bcdedit /set {1230b942-0833-11e1-abb2-d1169c7203ba} device vhd=[E:]\vhd\myvhd.vhd
bcdedit /set {1230b942-0833-11e1-abb2-d1169c7203ba} osdevice vhd=[E:]\vhd\myvhd.vhd
bcdedit /set {1230b942-0833-11e1-abb2-d1169c7203ba} detecthal on
运行后bcdedit /enum
,我可以看到我的条目:
Windows Boot Loader
-------------------
identifier {1230b942-0833-11e1-abb2-d1169c7203ba}
device vhd=[E:]\vhd\myvhd.vhd
path \Windows\system32\winload.exe
description Boot_From_VHD
locale en-us
inherit {bootloadersettings}
osdevice vhd=[E:]\vhd\myvhd.vhd
systemroot \Windows
resumeobject {1230b940-0833-11e1-abb2-d1169c7203ba}
nx OptIn
detecthal Yes
重新启动后,我可以在启动菜单中看到该条目。如果我选择新创建的条目,我可以看到几秒钟的 Windows 徽标,然后是 BSOD。
这个 BSOD 没什么用,因为它只建议运行chkdsk
。还放了一堆 64 位十六进制数字,但没有错误消息。
知道如何解决这个问题吗?
附言:除了潜在的硬件更改外,我希望保持系统完好无损。我没有运行,sysprep /generalize
因为它会重置所有用户、主机名等。
答案1
我终于解决了我的问题。
BSOD 显示错误STOP: 0x0000007B
,这意味着inaccessible boot device
。
这让我陷入了缺少驱动程序的境地。实际上,Hyper-V 机器使用 IDE 仿真,我猜想映像中只有 IDE 驱动程序可用,而我的笔记本电脑使用 eSata 驱动器。
为了解决这个问题,我使用DISM /add-driver 命令使用以下步骤,运行操作系统的笔记本电脑:
在磁盘管理中挂载 VHD(diskpart 也可以)-->在我的计算机上,添加两个驱动器,F:用于保留的系统分区,G:用于 Windows 分区
通过键入以下内容将笔记本电脑的所有驱动程序添加到图像中:
dism /image:g: /add-driver /driver:c:\windows\inf /recurse
还添加最新下载的驱动程序:
dism /image:g: /add-driver /driver:c:\somewhere\drivers /recurse
这花了几分钟,但操作后,我的 vhd 包含所有驱动程序。我认为在目标笔记本电脑上运行该命令很重要,以确保添加了所有实际硬件的驱动程序。
最后,我重新启动,选择了正确的启动项,然后它就启动了:)
由于检测到新的硬件,我不得不重新启动几次,但最终我的系统已从虚拟迁移到物理。