适用于:✔️ Windows VM
本文提供了解决 Azure 虚拟机(VM)中无法读取磁盘的问题的步骤。
现象
使用 启动诊断 查看 VM 的屏幕截图时,会看到屏幕截图显示一条提示,其中包含“发生磁盘读取错误”消息。 按 Ctrl+Alt+Del 重启。
原因
此错误消息指示磁盘结构已损坏且无法读取。 如果使用第 1 代 VM,则包含启动配置数据的磁盘分区也可能未设置为 “活动”。
解决方案
过程概述
提示
如果 VM 有最近的备份,可以尝试 从备份 还原 VM 以修复启动问题。
- 创建和访问修复 VM。
- 选择解决方案:
- 启用串行控制台和内存转储收集。
- 重新生成 VM。
注意
遇到此启动错误时,来宾操作系统 (OS) 无法正常运行。 需要在脱机模式下进行故障排除来解决此问题。
创建和访问修复 VM
- 使用 VM 修复命令的步骤 1-3 来准备一个修复 VM。
- 使用远程桌面连接来连接到修复 VM。
将分区状态设置为活动
注意
此缓解仅适用于第 1 代 VM。 第 2 代 VM(使用 UEFI)不使用活动分区。
开始与恢复 VM 建立远程桌面连接。
转到“计算机管理”>“磁盘管理”。 确保磁盘在磁盘管理控制台中标记为“联机”。 请留意分配给附加系统磁盘的驱动器号。
标识启动分区和 Windows 分区。 如果 OS 磁盘上只有一个分区,则此分区既是启动分区,又是 Windows 分区。
如果 OS 磁盘包含多个分区,可以通过查看其中的文件夹来标识分区:
Windows 分区包含名为 Windows 的文件夹,此分区大于其他分区。
启动分区包含名为 Boot 的文件夹。 此文件夹默认已隐藏。 若要查看该文件夹,必须显示已隐藏的文件和文件夹,并禁用“隐藏受保护的操作系统文件(推荐)”选项。 启动分区通常为 300 MB~500 MB。
以管理员身份运行以下命令以创建启动记录:
bcdboot <Windows partition>:\Windows /S <windows partition>:
使用 DISKPART 工具检查 Windows 分区是否处于活动状态:
打开提升的命令提示符并打开 DISKPART 工具。
diskpart
列出系统上的磁盘,并查找添加的磁盘,并继续选择新磁盘。 在此示例中,新磁盘为 Disk 1。
list disk sel disk 1
列出该磁盘上的所有分区,然后继续选择要检查的分区。 通常,系统托管分区较小且大小约为 350 MB。 下图中,此分区为分区 1。
list partition sel partition 1
检查分区的状态。 在我们的示例中,分区 1 未处于活动状态。
detail partition
如果分区未处于活动状态,请更改活动标志,然后重新检查更改是否已正确完成。
active detail partition
退出 DISKPART 工具。
exit
修复磁盘分区
打开提升的命令提示符 (cmd.exe)。
使用以下命令对磁盘运行“CHKDSK”,并执行错误修复:
chkdsk <DRIVE LETTER>: /f
添加 /f 命令选项可修复磁盘上出现的任何错误。 请确保将驱动器号>替换为<附加的 OS VHD 的字母。
启用串行控制台和内存转储收集
重要
此部分(或称方法或任务)介绍了修改注册表的步骤。 但是,注册表修改不当可能会出现严重问题。 因此,按以下步骤操作时请务必谨慎。 出于防范目的,请在修改之前备份注册表,以便在出现问题时还原注册表。 有关如何备份和还原注册表的详细信息,请参阅:如何备份和还原 Windows 中的注册表。
建议:在重新生成 VM 之前,请按照以下步骤启用串行控制台和内存转储收集:
以管理员身份打开提升的命令提示符会话。
使用 /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
验 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 反馈社区。