我删除了旧的 Windows XP 分区,并使用 gParted 将 Windows 7 分区移到左侧。第一次重启完全失败,并显示错误“未找到操作系统”。
然后我使用 Windows 7 修复光盘,进入命令提示符并使用不同的 bootrec 命令:
bootrec /fixboot
bootrec /fixmbr
bootrec /rebuildbcd
最后一个命令仍然在说
Total identified Windows installations: 0
幸运的是,通过这些命令我能够重新启动 Windows,但由于找不到 autochk 程序而失败。
autochk not found skipping autocheck
再次运行修复盘我得到以下修复详细信息:
Session details
---------------
System Disk = \Device\Harddisk0
Windows directory = C:\Windows
AutoChk Run = 0
Number of root causes = 1
Root cause found:
Unspecified changes to system configuration might have caused the problem.
Repair action: System files integrity check and repair
Result: Failed. Error code = 0x57
我现在怎样才能成功启动 Windows?
答案1
Windows 启动背后没有什么深奥的科学。Windows Vista 及更高版本在 MBR 磁盘上的启动顺序:
- MBR 代码
- PBR代码(活动分区的分区引导记录代码)
- 活动分区上的 bootmgr 使用 BCD(启动配置数据)
Vista 及更高版本的启动配置数据 (BCD) 存储在活动分区上的文件“\Boot\BCD”中。
当您移动对于启动 Vista(Win7、Win8)至关重要的分区时,存储在 BCD 中的数据与实际分区地址(磁盘 ID + 分区偏移量)不同步,因此启动失败。
要解决 BCD 问题,可以使用实用程序 bcdboot.exe:
bcdboot c:\windows
其中 c:\windows 是无法启动的操作系统 (Vista、Win7、Win8) 的根目录,如有必要,请更改驱动器号以反映系统上的驱动器映射。
要更正引导扇区代码,请使用以下命令 -
bootsect /nt60 全部 /mbr
可以使用。
上述命令在 WindowsPE 和 WindowsRE 中可用,并且通常不会失败。
一些系统关键文件也可能相对于分区地址加载,因此当您移动分区启动时无法找到 autochk.exe“\windows\system32\autochk.exe”。
映射分区的地址存储在 Windows 注册表中(例如 HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices\DosDevices\C:)
答案2
找到了“Yostage”的这篇文章。它肯定会有所帮助
我遇到了这个问题,fixboot/fixmbr/bootrec 命令都不起作用。下面是修复方法:
似乎C:
由于某种原因映射错误。就我而言,我猜是因为我的迁移软件没有找到它。
启动恢复控制台并启动 regedit。
使用 load hive 来挂载你的c:\windows\system32\config\system
hive(我将其命名为‘离线’)。
现在,您要将HKLM\System\MountedDevices
(恢复环境的设备列表)与HKLM\System\Offline\MountedDevices
(失败的 Windows 安装的设备列表)进行比较。就我而言,我发现恢复环境可以正确查看C:
,但离线配置单元的磁盘签名是错误的c:
。(可能是因为我在迁移过程中删除了恢复分区。因此,我们需要输入正确的签名。
查看DosDevices\C:
恢复注册表中的二进制条目。现在转到脱机注册表并修复您的,DosDevices\C:
使其匹配。就我而言,我发现最简单的方法是将坏的重命名DosDevices\C:
为Z:
,然后浏览\volume{guid}
条目,直到找到与工作的匹配的条目C:
,然后将其重命名为DosDevices\C:
。在文件菜单中卸载配置单元,然后重新启动。完成此操作后,我就可以启动了。
其他互联网搜索暗示只需删除所有离线DosDevices
条目就会强制它们正确重新创建,但这对我来说不起作用。
(感谢 Yostage:superuser.com/a/547260)
答案3
我在购买配备 SSD 的笔记本电脑后也遇到了类似的问题。我想释放一些宝贵的 SSD 驱动器空间来双启动 Linux,所以我已删除20 GB恢复分区(sda3)和 8 GB系统分区(sda0)位于驱动器的开头。
现在我得到:
autochk not found skipping autocheck
随后出现 BSoD。
由于我从许多笔记本电脑中删除了恢复分区并且从来没有出现问题,所以我很确定这个系统分区保存了一些关键文件。
使用带有实时 Linux 的可启动 USB 记忆棒,我将备份的 SYSTEM_DRV 分区放回到所有其他分区的前面,但是将其设置为 350 MB 而不是 8 GB,因为其余部分只是宝贵的空白空间。
您可能知道,删除和创建分区经常会弄乱分区表中的条目:
[1st partition] -> sda3
[2nd partition] -> sda2
[3nd partition] -> sda1
所以我修复了记录磁盘管理:
x // expert mode
f // fix count
w // write changes
这样做风险自负。我强烈建议备份大量数据!
现在一切又好了。将第一个标记为启动:
[1st partition] -> sda1 * boot
[2nd partition] -> sda2
[3nd partition] -> sda3
重启后,系统修复开始。自动重启,检查磁盘启动。自动重启,Windows 启动!
任务完成。
由于我假设联想的人并不是完全的弱智,我猜想从系统分区中删除空白空间会造成一些混乱,但我不确定会是什么。至少这不是你在日常使用中会注意到的事情。
另外,顺便提一下,这些年来,我注意到在几乎所有设备上安装和运行 Linux 变得越来越容易,而与此同时,在管理驱动器后让 Windows 继续运行变得越来越困难。这是为什么?你为此付费,所以它就必须令人讨厌吗?假装启动是火箭科学?