Niveau :      
Résumé : table des partitions

Un disque dur est en général divisé en partitions. Je dis en général, car ce n'est pas obligatoire, une disquette ne l'est quasiment jamais.

Sur un PC, la table est en général au format DOS (nommé aussi MBR), je dis en général car ce n'est pas le seul format possible, même si c'est le plus courant.

Nous allons donc se restreindre au cas d'un disque dur partitionné au format DOS.

Premier secteur

Les informations de partitionnement se situent sur le premier secteur (512 octets) d'un disque. Mais il n'y a pas que ça. On y trouve des nombres magiques, et du code pour démarre la machine. La table des partitions n'est constituée que de 64 octets (de 446 à 510). On appelle ce secteur le master boot record (MBR).

mbr.png

Pour lire les données de votre MBR :

$ dd if=/dev/hda of=/tmp/mbr bs=512 count=1
$ xxd /tmp/mbr

La table contient 4 entrées de 16 octets, qui forment les fameuses 4 partitions primaires, limite originelle du nombre de partitions.

mbrtable.png

Chaque entrée décrit le début, la longueur et quelques attributs d'une partition. Historiquement, on utilisait la notion de cylindre, tête et secteur mais cette notation est obsolète, inefficace en terme de place et ne correspond plus à la réalité. On utilise donc un comptage sur 4 octets du nombre de secteurs (512 octets) sur le disque, qu'on appelle LBA. Comptez, cela fait 2To maximum, vous aurez peut-être un problème de partitionnement avec votre prochain disque, il faudra passer à un format un peu plus moderne ... patientez pour un prochain article.

Maintenant, je suis sûr que vous voulez savoir à quoi ressemble votre table :

# Contenu quasiment brut
$ sfdisk -d /dev/hda
# le même un peu traduit
$ sfdisk -l -uS /dev/hda

Et là vous vous dites : mais il y a plus que 4 partitions !

Les partitions logiques et étendues

Hé oui, des gens ont voulu pouvoir avoir bien plus que 4 partitions, c'est comme ça qu'on a inventé les partitions logiques. Question vocabulaire, une partition étendue est une partition primaire qui va contenir d'autres partitions qu'on appelle les partitions logiques.

Donc si vous lisez bien votre table, il est probable qu'elle contienne un hda2 (étendue, non visible sous linux) englobant la totalité du disque à l'exception de la première partition. Les partitions hda5 et hda6 (logiques) sont alors dans cette dernière.

Le format de partition étendue est un peu consommateur (512 octets) puisqu'on réécrit un nouveau secteur pour chaque partition au même format que le MBR. On n'y met cette fois que la partition logique et la description de la prochaine partition (ce qui forme une liste chaînée). Cela veut dire qu'on peut avoir autant de partitions étendues qu'on veut (par défaut linux n'en peut gérer que 64).

Espace perdu

Comme dit un peu plus haut, historiquement on utilisait la notation C/H/S (cylinder, head, sector) pour décrire les positions des partitions. Cette notation impliquait qu'on mette la première partition dans la 2e piste puisque le MBR se trouvait dans la première. On a gardé cette convention même si elle n'a rien d'obligatoire. Ce qui laisse de l'espace libre dans la première piste.

Une piste est constituée des secteurs d'un cylindre sur une tête de lecture. Ce qui nous donne :

  • Taille Secteur = 512 (défaut sur quasiment tous les disques)
  • Taille Piste = 512 * nombre de secteurs par piste (S)
  • Taille Cylindre = 512 * nombre de secteurs par piste (S) * nombre de têtes (H)
  • Taille du disque = 512 * nombre de secteurs par piste (S) * nombre de têtes (H) * nombre de cylindre (C)

Elle a en général une taille de 512*63 soit 32256 octets inutilisés sur un disque (et autant pour chaque partition logique si vous avez bien suivi). C'est ici que certains outils anti-piratage mettaient leurs données à l'époque où windows existait encore. Maintenant un bootloader comme grub va profiter de cet espace pour s'y loger et éviter d'être dérangé par les systèmes.

Grub premier du nom va y mettre son stage1.5 et grub2 est capable d'y rentrer en entier.