I installed a new machine this week. A nice little Shuttle box which
should be fairly quiet, except the heatsink on my graphics card need
replacing. I did the usual method of installing XP and then installed
Debian using a sid D-I business card CD. I must say D-I on i386 is
fantastic. I set it all up using a 2.6 kernel and configured LVM, which
while long winded, worked perfectly. Rebooted into Debian and had a
working machine. The installer detected my XP installation and
configured Grub accordingly. So far so good.

Then I rebooted into XP.

GRUB showed the commands it had executed but then it just hung. The
XP startup screen didn’t appear. Nothing. I could reboot into Debian
fine and could mount my NTFS partition and see all my data. Reboot. same
problem. Loaded the XP rescue tools from the CD and fixed the mbr. As
I’d over written grub, the machine just hung at boot.

I put this down to XP having issues with LVM and reinstalled both XP
and Debian on the machine, this time without LVM and putting grub on
/dev/hda2 rather than /dev/hda. It did the same thing. Argh.

After a bit of research, I discovered that problem was down to disk
geometry. A forum led me to a support
article
from SuSE about the exact same problem. Fortunately, setting
my bios to LBA rather than Auto fixed it. Further searching produced a
few more articles and reports of Mandrake suffering for the same
problem. It turns out that the problem only occurs iff you install using
a 2.6 kernel and your XP partition is not completely in the first 8.6GB
of the drive. In 2.6, the kernel developers decided that discovering the
correct disk geometry was a userspace task. When the drive is
partitioned the kernel reports the untranslated geometry, so an
incorrect partition table is written. When XP boots it uses BIOS calls
to find the geometry, which reports a translated geometry, which no
longer matches what is in the partition table, so it hangs. Changing the
BIOS is a workaround, but fixing the partition table is the correct
fix.

I’ll file a bug as soon as I work out where the correct place to file
it is. I’m currently thinking partman. Below is some further reading on
the problem.