Systèmes de fichiers · Leçon 1 sur 8
Disques, partitions et volumes
13 min de lecture
Avant de pouvoir analyser un système de fichiers, un examinateur doit savoir où il commence. Cette leçon explique comment un disque est adressé, comment MBR et GPT décrivent son espace, en quoi les partitions diffèrent des volumes et comment convertir une entrée de table de partitions en un décalage exact dont dépendront tous les outils utilisés par la suite.
Secteurs et adressage LBA
Un disque se présente comme une séquence numérotée de blocs de taille fixe appelés secteurs. Les systèmes modernes les adressent au moyen de l’adressage par blocs logiques (LBA) : le premier secteur est le LBA 0, le suivant le LBA 1, et ainsi de suite. Le décalage en octets de n’importe quel secteur est simplement LBA × taille du secteur logique.
Pendant des décennies, la taille des secteurs était de 512 octets. Les disques Advanced Format utilisent des secteurs physiques de 4 096 octets et existent en deux variantes :
| Format | Secteur logique | Secteur physique | Ce que voient le système d’exploitation et votre image |
|---|---|---|---|
| 512n (ancien format) | 512 octets | 512 octets | LBA de 512 octets |
| 512e (émulation) | 512 octets | 4 096 octets | LBA de 512 octets ; le disque associe 8 secteurs logiques à chaque secteur physique |
| 4Kn (natif) | 4 096 octets | 4 096 octets | LBA de 4 096 octets |
Toutes les structures de partitionnement comptent en secteurs logiques. La plupart des supports USB et des images utilisent des secteurs logiques de 512 octets, mais relevez la taille des secteurs dans le journal d’acquisition ou les métadonnées E01 plutôt que de la supposer. Une partition qui commence au LBA 2 048 débute à l’octet 1 048 576 sur un disque à secteurs de 512 octets et à l’octet 8 388 608 sur un disque 4Kn.
Le Master Boot Record (MBR)
Le schéma MBR, également appelé table de partitions DOS, occupe le secteur 0. Ses 512 octets sont organisés comme suit :
| Décalage (décimal) | Taille | Contenu |
|---|---|---|
| 0 | 446 octets | Code d’amorçage (Windows stocke également une signature de disque de 4 octets au décalage 440) |
| 446 (0x1BE) | 64 octets | Quatre entrées de partition de 16 octets chacune |
| 510 (0x1FE) | 2 octets | Signature d’amorçage, octets 55 AA (lus comme la valeur petit-boutiste 0xAA55) |
Chaque entrée de partition de 16 octets contient :
| Décalage dans l’entrée | Taille | Champ |
|---|---|---|
| 0 | 1 | Indicateur d’amorçage (0x80 = active, 0x00 = inactive) |
| 1 | 3 | Adresse de début dans l’ancien format CHS (cylindre-tête-secteur) |
| 4 | 1 | Octet de type de partition |
| 5 | 3 | Adresse CHS de fin |
| 8 | 4 | LBA de début, entier petit-boutiste de 32 bits |
| 12 | 4 | Taille en secteurs, entier petit-boutiste de 32 bits |
Les champs CHS sont obsolètes ; fiez-vous aux champs LBA. Parmi les octets de type courants figurent 0x07 (NTFS, exFAT), 0x0B et 0x0C (FAT32, variantes CHS et LBA), 0x05 et 0x0F (partition étendue), 0x83 (système de fichiers Linux), 0x8E (Linux LVM) et 0xEE (protection GPT). L’octet de type n’est qu’une indication ; confirmez le contenu en lisant le premier secteur de la partition.
Partitions étendues et logiques
Quatre entrées ne suffisaient pas ; MBR permet donc qu’une entrée désigne une partition étendue (type 0x05 ou 0x0F). Le premier secteur de la partition étendue contient un Extended Boot Record (EBR) dont la structure est identique à celle du MBR, y compris 55 AA. Sa première entrée décrit une partition logique, avec un LBA de début relatif à cet EBR. Sa deuxième entrée pointe vers l’EBR suivant, relativement au début de la partition étendue. Il en résulte une liste chaînée, la chaîne EBR, qui se termine par un EBR dont la deuxième entrée est vide. Un lien rompu masque toutes les partitions logiques qui le suivent.
La limite de 2 TiB
Comme le LBA de début et la taille sont des valeurs de 32 bits, MBR peut décrire au maximum 2^32 secteurs. Avec des secteurs de 512 octets, cela représente 2^32 × 512 = 2 199 023 255 552 octets, soit 2 TiB.
La GUID Partition Table (GPT)
GPT est le schéma de partitionnement défini dans la spécification UEFI. Il conserve le secteur 0 sous la forme d’un MBR protecteur : un MBR normal comportant une seule entrée de type 0xEE, commençant au LBA 1 et couvrant le disque (ou 0xFFFFFFFF secteurs si le disque dépasse la capacité de description de MBR). Son objectif est d’empêcher les outils ne prenant en charge que MBR de considérer le disque comme vide.
Les structures réelles sont les suivantes :
- En-tête GPT au LBA 1. Il commence par la signature de 8 octets
EFI PART(hexadécimal45 46 49 20 50 41 52 54) et sa longueur est de 92 octets dans la révision 1.0. Il enregistre son propre LBA, le LBA de l’en-tête de sauvegarde, les premier et dernier LBA utilisables, le GUID du disque, le LBA de début du tableau des entrées de partition, le nombre d’entrées, la taille de chaque entrée et deux sommes de contrôle CRC32 : l’une porte sur l’en-tête lui-même (calculée avec le champ CRC mis à zéro) et l’autre sur le tableau des entrées de partition. - Tableau des entrées de partition, commençant normalement au LBA 2, avec 128 entrées de 128 octets chacune. Cela représente 16 384 octets ; sur un disque à secteurs de 512 octets, il occupe donc les LBA 2 à 33 et le premier LBA utilisable est 34. Sur un disque 4Kn, il occupe les LBA 2 à 5.
- GPT de sauvegarde à la fin du disque. L’en-tête de sauvegarde se trouve au dernier LBA, et une copie du tableau des entrées se trouve immédiatement avant lui.
Chaque entrée de 128 octets contient un GUID de type de partition de 16 octets, un GUID unique de partition de 16 octets, un premier LBA sur 64 bits, un dernier LBA sur 64 bits (inclus), 8 octets d’indicateurs d’attributs et un nom UTF-16LE de 72 octets. Un GUID de type entièrement nul signale une entrée inutilisée. GUID de type courants :
| Partition | GUID de type |
|---|---|
| Partition système EFI (ESP) | C12A7328-F81F-11D2-BA4B-00A0C93EC93B |
| Partition réservée Microsoft (MSR) | E3C9E316-0B5C-4DB8-817D-F92DF00215AE |
| Données de base Microsoft | EBD0A0A2-B9E5-4433-87C0-68B6B72699C7 |
| Environnement de récupération Windows | DE94BBA4-06D1-4D40-A16A-BFD50179D6AC |
| Données de système de fichiers Linux | 0FC63DAF-8483-4772-8E79-3D69D8477DE4 |
Sur le disque, les trois premiers groupes d’un GUID sont stockés en petit-boutiste ; le GUID des données de base apparaît donc en hexadécimal sous la forme A2 A0 D0 EB E5 B9 33 44 87 C0 68 B6 B7 26 99 C7. Recherchez cet ordre d’octets, et non la forme affichée.
Si l’en-tête ou le tableau principal échoue à la vérification CRC32, le micrologiciel et les outils se rabattent sur la sauvegarde. Si les structures principales et de sauvegarde sont toutes deux valides mais divergent, il convient de le signaler : cela peut résulter d’un redimensionnement, d’un clonage vers un disque de taille différente ou d’une modification délibérée.
Disque, partition et volume
Ces trois mots sont souvent employés de manière interchangeable, mais ils correspondent à des couches différentes :
- Un disque est l’ensemble du périphérique adressable, ou son image.
- Une partition est une plage contiguë de secteurs décrite par une table de partitions.
- Un volume est une zone de stockage logique utilisée par un système de fichiers ou un système d’exploitation. Il correspond souvent exactement à une partition, mais pas toujours.
La correspondance n’est pas toujours de un à un. Une partition peut ne contenir aucun système de fichiers : la MSR est une zone réservée brute, et une partition peut contenir un conteneur chiffré ou intégré à un pool plutôt qu’un système de fichiers. Un volume peut également s’étendre sur plusieurs partitions ou disques. Plusieurs couches peuvent s’intercaler entre la partition et le système de fichiers. BitLocker transforme une partition en volume chiffré dont le premier secteur porte normalement la signature -FVE-FS- au décalage 3 (les volumes BitLocker To Go sur des supports amovibles peuvent afficher MSWIN4.1 à la place). Linux LVM rassemble les volumes physiques en groupes de volumes, puis y crée des volumes logiques. Les espaces de stockage Windows et les anciens disques dynamiques regroupent le stockage de la même manière. Pour chaque partition, demandez-vous quelle couche y commence avant de choisir un outil.
Organisations Windows typiques
Une installation UEFI de Windows 10 ou 11 sur un disque GPT contient généralement :
| Partition | Taille typique | Contenu |
|---|---|---|
| Partition système EFI | 100 MiB (260 MiB sur les disques 4Kn) | FAT32 ; gestionnaire d’amorçage et données de configuration de démarrage |
| Réservée Microsoft (MSR) | 16 MiB | Aucun système de fichiers |
| Windows | La majeure partie du disque | NTFS ; système d’exploitation et données utilisateur |
| Récupération | Plusieurs centaines de MiB | NTFS ; environnement de récupération Windows |
Les tailles, l’ordre et le nombre de partitions de récupération ou OEM varient selon la version de Windows, le programme d’installation et le fabricant ; lisez donc la table plutôt que de faire des suppositions. Les partitions sont normalement alignées sur 1 MiB, ce qui explique pourquoi la première commence au LBA 2 048 sur un disque à secteurs de 512 octets. Les anciennes installations BIOS utilisent MBR avec une petite partition NTFS active « Réservé au système » avant la partition Windows.
Repérer les intervalles et l’espace non partitionné
Tous les secteurs n’appartiennent pas à une partition. Comparez la fin de chaque partition au début de la suivante et à la fin du disque. Les intervalles typiques sont les secteurs 1 à 2 047 avant la première partition alignée sur un disque MBR, les espaces d’alignement entre les partitions et l’espace inutilisé à la fin. Les intervalles peuvent contenir des vestiges d’anciennes partitions, des données dissimulées volontairement ou rien du tout. Pour retrouver une ancienne partition, recherchez des secteurs d’amorçage de volume dans l’espace non partitionné. Un secteur d’amorçage NTFS contient NTFS au décalage 3, un secteur d’amorçage FAT32 contient FAT32 au décalage 82, et un secteur d’amorçage exFAT contient EXFAT au décalage 3. La leçon 1.2 traite de l’espace non alloué à l’intérieur d’un système de fichiers, ce qui est différent.
Exemple détaillé : de l’entrée de partition au décalage en octets
Les 16 octets au décalage 446 d’une image de support USB sont les suivants :
00 20 21 00 0C FE FF FF 00 08 00 00 00 B8 D3 01
- Indicateur d’amorçage
00: inactive. - Octet de type
0C: FAT32 avec adressage LBA. - LBA de début, octets 8 à 11 :
00 08 00 00. Inversez l’ordre pour le petit-boutiste : 0x00000800 = 2 048. - Taille, octets 12 à 15 :
00 B8 D3 01. Après inversion : 0x01D3B800 = 30 652 416 secteurs.
Avec des secteurs de 512 octets :
- Décalage en octets de la partition = 2 048 × 512 = 1 048 576 (0x100000).
- Dernier secteur = 2 048 + 30 652 416 − 1 = 30 654 463.
- Taille de la partition = 30 652 416 × 512 = 15 694 036 992 octets (environ 14,6 GiB).
Lister les partitions avec The Sleuth Kit
The Sleuth Kit lit directement les images brutes et, lorsqu’il est compilé avec libewf, les images E01. mmls usb.E01 détecte le schéma et affiche chaque entrée en secteurs. Pour le support ci-dessus, il afficherait (extrait) :
| Emplacement | Début | Fin | Longueur | Description |
|---|---|---|---|---|
| Meta | 0 | 0 | 1 | Table principale (#0) |
| ------- | 0 | 2 047 | 2 048 | Non alloué |
| 000:000 | 2 048 | 30 654 463 | 30 652 416 | Win95 FAT32 (0x0c) |
| ------- | 30 654 464 | 30 719 999 | 65 536 | Non alloué |
Les lignes « Non alloué » correspondent aux intervalles dont vous devez tenir compte. Sur un disque GPT, mmls liste également la table de protection, l’en-tête GPT et la table de partitions sous forme de lignes Meta.
La plupart des outils TSK acceptent le début du système de fichiers avec -o, en secteurs : fsstat -o 2048 usb.E01 indique le type de système de fichiers, le numéro de série du volume, son nom et sa géométrie, tandis que fls -o 2048 usb.E01 liste les fichiers. D’autres outils attendent plutôt un décalage en octets, par exemple un montage loop Linux en lecture seule avec offset=1048576. La confusion entre secteurs et octets est une cause fréquente du message « aucun système de fichiers trouvé ». Consignez à la fois le décalage et son unité dans vos notes.
Le cas superfloppy
L’examen pratique CFX fournit une image E01 d’un support USB. Celui-ci peut être partitionné avec MBR ou ne pas être partitionné du tout. Dans ce dernier cas, il s’agit d’un superfloppy : le système de fichiers commence au secteur 0 et il n’existe aucune table de partitions. Le secteur 0 se termine tout de même par 55 AA, car les enregistrements d’amorçage de volume utilisent la même signature ; cette signature ne prouve donc pas à elle seule la présence d’un MBR. Examinez plutôt le début du secteur. Un secteur d’amorçage commence par une instruction de saut (généralement EB xx 90), suivie d’un nom OEM de 8 octets tel que MSDOS5.0, EXFAT ou NTFS . Dans ce cas, mmls indique généralement qu’il ne peut pas déterminer le type de partition, et vous exécutez fsstat sans décalage, ce qui correspond au décalage 0.
Points clés pour l’examen : Attendez-vous à convertir les champs petit-boutistes d’une entrée de partition en secteur de début, secteur de fin, taille ou décalage en octets, et à appliquer la bonne taille de secteur. Connaissez les emplacements fixes :55 AAà 510, les entrées à 446,EFI PARTau LBA 1, le tableau des entrées normalement au LBA 2 et l’en-tête de sauvegarde au dernier LBA. Dans la partie pratique, déterminez si l’image USB est partitionnée avec MBR ou s’il s’agit d’un superfloppy avant d’utiliser un outil de système de fichiers.
Points essentiels
- Les décalages correspondent toujours à
LBA × taille du secteur logique; les disques 512e utilisent des LBA de 512 octets et les disques 4Kn des LBA de 4 096 octets. - Les entrées MBR commencent au décalage 446 et font chacune 16 octets, avec l’octet de type à +4, le LBA de début à +8 et la taille en secteurs à +12, ces deux derniers champs étant des entiers petit-boutistes de 32 bits. Cela limite MBR à 2 TiB avec des secteurs de 512 octets.
- GPT utilise un MBR protecteur (type 0xEE), un en-tête avec
EFI PARTau LBA 1, normalement 128 entrées de 128 octets à partir du LBA 2, des vérifications CRC32 et un en-tête de sauvegarde au dernier LBA. - Une partition est une plage de secteurs et un volume est ce que le système utilise. Des couches de chiffrement, de LVM et de mise en pool peuvent s’intercaler entre eux, et certaines partitions, comme la MSR, ne contiennent aucun système de fichiers.
- Tenez compte de chaque secteur : les intervalles avant, entre et après les partitions peuvent contenir d’anciennes partitions ou des données dissimulées.
55 AAdans le secteur 0 ne prouve pas la présence d’un MBR ; un superfloppy a son système de fichiers au décalage 0.