Linux sans magie #41 — GPT et MBR : comprendre ce qu’est réellement une table de partitions

Comprendre la différence entre GPT et MBR, leur rôle dans le partitionnement d’un disque et savoir identifier une table de partitions sans modifier le stockage.

Dans les articles précédents, nous avons progressivement remonté la chaîne du stockage Linux :

disque
→ partition
→ filesystem
→ point de montage

Nous avons utilisé lsblk, parlé de filesystem, d’UUID, de /etc/fstab, puis de mount et umount.

Mais une question reste ouverte :

comment le disque sait-il où commencent et où finissent ses partitions ?

La réponse se trouve dans la table de partitions.

Sur les systèmes actuels, les deux noms que l’on rencontre principalement sont :

  • MBR ;
  • GPT.

Ils ne désignent ni un filesystem ni un type de disque.

Ils définissent une manière de décrire les partitions présentes sur un support.

Replacer la table de partitions dans la chaîne

Prenons un disque :

/dev/sdb

Il peut contenir plusieurs partitions :

/dev/sdb1
/dev/sdb2
/dev/sdb3

Mais ces partitions ne sont pas simplement « découvertes au hasard ».

Une structure stockée sur le disque décrit notamment leurs emplacements.

On peut représenter la chaîne ainsi :

disque physique ou virtuel
        ↓
table de partitions
        ↓
partitions
        ↓
filesystems
        ↓
points de montage

GPT ou MBR se situent donc entre le disque et les partitions.

Un filesystem comme ext4, xfs ou vfat vient ensuite.

C’est une distinction essentielle :

GPT ≠ ext4
MBR ≠ filesystem

Qu’est-ce que MBR ?

MBR signifie Master Boot Record.

Le format historique DOS/MBR utilise le premier secteur logique du disque pour stocker notamment sa table de partitions.

Une table MBR classique possède de la place pour quatre entrées de partitions principales.

Conceptuellement :

LBA 0
┌──────────────────────────┐
│ code de démarrage        │
├──────────────────────────┤
│ partition entry 1        │
│ partition entry 2        │
│ partition entry 3        │
│ partition entry 4        │
├──────────────────────────┤
│ signature                │
└──────────────────────────┘

La limite de quatre entrées explique le mécanisme historique des partitions :

  • primaires ;
  • étendues ;
  • logiques.

Une partition étendue pouvait servir de conteneur afin de dépasser la limite pratique des quatre partitions directement décrites dans le MBR.

Cette logique appartient au modèle DOS/MBR.

GNU Parted distingue encore explicitement les types primary, extended et logical lorsqu’une table msdos est utilisée. Ces notions ne s’appliquent pas de la même manière à GPT.

Qu’est-ce que GPT ?

GPT signifie GUID Partition Table.

Il s’agit du format moderne de table de partitions défini dans l’écosystème UEFI.

Contrairement au schéma historique MBR, GPT utilise notamment :

  • des adresses logiques sur 64 bits ;
  • des GUID pour identifier les types et partitions ;
  • des noms de partitions ;
  • des checksums pour vérifier l’intégrité des structures ;
  • une copie de secours des métadonnées GPT.

La documentation fdisk le décrit comme le standard moderne pour l’organisation d’une table de partitions.

Dans de nombreux outils, le nombre de partitions GPT est limité par défaut à 128, même si le format lui-même n’est pas limité à quatre entrées comme le MBR traditionnel.

Organisation simplifiée d’un disque GPT

Un disque GPT ne contient pas simplement « une table au début ».

Sa structure est plus robuste.

Une représentation simplifiée ressemble à ceci :

début du disque
│
├─ LBA 0 : Protective MBR
├─ LBA 1 : GPT Header principal
├─         Table des entrées de partitions
├─         Espace utilisable
├─         Partitions
├─         ...
├─         Table GPT de secours
└─ dernier LBA : GPT Header de secours

La spécification UEFI impose une structure GPT principale et une structure de secours.

Le header principal se trouve normalement au LBA 1.

Le header de secours se trouve au dernier LBA du disque.

Les checksums CRC permettent notamment de vérifier l’intégrité des headers et des entrées de partitions.

Cette redondance est une différence importante avec le format MBR historique.

Pourquoi un disque GPT contient-il encore un MBR ?

C’est probablement le point le plus contre-intuitif.

Un disque GPT possède normalement quelque chose appelé :

Protective MBR

ou PMBR.

Il se trouve au :

LBA 0

c’est-à-dire au premier bloc logique.

Pourquoi conserver une structure MBR alors qu’on utilise GPT ?

Pour protéger le disque contre les anciens outils qui ne comprennent que MBR.

Le protective MBR contient typiquement une entrée de type :

0xEE

qui représente le disque GPT comme étant déjà occupé.

L’objectif est d’éviter qu’un ancien outil MBR examine le disque, pense qu’il est vide et propose de créer une nouvelle table par-dessus les structures GPT.

Le protective MBR n’implique donc pas que le disque utilise simultanément deux véritables tables de partitions indépendantes.

Il fait partie du mécanisme de compatibilité GPT.

GPT et UEFI : attention au raccourci

On entend souvent :

UEFI = GPT
BIOS = MBR

Cette formule est pratique pour débuter, mais trop simplificatrice.

GPT est un format de partitionnement.

UEFI est une interface firmware.

MBR est également un format de table de partitions historique, dont le premier secteur peut contenir du code de démarrage.

Les choix réellement possibles dépendent :

  • du firmware ;
  • du système d’exploitation ;
  • du bootloader ;
  • du mode de démarrage ;
  • du type de disque ;
  • de la plateforme.

Sur un système moderne démarrant en UEFI, GPT constitue généralement le choix naturel et recommandé.

Mais il faut éviter de transformer cette association courante en équivalence absolue.

Pourquoi GPT est-il préféré aujourd’hui ?

Plusieurs caractéristiques rendent GPT préférable sur le matériel moderne.

Plus de quatre partitions

Le modèle GPT ne repose pas sur les quatre entrées primaires du MBR historique.

Il n’a donc pas besoin du mécanisme primary/extended/logical pour contourner cette limite.

Adressage 64 bits

GPT utilise des Logical Block Addresses sur 64 bits.

Cela permet notamment de s’affranchir des limites structurelles historiques du format MBR pour les grands disques.

La capacité réellement utilisable dépend aussi de la taille des secteurs et des systèmes impliqués, mais le modèle GPT est conçu pour des supports beaucoup plus grands.

Identifiants

Les partitions GPT possèdent notamment :

  • un GUID de type ;
  • un GUID unique de partition.

C’est ce deuxième type d’identifiant que l’on peut retrouver sous Linux avec :

PARTUUID

vu dans le #38.

Noms de partitions

GPT permet également d’attribuer un nom à une partition.

Sous Linux, ces informations peuvent notamment apparaître comme :

PARTLABEL

Redondance et intégrité

GPT stocke des structures principales et de secours et utilise des checksums.

Cela permet de détecter certaines corruptions des métadonnées de partitionnement.

Cela ne signifie pas qu’une corruption est automatiquement sans conséquence.

Mais le format possède des mécanismes d’intégrité absents du MBR historique.

Identifier la table de partitions sans rien modifier

Le lab de cet article reste volontairement en lecture seule.

Nous voulons seulement déterminer si un disque utilise GPT ou MBR.

Étape 1 — Lister les disques

Commencez par :

lsblk -o NAME,TYPE,SIZE,FSTYPE,PTTYPE,PARTTYPE,PARTUUID,MOUNTPOINTS

Le champ :

PTTYPE

correspond au type de table de partitions détecté.

Vous pourrez par exemple rencontrer :

gpt

ou :

dos

Dans lsblk, dos désigne ici le format DOS/MBR.

Exemple conceptuel :

NAME   TYPE SIZE PTTYPE
sda    disk 100G gpt
├─sda1 part 512M
└─sda2 part 99.5G

Étape 2 — Inspecter avec fdisk -l

fdisk peut afficher les informations d’une table sans la modifier.

Pour un disque explicitement identifié :

sudo fdisk -l /dev/sdX

Remplacez :

/dev/sdX

par le disque réellement observé.

N’utilisez jamais un nom de device simplement copié depuis un exemple.

Sur un disque GPT, la sortie peut contenir une information du type :

Disklabel type: gpt

Sur un disque utilisant une table DOS/MBR :

Disklabel type: dos

Cette commande est ici utilisée uniquement pour lire la configuration existante.

Étape 3 — Ne pas confondre disque et partition

Il est important d’interroger le bon niveau.

Par exemple :

/dev/sda

désigne généralement le disque.

Alors que :

/dev/sda1

désigne une partition.

La table de partitions appartient au disque.

Pour inspecter sa structure globale avec fdisk, utilisez donc normalement le device du disque :

sudo fdisk -l /dev/sda

et non uniquement une partition individuelle.

Observer les identifiants GPT

Sur un système GPT, vous pouvez aussi afficher :

lsblk -o NAME,PTTYPE,PARTTYPE,PARTUUID,PARTLABEL

Les champs PARTUUID et PARTLABEL sont liés à la partition elle-même.

Ils ne doivent pas être confondus avec :

UUID
LABEL

qui concernent généralement le filesystem contenu dans cette partition.

On retrouve donc la distinction :

GPT partition
├─ PARTUUID
└─ PARTLABEL

filesystem
├─ UUID
└─ LABEL

Cette différence devient beaucoup plus intuitive lorsqu’on replace chaque identifiant au bon niveau.

fdisk peut aussi modifier le disque

Dans cet article, nous n’utilisons que :

fdisk -l

Mais fdisk est aussi un outil de partitionnement interactif.

Une session telle que :

sudo fdisk /dev/sdX

peut permettre de :

  • créer une nouvelle table ;
  • créer ou supprimer des partitions ;
  • modifier certains attributs ;
  • écrire la nouvelle configuration sur le disque.

Il ne faut donc pas explorer les commandes d’écriture sur un disque contenant des données importantes.

Le fait qu’un outil puisse afficher la table ne signifie pas que toutes ses commandes sont inoffensives.

Même prudence avec parted

GNU Parted permet également d’inspecter et modifier les tables de partitions.

Une interrogation courante est :

sudo parted /dev/sdX print

ou, selon le contexte :

sudo parted -l

Mais parted fournit aussi des commandes comme :

mklabel
mkpart
rm

qui modifient effectivement la structure du disque.

Par exemple, mklabel crée une nouvelle table de partitions.

Ce n’est pas une commande à essayer pour « voir ce que ça fait » sur un disque contenant des données.

Pourquoi recréer une table peut être destructif

Créer une nouvelle table de partitions ne reformate pas nécessairement instantanément chaque bloc de données du disque.

Mais cela remplace les métadonnées qui décrivent où se trouvent les partitions.

Le système peut alors perdre la représentation normale permettant d’accéder aux filesystems existants.

Du point de vue opérationnel, il faut donc considérer une commande de création de nouvelle table comme une opération destructive.

Exemples à ne pas utiliser dans ce lab :

fdisk → nouvelle table GPT/DOS

ou :

parted /dev/sdX mklabel gpt

Leur utilisation nécessite :

  • un disque correctement identifié ;
  • une sauvegarde adaptée ;
  • une procédure planifiée ;
  • une compréhension du layout attendu ;
  • une méthode de rollback réaliste.

MBR, GPT et boot : deux rôles différents

Une confusion fréquente vient du fait que le MBR historique contient aussi une zone pouvant accueillir du code de démarrage.

Cela conduit parfois à mélanger :

table de partitions

et :

bootloader

Ce sont pourtant deux concepts distincts.

GPT décrit les partitions.

UEFI définit notamment un modèle de firmware et de démarrage.

Une EFI System Partition est une partition particulière utilisée dans le processus de démarrage UEFI.

Elle est généralement située sur un disque GPT moderne, mais elle n’est pas elle-même « la GPT ».

Même logique pour GRUB :

GRUB ≠ GPT
GRUB ≠ MBR

Un bootloader et une table de partitions répondent à des fonctions différentes.

Le cas des disques sans table de partitions

Tous les block devices Linux n’ont pas obligatoirement une table GPT ou MBR.

Il est possible, selon les usages, de placer directement un filesystem sur un device entier :

/dev/sdb

sans créer :

/dev/sdb1

Certains environnements virtuels, appliances ou configurations particulières peuvent fonctionner de cette manière.

Dans ce cas, l’absence de PTTYPE n’indique pas nécessairement que le disque est inutilisable.

Elle peut simplement indiquer qu’il n’existe pas de table de partitions reconnue.

Il faut examiner conjointement :

lsblk -f

et :

lsblk -o NAME,TYPE,PTTYPE,FSTYPE,MOUNTPOINTS

avant de conclure.

Vérification reproductible

Pour identifier proprement le layout d’un disque :

1. Observer tous les block devices

lsblk -o NAME,TYPE,SIZE,PTTYPE,FSTYPE,MOUNTPOINTS

2. Identifier précisément le disque concerné

Par exemple :

/dev/sdb

3. Lire sa table avec fdisk

sudo fdisk -l /dev/sdb

4. Vérifier les identifiants de partitions

lsblk -o NAME,PTTYPE,PARTTYPE,PARTUUID,PARTLABEL

5. Ne rien écrire

Si l’objectif est seulement l’inventaire, arrêtez-vous là.

Aucune commande de création ou modification n’est nécessaire.

Sécurité

Les commandes de lecture utilisées ici sont adaptées à un diagnostic :

lsblk ...
sudo fdisk -l ...

En revanche, les outils de partitionnement deviennent sensibles lorsqu’ils passent en mode modification.

Avant toute future opération d’écriture, vérifiez toujours :

lsblk -o NAME,SIZE,MODEL,SERIAL,TYPE,MOUNTPOINTS

L’objectif est d’identifier le bon disque par plusieurs caractéristiques, pas seulement par un nom tel que :

/dev/sdb

Les noms /dev/sdX peuvent varier selon l’environnement et l’ordre de détection.

Sur une machine distante, une erreur de device peut affecter un disque de production.

Coûts

GPT et MBR sont des formats de métadonnées de partitionnement. Leur utilisation n’entraîne pas de coût logiciel particulier.

Dans un cloud public, le disque ou volume associé peut naturellement être facturé indépendamment du format de table utilisé.

Changer GPT ou MBR ne modifie pas à lui seul la tarification d’un volume.

Limites et points de vigilance

Cet article ne traite volontairement pas encore :

  • de la création de partitions ;
  • du redimensionnement ;
  • de l’alignement détaillé ;
  • des partitions BIOS boot ;
  • de l’EFI System Partition en détail ;
  • de la conversion MBR → GPT ;
  • de la récupération d’une table de partitions corrompue ;
  • de gdisk, sgdisk ou sfdisk.

Ces sujets impliquent davantage de modifications ou de cas particuliers et méritent des articles séparés.

Rollback

Le lab principal ne réalise aucune modification.

Il n’y a donc aucun rollback à effectuer.

Si vous vous êtes limité à :

lsblk ...

et :

sudo fdisk -l /dev/sdX

le stockage reste inchangé.

C’est précisément pourquoi ces commandes constituent une bonne première étape avant toute opération de partitionnement.

Références officielles

Conclusion

GPT et MBR ne sont ni des filesystems ni des technologies de montage.

Ils décrivent comment un disque est découpé en partitions.

Le modèle peut maintenant être complété :

disque
↓
GPT ou MBR
↓
partition
↓
filesystem
↓
mount

MBR correspond au format historique, construit autour d’une table limitée à quatre entrées principales et du mécanisme des partitions étendues/logiques.

GPT est le format moderne, avec adresses 64 bits, GUID, checksums et structures de secours.

Avant de modifier quoi que ce soit, Linux permet heureusement d’examiner tout cela en lecture seule avec lsblk et fdisk -l.

Le prochain article pourra passer de la théorie à l’inspection détaillée avec fdisk et parted, toujours sans modifier le disque.