Les descripteurs de partitions sont les données nécessaires au système d'expoitation pour définir les partitions. Ces données se trouvent dans le MBR, juste après les 446 octets dédiés au bootloader. Elles sont donc comprises entre l'octet 446 et l'octet 510, les deux derniers octets étant occupés par les Magic Number.
Ces données ne concernent que les partitions primaires et la partition étendue. Les données des partitions logiques ne sont pas stockées dans le MBR, mais dans l'EBR.
Voici ma table de partitions :
Comme on peut le remarquer, ma partition étendue commence juste après la première partition et occupe tout l'espace restant. Nous ne verrons donc dans les descripteurs du MBR que deux partitions.
Pour visionner le contenu de mon MBR je dispose de la commande :
| :~$ sudo dd bs=512 count=1 if=/dev/sda | od -Ax -tx1z -v |
Le tableau suivant vous montrera la partie réservée aux descripteurs :
En marron
le descripteur de la première partition primaire.
En bleu
le descripteur de la seconde partition primaire.
En magenta
le descripteur de la troisième partition primaire.
En vert
le descripteur de la quatrième partition primaire.
En rouge
le Nombre magique.

Nous allons examiner plus attentivement le descripteur de la première partition :

Tous les nombres que je mentionne maintenant sont en hexadécimal. J'ai joint en fin de page un court résumé sur la conversion.
En marron le premier nombre indique si le témoin d'amorce est présent ou absent. 80 si il est présent, 0 si il est absent. On peut changer facilement la partition amorçable avec parted et sa commande toggle.
En bleu les trois nombres représentent, ou représentaient, (car ceci n'est plus utilisé avec les disques dur actuels) les débuts en chs : cylinder, head, sector dans l'ordre suivant tête, secteur, cylindre.
En rose le nombre correspond au type de partition. 83 pour une partiton linux, 82 pour une swap, etc.
En vert les trois nombres représentaient les fins en chs.
Nous arrivons à la partie intéressante.
En turquoise la
suite de quatre octets forme un nombre qui définit le
début de la partition en secteurs.
Dans mon cas nous obtenons 0000003f ou 3f soit une valeur en
décimal = 63. La première partition d'une table
ms-dos, je
l'ai déjà
évoqué, commence toujours
au 63ème
secteur.
En magenta le dernier nombre, formé de quatre octets, représente la taille en secteurs de ma partition. On peut comparer la taille de ma première partition dans ma table des partitions avec le résultat de 81 67 d2 05, qui en réalité soit s'inverser et se lire : 05d26781, ce qui en décimal se traduit par 97675137, correspondant au nombre de secteurs. Voir plus bas l'explication de la conversion décimal hexadécimal.
Voilà, le principe est le même pour toutes les autres partitions primaires. Nous savons comment fonctionne la lecture des descripteurs de partitions dans le MBR, mais cela ne concerne que les partitions primaires.
Nous allons voir qu'il y a des différences dans la
lecture des informations avec les partitions logiques, pour commencer,
nous allons afficher le premier secteur de la partition
étendue.
Nous ne parlerons plus ici de MBR, mais d'EBR. Pour
visualiser ce premier secteur de la partition étendue nous
allons rajouter l'option skip à la commande que nous avions
vu ici.
Dans le récapitulatif
de ma table de partitions, nous avions vu que la partition
étendue commençait au secteur 97675200. Nous
allons donc sauter les secteurs qui précèdent
pour visualiser les 512 octets de mon EBR.
Voici donc cette commande :
|
:~$ sudo dd bs=512
skip=97675200 count=1 if=/dev/sda | od -Ax -tx1z -v
|
Nous commencerons après les 446 premiers octets, puisque seuls les descripteurs nous intéressent :

Pour rappel, voir les codes des couleurs.
Une première constatation, il ne figure que 2 partitions. Il faudra analyser les deux descripteurs de manière particulière car il y a des différences.
Dans ce premier descripteur :

La différence la plus importante par rapport
à une partition primaire se situe sur l'avant dernier champ
en turquoise.
Il devrait y figurer le début en secteurs de ma
partition. Si on se reporte à ma table, la partition 5
= 97675263s
On devrait trouver dans le champ : 05d267ff, mais ce n'est pas le cas. En fait on compte à partir du début de l'EBR, c'est à dire à partir de la partition étendue commençant à 97675200s. Donc 97675263 - 97675200 = 63 secteurs ou en hexadécimal : 3f. Puisqu' on utilise quatre octets pour ce champ cela donne 0000003f (on lit de droite à gauche en hexadécimal).
À chaque fois, pour le premier descripteur d'un EBR, nous aurons systématiquement comme secteur de départ 0000003f. Comme nous allons le voir dans chaque partition étendue il y a une seule logique et une autre partition étendue.

La valeur magenta 012a5381 ( 81 53 2a 01 ) représente la taille de la partition étendue suivante, c'est à dire la taille de la logique + 63 secteurs.
Contrairement au premier descripteur, ici, pour la partition logique suivante on comptera à partir du départ de la première partition logique, (elle est la référence pour le calcul du secteur de départ de toutes les partitions logiques suivantes dans le deuxième descripteur) :
253939518 - 97675263 = 156264255. Ce qui donne en hexadécimal 950673f et dans le champ : 0950673f.
Ici nous devons faire attention au champ concernant le type de partition, que j'ai mis en rouge. La valeur 05 nous indique qu'il s'agit de nouveau d'une partition étendue. Là il faut apporter une nuance : chaque partition étendue contient une partition logique et une autre partition étendue. Oui, mais ici le début de partition qui est donné est bien le début de la prochaine logique : les partition logiques commencent toujours au 63 ème secteur d'un cylindre, tandis que les partitions étendues commencent au tout début de ce cylindre.
Si l'on veut voir l'EBR de la partiton étendue suivante, on le trouvera en début de cylindre de la partition logique. Ce qui implique que la partition logique suivante commence au secteur 253939518, mais la partition étendue, elle, commence à 253939518 - 63 = 253939455s.
On peut vérifier cela avec :
|
sudo dd bs=512
skip=253939455 count=1 if=/dev/sda | od -Ax -tx1z -v
|
En résumé pour pouvoir lire la totalité des descripteurs de partitions logiques, nous devrons lire la totalité des EBR, car il y en a autant que de partitions logiques.
Nous devrons enchaîner la lecture de ces multiples EBR du début à la fin, pour découvrir tous les descripteurs. Sur le dernier EBR, les champs pour le second descripteur seront vides.
Des outils de partitionnement tel que parted, fdisk, gparted, qparted font cela de manière beaucoup plus pratique.
Nous avons tellement l'habitude de compter en décimal, que nous ne prêtons plus attention à la méthode. Nous utilisons en décimal des multiples de dix.
Dans un nombre le dernier chiffre correspond au multiple de 1, puis le nombre suivant au multiple de 10, de 100, etc ...


Prenons un exemple, pour écrire le nombre 1 829 043, je procède en fait de la manière suivante :
1 unité de 1 000 000 = 1 000 000
8 unités de 100 000
= 800 000
2 unités de 10 000
= 20 000
9 unités de
1 000 = 9
000
0 unités
de
100 =
0
4 unités
de
10 =
40
3 unités de
1 =
3
Le principe restera le même en
hexadécimal. Mais en hexadécimal nous sommes en base 16 (hexa = 6,
décimal = 10, hexadécimal = 16), et travaillerons
donc avec des multiples de 16.


Convertissons le chiffre 1 000 000 000 : c'est un milliard ou un Giga.
Cela représente :
3 unités de 268 435 456 = 805 306 368
11 unités de 16 777 216 = 184
549 376
9 unités de 1 048 576
= 9 437 184
10 unités
de 65 536
= 655 360
12 unités
de 4 096
=
49 152
10 unités
de
256
=
2 560
0 unités
de
16
=
0
0 unités
de
1
=
0
total = 1 000 000 000
3 en hex = 3, 11 en hex = b, 9 en hex =9, 10 en hex =a, 12 en hex = c, 10 en hex = a, 0 en hex =0.
Cela nous donne 3b9aca00.
Nous pouvons aussi utiliser la commande : printf "0x%llx\n" + le chiffre à convertir, qui fera la conversion pour nous. Exemple pour le chiffre 1000000000 :
|
:~$ printf
"0x%llx\n" 1000000000
0x3b9aca00 |
0x3b9aca00 est le résultat de la commande, donc la valeur en hexadécimal.
Ici une petite précision le préfixe 0x nous
prévient que nous utilisons un nombre en
hexadécimal, on trouve également 0h, ou x, et enfin # dans le
même but.
On peut enfin ajouter h
à la fin d'un chiffre en hexadécimal, pour le
chiffre 200 (512 en décimal) on trouvera donc la notation :
0x200, 0h200, x200, #200, 200h.
Une calculatrice scientifique le fera également. Une telle
calculatrice est d'ailleurs disponible sous gnome : gcalctool ou sous
kde : kcalc.
Enfin on peut également utiliser les programmes hexedit, ghex2, ou khexedit pour
visionner des fichiers en hexadécimal.
Pour en apprendre plus :
info printf
man hexedit
info khexedit
Voir aussi pour un convertisseur en ligne : http://www.statman.info/conversions/hexadecimal.html
http://mirror.href.com/thestarman/asm/hexawhat.html
http://fr.wikipedia.org/wiki/Accueil
http://fr.wikipedia.org/wiki/Portail:Informatique