[Gllug] Is there an IDE/BIOS boundary between 20G and 120G?

Chris Bell chrisbell at overview.demon.co.uk
Sat Sep 2 14:40:44 UTC 2006


On Sat 02 Sep, John Winters wrote:
> 
> I'm trying to put together a PC (for no terribly good reason) out of 
> odds and sods I have lying around.  The motherboard is slightly old but 
> good (a twin Pentium-II 450MHz, in a system originally built by the late 
> lamented GND).  I've got one slight oddity which is puzzling me though. 
>   The first HDD I tried to use is a 120G one and the BIOS refused to 
> detect it.  It is however happy with the 20G one which I tried next.
> 
> I don't remember a boundary between 20G and 120G.  I remember one at 6G 
> and another at 127G.  Was there one of those "I don't understand a disc 
> this big" boundaries between 20G and 120G?
> 
> TIA,
> John

   Yes, I have two ASUS motherboards that had that problem, both now have
BIOS upgrades.


>From the Large Disk HOWTO


4. History of BIOS and IDE limits

ATA Specification (for IDE disks) - the 137 GB limit
      
      At most 65536 cylinders (numbered 0-65535), 16 heads (numbered 0-15),
255 sectors/track (numbered 1-255), for a maximum total capacity of
267386880 sectors (of 512 bytes each), that is, 136902082560 bytes (137 GB).
In Sept 2001, the first drives larger than this (160 GB Maxtor Diamondmax)
appeared.

       BIOS Int 13 - the 8.5 GB limit
      
      At most 1024 cylinders (numbered 0-1023), 256 heads (numbered 0-255),
63 sectors/track (numbered 1-63) for a maximum total capacity of 8455716864
bytes (8.5 GB). This is a serious limitation today. It means that DOS cannot
use present day large disks.
      
The 528 MB limit
      
      If the same values for c,h,s are used for the BIOS Int 13 call and for
the IDE disk I/O, then both limitations combine, and one can use at most
1024 cylinders, 16 heads, 63 sectors/track, for a maximum total capacity of
528482304 bytes (528MB), the infamous 504 MiB  limit for DOS with an old
BIOS. This started being a problem around 1993, and people resorted to all
kinds of trickery, both in hardware (LBA), in firmware (translating BIOS),
and in software (disk managers). The concept of `translation' was invented
(1994): a BIOS could use one geometry while talking to the drive, and
another, fake, geometry while talking to DOS, and translate between the two.
      
The 2.1 GB limit (April 1996)
      
      Some older BIOSes only allocate 12 bits for the field in CMOS RAM that
gives the number of cylinders. Consequently, this number can be at most
4095, and only 4095*16*63*512=2113413120 bytes are accessible. The effect of
having a larger disk would be a hang at boot time. This made disks with
geometry 4092/16/63 rather popular. And still today many large disk drives
come with a jumper to make them appear 4092/16/63. See also over2gb.txt.
Other BIOSes would not hang but just detect a much smaller disk, like 429 MB
instead of 2.5 GB.
      
The 3.2 GB limit
      
      There was a bug in the Phoenix 4.03 and 4.04 BIOS firmware that would
cause the system to lock up in the CMOS setup for drives with a capacity
over 3277 MB. See over3gb.txt.
      
The 4.2 GB limit (Feb 1997)
      
      Simple BIOS translation (ECHS=Extended CHS, sometimes called `Large
disk support' or just `Large') works by repeatedly doubling the number of
heads and halving the number of cylinders shown to DOS, until the number of
cylinders is at most 1024. Now DOS and Windows 95 cannot handle 256 heads,
and in the common case that the disk reports 16 heads, this means that this
simple mechanism only works up to 8192*16*63*512=4227858432 bytes (with a
fake geometry with 1024 cylinders, 128 heads, 63 sectors/track). Note that
ECHS does not change the number of sectors per track, so if that is not 63,
the limit will be lower. See over4gb.txt.

       The 7.9 GB limit
      
      Slightly smarter BIOSes avoid the previous problem by first adjusting
the number of heads to 15 (`revised ECHS'), so that a fake geometry with 240
heads can be obtained, good for 1024*240*63*512=7927234560 bytes.
      
The 8.4 GB limit
      
       Finally, if the BIOS does all it can to make this translation a
success, and uses 255 heads and 63 sectors/track (`assisted LBA' or just
`LBA') it may reach 1024*255*63*512=8422686720 bytes, slightly less than the
earlier 8.5 GB limit because the geometries with 256 heads must be avoided.
(This translation will use for the number of heads the first value H in the
sequence 16, 32, 64, 128, 255 for which the total disk capacity fits in
1024*H*63*512, and then computes the number of cylinders C as total capacity
divided by (H*63*512).)
      
The 33.8 GB limit (August 1999)
      
       The next hurdle comes with a size over 33.8 GB. The problem is that
with the default 16 heads and 63 sectors/track this corresponds to a number
of cylinders of more than 65535, which does not fit into a short. Many
BIOSes couldn't handle such disks. (See, e.g., Asus upgrades for new flash
images that work.) Linux kernels older than 2.2.14 / 2.3.21 need a patch.
See IDE problems with 34+ GB disks below.
      
The 137 GB limit (Sept 2001)
      
      As mentioned above, the old ATA protocol uses 16+4+8 = 28 bits to
specify the sector number, and hence cannot address more than 2^28 sectors.
ATA-6 describes an extension that allows the addressing of 2^48 sectors, a
million times as much. There is support in very recent kernels.
      
The 2 TiB limit
      
      With 32-bit sector numbers, one can address 2 TiB. A lot of software
will have to be rewritten once disks get larger.
      
Hard drives over 8.4 GB are supposed to report their geometry as
16383/16/63. This in effect means that the `geometry' is obsolete, and the 
total disk size can no longer be computed from the geometry, but is found in
the LBA capacity field returned by the IDENTIFY command.  Hard drives over
137.4 GB are supposed to report an LBA capacity of 0xfffffff = 268435455
sectors (137438952960 bytes). Now the actual  disk size is found in the new
48-capacity field.




-- 
Chris Bell

-- 
Gllug mailing list  -  Gllug at gllug.org.uk
http://lists.gllug.org.uk/mailman/listinfo/gllug




More information about the GLLUG mailing list