> I am trying to install Linux on a Installing on a Compaq Presarrio CDS 972
> and I am having trouble with the hard drive. While installing I get the
> following message:
> hd.c : ST-506 interface disk with more than 16 heads detected,
> probably due to non-standard sector translation. Giving up.
> (disk 0, cyl=707, sect=63, head=32)
> The hard drive is IDE (if that helps).
Just last evening, I wrote the following mail to
right down to the drive type. Note that I'm effectively cribbing the
answers you get out of Patrick LoPresti's Large IDE Drive Mini-Howto,
as published by InfoMagic in their "developer's resource" CD-ROM set.
Quote:> 2) Later on during the boot, I get:
> hd.c: ST-506 interface disk with more than 16 heads detected,
> probably due to a non-standard sector translation. Giving up.
> (disk 0: cyl 425, sect 63, head 64)
> Obviously, this is because I have >16 heads. I looked at the BIOS and
> found that I can indeed configure my drive to have 16 logical heads,
> but that would mean re-partitioning my drive, which I didn't want to
No, actually, your disc probably has 16 heads. The issue has to do
with the problem (and recurring discussion topic) of IDE disc sizes
larger than 528Mbytes. The boundary in question is 1024 cylinders,
such that 1024cyl * 16hds * 63sectors * 512bytes/sector == 528Mbytes.
For large IDE drives under DOS, what is happening is that BIOS lies to
DOS about the actual disc geometry, doing 2x multiplies/divides of
cyl/hds in order to get cyl < 1024, because DOS can only address 1024
cyl, in turn because it stores cyl addresses in 10 bits. DOS' usage
of BIOS for disc I/O uses these halved/doubled (quartered/quad)
addresses, which BIOS converts when speaking to the controller.
Apparently, your drive has CHS = (1700,16,63) geometry, since it takes
a 4x multiplier to cause trouble going over 1024.
The confusion arises when Linux queries BIOS at boot time to learn
disc geometry, which is the only time it uses BIOS, choosing
thereafter to speak to the controller directly.
I've dealt with this twice in as many weeks, so here's a quick script
for how to make DOS, BIOS and Linux all happy:
1. Know real drive geometry. The drive itself probably says so, on
its model# sticker.
2. Boot linux from boot floppy, including an "hd=C,H,S" spec using
real geometry. Thus, Linux will not query BIOS at all.
3. Use fdisk to create appropriate partitions. However, this will
cause an appearance of trouble, because fdisk will be operating in
BIOS-compatible lies -vs- the rest of Linux believing reality. So:
a. Go to fdisk's expert mode with "x".
b. Change cylinders and heads to BIOS lies.
c. Back out to normal mode with "r".
d. Build partitions in a BIOS-lies environment.
4. When you define your swap partition, remember its BIOS-lies block
size, because that's the number you need to hand to mkswap.
5. When you prepare lilo.conf, arrange for an "append hd=C,H,S" with
real geometry, just as when you booted from floppy.
When all is said and done, BIOS knows the real geometry, it can lie to
DOS all it wants, and Linux will know real geometry from the append
spec while still coping with the BIOS-lies partition table. It works,