Modes de partitionnement MBR et GPT

Modes de partitionnement MBR et GPT

Mise à jour : Debian Buster 10.0

Le partitionnement comprend deux aspects principaux :

Parmi les différents types de partitionnement, deux sont présentés

Sommaire

1 - Précautions

Le partitionnement a pour effet de créer ou modifier la table de partition et son contenu. Il n'a pas pour effet de modifier le contenu des partitions. Toutefois, l'écrasement ou la modification malheureuse de la table de partition a pour effet de rendre inaccessible l'accès aux données.

Il est donc fortement recommandé avant toute opération portant sur la table de partition :

Dans ce qui suit, le périphérique de stockage est supposé être une clé USB ayant pour identifiant /dev/sdb

2 - Unités & conversions

Les tailles mémoires peuvent être indiquées en faisant référence à différentes unités : secteur, puissance de 2 ou puissance de 10. Les équivalences sont rappelées ci-dessous

# Puissance de 10
1KB = 10^^3 Octets 1MB = 10^^6 Octets 1GB = 10^^9 Octets

# Puissance de 2 et équivalence puissance de 10
1KiB = 2^^10 Octets = 1,024 KB
1MiB = 2^^20 Octets env 1,048 MB
1GiB = 2^^30 Octets
env 1,074 GB

1 secteur = généralement 512 Octets

3 - Présention

3.1 - Partitionnement DOS/MBR

$ sudo dd if=/dev/sdb bs=512 count=1 |hexdump -C
1+0 enregistrements lus
1+0 enregistrements écrits
512 octets copiés, 0,00114109 s, 449 kB/s
00000000 45 52 08 00 00 00 90 90 00 00 00 00 00 00 00 00 |ER..............|
00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000020 33 ed fa 8e d5 bc 00 7c fb fc 66 31 db 66 31 c9 |3......|..f1.f1.|
00000030 66 53 66 51 06 57 8e dd 8e c5 52 be 00 7c bf 00 |fSfQ.W....R..|..|
00000040 06 b9 00 01 f3 a5 ea 4b 06 00 00 52 b4 41 bb aa |.......K...R.A..|
00000050 55 31 c9 30 f6 f9 cd 13 72 16 81 fb 55 aa 75 10 |U1.0....r...U.u.|
00000060 83 e1 01 74 0b 66 c7 06 f3 06 b4 42 eb 15 eb 02 |...t.f.....B....|
00000070 31 c9 5a 51 b4 08 cd 13 5b 0f b6 c6 40 50 83 e1 |1.ZQ....[...@P..|
00000080 3f 51 f7 e1 53 52 50 bb 00 7c b9 04 00 66 a1 b0 |?Q..SRP..|...f..|
00000090 07 e8 44 00 0f 82 80 00 66 40 80 c7 02 e2 f2 66 |..D.....f@.....f|
000000a0 81 3e 40 7c fb c0 78 70 75 09 fa bc ec 7b ea 44 |.>@|..xpu....{.D|
000000b0 7c 00 00 e8 83 00 69 73 6f 6c 69 6e 75 78 2e 62 ||.....isolinux.b|
000000c0 69 6e 20 6d 69 73 73 69 6e 67 20 6f 72 20 63 6f |in missing or co|
000000d0 72 72 75 70 74 2e 0d 0a 66 60 66 31 d2 66 03 06 |rrupt...f`f1.f..|
000000e0 f8 7b 66 13 16 fc 7b 66 52 66 50 06 53 6a 01 6a |.{f...{fRfP.Sj.j|
000000f0 10 89 e6 66 f7 36 e8 7b c0 e4 06 88 e1 88 c5 92 |...f.6.{........|
00000100 f6 36 ee 7b 88 c6 08 e1 41 b8 01 02 8a 16 f2 7b |.6.{....A......{|
00000110 cd 13 8d 64 10 66 61 c3 e8 1e 00 4f 70 65 72 61 |...d.fa....Opera|
00000120 74 69 6e 67 20 73 79 73 74 65 6d 20 6c 6f 61 64 |ting system load|
00000130 20 65 72 72 6f 72 2e 0d 0a 5e ac b4 0e 8a 3e 62 | error...^....>b|
00000140 04 b3 07 cd 10 3c 0a 75 f1 cd 18 f4 eb fd 00 00 |.....<.u........|
00000150 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
000001b0 e4 25 00 00 00 00 00 00 23 73 7e 30 00 00 80 00 |.%......#s~0....|
000001c0 01 00 00 3f 60 76 00 00 00 00 00 b8 0b 00 00 fe |...?`v..........|
000001d0 ff ff ef fe ff ff c4 0f 00 00 20 16 00 00 00 00 |.......... .....|
000001e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa |..............U.|
00000200

On remarque

3.2 - Partitionnement GPT

3.2.1 Caractéristiques résumées

Table de partition type GPT (GUID Partition Table)

$ sudo dd if=/dev/sda bs=512 count=34 |hexdump -C
....
000001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa |..............U.|
00000200 45 46 49 20 50 41 52 54 00 00 01 00 5c 00 00 00 |EFI PART....\...|
00000210 41 b8 12 b8 00 00 00 00 01 00 00 00 00 00 00 00 |A...............|
00000220 af 36 e4 37 00 00 00 00 22 00 00 00 00 00 00 00 |.6.7....".......|
00000230 8e 36 e4 37 00 00 00 00 a0 86 af 6b da 3b 0e 44 |.6.7.......k.;.D|
00000240 ae fd f5 51 d1 20 fb e4 02 00 00 00 00 00 00 00 |...Q. ..........|
00000250 80 00 00 00 80 00 00 00 52 d7 3d bf 00 00 00 00 |........R.=.....|
00000260 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00000400 af 3d c6 0f 83 84 72 47 8e 79 3d 69 d8 47 7d e4 |.=....rG.y=i.G}.|
00000410 5e a2 5c 15 de b6 bd 44 b5 17 42 84 42 7f ca f0 |^.\....D..B.B...|
00000420 00 00 20 00 00 00 00 00 ff ff ff 31 00 00 00 00 |.. ........1....|
00000430 00 00 00 00 00 00 00 00 64 00 61 00 74 00 61 00 |........d.a.t.a.|
00000440 00 00 20 00 66 00 69 00 6c 00 65 00 73 00 79 00 |.. .f.i.l.e.s.y.|
00000450 73 00 74 00 65 00 6d 00 00 00 00 00 00 00 00 00 |s.t.e.m.........|
00000460
*
00000480 af 3d c6 0f 83 84 72 47 8e 79 3d 69 d8 47 7d e4 |.=....rG.y=i.G}.|
00000490 b1 24 a1 d6 91 3d 6b 4a 81 ad 48 e5 af 37 97 bb |.$...=kJ..H..7..|
000004a0 00 00 00 32 00 00 00 00 ff ff 7f 34 00 00 00 00 |...2.......4....|
000004b0 00 00 00 00 00 00 00 00 70 00 65 00 72 00 73 00 |........p.e.r.s.|
000004c0 6f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |o...............|
000004d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00004400
$ sudo parted /dev/sda unit s print
...
Disk /dev/sda: 937703088s
Sector size (logical/physical): 512B/512B
....
$ sudo dd if=/dev/sda count=33 bs=512 skip=937703055 status=none|hexdump -C
00000000 af 3d c6 0f 83 84 72 47 8e 79 3d 69 d8 47 7d e4 |.=....rG.y=i.G}.|
00000010 5e a2 5c 15 de b6 bd 44 b5 17 42 84 42 7f ca f0 |^.\....D..B.B...|
00000020 00 00 20 00 00 00 00 00 ff ff ff 31 00 00 00 00 |.. ........1....|
00000030 00 00 00 00 00 00 00 00 64 00 61 00 74 00 61 00 |........d.a.t.a.|
00000040 00 00 20 00 66 00 69 00 6c 00 65 00 73 00 79 00 |.. .f.i.l.e.s.y.|
00000050 73 00 74 00 65 00 6d 00 00 00 00 00 00 00 00 00 |s.t.e.m.........|
00000060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00000080 af 3d c6 0f 83 84 72 47 8e 79 3d 69 d8 47 7d e4 |.=....rG.y=i.G}.|
00000090 b1 24 a1 d6 91 3d 6b 4a 81 ad 48 e5 af 37 97 bb |.$...=kJ..H..7..|
000000a0 00 00 00 32 00 00 00 00 ff ff 7f 34 00 00 00 00 |...2.......4....|
000000b0 00 00 00 00 00 00 00 00 70 00 65 00 72 00 73 00 |........p.e.r.s.|
000000c0 6f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |o...............|
000000d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00004000 45 46 49 20 50 41 52 54 00 00 01 00 5c 00 00 00 |EFI PART....\...|
00004010 49 46 0f 83 00 00 00 00 af 36 e4 37 00 00 00 00 |IF.......6.7....|
00004020 01 00 00 00 00 00 00 00 22 00 00 00 00 00 00 00 |........".......|
00004030 8e 36 e4 37 00 00 00 00 a0 86 af 6b da 3b 0e 44 |.6.7.......k.;.D|
00004040 ae fd f5 51 d1 20 fb e4 8f 36 e4 37 00 00 00 00 |...Q. ...6.7....|
00004050 80 00 00 00 80 00 00 00 52 d7 3d bf 00 00 00 00 |........R.=.....|
00004060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00004200

3.2.2 MBR de protection

Lorsqu'un disque est partitionné GPT, pour éviter qu'un système ne reconnaissant pas le Partitionnement GTP, n'écrive dans la GPT, une table de partitionnement de protection est créée dans le MBR. Elle indique la présence d'une partition unique recouvrant tout le disque (aille maximum 2TB) de type GPT 0xee)

$ sudo gdisk -l /dev/sda
GPT fdisk (gdisk) version 1.0.3

Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present

Found valid GPT with protective MBR; using GPT.
.....
$ sudo dd if=/dev/sda  bs=512 count=1 | hexdump -C
.....
000001a0 64 00 20 45 72 72 6f 72 0d 0a 00 bb 01 00 b4 0e |d. Error........|
000001b0 cd 10 ac 3c 00 75 f4 c3 00 00 00 00 00 00 00 00 |...<.u..........|
000001c0 02 00 ee ff ff ff 01 00 00 00 af 36 e4 37 00 00 |...........6.7..|
000001d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
000001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa |..............U.|
00000200
$ sudo dd if=/dev/sda  bs=512 count=100 of=disk.img

fdisk détecte une erreur de GPT et utilise le MBR

$ sudo fdisk -l disk.img 
Mauvaise concordance des tailles de partition du secteur d'amorçage GPT (937703087 != 99), elles seront corrigées par l'écriture.
Disque disk.img : 50 KiB, 51200 octets, 100 secteurs
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets
Type d'étiquette de disque : dos
Identifiant de disque : 0x00000000

Périphérique Amorçage Début Fin Secteurs Taille Id Type
disk.img1 1 99 99 49,5K ee GPT

Une partition unique disk.img1 est reconnue, qui occupe tout le disque

3.3 - Partitionnement hybride

$ sudo parted debian.iso print
....
Warning: The driver descriptor says the physical block size is 2048 bytes, but Linux says it is 512
bytes.
....
Partition Table: mac
...
Number Start End Size File system Name Flags
1 2048B 6143B 4096B Apple
2 2066kB 4966kB 2900kB EFI
$ sudo gdisk debian.iso -l
GPT fdisk (gdisk) version 1.0.3

Partition table scan:
MBR: MBR only
BSD: not present
APM: not present
GPT: present

Found valid MBR and GPT. Which do you want to use?
1 - MBR
2 - GPT
3 - Create blank GPT

Your answer:
$ sudo fdisk debian.iso -l
....
Type d'étiquette de disque : dos
.....
Périphérique Amorçage Début Fin Secteurs Taille Id Type
firmware-10.0.0-amd64-netinst.iso1 * 0 767999 768000 375M 0 Vide
firmware-10.0.0-amd64-netinst.iso2 4036 9699 5664 2,8M ef EFI (FAT-12/16/32)

3.4 - Détection rapide du type de partitionnement

$ sudo wipefs -n /dev/sdb
DEVICE OFFSET TYPE UUID LABEL
sdb 0x200 gpt
sdb 0x3b5fffe00 gpt
sdb 0x1fe PMBR
$ sudo wipefs -n /dev/sdb
DEVICE OFFSET TYPE UUID LABEL
sdc 0x8001 iso9660 2019-07-06-10-25-23-00 Debian 10.0.0 amd64 n
sdc 0x1fe dos
sdc 0x200 gpt
sdc 0x3b5fffe00 gpt
sdc 0x0 mac

4 - Partitionnement

Dans ce qui suit, on suppose que le périphérique de stockage à partitionner est attaché en /dev/sdb

4.1 - Création

$ sudo wipefs -a /dev/sdb
$ sudo sgdisk -Z /dev/sdb
$ sudo parted /dev/sdb mklabel msdos

$ echo 'label:dos'|sudo sfdisk /dev/sdb
$ sudo parted /dev/sdb mklable gpt

$ echo 'label:gpt'|sudo sfdisk /dev/sdb

4.2 - Vérifications

$ sudo fdisk /dev/sdb -l |grep Type
Type d'étiquette de disque : dos

$ sudo fdisk /dev/sdb -l |grep Identifiant
Identifiant de disque : 0xe07d7438

$ sudo blkid /dev/sdb
/dev/sdb: PTUUID="e07d7438" PTTYPE="dos"
$ sudo fdisk /dev/sdb -l |grep Type
Type d'étiquette de disque : gpt

$ sudo fdisk /dev/sdb -l |grep Identifiant
Identifiant de disque : DA777824-38B4-400D-B20D-342EFDD65687

$ sudo blkid /dev/sdb
/dev/sdb: PTUUID="da777824-38b4-400d-b20d-342efdd65687" PTTYPE="gpt"
$ sudo fdisk /dev/sdb -l |grep Unités
Unités : secteur de 1 × 512 = 512 octets

$ sudo fdisk /dev/sdb -l |grep Disque
Disque /dev/sdb : 14,9 GiB, 16004415488 octets, 31258624 secteurs

$ sudo cat /sys/block/sdb/size
31258624
$ sudo gdisk /dev/sdb -l |grep "First usable"
First usable sector is 34, last usable sector is 31258590