DISK LIMITS
5/29/99
Hard Drive Limits:
Some general comments:
- There are several different conventions for measuring disk capacity. I've used the most optimistic one -- total storage divided by 1000, 1,000,000, etc. That's the convention usually used by disk vendors.
- 'CHS' refers to a disk addressing scheme that uses Cylinder/Head/Sector for disk addressing.
- 'INT13' is a technique for passing disk information between programs and the BIOS.
- 'CHS Translation' is a technique for manipulating CHS to fully use all of the bits available in the INT13 interface.
- 'LBA' is Logical Block Addressing -- a disk addressing scheme. It is frequently used to refer to CHS Translation which is somewhat implicit in LBA.
- 'Extended Interrupt 13' is a technique in late 1997 and later BIOSes/OSes to get around capacity limits of INT13. Both the BIOS and OS must support the extensions in order for them to be useful.
- There is an ongoing issue of whether values are addresses or numbers. Addresses often count from 0. Numbers almost always count from 1. The IDE disk interface is addressed by sector and sees 64 values between 0 and 63. But the Interrupt 13 disk size determination sees 63 as a number of sectors and can't handle 64 sectors per track. There is an uncertainty of 1 in many maximum values.
- For the most part, the limits here apply to both SCSI and IDE although SCSI usually comes with it's own BIOS and may not be subject to motherboard BIOS limits.
Limits:
- 32MByte (actually 33.554MB?) -- Maximum partition (drive) size on DOS 3.2 and earlier. The limit apparently is imposed by the FAT limit of 65536 512 byte sectors. DOS 3.3 allows a 32MByte Primary partition and additional 32 byte partitions in an "extended partition". DOS 4 and above allow 2.11GByte partitions.
- 1024 cylinders -- Maximum number of cylinders allowed across the non-Extended INT13 interface between BIOSes and OSes. This results in limitations in some Unixes and OS/2 releases that the bootable partition must start in the first 1024 cylinders. Also a factor in the 528mb limit on hard drive size in older BIOSes.
- 528MByte -- The largest drive that can be supported via unextended INT13 with a BIOS that does not support CHS translation (frequently referred to with varying degrees of accuracy as "LBA"). The limit is dictated by the 1024 cylinder limit of the INT13 interface and the 16 head limit of the IDE hardware interface. It can be overcome with an override BIOS or with disk management software. It *MAY* be possible to define an Extended partition greater than 528MByte along with a 528MByte primary partition and to declare additional 528MByte drives within that partition, but not with the MSDOS FDISK partitioning tool. 528MByte is also the largest drive supported by DOS6 DBLSPACE/DRVSPACE, and the conventional WIN95/98 DRVSPACE. The DRVSPACE on the WIN95/98 PLUS pack supports 2.11GByte compressed drives. This limit is apparently imposed by an internal "Cluster Size" in DBLSPACE/DRVSPACE whose characteristics are not entirely clear.
- 2.11GByte -- The largest primary partition (logical drive) size available with the DOS/WIN95 FDISK program which can not create partitions bigger than 2.11GByte. Extended partitions are a bit difficult to describe since each drive created is actually the 'primary drive' within a nested 'extended partition'. DOS and WIN95 FAT16 partitions are limited to 2.11GB even with Extended INT13 BIOSes because they use 65536, 32K clusters. 2.11 GB is the largest compressed drive supported by DRVSPACE3 on the WIN95/98 PLUS pack.
- 3.28GByte -- Applies only to Phoenix Version 4.03 and 4.04 BIOSes and is caused by a defective size computation routine. Drives with more than 6349 cylinders may hang up CMOS setup or may report incorrect sizes.
- 4.22GByte -- Maximum size of a WINDOWS NT FAT 16 primary partition when using an Extended Interrupt 13 BIOS. The limit is imposed by the maximum of a 64K FAT using 64K Clusters. 4.22GByte partitions are not fully compatible with MSDOS/WIN95 and should not be used on systems that may be used with those OSes. 4.22GB is the maximum size drive supported by some versions of OS/2. It is also the limit of some BIOSes that adjust cylinders and head count on large disks if it is not possible to set heads to less than 16. (See 8.42 MB description).
- 7.9GByte -- Maximum disk size for BIOSes that limit CHS translation to 15 heads in order to avoid passing 16*16=256 heads to MSDOS.
- 8.42GByte -- Maximum disk size for BIOSes that limit CHS translation to 255 heads out in order to avoid passing 256 heads to MSDOS. Many sources claim that MSDOS/WIN9x can handle 1024 Cylinders/256heads/63 sectors per track= 8.46GByte. Phoenix/Maxtor say that in practice the limit is 255 heads limiting MSDOS/WIN9x to 8.42GByte.
- 8.46GByte -- The maximum size of a hard drive for a BIOS/OS that does not support extended INT13. It is dictated by the INT13 limits of 1024 Cylinders, 256 heads and 63 sectors/track. MSDOS/WIN9x apparently do not handle 256 heads properly and some BIOSes deliberately limit heads to 255 (8.42 GB) or 240 (about 7.9GB). This appears to be the largest space partitionable with the MSDOS and WIN95 FDISK and may be the maximum for many other older disk tools as well. 8.46GB is the limit of all MSDOS FDISKs; of NT3.5; of Novell prior to 4.11 and is the largest root partition supported by many Linuxes. Win98 and versions of WIN95 that support extended INT13 (WIN95A and later) can partition larger disks but are still limited to 2.11GB per partition if using FAT16. NT4.0 can handle disks larger than 8.42GB, but requires that service packs be installed. A bug in Win9X may limit non-boot drives to 8.46GB
- 32GByte -- This is not an absolute limit. It is the point at which FAT32 cluster size becomes 32KBytes. Large Cluster sizes cause large amounts of lost space due to unused disk space in small files ("Slack"). Cluster sizes greater than 16K cause unacceptable amounts of slack in most applications. At 32GB and above, it may be better to set up multiple FAT32 partitions or to use NTFS. There is also a limit of 32GB for protected mode ScanDisk when used with Phoenix BIOSes in LARGE (but not LBA) Mode.
- 137GB -- The maximum amount of space addressable on an IDE drive without multiple commands. Limited by the number of and usage of wires in the IDE cable.
- 1TB -- The Maximum size of a WIN95/98 FAT32 Partition using 4K clusters. The Maximum cluster number is limited to 28 bits. Cluster sizes larger than 4K are permitted and lead to proportionally larger disk maxima.
- 2.11TB -- The maximum size of an NTFS Partition using 512byte sectors. It also appears to be the largest possible partition that can be described in the Master Boot Record using 512 byte sectors. Larger sectors up to 64K are permitted which would yield a partition of about 280TB. Looks to be the limit of SCSI disk addressing with 512 byte sectors using the existing 10/12 bit command sets.
- 35TB -- The maximum amount of space addressable on an IDE drive using multiple commands.
- 9.4x10^21 bytes -- The maximum disk size accessible via extended INT13 using 512 byte sectors.
- 1.2*10^24 bytes -- The maximum disk size accessible via extended INT13 using 65536 byte sectors (the largest possible sectors).
Thanks to James Day who posted several of the larger numbers previously in the benchmark forum as well as to numerous others who have provided comments and corrections on prior postings used to build this.
===
INT 13 (Prior to 1997 Extensions)
AH = Function 02=Read, 03=Write, 08=Disk Parameters
AL = Number of Sectors
BX = Pointer to Buffer (actually CS:BX)
CH = Cylinder Number (Low order 8 bits)
CL = Sector Number (Low order 6 bits, Top two bits are High Order bits of Cylinder)
DH = Heads
DL = Drive ID (0=C:, 1=D:, etc)
INT 13 (Extensions) In AMI BIOSes Jan1, 1998 and later; Award BIOSes after Nov97 and Phoenix BIOSes Ver4 Rel6 and later.
AH = Add 40 to the INT 13 Code
DS:SI contains the address of a Disk Parameter table. The table is lengthy and contains a variety of information. The size values are
Start+04 -- 32 bit -- Number of Cylinders
Start+08 -- 32 bit -- Number of Heads
Start+0C -- 32 bit -- Number of Sectors
Start+10 -- 64 bit -- Total number of Sectors on Drive
Start+18 -- 16 bit -- Sector Size
This would seem to allow 1.84*10^19 sectors of up to 65536 bytes = 1.2*10^24 bytes.
===
Hard Drive Partition Table located in Master Boot Record (the Partition Table is in bytes 256ff of cylinder0, track0, Head 0 on a hard drive). The MBR contains four 16 byte records defining up to four disk partitions:
MBR Partition Format:
Byte 0 - Active Partition. Non-zero for "Active Partition" -- the partition from which the disk will boot.
Bytes 1-3 - Start Cylinder (10 bits), Heads(6 bits), Sectors (256 bits) -- allows 8.4GB.
Byte 4 -- Partition Type FAT16, Unix, FAT32, etc.
Bytes 5-7 - End Cylinder (10 bits), Heads(6 bits), Sectors (256 bits) -- allows 8.4GB. The following two fields were added in DOS4.0 and may not be present on very old disks:
Bytes 8-11 - Start Sector (32 bits) -- allows 4.2TB (2.1 TB starting 2.1TB into the disk)
Bytes 12-15 - Number of Sectors (32 bits) -- allows 2.1Tb
===
IDE (ATA) - Non-LBA Addressing
Heads = 16
Cylinders = 65536
Sectors/Track = 255
Maximum size (using 512 Byte Sectors) = 137MB
===
SCSI -- LBA Addressing (No CHS mode)
6Byte commands = 21 bits = 1GB (Not normally used for disks)
10/12 Byte commands = 32bits = 2TB (with 512byte sectors)
Web Reference:
Return To Index
Copyright 1994-2010 by Donald Kenney.