23.6. Partition and File System Tools
This section describes how different partition and file system management tools interact with a device's I/O parameters.
util-linux-ng's libblkid and fdisk
The
libblkid
library provided with the util-linux-ng
package includes a programmatic API to access a device's I/O parameters. libblkid
allows applications, especially those that use Direct I/O, to properly size their I/O requests. The fdisk
utility from util-linux-ng
uses libblkid
to determine the I/O parameters of a device for optimal placement of all partitions. The fdisk
utility will align all partitions on a 1MB boundary.
parted and libparted
The
libparted
library from parted
also uses the I/O parameters API of libblkid
. The Red Hat Enterprise Linux 6 installer (Anaconda) uses libparted
, which means that all partitions created by either the installer or parted
will be properly aligned. For all partitions created on a device that does not appear to provide I/O parameters, the default alignment will be 1MB.
The heuristics
parted
uses are as follows:
- Always use the reported
alignment_offset
as the offset for the start of the first primary partition. - If
optimal_io_size
is defined (i.e. not0
), align all partitions on anoptimal_io_size
boundary. - If
optimal_io_size
is undefined (i.e.0
),alignment_offset
is0
, andminimum_io_size
is a power of 2, use a 1MB default alignment.This is the catch-all for "legacy" devices which don't appear to provide I/O hints. As such, by default all partitions will be aligned on a 1MB boundary.Note
Red Hat Enterprise Linux 6 cannot distinguish between devices that don't provide I/O hints and those that do so withalignment_offset=0
andoptimal_io_size=0
. Such a device might be a single SAS 4K device; as such, at worst 1MB of space is lost at the start of the disk.
File System tools
The different
mkfs.filesystem
utilities have also been enhanced to consume a device's I/O parameters. These utilities will not allow a file system to be formatted to use a block size smaller than the logical_block_size
of the underlying storage device.
Except for
mkfs.gfs2
, all other mkfs.filesystem
utilities also use the I/O hints to layout on-disk data structure and data areas relative to the minimum_io_size
and optimal_io_size
of the underlying storage device. This allows file systems to be optimally formatted for various RAID (striped) layouts.