Windows实例无法正常启动,通过VNC登录时提示“状态:0xc000000e”错误怎么办?

本文介绍Windows实例无法启动,通过VNC登录时提示“状态:0xc000000e”错误的问题原因和解决方案。

问题现象

Windows实例无法正常启动,通过VNC登录时提示“状态:0xc000000e”错误。实例无法启动报错提示

可能原因

出现“0xc000000e”错误码的原因可能有以下两种:

  • 系统内存在Xen驱动残留,导致操作系统无法启动。

  • 磁盘签名冲突:相同镜像ID创建的A实例和B实例,其系统盘初始磁盘签名相同。当A实例的系统盘作为数据盘在B实例上联机时,Windows 系统为避免冲突会自动为其分配一个新的磁盘签名。这导致此系统盘的物理签名与其内部引导配置数据(BCD)中记录的旧签名不一致,从而挂载回实例A后操作系统将无法启动。

Xen驱动残留的解决方案

在挂载了修复盘的问题实例中,清理系统中的Xen驱动残留以解决该问题。

  1. 远程连接有问题的实例。

    您可以在诊断结果界面单击VNC远程连接,使用诊断报告中提供的临时登录实例的Administrator用户及密码信息登录挂载了修复盘的ECS实例。具体操作,请参见通过VNC连接实例

  2. 根据需要,选择其中一种方式清理Xen驱动残留。

    使用Windows PowerShell清理Xen驱动残留

    1. 以管理员身份运行Windows PowerShell

      image.png

    2. 查找已安装的Xen驱动。

      假设挂载盘符为D。

      $xenDrivers = Get-WindowsDriver -Path D:\ | Where-Object {$_.OriginalFileName -match 'xen'}
    3. 卸载已安装的Xen驱动。

      $xenDrivers | Remove-WindowsDriver -Path D:\
    4. (可选)安装virtio驱动。

      假设virtio驱动目录为E:\drivers,执行命令如下:

      Add-WindowsDriver -Path D:\ -Driver E:\drivers

    手动清理Xen驱动残留

    1. 运行对话框中输入regedit,单击确定,进入注册表编辑器。

    2. 选中HKEY_LOCAL_MACHINE,然后选择File > Load Hive...加载离线注册表,路径为D:\Windows\System32\config\SYSTEM,注册表名称为OfflineSYSTEM

      image.png

    3. 删除HKEY_LOCAL_MACHINE\OfflineSYSTEM\ControlSet001\Services\XenPCI\Parameters注册表下hide_device键或者将其值设置为空。image.png

  3. 在实例列表页,将鼠标悬浮至修复中的状态上,然后单击卸载修复盘

    卸载修复盘

  4. 重启实例,使以上配置生效。

    具体操作,请参见重启实例

  5. 远程连接ECS实例,如果该实例可以正常连接,说明问题已修复。

    具体操作,请参见使用Workbench终端连接登录Windows实例(RDP)

磁盘签名冲突的解决方案

Windows Server 2022为例。

重要

为防止误操作导致数据丢失,建议操作前创建快照备份数据。

  1. 准备一台正常运行的Windows实例(辅助实例),要求如下:

    • 不同镜像ID:辅助实例的镜像ID不能与故障实例相同。

    • 相同可用区:辅助实例必须和故障实例在同一可用区。

  2. 在控制台停止故障实例后,卸载故障实例的系统盘,然后将该系统盘作为数据盘挂载至辅助实例上。

  3. 使用Workbench终端连接登录辅助实例,按Win+R输入diskmgmt.msc并按Enter键,进入磁盘管理,右键新挂载的磁盘,单击联机,记录盘符名称。

    image

  4. 查看BCD信息中记录的签名。

    1. 加载配置单元。

      1. Win+R输入regedit并按Enter键,进入注册表编辑器

      2. 选中HKEY_LOCAL_MACHINE后,依次选择菜单栏的文件 > 加载配置单元,在加载配置单元界面,导航至新挂载云盘的BCD文件路径,并点击打开

        例如新挂载的云盘的盘符为D,则注册表文件路径为D:\Boot\BCD

        image

      3. 在弹出的对话框中,为加载的配置单元指定一个临时的项名称,例如offlinebcd,然后点击确定

    2. 查看BCD信息中记录的签名。

      1. 展开HKEY_LOCAL_MACHINE,选中上一步加载的配置单元offlinebcd后,依次选择菜单栏的编辑 > 查找,查找目标为Windows Boot Managerimage

      2. 选中查找到的Eelments的上一个Eelment,并在右侧窗格中,右键单击Element,选择修改

        示例中查找到的Eelments12000004,需要选中上一个11000001image

      3. 根据偏移 0x38 行确定磁盘签名。

        示例中BCD信息记录的磁盘签名为9B33D324image

    3. 卸载配置单元。

      选中加载的配置单元offlinebcd后,依次选择菜单栏的文件 > 卸载配置单元,在弹框中选择是,完成卸载。

  5. 查看磁盘签名。

    1. Win+R输入cmd并按Enter键,进入命令行提示符。

    2. 输入diskpart进入dispart工具。

    3. 执行list disk确定待修复磁盘的序号。

      DISKPART> list disk
        磁盘 ###  状态           大小     可用     Dyn  Gpt
        --------  -------------  -------  -------  ---  ---
        磁盘 0    联机               40 GB      0 B        *
        磁盘 1    联机               40 GB      0 B

      示例中待修复磁盘序号为1

    4. 选中待修复磁盘。

      <待修复磁盘序号>请替换为上一步获取的序号。

      select disk <待修复磁盘序号>
    5. 执行uniqueid disk,查看磁盘ID,获取磁盘签名。

      DISKPART> uniqueid disk
      磁盘 ID: C855B0A4

      示例中磁盘签名为C855B0A4BCD信息中签名9B33D324不一致。

  6. 修改磁盘签名。

    1. 执行以下指令,修改磁盘签名。<BCD信息中的磁盘签名>请替换为步骤b获取的签名。

      uniqueid disk id=<BCD信息中的磁盘签名>
    2. 执行uniqueid disk,查看签名是否修改成功。

      DISKPART> uniqueid disk
      磁盘 ID: 9B33D324

      示例中磁盘签名与BCD信息中签名9B33D324一致,修改成功。

  7. 验证BCD信息是否正常。

    输入exit退出diskpart工具后,运行以下命令,<盘符名称>请替换为3获取的名称。可正确显示deviceosdevice则表示BCD信息恢复正常。

    bcdedit /store <盘符名称>:\Boot\BCD

    image

  8. 卸载修复后的云盘并将其挂载至原ECS实例,验证是否可以正常启动。