Heads and sectors for partition alignment

by Martin Monperrus

There are many cases where [[http://www.ibm.com/developerworks/linux/library/l-4kb-sector-disks/index.html?ca=dgr-lnxw074KB-Disksdth-LX|aligning the disk partitions yields better perfomance]], for instance for database partitions, solid-state disks (SSD), and SAN storage with iSCSI. Here is the result of my Googling on this topic.

Partition alignment means two things: first that the partition boundaries correspond to physical disk block boundaries (which is straightforward for 512 byte blocks, but not for 128k blocks), second that the partition boundaries correspond to kernel volume blocks. Hence, the partitioning tools are responsible for finding “good” partition starting addresses. Most partition tools rely on cylinder/head/sector (CHS) to compute partition addresses, even if the hardware is not anymore based on cylinders/heads for years. In particular, they create partitions at the beginning of cylinders.

For instance, if the kernel volume block is 8KB (i.e. 16 sectors, 16*512=8192), then the CHS geometry must be set so that the first sector of all partitions must be divisible by 16, hence corresponds to a volume block boundary. Also, since SSD disks often have 128k physical blocks, the CHS geometry must be set so that the first sector of all partitions must be divisible by 256.

The following presents different CHS values found on the web, and whether the cylinders will match the required boundaries.

Head/Sector # sectors per cylinder = #head * #sector 4KB volume block - Linux (divisible by 8) 8KB volume block (divisible by 16) 128KB disk block (divisible by 256) Source
255/56 14280 yes yes no [[http://comments.gmane.org/gmane.linux.iscsi.open-iscsi/2240]]
240/63 15120 yes yes no [[http://web.archive.org/web/20110723021108/http://ldn.linuxfoundation.org/blog-entry/aligning-filesystems-ssd%E2%80%99s-erase-block-size|http://ldn.linuxfoundation.org/blog-entry/aligning-filesystems-ssd%E2%80%99s-erase-block-size]]
256/32 8192 yes yes yes [[http://groups.google.com/group/open-iscsi/browse_thread/thread/37741fb3b3eca1e4]]
224/56 12544 yes yes yes [[http://ldn.linuxfoundation.org/blog-entry/aligning-filesystems-ssd%E2%80%99s-erase-block-size]]

Note that the first partition must also start at correct sectors. Since it often starts at sector #63, it is not optimal (not divisible by 8!). It is better to make it start at #256 and commonly at sector #2048 (see [[http://technet.microsoft.com/en-us/library/cc966412.aspx]] and [[https://wiki.archlinux.org/index.php/Solid_State_Drives]]).

Tagged as: