排查启动错误 - 发生磁盘读取错误

本文提供了解决无法在 Azure 虚拟机 (VM) 中读取磁盘的问题的步骤。

症状

使用启动诊断查看 VM 的屏幕截图时,会看到屏幕截图显示一个提示,其中包含消息“发生磁盘读取错误。 按 Ctrl+Alt+Del 重启。”

出现磁盘读取错误消息的屏幕截图。

原因

此错误消息指示磁盘结构已损坏且不可读。 如果使用第 1 代 VM,则包含启动配置数据的磁盘分区也可能未设置为 “活动”。

解决方案

过程概述

提示

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

  1. 创建和访问修复 VM。
  2. 选择解决方案:
  3. 启用串行控制台和内存转储收集。
  4. 重新生成 VM。

注意

遇到此启动错误时,来宾操作系统 (OS) 无法正常运行。 你将在脱机模式下进行故障排除以解决此问题。

创建和访问修复 VM

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

将分区状态设置为活动

第 1 代 VM 应首先验证保存 BCD 存储的 OS 分区是否标记为 活动。 如果有第 2 代 VM,请跳到 修复磁盘分区,因为状态标志在以后的一代中已弃用。

  1. (cmd.exe) 打开提升的命令提示符。

  2. 输入 diskpart 以启动 DISKPART 工具。

  3. 输入 列表磁盘 以列出系统上的磁盘,并标识附加的 OS 虚拟硬盘 (VHD) 。

  4. 找到附加的 OS VHD 后,输入 sel disk # 以选择磁盘。 有关磁盘 1 是附加的 OS VHD 的示例,请参阅下图。

    diskpart 窗口的屏幕截图,其中显示了列出并选择磁盘的结果。

  5. 选择磁盘后,输入 列表分区 以列出所选磁盘的分区。

  6. 标识启动分区后,输入 sel partition # 以选择分区。 启动分区的大小通常约为 350 MB。 请参阅下图,其中分区 1 是启动分区。

    diskpart 窗口的屏幕截图,其中显示了列出并选择分区的结果。

  7. 输入详细信息分区以检查分区的状态。 有关分区设置为“活动:否”或“活动:”的示例,请参阅以下屏幕截图。

    活动:否

    diskpart 窗口的屏幕截图,其中包含详细信息分区命令的输出,其中“分区 1”设置为“活动:否”。

    活动:是

    diskpart 窗口的屏幕截图,其中包含详细信息分区命令的输出,其中分区 1 设置为“活动:是”。

  8. 如果分区未设置为 “活动”,请输入 “活动” 以更改“活动”标志。

  9. 输入详细信息分区以检查状态更改是否已正确完成,并验证输出是否包括活动:是

  10. 输入 exit 以关闭 DISKPART 工具并保存配置更改。

修复磁盘分区

  1. (cmd.exe) 打开提升的命令提示符。

  2. 使用以下命令在磁盘上运行 CHKDSK () 并执行错误修复:

    chkdsk <DRIVE LETTER>: /f

    添加 /f 命令选项可修复磁盘上的任何错误。 请确保将驱动器号>替换为<附加的 OS VHD 的字母。

启用串行控制台和内存转储收集

重要

此部分(或称方法或任务)介绍了修改注册表的步骤。 但是,注册表修改不当可能会出现严重问题。 因此,请务必严格按照这些步骤操作。 出于防范目的,请在修改之前备份注册表,以便在出现问题时还原注册表。 有关如何备份和还原注册表的详细信息,请参阅如何备份和还原 Windows 中的注册表

建议:在重新生成 VM 之前,请按照以下步骤启用串行控制台和内存转储收集:

  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 反馈社区提交产品反馈。