什么原因导致“发生磁盘读取错误,请按 Ctrl + Alt + Del 重新启动”?

use*_*686 8 boot microsoft-virtual-pc windows-xp

我有一个包含 Windows XP SP3 的虚拟机。

当我调整 VHD 文件(和嵌入式分区)的大小并尝试启动时,我得到:

A disk read error occurred
Press Ctrl + Alt + Del to restart
Run Code Online (Sandbox Code Playgroud)

一些注意事项:

  • FixBootFixMBR没有帮助。

  • ChkDsk 没有帮助。

  • 该分区确实处于活动状态。

  • 分区从柱面 1、磁头 1 的扇区 63(出现问题之前也是如此)开始,并标记为类型 0x07 (NTFS)

  • 我的主机操作系统读取 VHD 和分区完全正常

  • 我有兴趣了解原因而不是解决方法。因此,“重新格式化磁盘”、“重新安装 Windows”等都不是有效的解决方案。

    毕竟是虚拟机……我没有什么可失去的,所以我不在乎修复它。
    我只想知道是什么导致了这个问题,以防万一我在物理机器上再次遇到它(我以前做过)。


更多信息:

我制作了一个示例 VHD 文件,说明(几乎)相同的问题,您可以在此处下载。

要重现问题:

  • 下载文件(它是高度压缩的,小心!),然后尝试在 VirtualBox(或其他一些 VM)中启动它。请注意,您会被告知“加载操作系统时出错”。(虽然错误不同,但这是同一个问题。)

  • 现在尝试在 Windows 的磁盘管理中挂载 VHD,然后运行BootSect.exe /NT60 X: /MBR,其中X:是挂载卷的驱动器号。(该工具的位置可能是C:\boot\bootsect.exe,但如果它不在您的系统上,那么您需要在其他地方找到它...)现在卸载它,并尝试启动。引导现在应该正确进行。(虽然它找不到 Hal.dll,但至少你知道它在工作。)

  • 现在做与最后一步相同的事情,但使用/NT52代替/NT60。现在您将看到第一个错误——表明 Windows XP 加载程序不喜欢该磁盘
    所以我的问题是:为什么?

Law*_*ceC 2

原因是引导加载程序正在调用 BIOS 来读取其他磁盘扇区并且该调用失败,或者引导加载程序不认为分区表有效。

如果我没记错的话,当Windows格式化磁盘时,它不是会在它的最后创建一个小分区,或者在那里留下一个未分区的区域吗?您的调整大小实用程序是否重新创建了它?听起来很傻,但这可能就是它抱怨的原因。很奇怪,但我不会把它放在Windows(可能是较新版本中的某些东西)之外才会有这样的怪癖。