适用于:✔️ Windows VM
本文提供了一些步骤来解决 Windows 操作系统(OS)遇到停止错误0xC0000102(使 Azure 虚拟机(VM)无法启动的问题。
现象
使用 启动诊断 查看 VM 的屏幕截图时,屏幕截图会显示操作系统在启动期间遇到错误代码0xC0000102的消息。
原因
错误0xC0000102是STATUS_FILE_CORRUPT_ERROR,这意味着损坏的文件阻止 VM 正确启动。 此错误代码有两个可能的原因:
- 错误消息中显示的文件已损坏。
- 磁盘结构已损坏且不可读。
解决方案
尝试从备份还原 VM
如果 VM 有最近的备份,可以尝试 从备份 还原 VM 以修复启动问题。 如果无法从备份还原 VM,请执行以下步骤:
- 创建并访问修复 VM
- 修复或替换损坏的文件
- 启用串行控制台和内存转储收集
- 重新生成 VM
注意
遇到此错误时,来宾操作系统无法正常运行。 需要在脱机模式下进行故障排除来解决此问题。
步骤 1:创建和访问修复 VM
- 按照 VM 修复过程示例 的步骤 1-3 准备修复 VM。
- 使用远程桌面连接连接到修复 VM。
步骤 2:修复或替换损坏的文件
按照以下步骤修复或替换损坏的二进制文件(.sys):
修复损坏的二进制文件
打开提升的 CMD 提示符并在磁盘上运行 chkdsk:
chkdsk <drive-letter>: /F
替换损坏的二进制文件
在附加的磁盘上,浏览到错误消息中显示的二进制文件的位置。
将文件从二进制名称.sys重命名为< binary-name>>.sys.old。<
在附加的磁盘上,浏览到 \Windows\WinSxS 文件夹。 然后,搜索错误消息中显示的二进制文件。 为此,请在命令提示符处运行以下命令:
dir <binary-name> /s
该命令将列出二进制文件的所有不同版本以及创建日期。 运行以下命令,将最新版本的二进制文件复制到 \Windows\System32\Drivers 文件夹:
copy <drive>:\Windows\WinSxS\<directory-where-file-is>\<binary-name>.sys <drive>:\Windows\System32\Drivers\
例如,请参阅以下控制台输出:
E:\Windows\WinSxS>dir ACPI.sys /s Volume in drive E has no label. Volume Serial Number is A0B1-C2D3 Directory of E:\Windows\WinSxS\amd64_acpi.inf_0123456789abcdef_6.3.9600.16384_none_cdef0123456789ab 11/21/2014 07:48 PM 94,989 acpi.sys 1 File(s) 94,989 bytes Directory of E:\Windows\WinSxS\amd64_acpi.inf_0123456789abcdef_6.3.9600.16384_none_89abcdef01234567 11/21/2014 07:48 PM 119,547 acpi.sys 1 File(s) 119,547 bytes Directory of E:\Windows\WinSxS\amd64_acpi.inf_0123456789abcdef_6.3.9600.16384_none_456789abcdef0123 11/21/2014 04:06 PM 533,824 acpi.sys 1 File(s) 533,824 bytes Total Files Listed: 3 File(s) 748,360 bytes 0 Dir(s) 123,967,512,576 bytes free E:\Windows\WinSxS>copy E:\Windows\WinSxS\amd64_acpi.inf_0123456789abcdef_6.3.9600.16384_none_cdef0123456789ab\acpi.sys E:\Windows\System32\Drivers\ 1 file(s) copied. E:\Windows\WinSxS>
注意
如果无法重命名系统二进制文件, 请获取文件的所有权。 此操作可让你完全访问此文件。
示例控制台输出以卷 E 为例。 实际字母应反映故障驱动器(作为故障排除 VM 上的数据磁盘附加的 OS 磁盘)。
如果最新的二进制文件不起作用,可以尝试使用以前的文件版本获取该组件的早期系统更新级别。
如果此步骤中返回的唯一二进制文件与尝试在受影响的 VM 上替换的文件匹配,并且如果两个文件具有相同的大小和时间戳,则可以通过从具有相同 OS 的另一个工作 VM 复制损坏的文件来替换损坏的文件,如果可能,则相同的系统更新级别。
从故障排除 VM 中分离修复的磁盘。 然后, 从 OS 磁盘创建 VM。
步骤 3:启用串行控制台和内存转储收集
在重新生成 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>
步骤 4:重新生成 VM
使用 VM 修复命令的步骤 5 重新生成 VM。
联系我们寻求帮助
如果你有任何疑问或需要帮助,请创建支持请求或联系 Azure 社区支持。 你还可以将产品反馈提交到 Azure 反馈社区。