Partition Alignment

Last change on 2021-04-13 • Created on 2020-03-17 • ID: RO-5F72D

Introduction

By "partition alignment," we mean the proper alignment of partitions to the physical sector boundaries of a data storage device (such as a hard drive, SSD, RAID volume). Correct partition alignment ensures optimal performance for accessing data. Faulty alignment of partitions can lead to reduced performance, especially for SSDs (with internal page sizes of 4,096 or 8,192 bytes, for example), for hard drives with 4 KB sectors (4,096 bytes) and for RAID volumes.

General information

When operating systems are installed via Robot or via the installimage in the Rescue System, the alignment is automatically correct alignment.

For unassisted installation via Remote Console (KVM Console) or via VNC (eg. CentOS 6.X), you need to configure the alignment manually. As a rough guide, the more recent the operating system that you want to install, the higher the chance that the installation programm will correctly align the partitions. You can check the alignment using the following command:

sfdisk -uS -l
fdisk -u -l /dev/sdX

The boot sector for each partition should be divisible by at least 8 (8 * 512 bytes = 4 KB), and ideally by 2048 (2048 * 512 bytes = 1 MB).

Background: Partitioning

Typical drives work with a physical sector size of 512 bytes. The first partition begins in the last sector of the first track with the (logical) block address 63. The size of such a (logical) sector also amounts to 512 bytes. As logical and physical sectors are of an equal size, there are no problems. Newer drives in Advanced Format work with a physical sector size of 4,096 bytes (4 KB). However, outwardly, they emulate a sector size of 512 bytes (Advanced Format 512e). SSDs also work with a page size of 4 KB or 8 KB. The use of "classical" partitioning, which starts at LBA address 63, is no longer recommended for these newer drives or SSDs.

Current file systems, such as ext4 or ntfs, use a 4 KB block size. The file system´s 4 KB blocks do not fit directly into the 4 KB sectors of the hard drive or 4 KB/8 KB SSD pages. When writing one single 4 KB file system block, two 4 KB sectors or pages need to be changed. This is further complicated by the need to retain the corresponding 512 byte blocks — which leads to a Read/Modify/Write. This results in a significant reduction in performance.

Wrong Partition Alignment

Correct partitioning

To avoid this problem, the recommended alignment is 1 MB — to be on the safe side in the long term. The current addressing in 512 byte-sized logical sectors amounts to 2,048 sectors.

Correct Partition Alignment

Linux

fdisk (older versions)

For older fdisk versions, you can do the alignment manually using the -S and -H parameters. There are various options for specific Number of Sectors per Track- (S) and Number of Head (H) figures. With -S 32 -H 64, the partitions are aligned to 1 MB (32 Sectors per Track * 64 Heads * 512 bytes = 1,048,576 bytes = 1 MB). When setting up the first partition, you start with cylinder two. Not using special parameters leads to misalignment with fdisk.

fdisk in the Hetzner Rescue System

The fdisk version contained in the Hetzner Rescue System uses a 1 MB alignment as long as DOS Compatibility Mode is deactivated.

For newer fdisk versions, it is recommended that you:

  • use the fdisk from util-linux-ng >= 2.17.2
  • pay attention to the fdisk warnings
  • deactivate DOS Compatibility Mode (-c Option)
  • use the sectors as display units (-u Option)
  • use +size{M,G} to show the end of a partition.

Example of faulty alignment

The following example shows faulty alignment following a VNC installation of CentOS 5.6:

[root@static ~]# fdisk -v
fdisk (util-linux 2.13-pre7)
[root@static ~]# fdisk -u /dev/hda

The number of cylinders for this disk is set to 10443.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)

Command (m for help): p

Disk /dev/hda: 85.8 GB, 85899345920 bytes
255 heads, 63 sectors/track, 10443 cylinders, total 167772160 sectors
Units = sectors of 1 * 512 = 512 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/hda1   *          63      208844      104391   83  Linux
/dev/hda2          208845   167766794    83778975   8e  Linux LVM

Example of correct alignment

root@rescue ~ # fdisk -c -u /dev/sda

Command (m for help): p

Disk /dev/sda: 1500.3 GB, 1500301910016 bytes
255 heads, 63 sectors/track, 182401 cylinders, total 2930277168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x0004dc67

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048     4196351     2097152   fd  Linux raid autodetect
/dev/sda2         4196352     5244927      524288   fd  Linux raid autodetect
/dev/sda3         5244928  1465149167   729952120   fd  Linux raid autodetect

LVM and software RAID

Although you need to pay attention to correct alignment here as well, this is not explicitly necessary as at least 64 KB-sized blocks are used. Newer versions include patches which perform an additional alignment at 1 MB boundaries.

Windows

All Windows versions starting with Windows Vista automatically perform an alignment at 1 MB boundaries on all data storage devices larger than 4 GB. Older versions such as Windows XP require manual alignment.

Table of Contents