Ci-dessus, nous avons vu la structure du MBR (secteur 0) : code du programme d'amorçage suivi par 4 entrées de la table des partitions de 16 octets chacunes, suivies par une signature AA55. Les entrées de la table des partitions de type 5 ou F ou 85 (en hexadécimal) ont une signification particulière : elles décrivent les partitions étendues : espaces qui seront ultérieurement fractionnés en partitions logiques. (Donc, une partition étendue n'est qu'une boîte, et ne peut pas être utilisée par elle-même ; on utilise alors les partitions logiques qu'elle contient.) Ce n'est que la position du premier secteur de la partition étendue qui est important. Ce premier secteur contient une table des partitions avec quatre entrées : une est une partition logique, une est une partition étendue et deux sont inutilisées. De cette manière, on obtient une chaîne de secteurs de table des partitions, dispersés sur le disque dur, où le premier décrit trois partitions primaires et la partition étendue, et chaque secteur de table des partitions qui suit décrit une partition logique et la position du prochain secteur de table des partitions.
Il est important de comprendre cela : Quand les gens font des bétises en partitionnant leur disque, ils veulent savoir : `est-ce que mes données sont toujours là ?' Et la réponse est généralement : `oui'. Mais si des partitions logiques ont été créées, alors les secteurs de table des partitions les décrivant sont écrits au début des ces partitions logiques, et les données qui étaient initialement à ces emplacements sont perdues.
Le programme sfdisk
montre la chaîne complète. Par exemple,
# sfdisk -l -x /dev/hda
Disk /dev/hda: 16 heads, 63 sectors, 33483 cylinders
Units = cylinders of 516096 bytes, blocks of 1024 bytes, counting from 0
Device Boot Start End #cyls #blocks Id System
/dev/hda1 0+ 101 102- 51376+ 83 Linux
/dev/hda2 102 2133 2032 1024128 83 Linux
/dev/hda3 2134 33482 31349 15799896 5 Extended
/dev/hda4 0 - 0 0 0 Empty
/dev/hda5 2134+ 6197 4064- 2048224+ 83 Linux
- 6198 10261 4064 2048256 5 Extended
- 2134 2133 0 0 0 Empty
- 2134 2133 0 0 0 Empty
/dev/hda6 6198+ 10261 4064- 2048224+ 83 Linux
- 10262 16357 6096 3072384 5 Extended
- 6198 6197 0 0 0 Empty
- 6198 6197 0 0 0 Empty
...
/dev/hda10 30581+ 33482 2902- 1462576+ 83 Linux
- 30581 30580 0 0 0 Empty
- 30581 30580 0 0 0 Empty
- 30581 30580 0 0 0 Empty
#
Il est possible de construire une mauvaise table des partitions. Beaucoup de
noyaux entrent dans une boucle s'il y a des partitions étendues qui pointent sur
elles-mêmes ou sur une partition placée avant dans la chaîne. Il est
possible d'avoir deux partitions étendues dans un de ces secteurs de table des
partitions, comme ça la chaîne de la table de partitions se divise.(Ceci peut
arriver par exemple avec un fdisk
qui ne reconnaît pas les partitions typées
5, F ou 85 comme étendues, et qui crée une 5 à la suite d'une F.) Des programmes
de type fdisk
non standards peuvent provoquer de telles situations, et quelques
manipulations sont nécessaires pour les réparer.
Le noyau de Linux acceptera une division au niveau le plus extérieur. Ainsi,
vous pouvez avoir deux chaînes de partitions logiques. C'est parfois utile
- par exemple, on peut utiliser pour l'une le type 5 afin qu'elle soit vue par DOS,
et pour l'autre le type 85, invisible pour DOS, comme ça DOS FDISK ne plantera pas à
cause d'une partition logique au-delà du cylindre 1024.