Dans le domaine du matériel informatique, une table de partitionnement GUID, en anglais GUID Partition Table (GPT), soit Globally Unique Identifier Partition Table, est un standard pour décrire la table de partitionnement d'une mémoire de masse (ex. disque dur). Bien qu'il fasse partie du standard EFI Extensible Firmware Interface (qu'Intel propose en remplacement du PCBIOS), il est aussi utilisé sur certains BIOS à cause des limitations de la table de partitionnement du MBR qui limite la taille des partitions à 2,2 To (2 41octets)[1]. GPT gère les disques durs et partitions jusqu'à 9,4 Zo (9,4 × 1021 octets ou 9,4 trilliards d'octets soit 9,4 × 109 To ou 2 73octets)[1],[2].
La table de partitionnement du MBR date du début des années 1980. Dès la fin des années 1990, les limitations qu'elle impose sont apparues trop contraignantes pour les matériels les plus modernes. Intel a alors développé un nouveau format de table de partitionnement, format qui fait partie de ce qui devint UEFI. La GPT est un sous-ensemble des spécifications de UEFI[3].
Caractéristiques
La table de partitionnement basée sur le MBR est située à l'intérieur de ce MBR, qui, dans le cas d'un système utilisant BIOS, contient aussi le programme de démarrage du système. En mode GPT, les informations concernant la table de partitionnement sont stockées dans un entête GPT, mais pour garantir une compatibilité (avec les logiciels gérant MBR mais non GPT), GPT maintient une entrée MBR (dite protectrice car empêchant les systèmes ne prenant pas en charge d'écrire sur la totalité du disque) suivie de l'entête d'une partition primaire, le véritable début de la table de partitionnement.
Comme les MBR modernes, GPT utilise l'adressage logique des blocs (LBA) et non l'adressage historique CHS (cylinder-head-sector). Les informations du MBR sont à l'adresse 0 (LBA 0), l'entête GPT se trouve à l'adresse 1 (LBA 1), et la table de partitionnement en elle-même suit à partir de l'adresse 2 (LBA 2). Sur les versions 64-bit de Windows, le système d'exploitation réserve 16 384 octets (ou 32 secteurs) pour la GPT, le premier secteur utilisable du disque se trouve donc à l'adresse 34 (LBA 34).
Avertissement d'Apple[4]: « Il ne faut pas présupposer que la taille d'un bloc sera toujours de 512 octets. » Les périphériques de stockage moderne comme les SSD peuvent contenir des LBA de 1 024 octets et certains disques magnéto-optiques (MO) utilisent des secteurs de 2 048 octets (néanmoins les disques MO sont typiquement non-partitionnés). Les fabricants de disques durs envisagent de passer à des secteurs de 4 096 octets. Début 2010 le premier à vendre de tels disques utilise un middleware qui peut donner l'illusion au système d'exploitation d'un disque de secteurs de 512 octets[5].
Typiquement, les disques démarrant les Macintosh sous processeur Intel sont formatés avec une table de partitionnement GUID plutôt qu'avec l'Apple Partition Map (APM).
GPT offre aussi de la redondance en écrivant l'entête et la table de partitionnement au début et à la fin du disque.
L'héritage du MBR (LBA 0)
Sur un disque MBR, le MBR se trouve à l'adresse 0 (LBA). Dans les spécifications de GPT, à cette même adresse se trouve une structure qui protège les disques GPT des écritures provenant d'utilitaires disques qui ne (re)connaissent pas les informations de GPT. Cette structure est appelée MBR protecteur (protective MBR). Ce MBR protecteur décrit une seule partition de type 0xEE qui recouvre tout le disque GPT. Si la taille du disque excède 2 To, correspondant à la taille maximum représentable avec une adresse (LBA) 32 bits et des blocs de 512 octets, le MBR protecteur décrit alors une partition de 2 To, ignorant le reste du disque. Les systèmes ou logiciels qui ne connaissent pas GPT voient le disque complètement plein ayant une seule partition d'un type inconnu et refusent de modifier le disque à moins d'effacer cette partition. Cela permet de minimiser les risques d’effacement accidentel. De plus sur les systèmes compatibles avec GPT, la moindre anomalie concernant le MBR protecteur (type non 0xEE ou encore la présence de plusieurs partitions) devrait empêcher la manipulation des informations concernant GPT.
Le MBR protecteur contient aussi le programme de démarrage (bootloader) utilisé par les systèmes BIOS (non-EFI) capables de démarrer sur de tels disques.
Emplacement de GPT
Pour éviter une confusion dans le vocabulaire, précisons ici que :
GPT : signifiant Table de Partitionnement GUID, désigne l'ensemble formé de l’entête et du tableau des partitions ;
entête : désigne l'entête de GPT ;
tableau des partitions (ou tableau de descripteurs de partition) : désigne la liste des descripteurs de chaque partition ((en) Partition Entry Array).
Comme l'indique le schéma, il y a deux GPT sur le disque dur, l'un primaire, l'autre secondaire (sauvegarde du premier). Le primaire se situe au début du disque alors que le secondaire se situe à la fin du disque, leurs structures entête/descripteurs étant inversées.
Structure globale du disque :
MBR protecteur (début du disque dur)
GPT primaire : entête
GPT primaire : tableau de partitions
Partitions : début de la partition 1
...
Partitions : fin de la partition n
GPT secondaire : tableau de partitions
GPT secondaire : entête (fin du disque dur)
L'entête de GPT (LBA 1 et -1)
L'entête de GPT définit les blocs utilisables sur le disque ainsi que les nombres et la taille des descripteurs de la table de partitionnement. Sur les ordinateurs sous Windows Serveur 64-bit, 128 partitions peuvent être créées. Il y a 128 descripteurs réservés de 128 octets chacun. La spécification de EFI impose que la table de partitionnement fasse au moins 16 384 octets ce qui laisse la place pour 128 descripteurs.
L'entête de GPT contient le GUID du disque (Globally Unique Identifier, identifiant globalement unique). Il enregistre sa taille et son emplacement (toujours LBA 1 pour l'entête primaire) ainsi que la taille et l'emplacement de l'entête de GPT secondaire (le dernier secteur du disque pour l'entête primaire ; ces deux valeurs sont inversées pour l'entête secondaire). Il contient aussi deux checksums CRC32, l'un pour l'entête lui-même, l'autre pour le tableau de partitions. Ils peuvent être vérifiés au démarrage par le firmware, par le programme de démarrage (bootloader) et/ou par le système d'exploitation. Lorsqu'un des checksums CRC32 de l'entête primaire est incorrect, le contenu du GPT secondaire est recopié sur le GPT primaire, normalement sous contrôle de l'utilisateur ou de l'exploitant de la machine, avec enregistrement dans un journal d'évènements. Dans le cas où les deux GPT seraient invalides le disque devient inutilisable. À cause des CRC, les éditeurs hexadécimaux ne doivent pas être utilisés pour modifier le contenu du GPT, une telle modification rendant le CRC32 invalide.
Format de l'entête GPT
Offset
Longueur
Contenu
0
8 octets
Signature ("EFI PART", 45 46 49 20 50 41 52 54)
8
4 octets
Version (Pour la version 1.0, la valeur est 00 00 01 00, 1,0 en virgule fixe 16:16)
12
4 octets
Taille de l'entête (en octets, habituellement 5C 00 00 00 signifiant 92 octets)
16
4 octets
CRC32 de l'entête (de 0 à 92 octets - la taille de l'entête), avec ce champ à zéro pendant le calcul du crc32.
20
4 octets
Réservé, doit être initialisé à zero
24
8 octets
Adresse de cet entête GPT (emplacement de cet entête ; devrait être 1, le deuxième secteur du disque, pour l'entête primaire)
32
8 octets
Adresse de l'entête de l'autre GPT (ou backup ; devrait être le dernier secteur du disque pour l'entête primaire, et 1 pour l'entête secondaire)
40
8 octets
Première adresse utilisable pour les partitions
48
8 octets
Dernière adresse utilisable pour les partitions (à l'adresse suivante se trouve normalement la table de partitionnement secondaire)
56
16 octets
GUID du disque (aussi désigné comme UUID sur les UNIX)
72
8 octets
Adresse du tableau des partitions (normalement 2 pour le GPT primaire)
80
4 octets
Nombre de descripteurs de partition
84
4 octets
Taille en octets d'un descripteur de partition (habituellement 128)
88
4 octets
CRC32 de la table des partitions
92
*
réservé, la fin du bloc devrait être initialisée à zéro (420 octets sur un bloc de 512 octets)
LBA Size
TOTAL
Descripteurs de partitions ou éléments du Tableau des partitions (LBA 2 à 33 et -33 à -2)
GPT reste simple et direct pour décrire les partitions.
Les 16 premiers octets désignent le type GUID de la partition. Par exemple, le GUID pour une partition EFI est {C12A7328-F81F-11D2-BA4B-00A0C93EC93B}. Les 16 octets suivants contiennent un GUID unique de la partition. Viennent ensuite 2×8 octets pour les adresses de début et de fin de la partition. Enfin de la place est allouée pour stocker les noms et attributs des partitions. Comme c'est le but et la nature même des GUID, il n'est nul besoin de registre central pour s'assurer de l'unicité des GUID des partitions.
Format des entrées (descripteurs) de partition de GPT
Dernière adresse (LBA, inclusive, et habituellement impaire)
48
8 octets
Les attributs, les drapeaux ou flags (par exemple, le bit 60 indique une partition en lecture seule)
56
72 octets
Le nom de la partition (36 caractères codé en UTF-16LE)
128
TOTAL
Avertissement d'Apple : « Il ne faut pas coder en dur une taille de descripteur de 128 octets »[6] la taille d'un descripteur est en effet fournie dans l'en-tête GPT à l'offset 84. Microsoft TechNet considère que les attributs sont divisés en deux moitiés : les 4 premiers octets représentent des attributs indépendants des partitions, et les 4 octets suivants des attributs dépendants des partitions. Microsoft utilise les bits suivants en général.
Les attributs des partitions
Bit
Contenu
0
partition système (l'outil d'installation doit réserver la partition comme telle)
2
amorçable par d'anciens BIOS (équivalent de l'indicateur 80h Active pour les MBR)[7]
60
lecture seule
62
cachée
63
ne pas monter (mount) automatiquement (ni assigner de lettre)
Compatibilité des OS et GPT
Les MBR hybrides ne sont pas standard et peuvent être interprétés de différentes façons par différents OS[8]. Sauf indication contraire, les OS considèrent en priorité les informations de GPT lorsqu'ils se trouvent en présence d'un MBR hybride.
Le terme Aucune prise en charge sur cette architecture et version. doit être compris comme :
Non pris en charge en tant que disque de données[9], seules les partitions trouvées dans le MBR protecteur sont accessibles par l'OS.
Gère le partitionnement MBR dans le cas des disques amovibles.
Pas d'accès aux données pour les applications des utilisateurs. Les données brutes contenues dans les partitions GPT sont accessibles via des outils d'administration disque de bas niveau fournis par des tiers. L'accès en lecture ou en écriture au système de fichiers peut être réalisé grâce à des logiciels tiers.
Certains outils comme les anciennes versions de fdisk[11] ne gèrent pas GPT. Ils sont remplacés par de nouveaux outils comme gdisk[12], parted ou son interface gparted[13], grub .96+ patches et grub2 pour gérer GPT.
Certains utilisateurs décrivent leur procédure d'installation avec EFI[18] mais l'annonce officielle du support n'a pas encore été faite. Une installation UEFI semi-manuelle fonctionne pour NetBSD 8.0 (-current)[19]
Il existe un problème, documenté[réf. souhaitée], concernant les versions précédentes[Lesquelles ?] de Windows 32-bit, qui touche les disques durs de plus de deux téraoctets originellement partitionnés via GPT sous un Windows Server 64-bit[Lequel ?] sur lequel les données écrites au-delà de ses limites se retrouvaient écrites au début du disque dur détruisant ainsi les données utilisateurs, la structure du file system et même les informations du format du disque dur (NdT : the harddisk formatting information). Ceci était dû aux pilotes 32-bit des fabricants, et cela même malgré la bonne réputation de certains[Lesquels ?]. Avec l'arrivée de Windows Vista et des mises à jour des pilotes compatibles avec les anciennes versions de l'OS, ce problème des deux téraoctets a plus ou moins disparu depuis 2006. Ce problème n'est pas vraiment du fait de GPT mais a suivi GPT puisque GPT est la seule manière de gérer plus de deux téraoctets d'espace sur un disque.
Détails du support GPT sur les éditions 32-bit de Microsoft Windows[20],[21]
Le MBR a la priorité dans le cas d'une configuration hybride[8].
Windows 64-bit
La table ci-dessous énumère seulement[précision nécessaire] les versions Windows 64-bit qui prennent en charge GPT. Celles-ci sont les versions 64-bit pour les machines basées sur les processeurs IA-64, ayant donc un firmware EFI et permettant d'amorcer sur un disque avec GPT, ce dernier étant le choix de partitionnement par défaut. Les machines x64, avec processeurs x86-64 également dénommés AMD64, EM64T ou Intel64, dont la prise en charge de GPT était initialement limitée, sont capables d'amorcer à partir d'un firmwareUEFI depuis un disque GPT avec l'arrivée de Windows Server 2008 et le service pack 1 de Windows Vista.
Les prétendues versions « Windows XP » listées ci-dessous sont en fait, techniquement, plus proches de la version de Windows Server mentionnée conjointement.
Détails du support GPT sur les éditions 64-bit de Microsoft Windows[20],[21]
Le MBR a la priorité dans le cas d'une configuration hybride. Le mode de partitionnement par défaut est GPT. Gère seulement le partitionnement MBR dans le cas des disques amovibles.
Le MBR a la priorité dans le cas d'une configuration hybride. Le mode de partitionnement par défaut est GPT. Gère seulement le partitionnement MBR dans le cas des disques amovibles.
a Linux utilisait le même GUID de type de partition pour la partition de données de base que Windows avant l'introduction d'un GUID de partition de données spécifique à Linux.
ab Le GUID pour /usr sur Solaris est utilisé en tant que GUID générique sur ZFS par Mac OS X.
^ Les définitions sont sur src/sys/sys/disklabel_gpt.h.NetBSD a utilisé les GUID de FreeBSD avant de créer ses propres uniques GUID.
↑ a et b(en) FAQ: Drive Partition Limits, UEFI Forum (lire en ligne [PDF])
↑(en) Bill Boswell, « FAQ: Drive Partition Limits », Redmondmag.com, (consulté le ) — GPT disks also support very large partitions thanks to a 64-bit Logical Block Address scheme. A logical block corresponds to one sector, or 512 bytes, yielding a maximum theoretical capacity of eight zettabytes
↑(en) Bruce J. Nikkel, « Forensic analysis of GPT disks and GUID partition tables », Digital Investigation, vol. 6, nos 1-2, , p. 39–47 :
« The current popular BIOS and MBR partitioning scheme was originally developed in the early 1980s for the IBM Personal Computer using IBM PC-DOS or MS-DOS. The Basic Input/Output System (BIOS) provides an interface to the hardware and initiates the boot process (IBM, 1983). The MBR, located in sector zero, contains the initial boot code and a four entry partition table (Microsoft, 1983).Intended to solve booting and partitioning limitations with newer hardware, a replacement for both the BIOS and the MBR partition table was developed by Intel in the late 1990s (Intel, 2000). This is now called the Unified EFI (UEFI, 2008 UEFI Forum. Unified extensible firmware interface specification version 2.2 2008.UEFI, 2008) specification, and managed by the UEFI Forum (UEFI, 2009). A subset of this specification includes GUID (globally unique identification) Partition Tables, or GPT, intended to replace the DOS/MBR partition tables. »
↑(en) Working with GPT Disks : Le disque de démarrage pour un système IA-64 doit être un disque GPT. Les autres disques dans système IA-64 peuvent être avec un MBR ou GPT.
↑Les GUID dans cette table sont écrits en little-endian. Par exemple, le GUID pour une partition BIOS Boot est écrit ici 21686148-6449-6E6F-744E-656564454649, et correspond à la séquence de 16 octets 48 61 68 21 49 64 6F 6E 74 4E 65 65 64 45 46 49 (qui est le texte « Hah!IdontNeedEFI » en ASCII) — seuls les trois premiers blocs sont inversés.