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

适用于:✔️ Windows VM

本文提供了解决 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。 第 2 代 VM(使用 UEFI)不使用活动分区。

  1. 将系统磁盘附加到恢复 VM

  2. 开始与恢复 VM 建立远程桌面连接。

  3. 转到“计算机管理”>“磁盘管理”。 确保磁盘在磁盘管理控制台中标记为“联机”。 请留意分配给附加系统磁盘的驱动器号。

    显示附加到恢复 VM 的磁盘的屏幕截图。

  4. 标识启动分区和 Windows 分区。 如果 OS 磁盘上只有一个分区,则此分区既是启动分区,又是 Windows 分区。

    如果 OS 磁盘包含多个分区,可以通过查看其中的文件夹来标识分区:

    • Windows 分区包含名为 Windows 的文件夹,此分区大于其他分区。

    • 启动分区包含名为 Boot 的文件夹。 此文件夹默认已隐藏。 若要查看该文件夹,必须显示已隐藏的文件和文件夹,并禁用“隐藏受保护的操作系统文件(推荐)”选项。 启动分区通常为 300 MB~500 MB。

  5. 以管理员身份运行以下命令以创建启动记录:

    bcdboot <Windows partition>:\Windows /S <windows partition>: 
    
  6. 使用 DISKPART 工具检查 Windows 分区是否处于活动状态:

    1. 打开提升的命令提示符并打开 DISKPART 工具。

      diskpart

    2. 列出系统上的磁盘,并查找添加的磁盘,并继续选择新磁盘。 在此示例中,新磁盘为 Disk 1。

      list disk
      sel disk 1
      

      diskpart 窗口显示列表磁盘和 sel disk 1 命令的输出。磁盘 0 和磁盘 1 显示在表中。磁盘 1 是所选磁盘。

    3. 列出该磁盘上的所有分区,然后继续选择要检查的分区。 通常,系统托管分区较小且大小约为 350 MB。 下图中,此分区为分区 1。

      list partition
      sel partition 1
      

      显示“分区 1”的屏幕截图是所选分区。

    4. 检查分区的状态。 在我们的示例中,分区 1 未处于活动状态。

      detail partition

      包含详细信息分区命令输出的 diskpart 窗口,其中分区 1 不处于活动状态。

      如果分区未处于活动状态,请更改活动标志,然后重新检查更改是否已正确完成。

      active
      detail partition
      

      包含分区 1 处于活动状态的详细信息分区命令输出的 diskpart 窗口。

    5. 退出 DISKPART 工具。

      exit

修复磁盘分区

  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 反馈社区