Windows 停止错误0xC0000102状态文件已损坏
本文提供了解决 Windows 操作系统 (OS) 遇到停止错误0xC0000102(导致 Azure 虚拟机 (VM) 无法启动)的问题的步骤。
症状
使用启动诊断查看 VM 的屏幕截图时,屏幕截图显示操作系统在启动过程中遇到错误代码0xC0000102的消息。
原因
错误0xC0000102是STATUS_FILE_CORRUPT_ERROR,这意味着损坏的文件正在阻止 VM 正确启动。 出现此错误代码的可能原因有两种:
- 错误消息中显示的文件已损坏。
- 磁盘结构已损坏且不可读。
解决方案
尝试从备份还原 VM
如果最近备份了 VM,可以尝试 从备份还原 VM 以修复启动问题。 如果无法从备份还原 VM,请执行以下步骤:
- 创建和访问修复 VM
- 修复或替换损坏的文件
- 启用串行控制台和内存转储收集
- 重新生成 VM
注意
遇到此错误时,来宾 OS 无法正常运行。 你将在脱机模式下进行故障排除以解决此问题。
步骤 1:创建和访问修复 VM
- 按照 VM 修复过程示例 的步骤 1-3 准备修复 VM。
- 使用远程桌面连接连接到修复 VM。
步骤 2:修复或替换损坏的文件
修复损坏的文件
打开提升的 CMD 提示符并在磁盘上运行 chkdsk :
chkdsk <<DRIVE LETTER>: /F
替换损坏的文件
使用启动诊断查看 VM 的屏幕截图。 请注意错误中显示的文件。
若要替换损坏的二进制文件,请执行以下步骤:
浏览到屏幕截图中显示的二进制文件的位置。
请注意文件的版本。 (右键单击“ 属性 ”,然后选择“ 详细信息 ”选项卡。)
将文件重命名为 <FILENAME。EXT>。老。 例如,上图中显示的文件将从 \windows\system32\drivers\cng.sys 重命名为 \windows\system32\drivers\cng.sys.old。
从内部存储库还原此文件。
启动 CMD 会话并找到包含 Windows 目录的卷。
浏览到 \windows\winsxs 并搜索屏幕截图中显示的二进制文件:
dir <<binary from the screenshot with extension>> /s
以下命令将列出 VM 包含的指定文件的所有不同版本,并提供该组件的路径历史记录。 应从列表中选择同一版本的最新版本,并继续将该文件复制到屏幕截图中所述的文件夹路径。
copy <<drive>>:\Windows\WinSxS\<<directory_where_file_is>>\<<binary_with_extension>> <<drive>>:\Windows\System32\Drivers\
步骤 3:启用串行控制台和内存转储收集
在重新生成 VM 之前,建议启用内存转储收集和串行控制台。 为此,请运行以下脚本:
打开提升的命令提示符会话 (以管理员) 身份运行。
列出 BCD 存储数据并确定启动加载程序标识符,下一步将使用该标识符。
对于 第 1 代 VM,请输入以下命令并记下列出的标识符:
bcdedit /store <BOOT PARTITON>:\boot\bcd /enum
在 命令中,将 替换为
<BOOT PARTITON>
包含启动文件夹的附加磁盘中分区的字母。对于 第 2 代 VM,请输入以下命令并记下列出的标识符:
BCDEDIT /store <LETTER OF THE EFI SYSTEM PARTITION>:EFI\Microsoft\boot\bcd /enum
- 在 命令中,将 替换为
<LETTER OF THE EFI SYSTEM PARTITION>
EFI 系统分区的字母。 - 启动磁盘管理控制台以识别标记为 EFI 系统分区的相应 系统分区可能会有所帮助。
- 标识符可以是唯一 GUID,也可以是默认 bootmgr。
- 在 命令中,将 替换为
运行以下命令以启用串行控制台:
BCDEDIT /store <VOLUME LETTER WHERE THE BCD FOLDER IS>:\boot\bcd /ems {<BOOT LOADER IDENTIFIER>} ON BCDEDIT /store <VOLUME LETTER WHERE THE BCD FOLDER IS>:\boot\bcd /emssettings EMSPORT:1 EMSBAUDRATE:115200
- 在 命令中,将 替换为
<VOLUME LETTER WHERE THE BCD FOLDER IS>
BCD 文件夹的字母。 - 在 命令中,将 替换为
<BOOT LOADER IDENTIFIER>
在上一步中找到的标识符。
- 在 命令中,将 替换为
验证 OS 磁盘上的可用空间是否大于 VM 上的内存大小 (RAM) 。
- 如果 OS 磁盘上没有足够的空间,则应更改创建内存转储文件的位置。 可以将其引用附加到 VM 并具有足够可用空间的任何其他数据磁盘,而不是在 OS 磁盘上创建文件。 若要更改位置,请将 %SystemRoot% 替换为驱动器号 (例如,下面列出的命令中 F:) 数据磁盘。
- 输入以下命令 (建议的转储配置) :
从损坏的 OS 磁盘加载注册表配置单元:
REG LOAD HKLM\BROKENSYSTEM <VOLUME LETTER OF BROKEN OS DISK>:\windows\system32\config\SYSTEM
在 ControlSet001 上启用:
REG ADD "HKLM\BROKENSYSTEM\ControlSet001\Control\CrashControl" /v CrashDumpEnabled /t REG_DWORD /d 1 /f REG ADD "HKLM\BROKENSYSTEM\ControlSet001\Control\CrashControl" /v DumpFile /t REG_EXPAND_SZ /d "%SystemRoot%\MEMORY.DMP" /f REG ADD "HKLM\BROKENSYSTEM\ControlSet001\Control\CrashControl" /v NMICrashDump /t REG_DWORD /d 1 /f
在 ControlSet002 上启用:
REG ADD "HKLM\BROKENSYSTEM\ControlSet002\Control\CrashControl" /v CrashDumpEnabled /t REG_DWORD /d 1 /f REG ADD "HKLM\BROKENSYSTEM\ControlSet002\Control\CrashControl" /v DumpFile /t REG_EXPAND_SZ /d "%SystemRoot%\MEMORY.DMP" /f REG ADD "HKLM\BROKENSYSTEM\ControlSet002\Control\CrashControl" /v NMICrashDump /t REG_DWORD /d 1 /f
卸载损坏的 OS 磁盘:
REG UNLOAD HKLM\BROKENSYSTEM
步骤 4:重新生成 VM
使用 VM 修复命令的步骤 5 重新生成 VM。
联系我们寻求帮助
如果你有任何疑问或需要帮助,请创建支持请求或联系 Azure 社区支持。 还可以向 Azure 反馈社区提交产品反馈。
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈