概括:

概括:

我不是 Windows 专家,在从快照恢复 Windows Server 2012 时遇到了问题。我正尝试从几周前从 Windows Server 2012 VM 实例创建的快照在 Google Compute Engine - GCE 上创建一个新的 VM 实例。每当我创建新的 VM 时,我都无法执行 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.  

我把磁盘连接到另一台机器上,可以看到磁盘上的所有文件。但由于磁盘有写保护,所以无法修改任何内容。

我创建快照的原始虚拟机仍然在那里,所以我尝试将快照作为启动磁盘附加到原始虚拟机实例以获得相同的硬件配置,但我无法分离与该实例关联的磁盘,并且它给了我以下错误。

Hot-remove of the root disk is not supported.

我尝试创建与拍摄快照之前机器类型相同的虚拟机。但也失败了。

关于如何从快照创建新的 VM 实例并正确启动 Windows,有什么建议吗?

答案1

在阅读了大量的文章、论坛和用户指南之后,我终于能够从快照中成功旋转 Windows VM 实例。

问题出在引导加载程序和引导配置数据 (BCD) 上。理想情况下,您使用操作系统磁盘映像。在我的情况下,操作系统和数据位于同一磁盘中,我们只有一个快照。GCE 允许从快照创建新的 VM 实例,但在我的例子中,实例没有启动。

按照分步指南从快照恢复您的操作系统/数据。

概括:

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

详细步骤

步骤 1:创建恢复虚拟机实例并启动它

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

通过 Google Cloud 控制台

选择计算引擎 > 虚拟机实例并选择创建实例

确保选择与快照相同的操作系统。启动后,确保可以执行远程桌面并登录到新的 VM 实例。

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

第 2 步:从快照创建新磁盘

通过 Google Cloud 控制台

选择计算引擎 > 磁盘并选择创建磁盘

确保在拍摄快照时/之前选择的磁盘大小/磁盘类型相同,否则 Windows 可能会出现启动错误。还要确保磁盘与恢复实例位于同一区域。如果您的磁盘与实例不在同一区域,那么您将无法连接它。

步骤 3:将磁盘附加到恢复实例

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

打开 Google Cloud Shell 并输入以下命令

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

将变量替换为您运行实例的实例名称、磁盘名称和区域。

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

转到“开始”>“搜索”,然后输入磁盘管理控制台打开磁盘管理工具。如果您刚刚附加的磁盘显示为离线,右键单击并选择在线的

确保磁盘处于联机状态后,验证磁盘上的每个卷是否都分配了驱动器号。分配的具体驱动器号并不重要。如果任何卷没有分配驱动器号,请右键单击该卷并选择更改驱动器号和路径,然后选择添加。选择分配以下驱动器号,让它选择下一个可用的驱动器号,然后单击确定。同样,实际使用的驱动器号并不重要。

记下驱动器号。对我来说是 D: 驱动器。

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

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

打开提升的命令提示符(以管理员身份运行)并输入

diskpart 

您将获得 DISKPART> 提示

类型:

list volume 

系统将显示所有带编号的卷。接下来,您需要通过键入以下内容来选择卷:

select volume # 

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

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

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

输入以下命令退出 diskpart出口或关闭命令提示符窗口。在 Windows 资源管理器中打开驱动器。您应该能够看到所有数据和 Windows 系统文件。在驱动器中创建一个新文件夹,以确保磁盘没有写保护。

步骤7:修复启动配置数据(BCD)

如果你熟悉 Windows bcedit 命令,那么一定要使用 bcedit,但我使用了易BCD用于修复启动配置数据。

从以下位置下载并安装 EasyBCD 到您的恢复虚拟机实例上https://neosmart.net/EasyBCD

安装后打开 EasyBCD 并点击

文件 > 选择 BCD 存储

并在文件选择对话框中输入文件名D:\Boot\BCD或您在步骤 5 中分配的任何驱动器号。系统将显示驱动器的启动配置数据。

点击编辑启动菜单按钮并选择跳过启动菜单并点击保存设置

点击高级设置按钮下方基本的点击标签驾驶:菜单并选择磁盘的驱动器号。

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

点击BCD 备份/修复按钮下方BCD管理选项选择重新创建/修复启动文件并点击执行操作按钮。

再次打开磁盘管理,使磁盘脱机,然后右键单击磁盘并选择离线

现在最小化你的 RDP 窗口并在 Google Cloud Shell 中输入以下命令以将磁盘从恢复实例中分离出来

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

现在您已经修复了从快照创建的磁盘的启动配置数据。

现在,我们已准备好旋转虚拟机实例并使用此磁盘启动它。让我们从磁盘创建实例

步骤 8:创建新的虚拟机实例

从 Google Cloud Console 中选择计算引擎 > 虚拟机实例 并选择创建实例

为了避免首次运行时出现任何问题,请确保选择相同的机器的种类和快照创建时或之前一样。

此时您应该能够拥有可运行的 VM 实例并且能够进行 RDP 登录。

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

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

学过的知识

  • 对于有/没有数据的 OS 磁盘,使用映像而不是快照。
  • 不要将数据与操作系统保存在同一磁盘中,即使它是一台测试机器并且您正在做一些临时工作。

相关内容