主要问题是:“是否有任何实用程序可以解释这两个二进制文件:
- 故障诊断日志
- 启动状态文件
它们都在 Vista/W7 启动过程中更新了吗?
我已经知道易BCD我发现这一页关于 BOOTSTAT.DAT 格式,但我不想重新发明轮子。
背景信息。
我处于一个不舒服的境地,我的原生 Windows 7 分区拒绝完成启动过程(即使在有提示的安全模式下)。
这是在通过原始设备访问从 VirtualBox 成功启动后发生的。事实上,VB 启动一直运行良好。但是,每次我尝试本机启动时,启动过程都会尝试“修复”配置。从外部来看,它会让磁盘旋转很长时间,最终停滞在某个地方。在我使用 PQService 分区恢复出厂配置(反正它是一台新机器)之前,我想看看这两个文件,我可以从 Ubuntu 磁盘毫无问题地访问它们。
另外,如果还有其他文件可以帮助诊断问题的根源,请告诉我。例如,winload.exe 是否生成日志(这是次要问题)?
请注意,我很清楚 Windows 7 对它找到的硬件配置非常敏感后初始安装。然而,在决定是放弃还是继续尝试本机/虚拟启动之前,我想更详细地了解我遇到了哪些障碍。
谢谢您的帮助。
答案1
我不知道,BOOTSTAT.DAT
但BCD
它是一个注册表配置单元,格式与其他所有配置单元相同。这些BCD.LOG*
文件是配置单元的事务日志,用于恢复目的。
如果您有一台 Windows 计算机,您可以从 regedit 安装配置单元:单击HKEY_LOCAL_MACHINE
,转到文件->加载配置单元并浏览到 BCD 文件。用于启动 Windows 的 BCD 通常已安装为BCD00000000
。有一些关于 Windows NT 注册表配置单元文件格式的文档。
对于您的双启动项目,硬件配置文件可能有助于本机和虚拟硬件的不同配置 - 尝试为每个配置使用一个配置文件。
答案2
我制作了一个小型 Python 实用程序来解析 Windows 10 上的 BOOTSTAT.DAT 文件。还有关于在 Windows 7 生成的 BOOTSTAT.DAT 上使用它的说明。此脚本测试过的 Python 的最低版本是 Python 3.6。
https://gitlab.com/rhave/bootstat.dat-efi-parser
输出可以是 JSON 或半 CSV。
该程序的文件格式信息的主要来源是 Chris Smith 之前在另一个答案中提到的 Geoff Chappell 网站。
在 Windows 10 文件上运行它
该程序可以按以下方式运行:
python bootstat.dat-efi-parser.py json BOOTSTAT.DAT
python
您的系统上安装的 python 解释器在哪里,bootstat.dat-efi-parser.py
是来自 gitlab 的脚本的副本,json
是输出类型(也可以是csv
)以及BOOTSTAT.DAT
是您想要分析的文件。
上述示例用法的输出类似于以下内容:
{
"version": 4,
"header_size": 24,
"file_size": 65536,
"valid_data_size": 208,
"unknown_header_dword_0": 24,
"unknown_header_dword_1": 0,
"events": [
{
"event_name": "Log file initialised",
"timestamp": 6176,
"zero_field": 0,
"source_guid": "2C86EA9DDD5C704EACC1F32B344D4795",
"size_of_entry": 64,
"severity_code": 1,
"entry_version": 2,
"event_identifier": 1,
"event_time_struct": "2018-01-01 12:00:00",
"event_zero_field_0": 0,
"event_seven": 7,
"event_one": 1,
"event_zero_field_1": 0
},
{
"event_name": "Boot application launch",
"timestamp": 6177,
"zero_field": 0,
"source_guid": "2C86EA9DDD5C704EACC1F32B344D4795",
"size_of_entry": 120,
"severity_code": 1,
"entry_version": 2,
"event_identifier": 17,
"event_app_guid": "80A054721015854EAC0FE7FB3D444736",
"event_type_of_start": 0,
"event_app_pathname": "\\windows\\system32\\winload.efi"
}
]
}
在 Windows 7 文件上运行它
在 Windows 7 上,BOOTSTAT.DAT 文件有一个额外的 2048 字节标头。从文件中删去此标头可使脚本能够解析文件的其余部分。在 Linux 上,可以使用 dd 命令按以下方式删去前 2048 个字节:
dd if=bootstat.dat of=bootstat.dat.cut bs=1 skip=2048
这bootstat.dat
是原始的 Windows 7 文件,该bootstat.dat.cut
文件是应该作为 Python 脚本的最后一个参数给出的文件。可以使用相当于 Windows 的 dd 或十六进制编辑器在 Windows 上执行相同的剪切操作。