由于 Windows 启动管理器,Windows VM 无法启动

适用于:✔️ Windows VM

本文提供了解决 Windows 启动管理器阻止启动 Azure 虚拟机(VM)的问题的步骤。

症状

除非手动指示,否则 VM 在等待用户提示时停滞不前,不会启动。

使用启动诊断查看 VM 的屏幕截图时,你将看到屏幕截图显示 Windows 启动管理器,并显示消息“选择要启动的操作系统”,或按 TAB 选择工具:

Windows 启动管理器屏幕状态为“选择要启动的操作系统”,或按 Tab 选择工具。

原因

此错误是由于 Windows 启动管理器中的 BCD 标志 displaybootmenu 导致的。 启用标志后,Windows 启动管理器会提示用户在启动过程中选择要运行的加载程序,从而导致启动延迟。 在 Azure 中,此功能可能会增加启动 VM 所需的时间。

解决方案

提示

如果 VM 有最近的备份,可以尝试 从备份 还原 VM 以修复启动问题。

流程概述:

  1. 使用串行控制台配置更快的启动时间。
  2. 创建和访问修复 VM。
  3. 在修复 VM 上配置更快的启动时间。
  4. 建议:在重新生成 VM 之前,请启用串行控制台和内存转储收集。
  5. 重新生成 VM。

使用串行控制台配置更快的启动时间

如果有权访问串行控制台,可通过两种方式更快地启动。 减少 displaybootmenu 等待时间,或者完全删除标志。

  1. 按照说明访问 适用于 Windows 的 Azure 串行控制台以获取对基于文本的控制台的访问权限。

    注意

    如果无法访问串行控制台,请跳到 创建和访问修复 VM

  2. 选项 A:缩短等待时间

    a. 等待时间默认设置为 30 秒,但可以更改为更快的时间(例如 5 秒)。

    b. 在串行控制台中使用以下命令调整超时值:

    bcdedit /set {bootmgr} timeout 5

  3. 选项 B:删除 BCD 标志

    a. 若要完全阻止显示启动菜单提示,请输入以下命令:

    bcdedit /deletevalue {bootmgr} displaybootmenu

    注意

    如果无法使用串行控制台在上述步骤中配置更快的启动时间,可以继续执行以下步骤。 现在,你将在脱机模式下进行故障排除,以解决此问题。

创建并访问修复 VM

  1. 使用 VM 修复命令的步骤 1-3 来准备一个修复 VM。
  2. 使用远程桌面连接连接到修复 VM。

在修复 VM 上配置更快的启动时间

  1. 打开权限提升的命令提示符。

  2. 输入以下内容以启用 DisplayBootMenu:

    对第 1 代 VM 使用此命令

    bcdedit /store <VOLUME LETTER WHERE THE BCD FOLDER IS>:\boot\bcd /set {bootmgr} displaybootmenu yes

    对第 2 代 VM 使用此命令

    bcdedit /store <VOLUME LETTER OF EFI SYSTEM PARTITION>:EFI\Microsoft\boot\bcd /set {bootmgr} displaybootmenu yes

    替换任何大于或小于符号以及其中的文本,例如“< 此处 >的文本”。

  3. 将超时值更改为 5 秒:

    对第 1 代 VM 使用此命令

    bcdedit /store <VOLUME LETTER WHERE THE BCD FOLDER IS>:\boot\bcd /set {bootmgr} timeout 5

    对第 2 代 VM 使用此命令

    bcdedit /store <VOLUME LETTER OF EFI SYSTEM PARTITION>:EFI\Microsoft\boot\bcd /set {bootmgr} timeout 5

    替换任何大于或小于符号以及其中的文本,例如“< 此处 >的文本”。

若要启用内存转储收集和串行控制台,请执行以下步骤:

  1. 以管理员身份打开提升的命令提示符会话。

  2. 使用 /ems 和 /emssettings 选项运行以下 BCDEdit 命令:

    启用串行控制台:

    bcdedit /store <volume-letter-containing-the-bcd-folder>:\boot\bcd /ems {<boot-loader-identifier>} ON
    bcdedit /store <volume-letter-containing-the-bcd-folder>:\boot\bcd /emssettings EMSPORT:1 EMSBAUDRATE:115200
    
  3. 验 OS 磁盘上的可用空间是否大于 VM 上的内存大小 (RAM)。

    如果 OS 磁盘上没有足够的空间,请更改创建内存转储文件的位置,并将该位置引用附加到 VM 且有足够的可用空间的任何数据磁盘。 若要更改位置,请替换为 %SystemRoot% 数据磁盘的驱动器号,如 F:以下命令中的驱动器号。

    若要启用 OS 转储文件,请运行以下 加载添加卸载 命令,以使用 reg 工具实现建议的配置:

    从损坏的 OS 磁盘加载注册表配置单元:

    reg load HKLM\<broken-system> <volume-letter-of-broken-os-disk>:\windows\system32\config\SYSTEM
    

    在 ControlSet001 上启用:

    reg add "HKLM\<broken-system>\ControlSet001\Control\CrashControl" /v CrashDumpEnabled /t REG_DWORD /d 1 /f
    reg add "HKLM\<broken-system>\ControlSet001\Control\CrashControl" /v DumpFile /t REG_EXPAND_SZ /d "%SystemRoot%\MEMORY.DMP" /f
    reg add "HKLM\<broken-system>\ControlSet001\Control\CrashControl" /v NMICrashDump /t REG_DWORD /d 1 /f
    

    在 ControlSet002 上启用:

    reg add "HKLM\<broken-system>\ControlSet002\Control\CrashControl" /v CrashDumpEnabled /t REG_DWORD /d 1 /f
    reg add "HKLM\<broken-system>\ControlSet002\Control\CrashControl" /v DumpFile /t REG_EXPAND_SZ /d "%SystemRoot%\MEMORY.DMP" /f
    reg add "HKLM\<broken-system>\ControlSet002\Control\CrashControl" /v NMICrashDump /t REG_DWORD /d 1 /f
    

    卸载损坏的 OS 磁盘:

    reg unload HKLM\<broken-system>
    

重新生成原始 VM

使用 VM 修复命令的步骤 5 重新装配 VM。

联系我们寻求帮助

如果你有任何疑问或需要帮助,请创建支持请求联系 Azure 社区支持。 你还可以将产品反馈提交到 Azure 反馈社区