我的工作任务之一是使用带有恢复分区的 Windows 操作系统映像(嵌入式和 OEM)配置我们产品附带的计算机。我一直使用 Clonezilla Live 和 GRUB2 来实现此过程。这在 Windows XP/Embedded Standard 2009 上工作得很好。这在 Windows 7 上不起作用,而且我猜想由于启动管理器的变化,Vista 之后的任何版本都不起作用。我尝试配置的当前系统映像如下:
/dev/sda1,ntfs,PRIMARY,62.5 GiB,3.15 GiB,59.35 GiB,无标志
/dev/sda2,ntfs,RESTORE,4.00 GiB,1.74 GiB,2.26 GiB,隐藏
/dev/sda3,fat32,CLONEZILLA,4.00 GiB,115.22 MiB,3.89 GiB,隐藏
/dev/sda4,ext4,BOOT,1.00 GiB,53.91 MiB,970.09 MiB,启动
/dev/sda1 保存 Windows 7 OEM(密封),dev/sda2 保存基于 clonezilla 的恢复映像(密封)
/dev/sda MBR 是 GRUB2 引导加载程序
我可以让 GRUB2 正常加载并恢复 Windows 7 映像。但是,我无法启动 Windows 7 并收到 0xc0000225 错误。更新:一旦我按照下面所述修改引导扇区以使 sda1 起始部分与 MBR 一致,0xc0000225 就会消失,我开始收到 0xc000000e 错误,winload.exe 文件就是它向用户抱怨的文件。但是,据我通过其他实用程序所知,这个文件是存在的并且完好无损。
Meierfrankenfeld 和 Hulselmans 的 bootinfoscript 中的信息显示 sda1 存在问题(引导扇区显示 sda1 位于扇区 411648,而 fdisk 显示为 2048)和 sda3(引导扇区显示 sda3 位于扇区 0,而 fdisk 显示为 164628480)。我不确定此时需要修改什么,也不知道最好的修改工具是什么。如果我能很好地描述 BCD 和 grub2 MBR 的布局,那么十六进制编辑器就没问题了。更新:我最终更新了引导扇区,以便与 fdisk 就 sda1 达成一致。
在密封机器并添加 /dev/sda3 和 /dev/sda4 之前,我将 Windows 7 启动分区合并到 /dev/sda1 上。它重新启动并正常工作。
我尝试阅读 Microsoft 提供的 BCD 材料,并确保 Windows 启动管理器和加载器对象指向正确的分区(他们一直在使用一些 custom=xyz 语法,但这也不起作用)。
过去,这种恢复工作效果很好,因为我能够完全自动化恢复过程,这对我们的最终用户来说是一个关键需求。恢复磁盘在这里不是一个选项。
我已经确认 bcd 使用分区 = C: 来引用设备 / 操作系统设备 / bootmgr 设备。
因此,我能够确认 MBR 存在且完好无损,sda1 上的 VRB 存在且完好无损,$MFT 和 $MFTMirr 文件存在于 VBR 中指示的位置,这由 sleuthkit 中的 istat(不是 lstat)工具确认。上述错误中引用的 winload 文件存在于 fls sleuthkit 实用程序提供给我的位置,并且与其他安装的文件大小一致。
另外,如果您是 OEM,并且想要分享在消费者/嵌入式环境中运行良好的恢复流程,我也很乐意听到您的反馈。谢谢。
答案1
听起来在中间添加这些分区时出现了问题。你使用了什么分区编辑器?PartedMagic.com 的 LiveCD 和 Hiren 的 testdisk 程序已经帮我修复了一些混乱的分区问题和几台机器上的双启动问题。我会再三检查“bcd 使用分区 = C:”这一假设是否如你所想的那样,因为它更多地取决于 GUID。