Aligner des partitions

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Domaine Alignement des partitions disque (SAN/VM/LVM)
Commande fdisk, sfdisk, pvcreate
Contexte Disques créés avant l'alignement par défaut (RHEL < 6, Windows < 2008, VM sur SAN/NAS)
Voir aussi Fdisk, LVM, NFS

Un partitionnement désaligné place le début d'une partition (ou d'un volume LVM) à cheval sur deux blocs physiques du support sous-jacent (disque, LUN SAN, datastore VMware). Chaque écriture logique déclenche alors deux écritures physiques au lieu d'une, ce qui dégrade sensiblement les performances I/O — un sujet classique sur les LUN NetApp/SAN et les machines virtuelles créées avant que les hyperviseurs et OS n'alignent correctement par défaut.

Pourquoi le désalignement apparaît

Historiquement, un disque exposait à l'OS une géométrie (cylindres/têtes/secteurs) utilisée par les outils de partitionnement pour placer le début des partitions. Cette géométrie est aujourd'hui émulée par le firmware du disque (ou de l'hyperviseur), mais des outils comme fdisk (GNU/Linux) ou Microsoft DiskPart (Windows 2000/2003) continuent par défaut à démarrer la première partition au secteur 63, qui ne tombe pas sur une frontière de bloc physique propre (typiquement 4 Ko, 32 Ko ou 1 Mo selon le stockage).

Windows Server 2008+/Vista (offset par défaut 1 048 576, divisible par 4096) et RHEL 6+ (alignement correct par défaut) ne nécessitent normalement plus d'ajustement manuel — le problème concerne surtout les systèmes plus anciens ou les disques migrés/clonés depuis un tel système.

Vérifier l'alignement

Sous Linux

fdisk -lu /dev/sda                        # secteur de départ de chaque partition

cat /sys/block/sda/alignment_offset
cat /sys/block/sda/sda1/alignment_offset
cat /sys/block/sda/queue/physical_block_size
cat /sys/block/sda/queue/logical_block_size
cat /sys/block/sda/queue/minimum_io_size
cat /sys/block/sda/queue/optimal_io_size

Un secteur de départ à 63 (au lieu de 128, 256 ou 2048 selon le block size du support) signale une partition non alignée.

Avec les outils plus récents (RHEL 6+), parted permet une vérification directe :

parted /dev/sda align-check optimal 1     # vérifie l'alignement optimal de la partition 1

Vérifier également que la détection automatique d'alignement est active côté LVM (/etc/lvm/lvm.conf) :

grep -E 'ata_alignment_offset_detection|data_alignment_detection' /etc/lvm/lvm.conf
# les deux doivent valoir 1

Sous Windows

Récupérer le StartingOffset et la taille de secteur (BlockSize) d'une partition :

wmic partition get BlockSize, StartingOffset, Name, Index

(ou via msinfo32.exe, section Composants → Stockage → Disques). La partition est alignée si StartingOffset est un multiple de BlockSize.

Côté baie NetApp

priv set -q advanced
lun show -v
lun alignment show

Via sg3_utils

yum install sg3_utils
sg_inq -p 0xb0 disk    # page VPD Block Limits (tailles de bloc/alignement annoncées par le disque)

Corriger l'alignement

⚠️ Ces opérations sont destructives (repartitionnement) : sauvegarder les données, ou opérer sur un disque neuf/vierge attaché à une autre VM avant remise en production.

Avec fdisk (mode expert)

fdisk /dev/sda
# x            → entrer en mode expert
# b            → déplacer le début de données d'une partition
# 1            → numéro de la partition
# 2048         → nouveau secteur de départ (au lieu de 63)
# w            → écrire la table de partitions

Alternative en une commande avec sfdisk, pour forcer le premier secteur à 128 :

echo "128,," | sfdisk -uS /dev/sdc

# vérification visuelle du secteur de boot
dd if=/dev/sdc bs=512 count=130 | xxd -c 32

Avec LVM (pvcreate)

pvcreate accepte un décalage (--dataalignmentoffset) et/ou un alignement (--dataalignment) explicites, à faire correspondre à la géométrie du stockage sous-jacent (SAN, RAID) :

pvcreate --dataalignmentoffset 512b --dataalignment 512K /dev/sda1
pvcreate --dataalignmentoffset 512b --dataalignment 480K /dev/sda1
pvcreate --dataalignment 4k /dev/mpath/nlun1

Puis, côté LV/FS, aligner les I/O sur le stripe du stockage si pertinent :

lvcreate -i 4 -I 64k -n oradbs -L 600g vg_data
mkfs.ext3 -j -m0 -b4096 /dev/vg_data/oradbs

Cas particulier : VM sur SAN/NAS (VMware/NetApp)

Sur un datastore SAN/NAS (NetApp notamment), le désalignement se cumule à deux niveaux : celui de la partition invitée (OS) et celui du datastore VMFS lui-même. La procédure recommandée par NetApp (document technique TR-3747, section 4.4) consiste à :

  • Nouvelle VM : suivre la procédure de partitionnement aligné dès l'installation (Windows
 2008/Seven et RHEL 6+ n'ont normalement pas besoin d'ajustement) ;
  • VM déjà installée : attacher le disque non aligné à une autre VM et appliquer la
 correction (section 5.2 du même document), ou utiliser un outil de réalignement à froid type
 mbralign (VMware).

Voir aussi

  • Fdisk — partitionnement et mode expert
  • LVM — gestion des volumes logiques
  • NFS — stockage réseau concerné par les mêmes problématiques d'alignement