我不是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。
这个实例是临时实例,您可以在恢复操作系统/数据后将其删除。
从Google云端控制台
selectCompute Engine> VM Instances,然后selectCREATE INSTANCE
确保您select与快照相同的操作系统。 一旦启动,请确保您可以执行远程桌面并login到新的VM实例。
记下实例正在运行的实例名称和区域。
从Google云端控制台
selectCompute Engine> Disks并selectCREATE DISK
请确保您select相同的磁盘大小/磁盘types作为/快照之前,否则Windows可能会引发启动错误。 还要确保磁盘与恢复实例在同一个区域。 如果您的磁盘与您的实例不在同一个区域,那么您将无法附加它。
在此步骤中,将您(在步骤2中创build的)磁盘附加到VM实例(在步骤1中创build)
打开Google云端Shell并键入以下命令
gcloud compute instances attach-disk [INSTANCE-NAME] --disk [DISK-NAME] --zone [ZONE]
用您正在运行实例的实例名称,磁盘名称和区域replacevariables。
转到开始>search并inputdiskmgmt.msc以打开磁盘pipe理工具。 如果刚刚连接的磁盘显示为脱机 ,则右键单击该磁盘并select联机 。
确保磁盘处于联机状态后,确认磁盘上的每个卷都分配了驱动器号。 分配的特定驱动器号并不重要。 如果任何卷没有驱动器号分配,请右键单击卷并select“更改驱动器号和path”,然后select“添加”。 select分配下面的驱动器号,让它select下一个可用的驱动器号,然后单击确定。 再一次,使用的实际驱动器号并不重要。
记下驱动器号。 对我来说,它的D:驱动器。
尝试在连接的驱动器中创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一个新文件夹以确保磁盘不受写保护。
如果您熟悉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实例
从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]