Home > Articles > Hardware > Upgrading & Repairing

  • Print
  • + Share This
This chapter is from the book

ATA Drive Capacity Limitations

ATA interface versions up through ATA-5 suffered from a drive capacity limitation of about 137GB (billion bytes). Depending on the BIOS used, you can further reduce this limitation to 8.4GB, or even as low as 528MB (million bytes). This is due to limitations in both the BIOS and the ATA interface, which when combined create even further limitations. To understand these limits, you have to look at the BIOS (software) and ATA (hardware) interfaces together.

The limitations when dealing with ATA drives are those of the ATA interface as well as the BIOS interface used to talk to the drive. A summary of the limitations is shown in Table 7.12.

Table 7.12. ATA/IDE Capacity Limitations for Various Sector Addressing Methods

Sector Addressing Method

Total Sectors Calculation

Maximum Total Sectors

Maximum Capacity (Bytes)

Capacity (Decimal)

Capacity (Binary)

CHS: BIOS w/o TL

1024 ×16 × 63

1,032,192

528,482,304

528.48MB

504.00MiB

CHS: BIOS w/bit-shift TL

1024 × 240 × 63

15,482,880

7,927,234,560

7.93GB

7.38GiB

CHS: BIOS w/LBA-assist TL

1024 × 255 × 63

16,450,560

8,422,686,720

8.42GB

7.84GiB

CHS: BIOS INT13h

1024 × 256 × 63

16,515,072

8,455,716,864

8.46GB

7.88GiB

CHS: ATA-1/ ATA-5

65536 × 16 × 255

267,386,880

136,902,082,560

136.90GB

127.50GiB

LBA: ATA-1/ATA-5

228

268,435,456

137,438,953,472

137.44GB

128.00GiB

LBA: ATA-6+

248

281,474,976,710,655

144,115,188,075,855,872

144.12PB

128.00PiB

LBA: EDD BIOS

264

18,446,744,073, 709,551,616

9,444,732,965,739, 290,427,392

9.44ZB

8.00ZiB

BIOS = Basic input/output system

ATA = AT Attachment (IDE)

CHS = Cylinder head sector

LBA = Logical block (sector) address

w/ = with

w/o = without

TL = Translation

INT13h = Interrupt 13 hex

EDD = Enhanced Disk Drive specification (Phoenix/ATA)

MB = megabyte (million bytes)

MiB = mebibyte

GB = gigabyte (billion bytes)

GiB = gibibyte

PB = petabyte (quadrillion bytes)

PiB = pebibyte

ZB = zettabyte (sextillion bytes)

ZiB = zebibyte

This section details the differences between the various sector-addressing methods and the limitations incurred by using them.

Prefixes for Decimal and Binary Multiples

Many readers are unfamiliar with the MiB (mebibyte), GiB (gibibyte), and so on designations I am using in this section and throughout the book. These are part of a standard designed to eliminate confusion between decimal- and binary-based multiples, especially in computer systems. Standard SI (system international or metric system) units are based on multiples of 10. This worked well for most things, but not for computers, which operate in a binary world where most numbers are based on powers of 2. This has resulted in different meanings being assigned to the same prefix—for example, 1KB (kilobyte) could mean either 1,000 (103) bytes or 1,024 (210) bytes. To eliminate confusion, in December 1998 the International Electrotechnical Commission (IEC) approved as an international standard the prefix names and symbols for binary multiples used in data processing and transmission. Some of these prefixes are shown in Table 7.13.

Table 7.13. Standard Prefix Names and Symbols for Decimal and Binary Multiples

Binary Prefixes:

Binary Prefixes:

Factor

Symbol

Name

Value

Factor

Symbol

Name

Derivation

Value

103

k

Kilo

1,000

210

Ki

Kibi

Kilobinary

1,024

106

M

Mega

1,000,000

220

Mi

Mebi

Megabinary

1,048,576

109

G

Giga

1,000,000,000

230

Gi

Gibi

Gigabinary

1,073,741,824

1012

T

Tera

1,000,000,000,000

240

Ti

Tebi

Terabinary

1,099,511,627,776

1015

P

Peta

1,000,000,000,000,000

250

Pi

Pebi

Petabinary

1,125,899,906,842,624

1018

E

Exa

1,000,000,000,000,000,000

260

Ei

Exbi

Exabinary

1,152,921,504,606,846,976

1021

Z

Zetta

1,000,000,000,000,000,000,000

270

Zi

Zebi

Zettabinary

1,180,591,620,717,411,303,424

The symbol for kilo (k) is in lowercase (which is technically correct according to the SI standard), whereas all other decimal prefixes are uppercase.

Under this standard terminology, a megabyte would be 1,000,000 bytes, whereas a mebibyte would be 1,048,576 bytes.

BIOS Limitations

Motherboard ROM BIOSs have been updated throughout the years to support larger and larger drives. Table 7.14 shows the most important relative dates when drive capacity limits were changed.

Table 7.14. Dates of Changes to Drive Capacity Limitations in the ROM BIOS

BIOS Date

Capacity Limit

August 1994

528MB

January 1998

8.4GB

September 2002

137GB

January 2011

2.2TB*

*Note: A UEFI BIOS or enabled UEFI Boot option is required to boot from 2.2TB or larger drives. Some BIOS, had this capability as early as 2006, but it wasn’t widespread until 2011.

These dates are when the limits were broken, such that BIOSs older than August 1994 are generally limited to drives of up to 528MB, whereas BIOSs older than January 1998 are generally limited to 8.4GB. Most BIOSs dated 1998 or newer support drives up to 137GB, and those dated September 2002 or newer should support drives larger than 137GB. These are only general guidelines, though; to accurately determine this for a specific system, you should check with your motherboard manufacturer. You can also use the System Information for Windows (SIW) utility from http://gtopala.com/, which tells you the BIOS date from your system and specifically whether your system supports the Enhanced Disk Drive specification (which means drives over 8.4GB).

If your BIOS does not support EDD (drives over 8.4GB), the three possible solutions are as follows:

  • Upgrade your motherboard BIOS to a 1998 or newer version that supports >8.4GB.
  • Install a BIOS upgrade card, such as the UltraATA cards from www.siig.com.
  • Install a software patch to add >8.4GB support.

Of these, the first one is the most desirable because it is usually free. Visit your motherboard manufacturer’s website to see whether it has newer BIOSs available for your motherboard that support large drives. If it doesn’t, the next best thing is to use a card such as one of the UltraATA cards from SIIG (www.siig.com). I almost never recommend the software-only solution because it merely installs a software patch in the boot sector area of the hard drive, which can result in numerous problems when booting from different drives, installing new drives, or recovering data.

The most recent 2.2TB barrier is not a true BIOS barrier in the same way that the previous barriers were. The issue here is not that the BIOS can’t recognize drives 2.2TB or larger; the problem is that it can’t normally boot from them. Booting from a 2.2TB or larger drive requires a UEFI (Unified Extensible Firmware Interface) BIOS, or at a minimum one with an enabled UEFI Boot option. Drives larger than 2.2TB can be used as data drives even without a UEFI BIOS. Finally, note that both booting from and recognizing a 2.2TB or larger drive as a data drive also requires that the drive be formatted using a GPT (GUID Partition Table). The operating system must have GPT support as well.

CHS Versus LBA

There are two primary methods to address (or number) sectors on an ATA drive. The first method is called CHS (cylinder head sector) after the three respective coordinate numbers used to address each sector of the drive. The second method is called LBA (logical block address) and uses a single number to address each sector on a drive. CHS was derived from the physical way drives were constructed (and is how they work internally), whereas LBA evolved as a simpler and more logical way to number the sectors regardless of the internal physical construction.

righ-arrow.jpg For more information on cylinders, heads, and sectors as they are used internally within the drive, see the Chapter 9 section, “HDD Operation,” p. 466.

The process of reading a drive sequentially in CHS mode starts with cylinder 0, head 0, and sector 1 (which is the first sector on the disk). Next, all the remaining sectors on that first track are read; then the next head is selected; and then all the sectors on that track are read. This goes on until all the heads on the first cylinder are read. Then the next cylinder is selected, and the sequence starts again. Think of CHS as an odometer of sorts: The sector numbers must roll over before the head number can change, and the head numbers must roll over before the cylinder can change.

The process of reading a drive sequentially in LBA mode starts with sector 0, then 1, then 2, and so on. The first sector on the drive in CHS mode would be 0,0,1, and the same sector in LBA mode would be 0.

As an example, imagine a drive with one platter, two heads (both sides of the platter are used), two tracks on each platter (cylinders), and two sectors on each track. We would say the drive has two cylinders (tracks per side), two heads (sides), and two sectors per track. This would result in a total capacity of eight (2 × 2 × 2) sectors. Noting that cylinders and heads begin numbering from 0—whereas physical sectors on a track number from 1. Using CHS addressing, we would say the first sector on the drive is cylinder 0, head 0, sector 1 (0,0,1); the second sector is 0,0,2; the third sector is 0,1,1; the fourth sector is 0,1,2; and so on until we get to the last sector, which would be 1,1,2.

Now imagine that we could take the eight sectors and—rather than refer directly to the physical cylinder, head, and sector—number the sectors in order from 0 to 7. Thus, if we wanted to address the fourth sector on the drive, we could reference it as sector 0,1,2 in CHS mode or as sector 3 in LBA mode. Table 7.15 shows the correspondence between CHS and LBA sector numbers for this eight-sector imaginary drive.

Table 7.15. CHS and LBA Sector Numbers for an Imaginary Drive with Two Cylinders, Two Heads, and Two Sectors per Track (Eight Sectors Total)

Mode

Equivalent Sector Numbers

CHS:

0,0,1

0,0,2

0,1,1

0,1,2

1,0,1

1,0,2

1,1,1

1,1,2

LBA:

0

1

2

3

4

5

6

7

As you can see from this example, using LBA numbers is simpler and generally easier to handle; however, when the PC was first developed, all BIOS and ATA drive-level addressing was done using CHS addressing.

CHS/LBA and LBA/CHS Conversions

You can address the same sectors in either CHS or LBA mode. The conversion from CHS to LBA is always consistent in that for a given drive, a particular CHS address always converts to a given LBA address, and vice versa. The ATA-1 document specifies a simple formula that can be used to convert CHS parameters to LBA:

LBA = (((C × HPC) + H) × SPT) + S – 1

By reversing this formula, you can convert the other way—that is, from LBA back to CHS:

C = int (LBA / SPT / HPC)

H = int ((LBA / SPT) mod HPC)

S = (LBA mod SPT) + 1

For these formulas, the abbreviations are defined as follows:

LBA = Logical block address

C = Cylinder

H = Head

S = Sector

HPC = Heads per cylinder (total number of heads)

SPT = Sectors per track

int X = Integer portion of X

X mod Y = Modulus (remainder) of X/Y

Using these formulas, you can calculate the LBA for any given CHS address, and vice versa. Given a drive of 16,383 cylinders, 16 heads, and 63 sectors per track, Table 7.16 shows the equivalent CHS and LBA addresses.

Table 7.16. Equivalent CHS and LBA Sector Numbers for a Drive with 16,383 Cylinders, 16 Heads, and 63 Sectors per Track (16,514,064 Sectors Total)

Cylinder

Head

Sector

LBA

0

0

1

0

0

0

63

62

0

1

0

63

999

15

63

1,007,999

1,000

0

1

1,008,000

9,999

15

63

10,079,999

10,000

0

1

10,080,000

16,382

15

63

16,514,063

BIOS Commands Versus ATA Commands

In addition to the two methods of sector addressing (CHS or LBA), there are two levels of interface where sector addressing occurs. One interface is where the operating system talks to the BIOS (using driver commands); the other is where the BIOS talks to the drive (using ATA commands). The specific commands at these levels are different, but both support CHS and LBA modes. Figure 7.18 illustrates the two interface levels.

Figure 7.18

Figure 7.18. The relationship between BIOS and physical sector addressing. (In this figure, L-CHS stands for Logical CHS, and P-CHS stands for Physical CHS.)

When the operating system talks to the BIOS to read or write sectors, it issues commands via software interrupt (not the same as an IRQ) INT13h, which is how the BIOS subroutines for disk access are called. Various INT13h subfunctions allow sectors to be read or written using either CHS or LBA addressing. The BIOS routines then convert the BIOS commands into ATA hardware-level commands, which are sent over the bus I/O ports to the drive controller. Commands at the ATA hardware level can also use either CHS or LBA addressing, although the limitations are different. Whether your BIOS and drive use CHS or LBA addressing depends on the drive capacity, age of the BIOS and drive, BIOS Setup settings used, and operating system used.

CHS Limitations (the 528MB Barrier)

The original BIOS-based driver for hard disks is accessed via software interrupt 13h (13 hex) and offers functions for reading and writing drives at the sector level. Standard INT13h functions require that a particular sector be addressed by its cylinder, head, and sector location—otherwise known as CHS addressing. This interface is used by the operating system and low-level disk utilities to access the drive. IBM originally wrote the INT13h interface for the BIOS on the PC XT hard disk controller in 1983, and in 1984 the company incorporated it into the AT motherboard BIOS. This interface used numbers to define the particular cylinder, head, and sector being addressed. Table 7.17, which shows the standard INT13h BIOS CHS parameter limits, includes the maximum values for these numbers.

Table 7.17. INT13h BIOS CHS Parameter Limits

Field

Field Size

Maximum Value

Range

Total Usable

Cylinder

10 bits

1,024

0–1023

1,024

Head

8 bits

256

0–255

256

Sector

6 bits

64

1–63

63

The concept of a maximum value given a number of digits is simple: If you had, for example, a hotel with two-digit decimal room numbers, you could have only 100 (102) rooms, numbered 0–99. The CHS numbers used by the standard BIOS INT13h interface are binary, and with a 10-bit number being used to count cylinders, you can have only 1,024 (210) maximum, numbered 0–1,023. Because the head is identified by an 8-bit number, the maximum number of heads is 256 (28), numbered 0–255. Finally, with sectors per track there is a minor difference. Sectors on a track are identified by a 6-bit number, which would normally allow a maximum of 64 (26) sectors; however, because sectors are numbered starting with 1 (instead of 0), the range is limited to 1–63, which means a total of 63 sectors per track is the maximum the BIOS can handle.

These BIOS limitations are true for all BIOS versions or programs that rely on CHS addressing. Using the maximum numbers possible for CHS at the BIOS level, you can address a drive with 1,024 cylinders, 256 heads, and 63 sectors per track. Because each sector is 512 bytes, the math works out as follows:

Max. Values

---------------------------

Cylinders

1,024

Heads

256

Sectors/Track

63

===========================

Total Sectors

16,515,072

---------------------------

Total Bytes

8,455,716,864

Megabytes (MB)

8,456

Mebibytes (MiB)

8,064

Gigabytes (GB)

8.4

Gibibytes (GiB)

7.8

From these calculations, you can see that the maximum capacity drive addressable via the standard BIOS INT13h interface is about 8.4GB (where GB equals roughly 1 billion bytes), or 7.8GiB (where GiB means gigabinarybytes).

Unfortunately, the BIOS INT13h limits are not the only limitations that apply. Limits also exist in the ATA interface. The ATA CHS limits are shown in Table 7.18.

Table 7.18. Standard ATA CHS Parameter Limitations

Field

Field Size

Maximum Value

Range

Total Usable

Cylinder

16 bits

65,536

0–65,535

65,536

Head

4 bits

16

0–15

16

Sector

8 bits

256

1–255

255

As you can see, the ATA interface uses different-sized fields to store CHS values. Note that the ATA limits are higher than the BIOS limits for cylinders and sectors but lower than the BIOS limit for heads. The CHS limits for capacity according to the ATA-1 through ATA-5 specification are as follows:

Max. Values

-----------------------------

Cylinders

65,536

Heads

16

Sectors/Track

255

===========================

Total Sectors

267,386,880

---------------------------

Total Bytes

136,902,082,560

Megabytes (MB)

136,902

Mebibytes (MiB)

130,560

Gigabytes (GB)

136.9

Gibibytes (GiB)

127.5

When you combine the limitations of the BIOS and ATA CHS parameters, you end up with the situation shown in Table 7.19.

Table 7.19. Combined BIOS and ATA CHS Parameter Limits

BIOS CHS Parameter Limits

ATA CHS Parameter Limits

Combined CHS Parameter Field Limits

Cylinder

1,024

65,536

1,024

Head

256

16

16

Sector

63

255

63

Total sectors

16,515,072

267,386,880

1,032,192

Maximum capacity

8.4GB

136.9GB

528MB

As you can see, the lowest common denominator of the combined CHS limits results in maximum usable parameters of 1,024 cylinders, 16 heads, and 63 sectors, which results in a maximum drive capacity of 528MB. This became known as the 528MB barrier (also called the 504MiB barrier), and it affects virtually all PCs built in 1993 or earlier.

CHS Translation (Breaking the 528MB Barrier)

Having a barrier limiting drive capacity to 528MB or less wasn’t a problem when the largest drives available were smaller than that. But by 1994, drive technology had developed such that making drives larger than what the combined BIOS and ATA limitations could address was possible. Clearly a fix for the problem was needed.

Starting in 1993, the BIOS developer Phoenix Technologies began working on BIOS extensions to work around the combined CHS limits. In January of 1994, the company released the “BIOS Enhanced Disk Drive (EDD) Specification,” which was later republished by the T13 committee (also responsible for ATA) as “BIOS Enhanced Disk Drive Services (EDD).” The EDD documents detail several methods for circumventing the limitations of older BIOSs without causing compatibility problems with existing software. These include the following:

  • BIOS INT13h extensions supporting 64-bit LBA
  • Bit-shift geometric CHS translation
  • LBA-assist geometric CHS translation

The method for dealing with the CHS problem was called translation because it enabled additional subroutines in the BIOS to translate CHS parameters from ATA maximums to BIOS maximums (and vice versa). In an effort to make its methods standard among the entire PC industry, Phoenix released the EDD document publicly and allowed the technology to be used free of charge, even among its competitors such as AMI and Award. The T-13 committee in charge of ATA subsequently adopted the EDD standard and incorporated it into official ATA documents.

Starting in 1994, most BIOSs began implementing the Phoenix-designed CHS translation methods, which enabled drives up to the BIOS limit of 8.4GB to be supported. The fix involved what is termed parameter translation at the BIOS level, which adapted or translated the cylinder, head, and sector numbers to fit within the allowable BIOS parameters. There are two types of translation: One works via a technique called CHS bit-shift (usually called “Large” or “Extended CHS” in the BIOS Setup), and the other uses a technique called LBA-assist (usually called “LBA” in the BIOS Setup). These refer to the different mathematical methods of doing essentially the same thing: converting one set of CHS numbers to another.

CHS bit-shift translation manipulates the cylinder and head numbers but does not change the sector number. It begins with the physical (drive reported) cylinders and heads and, using some simple division and multiplication, comes up with altered numbers for the cylinders and heads. The sectors-per-track value is not translated and is passed unaltered. The term bit-shift is used because the division and multiplication math is actually done in the BIOS software by shifting bits in the CHS address.

With CHS bit-shift translation, the drive reported (physical) parameters are referred to as P-CHS, and the BIOS-altered logical parameters are referred to as L-CHS. After the settings are made in the BIOS Setup, L-CHS addresses are automatically translated to P-CHS at the BIOS level. This enables the operating system to send commands to the BIOS using L-CHS parameters, which the BIOS automatically converts to P-CHS when it talks to the drive using ATA commands. Table 7.20 shows the rules for calculating CHS bit-shift translation.

Table 7.20. CHS Bit-Shift Translation Rules

Physical (Drive Reported) Cylinders

Physical Heads

Logical Cylinders

Logical Heads

Maximum Capacity

1 < C <= 1,024

1 < H <= 16

C = C

H = H

528MB

1,024 < C <= 2,048

1 < H <= 16

C = C/2

H = H × 2

1GB

2,048 < C <= 4,096

1 < H <= 16

C = C/4

H = H × 4

2.1GB

4,096 < C <= 8,192

1 < H <= 16

C = C/8

H = H × 8

4.2GB

8,192 < C <= 16,384

1 < H <= 16

C = C/16

H = H × 16

8.4GB

The drive reported sector count is not translated.

The logical heads value can’t exceed 255 with some operating systems, such as DOS/Win9x/Me.

CHS bit-shift translation is based on dividing the physical cylinder count by a power of 2 to bring it under the 1,024 cylinder BIOS INT13h limit and then multiplying the heads by the same power of 2, leaving the sector count unchanged. The power of 2 used depends on the cylinder count, as indicated in Table 7.20.

Here is an example of CHS bit-shift translation:

                                     Bit-shift
                          P-CHS          L-CHS
                     Parameters     Parameters
----------------------------------------------
       Cylinders          8,000          1,000
           Heads             16            128
   Sectors/Track             63             63
==============================================
   Total Sectors      8,064,000      8,064,000
----------------------------------------------
     Total Bytes  4,128,768,000  4,128,768,000
  Megabytes (MB)          4,129          4,129
 Mebibytes (MiB)          3,938          3,938
  Gigabytes (GB)           4.13           4.13
 Gibibytes (GiB)           3.85           3.85

This example shows a drive with 8,000 cylinders and 16 heads. The physical cylinder count is way above the BIOS limit of 1,024, so if CHS bit-shift translation is selected in the BIOS Setup, the BIOS then divides the cylinder count by 2, 4, 8, or 16 to bring it below 1,024. In this case, it would divide by 8, which results in a new logical cylinder count of 1,000—which is below the 1,024 maximum. Because the cylinder count is divided by 8, the head count is then multiplied by the same number, resulting in 128 logical heads, which is also below the limit the BIOS can handle.

So, although the drive reports having 8,000 cylinders and 16 heads, the BIOS and all software (including the operating system) instead see the drive as having 1,000 cylinders and 128 heads. Note that the 63 sectors/track figure is simply carried over without change. The result is that by using the logical parameters, the BIOS can see the entire 4.13GB drive and won’t be limited to just the first 528MB.

When you install a drive, you don’t have to perform the translation math to convert the cylinders and heads; the BIOS does that for you automatically. All you have to do is allow the BIOS to autodetect the P-CHS parameters and then enable the translation in the BIOS Setup. Selecting Large or ECHS translation in the BIOS Setup enables the CHS bit-shift. The BIOS does the rest of the work for you.

CHS bit-shift is a simple and fast (code-wise) scheme that can work with all drives, but unfortunately it can’t properly translate all theoretically possible drive geometries for drives under 8.4GB. To solve this, an addendum was added to the ATA-2 specification to specifically require drives to report certain ranges of geometries to allow bit-shift translation to work. Thus, all drives that conform to the ATA-2 specification (or higher) can be translated using this method.

The 2.1GB and 4.2GB Barriers

Some BIOSs incorrectly allocated only 12 bits for the P-CHS cylinder field, thereby allowing a maximum of 4,096 cylinders. Combined with the standard 16-head and 63-sector limits, this resulted in the inability to support any drives over 2.1GB in capacity. Fortunately, this BIOS defect affected only a limited number of systems with BIOS dates prior to about mid-1996.

Even so, some problems still existed with bit-shift translation. Because of the way DOS and Windows 9x/Me were written, they could not properly handle a drive with 256 heads. This was a problem for drives larger than 4.2GB because the CHS bit-shift translation rules typically resulted in 256 heads as a logical value, as seen in the following example:

                                     Bit-shift
                          P-CHS          L-CHS
                     Parameters     Parameters
----------------------------------------------
       Cylinders         12,000            750
           Heads             16            256
   Sectors/Track             63             63
==============================================
   Total Sectors     12,096,000     12,096,000
----------------------------------------------
     Total Bytes  6,193,152,000  6,193,152,000
  Megabytes (MB)          6,193          6,193
 Mebibytes (MiB)          5,906          5,906
  Gigabytes (GB)           6.19           6.19
 Gibibytes (GiB)           5.77           5.77

This scheme failed when you tried to install Windows 9x/Me (or DOS) on a drive larger than 4.2GB because the L-CHS parameters included 256 heads. Any BIOS that implemented this scheme essentially had a 4.2GB barrier, so installing a drive larger than that and selecting CHS bit-shift translation caused the drive to fail. Note that this was not a problem for Windows NT or later.

To solve this problem, CHS bit-shift translation was revised by adding a rule such that if the drive reported 16 heads and more than 8,192 cylinders (which would result in a 256-head translation), the P-CHS head value would be assumed to be 15 (instead of 16) and the P-CHS cylinder value would be multiplied by 16/15 to compensate. These adjusted cylinder and head values would then be translated. The following example shows the results:

                                     Bit-shift   Revised Bit-
                          P-CHS          L-CHS    shift L-CHS
                     Parameters     Parameters     Parameters
-------------------------------------------------------------
       Cylinders         12,000            750            800
           Heads             16            256            240
   Sectors/Track             63             63             63
=============================================================
   Total Sectors     12,096,000     12,096,000     12,096,000
-------------------------------------------------------------
     Total Bytes  6,193,152,000  6,193,152,000  6,193,152,000
  Megabytes (MB)          6,193          6,193          6,193
 Mebibytes (MiB)          5,906          5,906          5,906
  Gigabytes (GB)           6.19           6.19           6.19
 Gibibytes (GiB)           5.77           5.77           5.77

As you can see from this example, a drive with 12,000 cylinders and 16 heads translates to 750 cylinders and 256 heads using the standard CHS bit-shift scheme. The revised CHS bit-shift scheme rule does a double translation in this case, first changing the 16 heads to 15 and then multiplying the 12,000 cylinders by 16/15, resulting in 12,800 cylinders. Then, the new cylinder value is CHS bit-shift-translated (it is divided by 16), resulting in 800 logical cylinders. Likewise, the 15 heads are multiplied by 16, resulting in 240 logical heads. If the logical cylinder count calculates to more than 1,024, it is truncated to 1,024. In this case, what started out as 12,000 cylinders and 16 heads P-CHS becomes 800 cylinders and 240 heads (instead of 750 cylinders and 256 heads) L-CHS, which works around the bug in the DOS/Win9x/Me operating systems.

So far, all my examples have been clean—that is, the L-CHS parameters have calculated to the same capacity as the P-CHS parameters. Unfortunately, it doesn’t always work out that way. The following shows a more typical example in the real world. Several 8.4GB drives from Maxtor, Quantum, Seagate, and others report 16,383 cylinders and 16 heads P-CHS. For those drives, the translations would work out as follows:

                                     Bit-shift   Revised Bit-
                          P-CHS          L-CHS    shift L-CHS
                     Parameters     Parameters     Parameters
-------------------------------------------------------------
       Cylinders         16,383          1,023          1,024
           Heads             16            256            240
   Sectors/Track             63             63             63
=============================================================
   Total Sectors     16,514,064     16,498,944     15,482,880
-------------------------------------------------------------
     Total Bytes  8,455,200,768  8,447,459,328  7,927,234,560
  Megabytes (MB)          8,455          8,447          7,927
 Mebibytes (MiB)          8,064          8,056          7,560
  Gigabytes (GB)           8.46           8.45           7.93
 Gibibytes (GiB)           7.87           7.87           7.38

Note that the revised CHS bit-shift translation rules result in supporting only 7.93GB of the 8.46GB total on the drive. In fact, the parameters shown (with 240 heads) are the absolute maximum that revised CHS bit-shift supports. Fortunately, another translation mode is available that improves this situation.

LBA-Assist Translation

The LBA-assist translation method places no artificial limits on the reported drive geometries, but it works only on drives that support LBA addressing at the ATA interface level. Fortunately, though, virtually all ATA drives larger than 2GB support LBA. LBA-assist translation takes the CHS parameters the drive reports, multiplies them together to get a calculated LBA maximum value (total number of sectors), and then uses this calculated LBA number to derive the translated CHS parameters. Table 7.21 shows the rules for LBA-assist translation.

Table 7.21. LBA-Assist Translation Rules

Logical Cylinders

Logical Heads

Logical Sectors

1 < T <= 1,032,192

T/1,008

16

63

1,032,192 < T <= 2,064,384

T/2,016

32

63

2,064,384 < T <= 4,128,768

T/4,032

64

63

4,128,768 < T <= 8,257,536

T/8,064

128

63

8,257,536 < T <= 16,450,560

T/16,065

255

63

T = Total sectors, calculated by multiplying the drive-reported P-CHS parameters (C × H × S)

LBA-assist translation fixes the sectors at 63 no matter what and divides and multiplies the cylinders and heads by predetermined values depending on the total number of sectors. This results in a set of L-CHS parameters the operating system uses to communicate with the BIOS. The L-CHS numbers are then translated to LBA numbers at the ATA interface level. Because LBA mode is more flexible at translating, you should use it in most cases instead of CHS bit-shift.

Normally, both the CHS bit-shift and LBA-assist translations generate the same L-CHS geometry for a given drive. This should always be true if the drive reports 63 sectors per track and 4, 8, or 16 heads. In the following example, both translation schemes result in identical L-CHS values:

                                  Revised bit-     LBA-assist
                          P-CHS    shift L-CHS          L-CHS
                     Parameters     Parameters     Parameters
-------------------------------------------------------------
       Cylinders          8,192          1,024          1,024
           Heads             16            128            128
   Sectors/Track             63             63             63
=============================================================
   Total Sectors      8,257,536      8,257,536      8,257,536
-------------------------------------------------------------
     Total Bytes  4,227,858,432  4,227,858,432  4,227,858,432
  Megabytes (MB)          4,228          4,228          4,228
 Mebibytes (MiB)          4,032          4,032          4,032
  Gigabytes (GB)           4.23           4.23           4.23
 Gibibytes (GiB)           3.94           3.94           3.94

However, if the drive reports a value other than 63 sectors per track or has other than 4, 8, or 16 heads, LBA-assist translation does not result in the same parameters as CHS bit-shift translation. In the following example, different translations result:

                                  Revised bit-     LBA-assist
                          P-CHS    shift L-CHS          L-CHS
                     Parameters     Parameters     Parameters
-------------------------------------------------------------
       Cylinders         16,383          1,024          1,024
           Heads             16            240            255
   Sectors/Track             63             63             63
=============================================================
   Total Sectors     16,514,064     15,482,880     16,450,560
-------------------------------------------------------------
     Total Bytes  8,455,200,768  7,927,234,560  8,422,686,720
  Megabytes (MB)          8,455          7,927          8,423
 Mebibytes (MiB)          8,064          7,560          8,033
  Gigabytes (GB)           8.46           7.93           8.42
 Gibibytes (GiB)           7.87           7.38           7.84

The LBA-assist translation supports 8.42GB, which is nearly 500MB more than the revised CHS bit-shift translation. More importantly, these translations are different, which can result in problems if you change translation modes with data on the drive. If you were to set up and format a drive using CHS bit-shift translation and then change to LBA-assist translation, the interpreted geometry could change and the drive could then become unreadable until it is repartitioned and reformatted (which would destroy all the data). Bottom line: After you select a translation method, don’t plan on changing it unless you have your data securely backed up.

Virtually all PC BIOSs since 1994 have translation capability in the BIOS Setup, and virtually all offer both translation modes as well as an option to disable translation entirely. If both CHS bit-shift and LBA-assist translation modes are offered, you should probably choose the LBA method of translation because it is the more efficient and flexible of the two. LBA-assist translation also gets around the 4.2GB operating system bug because it is designed to allow a maximum of 255 logical heads no matter what.

You usually can tell whether your BIOS supports translation by the capability to specify more than 1,024 cylinders in the BIOS Setup, although this can be misleading. The best clue is to look for the translation setting parameters in the ATA/IDE drive setup page in the BIOS Setup. See Chapter 5 for more information on how to enter the BIOS Setup on your system. If you see drive-related settings, such as LBA or ECHS (sometimes called Large or Extended), these are telltale signs of a BIOS with translation support. Most BIOSs with a date of 1994 or later include this capability, although some AMI BIOS versions from the mid-1990s locate the LBA setting on a screen different from the hard drive configuration screen. If your system currently does not support parameter translation, you might be able to get an upgrade from your motherboard manufacturer or install a BIOS upgrade card with this capability, such as the LBA Pro card from eSupport.com.

Table 7.22 summarizes the four ways today’s BIOSs can handle addressing sectors on the drive: Standard CHS (no translation), Extended CHS translation, LBA translation, and pure LBA addressing.

Table 7.22. Drive Sector Addressing Methods

BIOS Mode

OS to BIOS

BIOS to Drive

Standard (Normal), no translation

P-CHS

P-CHS

CHS bit-shift (ECHS) translation

L-CHS

P-CHS

LBA-assist (LBA) translation

L-CHS

LBA

Pure LBA (EDD BIOS)

LBA

LBA

Standard CHS has only one possible translation step internal to the drive. The drive’s actual physical geometry is completely invisible from the outside with all zoned recorded ATA drives today. The cylinders, heads, and sectors printed on the label for use in the BIOS Setup are purely logical geometry and do not represent the actual physical parameters. Standard CHS addressing is limited to 16 heads and 1,024 cylinders, which provides a limit of 504MiB (528MB).

This is often called “Normal” in the BIOS Setup and causes the BIOS to behave like an old-fashioned one without translation. Use this setting if your drive has fewer than 1,024 cylinders or if you want to use the drive with an operating system that doesn’t require translation.

ECHS, or “Large” in the BIOS Setup, is CHS bit-shift, and most BIOSs from 1997 and later use the revised method (240 logical heads maximum).

LBA, as selected in the BIOS Setup, indicates LBA-assist translation, not pure LBA mode. This enables software to operate using L-CHS parameters while the BIOS talks to the drive in LBA mode.

The only way to select a pure LBA mode, from the OS to the BIOS as well as from the BIOS to the drive, is with a drive that is over 8.4GB. All drives over 137GB must be addressed via LBA at both the BIOS and drive levels, and most PC BIOSs automatically address any drive over 8.4GB in that manner, as well. In that case, no special BIOS Setup settings are necessary, other than setting the type to auto or autodetect.

The 8.4GB Barrier

Although CHS translation breaks the 528MB barrier, it runs into another barrier at 8.4GB. Supporting drives larger than 8.4GB requires leaving CHS behind and changing from CHS to LBA addressing at the BIOS level. The ATA interface had always supported LBA addressing, even in the original ATA-1 specification. One problem was that LBA support at the ATA level originally was optional, but the main problem was that there was no LBA support at the BIOS interface level. You could set LBA-assist translation in the BIOS Setup, but all that did was convert the drive LBA numbers to CHS numbers at the BIOS interface level.

Phoenix Technologies recognized that the BIOS interface needed to move from CHS to LBA early on and, beginning in 1994, published the “BIOS Enhanced Disk Drive Specification (EDD),” which addressed this problem with new extended INT13h BIOS services that worked with LBA rather than CHS addresses.

To ensure industry-wide support and compatibility for these new BIOS functions, in 1996 Phoenix turned this document over to the International Committee on Information Technology Standards (INCITS) T13 technical committee for further enhancement and certification as a standard called the “BIOS Enhanced Disk Drive Specification (EDD).” Starting in 1998, most of the other BIOS manufacturers began installing EDD support in their BIOS, enabling BIOS-level LBA mode support for ATA drives larger than 8.4GB. Coincidentally (or not), this support arrived just in time because ATA drives of that size and larger became available that same year.

The EDD document describes new extended INT13h BIOS commands that allow LBA addressing up to 264 sectors, which results in a theoretical maximum capacity of more than 9.44ZB (zettabytes, or quadrillion bytes). That is the same as saying 9.44 trillion GB, which is 9.44×1021 bytes or, to be more precise, 9,444,732,965,739,290,427,392 bytes! I say theoretical capacity because even though by 1998 the BIOS could handle up to 264 sectors, ATA drives were still using only 28-bit addressing (228 sectors) at the ATA interface level. This limited an ATA drive to 268,435,456 sectors, which was a capacity of 137,438,953,472 bytes, or 137.44GB. Thus, the 8.4GB barrier had been broken, but another barrier remained at 137GB because of the 28-bit LBA addressing used in the ATA interface. The numbers work out as follows:

                      Max. Values
---------------------------------
Total Sectors         268,435,456
---------------------------------
Total Bytes       137,438,953,472
Megabytes (MB)            137,439
Mebibytes (MiB)           131,072
Gigabytes (GB)             137.44
Gibibytes (GiB)            128.00

By using the new extended INT13h 64-bit LBA mode commands at the BIOS level, as well as the existing 28-bit LBA mode commands at the ATA level, no translation would be required and the LBA numbers would be passed unchanged. The combination of LBA at the BIOS and the ATA interface levels meant that the clumsy CHS addressing could finally die. This also means that when you install an ATA drive larger than 8.4GB in a PC that has an EDD-capable BIOS (1998 or newer), both the BIOS and the drive are automatically set to use LBA mode.

An interesting quirk is that to allow backward compatibility when you boot an older operating system that doesn’t support LBA mode addressing (DOS or the original release of Windows 95, for example), most drives larger than 8.4GB report 16,383 cylinders, 16 heads, and 63 sectors per track, which is 8.4GB. For example, this enables a 120GB drive to be seen as an 8.4GB drive by older BIOSs or operating systems. That sounds strange, but I guess having a 120GB drive being recognized as an 8.4GB is better than not having it work at all. If you did want to install a drive larger than 8.4GB into a system dated before 1998, the recommended solution is either a motherboard BIOS upgrade or an add-on BIOS card with EDD support.

The 137GB Barrier and Beyond

By 2001, the 137GB barrier had become a problem because 3 1/2-inch hard drives were poised to breach that capacity level. The solution came in the form of ATA-6, which was being developed during that year. To enable the addressing of drives of greater capacity, ATA-6 upgraded the LBA functions from using 28-bit numbers to using larger 48-bit numbers.

The ATA-6 specification extends the LBA interface such that it can use 48-bit sector addressing. This means that the maximum capacity is increased to 248 (281,474,976,710,656) total sectors. Because each sector stores 512 bytes, this results in the maximum drive capacity shown here:

                           Max. Values
--------------------------------------
Total Sectors      281,474,976,710,656
--------------------------------------
Total Bytes    144,115,188,075,855,872
Megabytes (MB)         144,115,188,076
Mebibytes (MiB)        137,438,953,472
Gigabytes (GB)             144,115,188
Gibibytes (GiB)            134,217,728
Terabytes (TB)                 144,115
Tebibytes (TiB)                131,072
Petabytes (PB)                  144.12
Pebibytes (PiB)                 128.00

As you can see, the 48-bit LBA in ATA-6 allows a capacity of just over 144PB (petabytes = quadrillion bytes)!

Because the EDD BIOS functions use a 64-bit LBA number, they have a much larger limit:

                                  Max. Values
---------------------------------------------
Total Sectors      18,446,744,073,709,551,616
---------------------------------------------
Total Bytes     9,444,732,965,739,290,427,392
Megabytes (MB)          9,444,732,965,739,290
Mebibytes (MiB)         9,007,199,254,740,992
Gigabytes (GB)              9,444,732,965,739
Gibibytes (GiB)             8,796,093,022,208
Terabytes (TB)                  9,444,732,966
Tebibytes (TiB)                 8,589,934,592
Petabytes (PB)                      9,444,733
Pebibytes (PiB)                     8,388,608
Exabytes (EB)                           9,445
Exbibytes (EiB)                         8,192
Zettabytes (ZB)                          9.44
Zebibytes (ZiB)                          8.00

Although the BIOS services use 64-bit LBA (allowing up to 264 sectors) for even greater capacity, the 144 petabyte ATA-6 limitation is the lowest common denominator that would apply. Still, that should hold us for some time to come.

Because hard disk drives have been doubling in capacity every 1.5 to 2 years (a corollary of Moore’s Law), I estimate that it will take us until sometime between the years 2031 and 2041 before we reach the 144PB barrier (assuming hard disk technology hasn’t been completely replaced by then). Similarly, I estimate that the 9.44ZB EDD BIOS barrier won’t be reached until between the years 2055 and 2073! Phoenix originally claimed that the EDD specification would hold us until 2020, but it seems they were being quite conservative.

The 137GB barrier proved a bit more complicated than previous barriers because, in addition to BIOS issues, operating system issues also had to be considered.

Internal ATA drives larger than 137GB require 48-bit LBA (logical block address) support. This support absolutely needs to be provided in the OS, but it can also be provided in the BIOS. It is best if both the OS and BIOS provide this support, but it can be made to work if only the OS has the support.

Having 48-bit LBA support in the OS requires one of the following:

  • Windows XP with Service Pack 1 (SP1) or later.
  • Windows 2000 with Service Pack 4 (SP4) or later.
  • Windows 98/98SE/Me or NT 4.0 with the Intel Application Accelerator (IAA) loaded and a motherboard with an IAA-supported chipset. See http://downloadcenter.intel.com and search for IAA.

    Having 48-bit LBA support in the BIOS requires either of the following:

  • A motherboard BIOS with 48-bit LBA support (most of those dated September 2002 or later)
  • An ATA host adapter card with onboard BIOS that includes 48-bit LBA support

If your motherboard BIOS does not have the support and an update is not available from your motherboard manufacturer, you may be able to use a card. Promise Technology (www.promise.com) makes several PCI cards with 3Gbps SATA/eSATA interfaces as well as an onboard BIOS that adds 48-bit LBA support.

Note that if you have both BIOS and OS support, you can simply install and use the drive like any other. If you have no BIOS support, but you do have OS support, portions of the drive past 137GB are not recognized or accessible until the OS is loaded. If you are installing the OS to a blank hard drive and booting from an original XP (pre-SP1) CD or earlier, you will only be able to partition up to the first 137GB of the drive at installation time. After installing the OS and then the SP1 (or SP2/SP3) update, you can either partition the remainder of the drive as a second partition in Windows or use a free third-party partitioning program such as Parted Magic to expand the 137GB partition to use the full drive. If you are booting from an XP CD with SP1 or later integrated, Windows will recognize the entire drive during the OS installation and allow partitioning of the entire drive as a single partition greater than 137GB.

Operating System and Other Software Limitations

Note that if you use older software, including utilities, applications, or even operating systems that rely exclusively on CHS parameters, these items will see all drives over 8.4GB as 8.4GB only. You will need not only a newer BIOS, but also newer software designed to handle the direct LBA addressing to work with drives over 8.4GB.

Operating system limitations with respect to drives over 8.4GB are shown in Table 7.23.

Table 7.23. Operating System Limitations

Operating System

Limitations for Hard Drive Size

DOS/Windows 3x

DOS 6.22 or lower can’t support drives greater than 8.4GB. DOS 7.0 or higher (included with Windows 95 or later) is required to recognize a drive over 8.4GB.

Windows 9x/Me

Windows 95a (original version) does support the INT13h extensions, which means it does support drives over 8.4GB; however, due to limitations of the FAT16 file system, the maximum individual partition size is limited to 2GB. Windows 95B/OSR2 and later (including Windows 98/Me) support the INT13h extensions, which allow drives over 8.4GB, and they also support FAT32, which allows partition sizes up to the maximum capacity of the drive. However, Windows 95 doesn’t support hard drives larger than 32GB because of limitations in its design. Windows 98 requires an update to FDISK to partition drives larger than 64GB.

Windows NT

Windows NT 3.5x does not support drives greater than 8.4GB. Windows NT 4.0 does support drivers greater than 8.4GB; however, when a drive larger than 8.4GB is being used as the primary bootable device, Windows NT will not recognize more than 8.4GB. Microsoft has released Service Pack 4, which corrects this problem.

Windows 2000 and later

All Windows 2000 SP3+, Windows XP SP1+, Windows Vista, Windows 7/8, and later systems support MBR-formatted drives up to 2.19TB by default. 64-bit versions of Windows Vista SP1+ and Windows 7/8 and later support GPT-formatted drives of 2.2TB or larger, up to a maximum of 281TB (256TiB).

Linux

Most versions support MBR-formatted drives up to 2.19TB by default, whereas most current versions support GPT formatted drives of 2.2TB or larger, up to 16TiB or 1EiB depending on the file system.

OS/2 Warp

Some versions of OS/2 are limited to a boot partition size of 3.1GB or 4.3GB. IBM has a Device Driver Pack upgrade that enables the boot partition to be as large as 8.4GB. The HPFS file system in OS/2 supports drives up to 64GB.

Novell

NetWare 5.0 and later support drives greater than 8.4GB.

In the case of operating systems that support drives over 8.4GB, the maximum drive size limitations depend on the BIOS and hard drive interface standard, not the OS. Instead, other limitations come into play for the volumes (partitions) and files that can be created and managed by the various operating systems. These limitations depend on not only the operating system involved, but also the file system that is used for the volume. Table 7.24 shows the minimum and maximum volume (partition) size and file size limitations of the various Windows operating systems. As noted in the previous section, the original version of XP, as well as Windows 2000/NT or Windows 95/98/Me, does not currently provide native support for ATA hard drives that are larger than 137GB. You need to use Windows 7/8, Vista, or XP with Service Pack 1 or later installed to use an ATA drive over 137GB. This does not affect drives attached via USB, FireWire, SCSI, or other interfaces.

Table 7.24. Operating System Volume/File Size Limitations by File System

OS Limitations by File System

FAT16

FAT32

NTFS

Min. volume size (9x/Me)

2.092MB

33.554MB

Max. volume size (95)

2.147GB

33.554MB

Max. volume size (98)

2.147GB

136.902GB

Max. volume size (Me)

2.147GB

8.796TB

Min. volume size (NT+)

2.092MB

33.554MB

1.000MB

Max. volume size (NT+)

4.294GB

8.796GB

281.475TB

Max. file size (all)

4.294GB

4.294GB

16.384TB

— = not applicable

NT+ = Windows NT, 2000, XP, Vista, and Windows 7/8

MB = megabyte = 1,000,000 bytes

GB = gigabyte = 1,000,000,000 bytes

TB = terabyte = 1,000,000,000,000 bytes

  • + Share This
  • 🔖 Save To Your Account