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)
一些注意事项:
FixBoot
并FixMBR
没有帮助。
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 加载程序不喜欢该磁盘。
所以我的问题是:为什么?
原因是引导加载程序正在调用 BIOS 来读取其他磁盘扇区并且该调用失败,或者引导加载程序不认为分区表有效。
如果我没记错的话,当Windows格式化磁盘时,它不是会在它的最后创建一个小分区,或者在那里留下一个未分区的区域吗?您的调整大小实用程序是否重新创建了它?听起来很傻,但这可能就是它抱怨的原因。很奇怪,但我不会把它放在Windows(可能是较新版本中的某些东西)之外才会有这样的怪癖。