Windows – What causes “A disk read error occurred, Press Ctrl + Alt + Del to restart”

bootmicrosoft-virtual-pcwindows xp

I have a virtual machine containing Windows XP SP3.

When I resized the VHD file (and the embedded partition), and tried booting, I got:

A disk read error occurred
Press Ctrl + Alt + Del to restart

Some notes:

  • FixBoot and FixMBR don't help.

  • ChkDsk doesn't help.

  • The partition is indeed active.

  • The partition starts at sector 63 (it also did so before the problem) of cylinder 1, head 1, and is marked as type 0x07 (NTFS)

  • My host OS reads the VHD and the partition completely fine

  • I'm interested in knowing the cause rather than the fix. So "re-format the disk", "reinstall Windows", etc. aren't valid solutions.

    It's a virtual machine after all… I have nothing to lose, so I don't care about fixing it.
    I just want to know what's causing this problem, in case I run into it again on a physical machine (which I have done before).


More info:

I made a sample VHD file illustrating (almost) the same problem which you can download here.

To reproduce the problem:

  • Download the file (it's highly compressed, be careful!), and try booting it in VirtualBox (or some other VM). Notice that you'll be told "Error loading operating system". (While the error is different, it's the same issue.)

  • Now try mounting the VHD in Windows's Disk Management, and running BootSect.exe /NT60 X: /MBR, where X: is the drive letter of the mounted volume. (The location of the tool is likely to be C:\boot\bootsect.exe, but if it's not there on your system, then you'll need to find it somewhere else…) Now un-mount it, and try booting. The boot should now proceed correctly. (Although it won't find Hal.dll, at least you know it's working.)

  • Now do the same thing as the last step, but use /NT52 instead of /NT60. You will now be greeted with the first error — indicating that the Windows XP loader doesn't like the disk.
    So my question is: Why?

Best Answer

The cause is either that bootloader is calling the BIOS to read other disk sectors and that call is failing, or the bootloader does not consider the partition table valid.

If I am not mistaken, when Windows formats a disk, doesn't it create a small partition at the very end of it, or leave an unpartitioned area there? Did your resize utility recreate that? Sounds silly but this might be the reason why it is complaining. Weird, but I wouldn't put it past Windows (and possibly something in newer versions) to have such a quirk.

Related Question