从快照创build的Windows Server 2012 VM无法在GCE上引导

我不是Windows专家,从快照恢复Windows Server 2012时卡住了。 我正尝试在几个星期前从Windows Server 2012 VM实例创build的快照中,在Google Compute Engine – GCE上创build一个新的VM实例。 每当我创build一个新的虚拟机,我永远不能做RDP,然后阅读GCE故障排除指南,我确定可能是Windows无法正常启动。 我能够查看串口输出如下

SeaBIOS (version 1.8.2-20161003_105447-google) Total RAM Size = 0x00000003c0000000 = 15360 MiB CPUs found: 4 Max CPUs supported: 4 found virtio-scsi at 0:3 virtio-scsi vendor='Google' product='PersistentDisk' rev='1' type=0 removable=0 virtio-scsi blksize=512 sectors=314572800 = 153600 MiB drive 0x000f3120: PCHS=0/0/0 translation=lba LCHS=1024/255/63 s=314572800 Booting from Hard Disk 0... 

它坚持从硬盘0引导…

我深入挖掘并阅读下面的串行端口2日志

 Windows Boot Manager Windows failed to start. A recent hardware or software change might be the cause. To fix the problem: Insert your Windows installation disc and restart your computer. Choose your language settings, and then click "Next." Click "Repair your computer. If you do not have this disc, contact your system administrator or computer manufacturer for assistance. Status: A required device isn't connected or can't be accessed. 

我把磁盘连接到另一台机器上,我可以看到磁盘上的所有文件。 但不能修改任何东西,因为磁盘被写保护。

我创build快照的原始虚拟机仍然在那里,所以我试图将快照附加到原始虚拟机实例作为引导磁盘,以便具有相同的硬件configuration,但我不能分离与该实例相关联的磁盘,它给了我下面的错误。

 Hot-remove of the root disk is not supported. 

我尝试使用与使用相同机器types创build虚拟机一样快照。 但是也失败了。

有关如何从快照创build新的VM实例并正确启动Windows的任何build议?

经过文章,论坛和用户指南的数量,最后我能够从快照成功地旋转Windows VM实例。

引导程序和引导configuration数据(BCD)是问题所在。 理想情况下,您使用OS磁盘的图像。 在我的情况下,操作系统和数据在同一个磁盘,我们只是有一个快照。 GCE允许从快照创build新的VM实例,但在我的情况下,实例没有启动。

按照一步一步的指导,从快照恢复您的操作系统/数据。

概要:

从快照创build磁盘并使用新的临时VM实例修复磁盘BCD。

详细的步骤

步骤1:创build恢复VM实例并启动它

这个实例是临时实例,您可以在恢复操作系统/数据后将其删除。

从Google云端控制台

selectCompute Engine> VM Instances,然后selectCREATE INSTANCE

确保您select与快照相同的操作系统。 一旦启动,请确保您可以执行远程桌面并login到新的VM实例。

记下实例正在运行的实例名称和区域。

步骤2:从快照创build新磁盘

从Google云端控制台

selectCompute Engine> Disks并selectCREATE DISK

请确保您select相同的磁盘大小/磁盘types作为/快照之前,否则Windows可能会引发启动错误。 还要确保磁盘与恢复实例在同一个区域。 如果您的磁盘与您的实例不在同一个区域,那么您将无法附加它。

步骤3:将磁盘连接到恢复实例

在此步骤中,将您(在步骤2中创build的)磁盘附加到VM实例(在步骤1中创build)

打开Goog​​le云端Shell并键入以下命令

 gcloud compute instances attach-disk [INSTANCE-NAME] --disk [DISK-NAME] --zone [ZONE] 

用您正在运行实例的实例名称,磁盘名称和区域replacevariables。

步骤4:安装磁盘并在Windows中分配驱动器盘符

转到开始>search并inputdiskmgmt.msc以打开磁盘pipe理工具。 如果刚刚连接的磁盘显示为脱机 ,则右键单击该磁盘并select联机

确保磁盘处于联机状态后,确认磁盘上的每个卷都分配了驱动器号。 分配的特定驱动器号并不重要。 如果任何卷没有驱动器号分配,请右键单击卷并select“更改驱动器号和path”,然后select“添加”。 select分配下面的驱动器号,让它select下一个可用的驱动器号,然后单击确定。 再一次,使用的实际驱动器号并不重要。

记下驱动器号。 对我来说,它的D:驱动器。

第6步:删除磁盘的写保护

尝试在连接的驱动器中创build一个新的文件夹。 如果您的磁盘被写保护,并且您无法在驱动器中创build任何文件或文件夹,则需要closures写保护,否则可以跳过此步骤。

打开提升命令提示符(以pipe理员身份运行)并键入

 diskpart 

你会得到DISKPART>提示

types:

 list volume 

系统将显示所有带号码的卷。 接下来,您需要input以下内容来select卷:

 select volume # 

其中#是卷号。 对我来说是1

然后键入以下命令删除写保护

 attr disk clear readonly attr volume clear readonly attr volume clear hidden attr volume clear shadowcopy 

inputexit或closures命令提示符窗口退出diskpart。 在Windows资源pipe理器中打开驱动器。 你应该能够看到你所有的数据和Windows系统文件。 在驱动器中创build一个新文件夹以确保磁盘不受写保护。

步骤7:修复引导configuration数据(BCD)

如果您熟悉Windows bcedit命令,那么请尽量使用bcedit,但我使用EasyBCD来修复启动configuration数据。

https://neosmart.net/EasyBCD下载并安装EasyBCD到您的恢复VM实例

一旦安装打开EasyBCD并点击

文件>selectBCD存储

并在文件名下的文件select对话框中inputD:\ Boot \ BCD或在步骤5中分配的任何驱动器号。系统将显示驱动器的引导configuration数据。

点击编辑引导菜单button,然后select跳过引导菜单 ,然后点击保存设置

单击高级设置button,然后在基本选项卡上单击驱动器:菜单并select磁盘的驱动器号。

请注意:驱动器号应与步骤5相同

点击BCD备份/修复button,在BCDpipe理选项下select重新创build/修复引导文件 ,然后点击执行操作button。

通过再次打开磁盘pipe理使磁盘脱机,然后右键单击该磁盘并select脱机

现在,将您的RDP窗口最小化,并在Google云端Shell中键入以下命令以将磁盘从Recovery实例中分离

 gcloud compute instances detach-disk [INSTANCE-NAME] --disk [DISK-NAME] --zone [ZONE] 

现在,您已经修复了从快照创build的磁盘的引导configuration数据。

我们现在准备旋转VM实例并使用此磁盘启动它。 让我们从磁盘创build实例

第8步:创build新的VM实例

从Google云端控制台中selectCompute Engine> VM Instances,然后selectCREATE INSTANCE

为了避免在第一次运行时出现任何问题,请确保您select与创build快照之前相同的机器types

在这一点上,你应该能够有工作的虚拟机实例,你应该能够做RDPlogin。

如果您仍然遇到任何问题,请通过单击Google云端控制台中的VM实例来查看串行端口日志,然后向下滚动到页面底部,或者您可以在Google Cloud Shell中键入以下命令。

 gcloud compute instances get-serial-port-output [INSTANCE-NAME] --zone [ZONE] 

学过的知识

  • 对于带/不带数据的操作系统磁盘,请使用图像而不是快照。
  • 即使是testing机器,也不要将数据保存在与操作系统相同的磁盘上,而是在做一些临时工作。