Cylinder-head-sector, also known as CHS, is an early method for giving addresses to each physical block of data on a hard disk drive. In the case of floppy drives, for which the same exact diskette medium can be truly low-level formatted to different capacities, this is still true.
Though CHS values no longer have a direct physical relationship to the data stored on modern storage media except for floppy disks, virtual CHS values (which can be translated by disk electronics or software) are still being used by many utility programs and file systems.
CHS addressing is the process of identifying individual sectors on a disk by their position in a track, where the track is determined by the head and cylinder numbers. The terms are explained bottom up, for disk addressing the sector is the smallest unit. Disk controllers can introduce address translations to map logical to physical positions, e.g., zone bit recording stores fewer sectors in shorter (inner) tracks, physical disk formats are not necessarily cylindrical, and sector numbers in a track can be skewed.
The tracks are the thin concentric circular strips of sectors. At least one head is required to read a single track. With respect to disk geometries the terms track and cylinder are closely related. For a single or double sided floppy disk track is the common term; and for more than two heads cylinder is the common term. Strictly speaking a track is a given
CH combination consisting of
SPT sectors, while a cylinder consists of
The concept is concentric, hollow, cylindrical slices through the physical disks (platters), collecting the respective circular tracks aligned through the stack of platters. The number of cylinders of a disk drive exactly equals the number of tracks on a single surface in the drive. It comprises the same track number on each platter, spanning all such tracks across each platter surface that is able to store data (without regard to whether or not the track is "bad"). Cylinders are vertically formed by tracks. In other words, track 12 on platter 0 plus track 12 on platter 1 etc. is cylinder 12.
Other forms of Direct Access Storage Device (DASD), such as drum memory devices or the IBM 2321 Data Cell, might give blocks addresses that include a cylinder address, although the cylinder address doesn't select a (geometric) cylindrical slice of the device.
The most common physical sector size for harddisks today is 512 bytes, but there have been hard disks with 520 bytes per sector as well for non-IBM compatible machines. In 2005 some Seagate custom hard disks used sector sizes of 1024 bytes per sector. Advanced Format hard disks use 4096 bytes per physical sector (4Kn) since 2010, but will also be able to emulate 512 byte sectors (512e) for a transitional period.
Magneto-optical drives use sector sizes of 512 and 1024 bytes on 5.25-inch drives and 512 and 2048 bytes on 3.5-inch drives.
CHS addressing the sector numbers always start at 1, there is no sector 0, which can lead to confusion since logical sector addressing schemes (e.g., with LBA, or with "absolute sector addressing" in DOS) typically start counting with 0.
For physical disk geometries the maximal sector number is determined by the low level format of the disk. However, for disk access with the BIOS of IBM-PC compatible machines, the sector number was encoded in six bits, resulting in a maximal number of 63=64-1 sectors per track, where 64=26 corresponds to six bits. The maximum 63 is still in use for virtual CHS geometries.
Blocks and clusters
The Unix communities employ the term block to refer to a sector or group of sectors. For example, the Linux fdisk utility normally displays partition table information using 1024-byte blocks, but also uses the word sector to help describe a disk's size in the phrase, 63 sectors per track.
Clusters are allocation units for data on various file systems (FAT, NTFS, etc.), where data mainly consists of files. Clusters are not directly affected by the physical or virtual geometry of the disk, i.e., a cluster can begin at a sector near the end of a given
CH track, and end in a sector on the physically or logically next
A device called a head reads and writes data in a hard drive by manipulating the magnetic medium that composes the surface of an associated disk platter. Naturally, a platter has 2 sides and thus 2 surfaces on which data can be manipulated; usually there are 2 heads per platter, one per side. (Sometimes the term side is substituted for head, since platters might be separated from their head assemblies, as with the removable media of a floppy drive.)
CHS addressing supported in IBM-PC compatible BIOSes code used eight bits for - theoretically up to 256 heads counted as head 0 up to 255 (
FFh). However, a bug in all versions of Microsoft DOS/IBM PC DOS up to and including 7.10 will cause these operating systems to crash on boot when encountering volumes with 256 heads. Therefore, all compatible BIOSes will use mappings with up to 255 heads (
00h..FEh) only, including in virtual 255×63 geometries.
(512 bytes/sector)×(63 sectors/track)×(255 heads (tracks/cylinder))×(1024 cylinders)=8032.5 MiB, but actually (512 byte/sector)×256×63×1024=8064 MiB yields what is known as 8 GiB limit. In this context relevant definition of 8 GiB = 8192 MiB is another incorrect limit, because it would require CHS 512×256×64 with 64 sectors per track.
Tracks and cylinders are counted from 0, i.e., track 0 is the first (outer-most) track on floppy or other cylindrical disks. Old BIOS code supported ten bits in CHS addressing with up to 1024 cylinders (1024=210). Adding six bits for sectors and eight bits for heads results in the 24 bits supported by BIOS interrupt 13h. Subtracting the disallowed sector number 0 in 1024×256 tracks corresponds to 128 MiB for a sector size of 512 bytes (128 MiB=1024×256×(512 byte/sector)); and 8192-128=8064 confirms the (roughly) 8 GiB limit.
CHS addressing starts at
0/0/1 with a maximal value
1023/255/63 for 24=10+8+6 bits, or
1023/254/63 for 24 bits limited to 255 heads. CHS values used to specify the geometry of a disk have to count cylinder 0 and head 0 resulting in a maximum (
1024/255/63 for 24 bits with (256 or) 255 heads. In CHS tuples specifying a geometry S actually means sectors per track, and where the (virtual) geometry still matches the capacity the disk contains
C×H×S sectors. As larger hard disks have come into use, a cylinder has become also a logical disk structure, standardised at 16 065 sectors (16065=255×63).
CHS addressing with 28 bits (EIDE and ATA-2) permits eight bits for sectors still starting at 1, i.e., sectors 1…255, four bits for heads 0…15, and sixteen bits for cylinders 0…65535. This results in a roughly 128 GiB limit; actually 65536×16×255=267386880 sectors corresponding to 130560 MiB for a sector size of 512 bytes. The 28=16+4+8 bits in the ATA-2 specification are also covered by Ralf Brown's Interrupt List, and an old working draft of this now expired standard was published.
With an old BIOS limit of 1024 cylinders and the ATA limit of 16 heads the combined effect was 1024×16×63=1032192 sectors, i.e., a 504 MiB limit for sector size 512. BIOS translation schemes known as ECHS and revised ECHS mitigated this limitation by using 128 or 240 instead of 16 heads, simultaneously reducing the numbers of cylinders and sectors to fit into
1024/128/63 (ECHS limit: 4032 MiB) or
1024/240/63 (revised ECHS limit: 7560 MiB) for the given total number of sectors on a disk.
CHS to LBA mapping
- A = (c ⋅ Nheads + h) ⋅ Nsectors + (s − 1),
where A is the LBA address, Nheads is the number of heads on the disk, Nsectors is the number of sectors per track, and (c, h, s) is the CHS address.
A Logical Sector Number formula in the ECMA-107 and ISO/IEC 9293:1994 (superseding ISO 9293:1987) standards for FAT file systems matches exactly the LBA formula given above: Logical Block Address and Logical Sector Number (LSN) are synonyms. The formula does not use the number of cylinders, but requires the number of heads and the number of sectors per track in the disk geometry, because the same CHS tuple addresses different logical sector numbers depending on the geometry. Examples:
- For geometry
1020 16 63of a disk with 1028160 sectors CHS
3 2 1is LBA 3150=(3× 16+2)× 63
- For geometry
1008 4 255of a disk with 1028160 sectors CHS
3 2 1is LBA 3570=(3× 4+2)×255
- For geometry
64 255 63of a disk with 1028160 sectors CHS
3 2 1is LBA 48321=(3×255+2)× 63
- For geometry
2142 15 32of a disk with 1028160 sectors CHS
3 2 1is LBA 1504=(3× 15+2)× 32
To help visualize the sequencing of sectors into a linear LBA model, note that:
- The first LBA sector is sector # zero, the same sector in a CHS model is called sector # one.
- All the sectors of each head/track get counted before incrementing to the next head/track.
- All the heads/tracks of the same cylinder get counted before incrementing to the next cylinder.
- The outside half of a whole Hard Drive would be the first half of the drive.
In 2002 the ATA-6 specification introduced an optional 48 bits logical block addressing and declared CHS addressing as obsolete, but still allowed to implement the ATA-5 translations. Unsurprisingly the CHS to LBA translation formula given above also matches the last ATA-5 CHS translation. In the ATA-5 specification CHS support was mandatory for up to 16 514 064 sectors and optional for larger disks. The ATA-5 limit corresponds to CHS
16383 16 63 or equivalent disk capacities (16514064 = 16383×16×63 = 1032×254×63), and requires 24 = 14+4+6 bits (16383 + 1 = 214).
Earlier hard drives used in the PC, such as MFM and RLL drives, divided each cylinder into an equal number of sectors, so the CHS values matched the physical properties of the drive. A drive with a CHS tuple of
500 4 32 would have 500 tracks per side on each platter, two platters (4 heads), and 32 sectors per track, with a total of 32 768 000 bytes (31.25 MiB).
ATA/IDE drives were much more efficient at storing data and have replaced the now archaic MFM and RLL drives. They use zone bit recording (ZBR), where the number of sectors dividing each track varies with the location of groups of tracks on the surface of the platter. Tracks nearer to the edge of the platter contain more blocks of data than tracks close to the spindle, because there is more physical space within a given track near the edge of the platter. Thus, the CHS addressing scheme cannot correspond directly with the physical geometry of such drives, due to the varying number of sectors per track for different regions on a platter. Because of this, many drives still have a surplus of sectors (less than 1 cylinder in size) at the end of the drive, since the total number of sectors rarely, if ever, ends on a cylinder boundary.
An ATA/IDE drive can be set in the system BIOS with any configuration of cylinders, heads and sectors that do not exceed the capacity of the drive (or the BIOS), since the drive will convert any given CHS value into an actual address for its specific hardware configuration. This however can cause compatibility problems.
For operating systems such as Microsoft DOS or older version of Windows, each partition must start and end at a cylinder boundary. Only some of the most modern operating systems (Windows XP included) may disregard this rule, but doing so can still cause some compatibility issues, especially if the user wants to perform dual booting on the same drive. Microsoft does not follow this rule with internal disk partition tools since Windows Vista.
- CD-ROM format
- Block (data storage)
- Disk storage
- Disk formatting
- File Allocation Table
- Disk partitioning
- "Volume and File Structure of Disk Cartridges for Information Interchange". Standard ECMA-107 (2nd ed., June 1995). ECMA. 1995. Retrieved 2011-07-30.
- "Standard Floppy Disk Formats Supported by MS-DOS". KB75131. Microsoft Knowledge Base. 2003-05-12. Retrieved 2011-07-31.
- "Western Digital’s Advanced Format: The 4K Sector Transition Begins". AnandTech. 2009-12-18. Retrieved 2011-07-29.
- "Advanced Format Technology Brief" (PDF). Hitachi. 2010. p. 1. Retrieved 2011-08-01.
512 byte emulation is sometimes referred to as 512e
- Andries Brouwer (2004-11-01). "History of BIOS and IDE limits". Large Disk HOWTO v2.5. Retrieved 2011-07-30.
- "Windows NT 4.0 supports maximum of 7.8-GB system partition". Microsoft. 2007-02-23. Retrieved 2011-07-30.
- "5K500.B SATA OEM Specification Revision 1.2" (PDF). Hitachi. 2009-03-17. p. 51. Retrieved 2011-07-29.
- "ATA-2" (PDF). X3T10/0948D. INCITS Technical Committee T13 AT Attachment. 1996-03-18. Retrieved 2011-07-30.
- "ATA-1" (PDF). X3T10/791D. INCITS Technical Committee T10 SCSI Storage Interfaces. 1994. Retrieved 2011-07-30.
- "Information technology -- Volume and file structure of disk cartridges for information interchange". ISO/IEC 9293:1994. ISO catalogue. 1994. Retrieved 2012-01-06.
- "Information processing -- Volume and file structure of flexible disk cartridges for information interchange". ISO 9293:1987. ISO catalogue. 1987. Retrieved 2012-01-06.
- "ATA-6" (PDF). T13/1410D. INCITS Technical Committee T13 ATA Storage Interface. 2002. p. 22. Retrieved 2011-07-30.
In standards ATA/ATAPI-5 and earlier, a CHS translation was defined. This translation is obsolete but may be implemented as defined in ATA/ATAPI-5.
- "ATA-5" (PDF). T13/1321D. INCITS Technical Committee T13 ATA Storage Interface. 2000. p. 19. Retrieved 2011-07-30.
If the device’s capacity is greater than or equal to one sector and less than or equal to 16,514,064 sectors, then the device shall support CHS translation.
- "KB931760". Microsoft Windows XP Support. Microsoft Knowledge Base. 2009-07-23. Retrieved 2011-07-30.
- 1.^ This rule is true at least for all formats where the physical sectors are named 1 upwards. However, there are a few odd floppy formats (e.g., the 640 KiB format used by BBC Master 512 with DOS Plus 2.1), where the first sector in a track is named "0" not "1".
- 2.^ While computers begin counting at 0, DOS would begin counting at 1. In order to do this, DOS would add a 1 to the head count before displaying it on the screen. However, instead of converting the 8-bit unsigned integer to a larger size (such as a 16-bit integer) first, DOS just added the 1. This would overflow a head count of 255 (
0xFF) into 0 (
0x100 & 0xFF = 0x00) instead of the 256 that would be expected. This was fixed with DOS 8, but by then, it had become a de facto standard to not use a head value of 255.