适用于:✔️ Windows VM
原始 KB 数: 4010130
本文提供了 Windows VM 无法启动并生成错误的问题的解决方案。
症状
Windows 不会启动并生成以下错误之一:
错误 1:
文件:\Windows\system32\winload.exe
状态:0xc000000f
信息:无法加载应用程序或操作系统,因为缺少所需的文件或包含错误。
错误 2:
文件:\Boot\BCD
状态:0xc000000f
信息:电脑的启动配置数据缺失或包含 errros
错误 3:
文件:\Windows\System32\drivers\<Binary>
状态:0xc000000f
信息:无法加载操作系统,因为关键系统驱动程序缺失或包含错误。
在此消息中, <BINARY> 表示找到的实际二进制文件。
原因
如果满足以下条件之一,则会出现此问题:
- 启动配置数据(BCD)已损坏。
- 启动配置数据上的 DEVICE 和 OSDEVICE 引用缺失或未知。
- 操作系统磁盘中缺少屏幕截图中显示的二进制文件(除 winload.exe 或 \boot\BCD 之外)。
解决方法
尝试从备份还原 VM
如果 VM 有最近的备份,可以尝试 从备份 还原 VM 以修复启动问题。 如果无法从备份还原 VM,请按照错误 1 和错误 2 的解决方法中的步骤操作。
错误 1 和错误 2 的解决方法
步骤 1:将 VM 的 OS 磁盘作为数据磁盘附加到另一个 VM(排查 VM 问题)
删除虚拟机(VM)。 执行此操作时,请确保选择“ 保留磁盘 ”选项。
将 OS 磁盘作为数据磁盘附加到另一个 VM(故障排除 VM)。 有关详细信息,请参阅如何在 Azure 门户中将数据磁盘附加到 Windows VM。
连接到故障排除 VM。 转到“计算机管理”>“磁盘管理”。 确保 OS 磁盘处于联机状态,并且其分区已分配驱动器号。
标识启动分区和 Windows 分区。 如果 OS 磁盘只包含一个分区,此分区即为启动分区和 Windows 分区。
如果 OS 磁盘包含多个分区,可以通过查看分区中的文件夹来标识它们:
- Windows 分区包含名为“Windows”的文件夹,比其他分区大。
- 启动分区包含名为“Boot”的文件夹。默认情况下,此文件夹处于隐藏状态。 若要查看该文件夹,必须显示已隐藏的文件和文件夹,并禁用“隐藏受保护的操作系统文件(推荐)”选项。 启动分区通常为 300 MB~500 MB。
步骤 2:修复启动配置数据
以管理员身份运行以下命令行,并记录 Windows 启动加载程序(不是 Windows 引导管理器)的标识符。 标识符是标记 {default} 或 32 个字符的代码,如下所示:xxxxxxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx。 下一步骤要用到此标识符。
第 1 代 VM
bcdedit /store <Boot partition>:\Boot\BCD /enum /v
在第 2 代 VM 中
bcdedit /store <Boot partition>:\EFI\Microsoft\Boot\BCD
注意
在第 2 代 VM 中,默认情况下不会标记启动分区。 可以运行
diskpart
命令来标记分区,以便它可以与 BCDEdit 工具一起使用。
运行以下命令行修复启动配置数据。 必须将以下占位符替换为实际值:
注意
此步骤适用于大多数启动配置数据损坏问题。 即使看到 设备和 OSDevice 指向正确的分区,也需要执行此步骤。
<Windows 分区> 是包含名为“Windows”的文件夹的分区。
<启动分区> 是包含名为“Boot”的隐藏系统文件夹的分区。
<标识符> 是上一步中找到的 Windows 启动加载程序标识符。第 1 代 VM
bcdedit /store <Boot partition>:\Boot\BCD /set {bootmgr} device partition=<boot partition>: bcdedit /store <Boot partition>:\Boot\BCD /set {bootmgr} integrityservices enable bcdedit /store <Boot partition>:\Boot\BCD /set {<Identifier>} device partition=<Windows partition>: bcdedit /store <Boot partition>:\Boot\BCD /set {<Identifier>} integrityservices enable bcdedit /store <Boot partition>:\Boot\BCD /set {<identifier>} recoveryenabled Off bcdedit /store <Boot partition>:\Boot\BCD /set {<identifier>} osdevice partition=<Windows partition>: bcdedit /store <Boot partition>:\Boot\BCD /set {<identifier>} bootstatuspolicy IgnoreAllFailures
在第 2 代 VM 中
bcdedit /store <Boot partition>:\EFI\Microsoft\Boot\BCD /set {bootmgr} device partition=<boot partition>: bcdedit /store <Boot partition>:\EFI\Microsoft\Boot\BCD /set {bootmgr} integrityservices enable bcdedit /store <Boot partition>:\EFI\Microsoft\Boot\BCD /set {<Identifier>} device partition=<Windows partition>: bcdedit /store <Boot partition>:\EFI\Microsoft\Boot\BCD /set {<Identifier>} integrityservices enable bcdedit /store <Boot partition>:\EFI\Microsoft\Boot\BCD /set {<identifier>} recoveryenabled Off bcdedit /store <Boot partition>:\EFI\Microsoft\Boot\BCD /set {<identifier>} osdevice partition=<Windows partition>: bcdedit /store <Boot partition>:\EFI\Microsoft\Boot\BCD /set {<identifier>} bootstatuspolicy IgnoreAllFailures
从故障排除 VM 中分离已修复的 OS 磁盘。 然后,从 OS 磁盘创建新的 VM。
错误 3 的解决方法
首先,按照将数据磁盘部分附加到另一个 VM(故障排除 VM)中的说明操作。 (本部分来自第一部分 错误 1 和 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。
联系我们寻求帮助
如果你有任何疑问或需要帮助,请创建支持请求或联系 Azure 社区支持。 你还可以将产品反馈提交到 Azure 反馈社区。