Récupération de disques VII : Structures des disques GPT Basic

Maintenant que les disques basiques MBR (partitions primaires et étendues) n’ont plus de secrets pour nous, nous allons nous intéresser au disques basiques GPT.

Reprenons le schéma qui décrit la structure d’un disque basique GPT et essayons de voir à quoi cela ressemble concrètement.

clip_image002

Commençons par le secteur 0:

clip_image004

Remarques:

  • Il n’y a plus de signature. Nous n’en avons plus besoin car nous identifions désormais le disque par GUID, et cette information sera stockée ailleurs.
  • Il n’y a qu’une seule entrée dans la table de partition, et ses propriétés sont telles que tout le disque est occupé.

Partition table entry

 

Start head : 0

End head : FF (255)

Start sector : 2

End Sector : 3F (63)

Start Cylinder : 0

End Cylinder : 3FF (1023)

Relative Sector : 1

Total Sectors : FFFFFFFF (4294967295)

Partition Type : EE (GPT)

 

Le MBR est dit “protecteur” car il contient une partition qui couvre tout le disque (Relative Sector 1 / Total Sectors FFFFFFFF), et aussi car nous avons des secteurs importants

Voici ce à quoi ressemble le secteur 1 : 

clip_image006

Ce secteur est le GPT Header et contient ces informations :

Partition

Offset

Size

Sample value

Meaning

Sector Signature

0

8 bytes

"EFI PART"

 

Version

8

4 bytes

00 00 01 00

0.1

Header size

C

4 bytes

5C 00 00 00

5C

CRC32 of the header

10

4 bytes

0D 2C 34 EA

3929287693

Reserved

14

4 bytes

0

0

Current GPT Header Address

18

8 bytes

01 00 00 00 00 00 00 00

1

Backup GPT Header Address

20

8 bytes

FF FF DF 0F 00 00 00 00

266338303

First usable LBA

28

8 bytes

22 00 00 00 00 00 00 00

34

Last usable LBA

30

8 bytes

DE FF DF 0F 00 00 00 00

266338270

Disk GUID

38

16 bytes

85 A1 7E 9C 2D 05 3B 4A AC DD D1 FF 8F 7B 22 4A

9C7EA185-052D-4A3B-ACDD-D1FF8F7B224A

Partition Table Address

48

8 bytes

02 00 00 00 00 00 00 00

2

Partition Count

50

4 bytes

80 00 00 00

128

Partition Table Entry Size

54

4 bytes

80 00 00 00

128

CRC32 of partition table

58

4 bytes

3E C0 26 26

640073790

Toutes les données sont importantes, mais celles qui nous intéressent pour faire des réparations sont :

  • La signature ("EFI PART") : Pour reconnaitre le secteur (nous n’avons plus de 55 AA)
  • Les CRC32 : Ceux-ci sont importants car ils permettent au système de vérifier que quelqu’un n’a pas modifié des entrées dans ses tables à la main, en by-passant le système.
  • L’adresse courante du header (1) et l’adresse du GPT Header alternatif (266338303)
  • Le début de la table de partition (2) et le nombre de partition qu’elle peut contenir (128)
  • Les 1ers et derniers secteurs utilisables (en général le dernier +1 contient le début de la table de partitions
  • Un GUID qui représente le disque (sa signature)

Cette structure est décrite sur https://msdn.microsoft.com/en-us/library/windows/desktop/aa365449(v=vs.85).aspx

Regardons le secteur 2 : Début de la table de partition.

clip_image008

Il faut y voir 4 régions de 128 bytes chacune : Une entrée dans la table de partition fait 128 bytes

Dans le cas présent, les 2 premières entrées sont occupées et les autres sont vides

Première entrée

Partition Table Entry

Offset

Size

Sample value

Meaning

Partition Type

0

16 bytes

16 E3 C9 E3 5C 0B B8 4D 81 7D F9 2D F0 02 15 AE

E3C9E316-0B5C-4DB8-817D-F92DF00215AE

Partition GUID

10

16 bytes

7C C6 D3 BB F9 D2 5F 42 9F 2C 7D CF 1F 1D 8B E5

BBD3C67C-D2F9-425F-9F2C-7DCF1F1D8BE5

Starting LBA

20

8 bytes

22 00 00 00 00 00 00 00

34

Ending LBA

28

8 bytes

21 00 04 00 00 00 00 00

262177

Attribute flags

30

8 bytes

00 00 00 00 00 00 00 00

0

Partition Name

38

72 bytes

… too long…

Microsoft Reserved Partition

Seconde entrée

Partition Table Entry

Offset

Size

Sample value

Meaning

Partition Type

80+0

16 bytes

A2 A0 D0 EB E5 B9 33 44 87 C0 68 B6 B7 26 99 C7

EBD0A0A2-B9E5-4433-47C0-68B6B72699C7

Partition GUID

80+10

16 bytes

BE 9C FD 21 F3 E8 40 49 8C C2 57 30 0A A8 1E B6

21FD9CBE-E8F3-4940-8CC2-57300AA81EB6

Starting LBA

80+20

8 bytes

00 08 04 00 00 00 00 00

264192

Ending LBA

80+28

8 bytes

FF F7 DF 0F 00 00 00 00

266336255

Attribute flags

80+30

8 bytes

00 00 00 00 00 00 00 00

0

Partition Name

80+38

72 bytes

… too long…

Basic data partition

Vous pourrez trouver des informations complémentaires sur ces structures dans l’article https://msdn.microsoft.com/en-us/library/windows/desktop/aa365449(v=vs.85).aspx

Plus d’informations sur la Microsoft Data Partition (MSR) dans la FAQ GPT:

https://msdn.microsoft.com/en-us/library/windows/hardware/dn640535(v=vs.85).aspx#gpt_faq_what_is_msr

Donc, la première entrée est pour la MSR et la seconde pour la partition de données de type « Basic Data Partition ».

Puisqu’il s’agit d’une partition NTFS, nous pouvons trouver les NTFS Boot Sectors aux LBA 264192 et 266336255

Et voilà:

clip_image010

On peut y lire:

Déjà on retrouve notre signature 55 AA (qui commençait à manquer un des mes amis blogueurs)

  • Le Relative Sector : 00 08 04 00 --> 00 04 08 00 = 40800 = 264192 LBA
  • Total Sectors: FF EF DB 0F 00 00 00 00 --> FDBEFFF = 266072063 Secteurs

Le NTFS Boot sector de backup montrera la même information.

Le GPT Header nous avait parlé du Last Usable LBA (266338270)

Le LBA juste après montre bien une copie de la table de partition (266338270 + 1 = 266338271 )

clip_image012

Un espace de 128 entrées (si on en prend 4 par secteur de 512 ça fait 32 secteurs) est reservé pour y stocker toute la table de partitions

Les angoissés qui aiment que tout soit bien aligné éprouveront sans doute un plaisir non caché en constatant que 26638271 + 32 = 266338303 : C’est exactement l’emplacement du GPT Header alternatif.

C’est vrai que c’est rassurant quand même … quelque part … moi, je trouve ça rassurant.

clip_image014

Comme on adore les schémas qui montre la beauté de l’alignement des secteurs, en voici un qui reprend les valeurs que nous avons trouvées.

clip_image016

Voilà, vous savez désormais tout sur la façon dont les partitions sont référencées dans des disques GPT. Dans le prochain article, nous allons voir où peuvent se glisser des corruptions et comment les réparer (ou pas).

Serge Gourraud
55 AA