logoAnerty's Lair - USB Boot << Documentation << Home
enfr
^ Page 1 Page 2 Page 3
Introduction
Une autre partie importante de la séquence de démarrage d'un PC dépends directement du contenu des disques sur lesquels il est possible de démarrer. Le disque contient en effet non seulement les fichiers du système d'exploitation, mais aussi toute une organisation permettant de les retrouver. Le BIOS doit pouvoir examiner rapidement un disque pour savoir si celui ci est démarrable. Nous alons donc voir de quelle manière ce contenu est organisé.

II] Structure d'un disque dur
Un disque dur venant d'être acquis n'est la plupart du temps qu'un vaste espace remplis de zéros, inutilisable tel quel par nos PC. Sans aucune organisation, un disque dur n'est jamais qu'une longue séquence de quelque dixaines de milliards d'octets de long. Les informations qu'un BIOS possède sur un disque venant d'être installé sont minimes: le BIOS est capable à ce stade de déterminer le nombre minimum d'octets qu'il est possible de lire ou d'écrire sur le disque en une seule opération (taille d'un secteur physique, souvent 512 octets) et dans la plupart des cas la taille totale du disque (appelée aussi taille non formattée).

Des informations doivent êtres écrites sur le disque pour structurer l'espace disponnible, permettant au systèmes d'exploitation de gérer cet espace, de le découper, d'en attribuer des morceaux dédiés au stockage des fichiers, et de retrouver facilement l'emplacement physique des données contenues dans un fichier. L'écriture de ces informations est réalisée d'une part lors du partitionnement du disque, et d'autre part lors du formattage des partitions.

1. La table de partition

La première structure inscrite sur un disque est la Table de Partitions. Cette table contient davantage d'informations sur le disque, et son début est toujours écrit sur le premier secteur physique du disque pour qu'il soit possible de la retrouver même si la taille totale du disque est inconnue. Les informations contenues dans cette table permettent d'organiser un disque physique en plusieurs volumes de stockage indépendants les uns des autres. Ces volumes de stockage, appelés Partitions, ont une taille et une position précise sur le disque, inscrites dans la table. Ce découpage du disque en volumes est particulierement intéressant pour séparer les données des utilisateurs de l'endroit ou les applications et le système d'exploitation sont installés, permettant par exemple d'utiliser plusieurs systèmes d'exploitation avec les mêmes données utilisateur, ou de réinstaller le système d'exploitation sans risquer de perdre ses données. Un exemple de découpage de disque en partition peut être vu sur l'image ci dessous : (échelle arbitraire)

Structure d'un disque: [MBR][Padding][Partition1][Partition2][Partition3][Partition4]

Le système d'exploitation possède plusieurs informations sur chaque partition d'un disque, fournies par la table de partition dans cet ordre :

  • L'état de la partition codé sur un octet (active: 0x80 ou inactive: 0x00). Une seule partition doit être marquée comme active (voir code de démarrage plus bas). La plupart du temps la partition contenant le système d'exploitation est marquée active.
  • La position du début de la partition exprimée sous la forme d'une coordonnée CHS {Cylindre, Tête, Secteur} codée sur 3 octets. Cette position indique l'emplacement du premier secteur appartenant à la partition.
  • Le type d'organisation employée pour stocker les fichiers sur cette partition, appelée système de fichier, ou une marque indiquant que cette partition est une partition étendue (voir partition étendue plus bas). Les systèmes de fichiers les plus connus sont FAT (variantes FAT16, FAT32, VFAT, ...) et NTFS utilisés par les OS de Microsoft, et les variantes de EXT (Ext2, Ext3, ...) utilisés par les nombreuses distributions Linux.
  • La position du dernier secteur de la partition, sous le même système de coordonnées CHS.
  • La distance séparant le premier secteur de la partition de cette table de partition, exprimée en secteurs sur 4 octets.
  • La taille de la partition, aussi exprimée en secteurs sur 4 octets.

Une table de partition contient ces informations pour 4 partitions, ce qui est suffisant dans la plupart des cas. Si un plus grand nombre de partitions doit être créé, il devient alors nécéssaire de créer une partition étendue. La différence entre une partition normale (aussi appelée partition principale) et une partition étendue est qu'une partition étendue ne contient pas de fichiers, mais d'autres partitions. Une partition étendue est organisée comme un disque dur, c'est à dire qu'elle possède une table de partition sur son premier secteur, contenant les informations relatives à ses sous partitions. Une partition étendue peut contenir une autre partition étendue, et on peut répéter cette organisation de type poupées gigognes ad nauseam jusqu'à pouvoir mettre les informations relatives à chaque partition dans une table. Certains systèmes d'exploitation limitent le nombre total de partitions sur un disque à 255, ou imposent des restrictions sur la forme de l'arbre de partition créé par l'imbrication de ces partitions étendues (arbre en peigne, profondeur de l'arbre maximum, ...).

La première table de partition est donc contenue dans le premier secteur du disque, mais celui-ci ne contient pas que cela. Ce secteur, appelé MBR (Master Boot Record) contient aussi une signature de deux octets à la fin des 512 octets du MBR permettant d'indiquer que ce secteur contient du code de démarrage (l'octet 510 contient la valeur 0x55, et le 511 contient la valeur 0xAA, formant la signature 0xAA55). Cette signature indique au BIOS que ce secteur contient un programme de démarrage, et est donc nécéssaire pour qu'un disque soit démarrable. Le diagramme suivant montre l'organisation du MBR :

structure du MBR (512 octets): [BootCode(446o)][Partition1(16o)][Partition2(16o)][Partition3(16o)][Partition4(16o)][55][AA]

Celui ci est divisé en 6 parties: Le code de démarrage, la table de partition contenant les informations sur les 4 partitions principales et la signature 'démarrable'. Le code de démarrage contenu dans le MBR, appelé Master Boot Code (MBC), est un petit programme de 446 octets écrit en assembleur. Le modèle le plus courant analyse les informations des 4 partitions de la table de partition une par une. Si il en trouve une active, ce MBC charge le premier secteur de cette partition en mémoire, vérifie que le secteur chargé possède aussi la signature 0xAA55 de secteur executable, puis l'execute via un branchement inconditionnel (instruction JMP).

Ce programme est copié dans le MBR lors du partitionnement du disque sous certains OS (DOS, Windows 9x), et peut être réinstallé si il est absent grace à la commande FDISK /MBR sur les OS disposant de cette commmande, ou recopié manuellement. D'autres programmes peuvent être installés sur dans ces 446 octets, comme lilo ou grub par exemple, et certains ne tenant pas dans ces 446 octets occupent aussi quelques secteurs après le MBR. Ces secteurs réservés (appelés 'padding' sur le premier diagramme) ne font partie d'aucune partition, car ils se situent juste après le MBR et avant le début de la premiere partition du disque. La plupart du temps, les utilitaires de partitionnement ajoutent assez de secteurs réservés après le MBR pour faire coincider le début de la première partition avec une coordonnée de secteur physique CHS ayant la coordonnée secteur égale à zéro. Par exemple, sur les disques ayant 64 secteurs par tete, le premier secteur de la premiere partition sera le secteur n°64 {C=0, H=1, S=0} laissant 63 secteurs réservés entre le secteur 0 (MBR) et cette partition. Dans ce cas, on peut donc utiliser un programme de démarrage de 446 + 63*512 ~= 32ko, qui offre davantage de possibilités.

La présence d'un programme de démarrage dans le MBR est nécéssaire, puisque c'est ce programme que le BIOS executera pour booter sur un disque et qu'il sert d'intermédiaire entre le BIOS et le code de démarrage de la partition contenant le système d'exploitation. Le contenu du premier secteur de la partition dépend du type de partition, et du système d'exploitation installé.

Haut
2. Contenu de la partition
Une fois les partitions créée, il est possible de les formater. Le formatage permet d'organiser l'espace offert par une partition en un système de fichier, qui contiendra les dossiers, et les fichiers eux même. La description complète de l'organisation interne de ces systèmes n'est pas utile dans le cadre de ce document, mais ce qui suit poura servir. Le premier secteur d'une partition formatée contenant un système d'exploitation est souvent appelé secteur de démarrage (boot sector) et peut contenir du code de démarrage. Ce code sera executé par le code de démarrage du MBR, donc sa présence est requise pour compléter la séquence de démarrage. Dans la plupart des cas, le code de démarrage est copié dans le premier secteur de la partition lors de l'installation du système d'exploitation, mais certains utilitaires permettent de le créer si il est absent, comme par exemple la commande SYS du DOS ou des Windows 95/98/Me, l'option /S de l'outil FORMAT du DOS, ou lilo, syslinux et d'autres sous Linux.
Haut
En Résumé
Le disque d'un périphérique USB doit contenir un volume de stockage démarrable ou en être un. Certains appareils photo numériques et clef USB ne possedent pas de table de partition, ni de MBR, et le contenu de leur disque est équivalent au contenu d'une partition normale d'un disque ou d'une grosse disquette. Dans un cas comme dans l'autre, le premier secteur du disque doit respecter les points suivants:
  • Possèder la signature 0xAA55 dans les deux derniers octets de son premier secteur.
  • Contenir un programme de démarrage.
Si le disque contient un MBR, il doit en plus :
  • Etre partitionné: une partition suffit, mais davantage peuvent être utiles.
  • Respecter les conventions du MBC utilisé dans le MBR: la plupart du temps cela veut dire avoir une seule partition active dans la table de partition: le premier octet de ses informations est 0x80.
  • Contenir sur la partition active un Boot Sector permettant le lancement du système d'exploitation souhaité (ayant donc aussi la signature 0xAA55 et un programme de démarrage).
Haut