FYI, some sleuthing shows that BootBuild is storing the 'Number of Heads' value @ offset 0x1A (26 decimal) of the Windows' Volume Boot Record
(aka Partition Boot Sector), which is the NumberOfHeads field in the BIOS parameter block
.All about BIOS parameter blocks
: '0x1A - number of heads - This is the logical disc geometry, as it appeared to the tool that high-level formatted the volume. This field is used by boot code in the remainder of the boot block to translate logical block addresses into Cylinder/Head/Sector addresses, on systems where the machine firmware does not support the EDD firmware extensions'How NTFS Works
: '0x1A - Not used or checked by NTFS'(It is ALSO clearing the 4 bytes at offset 0x4C - 4F to zero, which is the last 4 bytes of the 8 byte Volume Serial Number, I'm not sure why it would do that, and Windows seems to only report the first 4 bytes anyway...)
[Edited about a million times...] I think what's happened is this: MyDefrag moved something
read by the VBR boot code. That something before it was moved just happened to have an INT13 head number < 16. After the move, it just happened to have a head number >=16 (0x21 in fact), which when passed to INT 13H, caused the 'A disk read error occurred' error.