baniere poloastucien polo©2005
HEURE   DATE   méteo du Nord de la France  

MBR, FAT et Secteurs de boot : Explications...
==============================

MBR, EBR, secteurs de boot, table d'allocation des fichiers, voilà des termes qui reviennent dans de nombreux topics et qu’il faut connaître, compte tenu de leur importance dans la compréhension et la résolution de nombreuses pannes. C'est pourquoi, en complément de mes sujets sur les partitions disparues et Testdisk, j'ai trouvé intéressant d'essayer de vous expliquer clairement à quoi ça correspond... Certains trouveront cela trop long (et vous m'en excuserez), mais il est difficile d'expliquer clairement les choses si l'on ne rentre pas dans les détails (et vous verrez que les inférences sont nombreuses)


  • I) Situons tout d'abord MBR et secteurs de boot au sein d'un disque dur
  • II) Le MBR comprend 3 grandes parties :
  • III) Comment se déroule le démarrage d'un ordinateur et quelles sont les pannes éventuelles ?
  • IV) L’EBR (Extended Boot Record)
  • V) A quoi ressemble le secteur de boot d'une partition ?
  • VI) Les tables d'allocation de fichiers (FAT et MFT) ont trois fonctions principales :
  • VII) Voici au final comment sécuriser son PC :
  • annexe A : Rappel de l’architecture d’un disque dur et de la terminologie employée
  • annexe B : signification et correspondances entre bit, byte, octet, mots (word), décimal et hexadécimal :
  • I) Situons tout d'abord MBR et secteurs de boot au sein d'un disque dur

    (voir annexe A (en dernière page) pour un rappel de l'architecture et du fonctionnement d'un DD et de ce que signifie les coordonnées CHS)

    unddbisap8

    Le DD est ici partitionné en cinq : 1 partition principale en NTFS, 1 partition principale en FAT 32, et 3 partitions logiques (FAT ou NTFS) au sein d'une partition étendue.

    Le MBR (Master Boot Record) ou secteur principal de démarrage, est situé sur le 1er secteur de chaque disque dur (1er secteur de la 1ère piste du 1er cylindre = CHS 0 0 1). Il y en a un seul par disque dur et il est créé lorsque le disque est initialisé dans la gestion des disques. Il contient les coordonnées CHS des secteurs de boot de chaque partition principale et sait reconnaître parmi celles ci laquelle est active et contient l'OS pour pouvoir lancer le système (OS = Operating System, c'est-à-dire windows XP par exemple...). La table des partitions qu'il renferme (voir plus loin) est écrite lorsque le disque dur est partitionné, et est modifiée chaque fois qu'on réajuste les partitions principales (suppression, fusion,...)

    L'EBR (Extended Boot Record) , ou secteur de démarrage étendu, est l'équivalent pour les partitions logiques de ce qu'est le MBR pour les partitions principales. Il y en a un par partition étendue. Il occupe lui aussi un seul secteur et contient une table de partition étendue où figurent les caractéristiques du secteur de boot de la 1ère partition logique et de l'EBR suivant : la structure d'une partition étendue est en effet comparable à des poupées russes, chaque partition étendue contenant une partition logique et une autre partition étendue, etc... Comme le MBR, l'EBR est toujours situé sur le 1er secteur de la 1ère piste d'un cylindre quelconque, et ses coordonnées CHS se présentent donc toujours sous la forme Y 0 1 (où Y est un numéro de cylindre quelconque dépendant de la taille des partitions qui le précèdent)

    Un secteur de boot est situé au début de chaque partition. Il est créé lors du formatage de la partition et contient les caractéristiques de celle ci ainsi que les coordonnées de la table d'allocation des fichiers (MFT ou FAT). Il comporte un nombre de secteur variable en fonction du système de fichier utilisé : 16 secteurs en cas de partition NTFS, 32 secteurs en cas de partition FAT 32. Une copie de sauvegarde du secteur de boot existe au sein de chaque partition. A noter qu'il n'y a pas de secteur de boot dans le MBR ni dans les EBR. D'autre part les secteurs de boot des partitions commencent toujours sur le 1er secteur de la 2ème piste d'un cylindre quelconque et leurs coordonnées CHS se présentent donc toujours sous la forme Z 1 1 (où Z est un numéro de cylindre quelconque dépendant de la taille des partitions qui précèdent)

    une table d'allocation des fichiers enfin existe pour chaque partition, appelée FAT (File Allocation Table) pour les partitions FAT32, et MFT (Master File Table) pour les partitions NTFS. Ce n'est ni plus ni moins qu'un répertoire permettant de retrouver tous les fichiers stockés dans la partition. Si ce répertoire est effacé windows ne peut plus retrouver aucune des données stockées dans la partition : elles sont bien présentes mais inaccessibles (sauf pour certains logiciels de récupération de données) Voyons maintenant en détail chacun de ces éléments :

    retour haut

    II) Le MBR comprend 3 grandes parties :

    le code exécutable qui est lancé par le BIOS, la zone des messages d'erreur et la table de partition. Différents éditeurs hexadécimaux existent qui permettent de montrer les 512 octets (= 1 secteur) qui composent le MBR sous la forme d'un tableau comportant 32 lignes et 16 colonnes (32 x 16 = 512) se présentant de la manière suivante (voir Edit Hexa dans ma signature ainsi que l'annexe B en dernière page pour plus de détails sur l'écriture hexadécimale) :

    mbrie6

    Chaque octet peut être désigné par une coordonnée ligne-colonne : on parle d'offset. la table de partition par exemple commence à " l'offset 01BEh ", ce qui signifie " à l'intersection de la ligne 01B et de la colonne E en hexadécimal ". chaque octet de chaque secteur du disque a ainsi une adresse précise (un offset) sur le disque dur.

    Les 300 premiers octets du MBR en bleu (de 00h à 12Bh) correspondent au code exécutable qui démarre le lancement du disque après que le BIOS ait passé en revue les différents éléments matériels de l'ordinateur (ce qu'on appelle le POST = Power-On Self Test = auto-test de démarrage).

    Les 80 à 110 octets suivants en vert (de 12Ch à 198h dans mon exemple, nombre variable selon la langue utilisée) correspondent aux messages d'erreur que lance le MBR en cas de problème de configuration : on retrouve ces messages d'erreur à droite du tableau dans l'éditeur hexadécimal. On verra plus loin dans quelles circonstances ils peuvent apparaître à l'écran. Chacun des 3 messages d'erreur démarre à un offset précis dans le MBR (petits cadres rouges dans le tableau), les coordonnées de ces 3 offsets apparaissant 2 lignes plus bas dans le MBR, en gris (2C signifie ligne 12 colonne C, 4A signifie ligne 14 colonne A, et 7C signifie ligne 17 colonne C) : c'est donc à partir de ces 3 octets que le code exécutable du MBR lance les messages d'erreur. A noter que le 1er de ces 3 octets est invariablement 2C, mais que les 2 autres octets varient selon la langue dans laquelle est écrit le MBR (car les messages d'erreur n'ont pas le même nombre de lettres selon la langue) : sur les MBR français c'est donc 2C 4A 7C, mais en anglais ce sera 2C 44 63, en allemand ce sera 2C 48 6E, etc...

    Les 4 octets en jaune (de 1B8h à 1BBh) correspondent à la signature disque que windows marque dans le MBR à l'installation du disque mais que l'on retrouve également dans différentes clés de la base de registre. Ces clés de registre utilisant la signature disque dans leur valeur contiennent de nombreuses autres informations concernant notamment la table de partition et il y a là possiblement une des causes du passage en RAW de certaines partitions (par corruption de la BdR, ou en tout cas inadéquation entre les valeurs de ces clés et les données du MBR). Exemples :

    signaturedisquedw7

    Les 64 octets en rose (de 1BEh à 1FDh) correspondent à la table de partition, centre névralgique du MBR. Cette table comporte seulement 4 descripteurs de partition de 16 octets (4 x 16 = 64) et il ne peut donc pas y avoir plus de 4 partitions principales sur un disque dur. Pour contourner le problème on a inventé les partitions étendues dont le principe consiste, à partir d'une partition étendue mère dont le descripteur est présent dans le MBR, à créer des entrées disséminées sur le DD (les EBR) pour des partitions étendues filles, chaque partition étendue contenant une partition logique et une autre partition étendue (voir le premier schéma)...

    Je ne décrirai que le 1er descripteur du MBR que je vous montre au dessus, le 2ème se décortiquant de la même manière (il n'y a que 2 descripteurs de partition dans ce MBR) :

    descripteurdepartitionef0

    A noter que les secteurs de début et de fin des partitions (offsets 1BF à 1C1 et 1C3 à 1C5) sont très souvent FE FF FF car les partitions dépassent habituellement la limite de 8 Go au-delà de laquelle seuls sont utilisés les champs indiquant le "nombre de secteur avant la partition" et le "nombre total de secteurs de la partition" (8 Go correspond aux 1023 cylindres, 254 pistes et 63 secteurs que le descripteur de partition ne peut pas dépasser faute de place : voir Annexe A)

    Les 2 derniers octets du MBR (en bleu) correspondent au nombre magique 55AA appelé aussi "marque de secteur exécutable". C'est une signature qu'il est impératif de trouver à la fin du MBR puisque c'est cette marque que va rechercher le BIOS et qui va lui permettre de reconnaître le MBR pour pouvoir lancer son code exécutable. A noter que cette marque de secteur exécutable est également obligatoire à la fin des secteurs EBR et des secteurs de boot des partitions et que leur absence équivaut à la suppression de l'EBR ou du secteur de boot de la partition correspondante.

    retour haut

    III) Comment se déroule le démarrage d'un ordinateur et quelles sont les pannes éventuelles ?

    1. À la mise sous tension, la carte mère envoie des signaux électriques à destination du processeur afin de le mettre dans un état particulier (RESET HARDWARE). Le processeur entre alors en phase d’initialisation matérielle, exécute un auto-test interne, bascule en mode d’adressage réel, puis va exécuter la première instruction à l’adresse physique 0xFFFFFFF0 à laquelle se trouve une instruction de saut vers le code d’initialisation du BIOS.

    2. Le BIOS correspond à une interface élémentaire entre le matériel (hardware) et le logiciel (système d’exploitation) permettant le contrôle des éléments matériels. Il s'agit d'un petit logiciel dont une partie est dans une ROM (mémoire morte, c'est-à-dire une mémoire qui ne peut pas être modifiée) et l’autre partie dans un EEPROM (mémoire modifiable par impulsions électriques, d'où le terme flasher le BIOS pour désigner l'action de modifier l'EEPROM). Le BIOS va faire l'inventaire du matériel présent dans l'ordinateur et effectuer un test afin de vérifier son bon fonctionnement (c’est le POST pour "Power-On Self Test" = "auto-test de démarrage"). Si le POST rencontre une erreur, il va afficher un message à l'écran ou émettre une séquence de bips permettant de diagnostiquer l'origine de la panne. Si tout est correct le BIOS émettra généralement un bip bref signalant qu'il n'y a pas d'erreur. Le BIOS va également mettre en place la table des vecteurs d’interruption qui donne l’adresse physique de diverses routines permettant de contrôler l’intégrité de la séquence de démarrage de l’ordinateur. Lorsque le BIOS a terminé son initialisation, il va chercher le premier périphérique bootable (par la recherche de la marque de secteur exécutable 55AA) selon un ordre prédéfini et modifiable dans le BIOS (sélection du périphérique de boot). Lorsqu’un 55AA est trouvé (celui du MBR en l’occurrence), le début du secteur correspondant, le code exécutable, est lu et chargé en mémoire à l’adresse 0000:7C00 (dans la mémoire RAM), puis il va se déplacer à l’adresse 0000:0600, explorer la table de partition située en fin de secteur afin de charger à son tour en mémoire (à l’adresse 0000:7C00 qu’il aura libérée) le secteur de boot de la partition désignée comme active dans la table de partition, lequel va ensuite lancer Ntldr qui lui-même va lancer successivement d'autres fichiers système (boot.ini, Ntdetect.com, Hal.dll…) nécessaires au lancement de l’OS.:

    A chaque étape cependant un plantage peut empêcher le lancement de l’OS et le message d’erreur qui va s’afficher, inscrit dans le MBR ou le secteur de boot, dépend entièrement du moment précis où ça plante. Connaissant cela on comprend mieux les messages d'erreur susceptibles de s'afficher en fonction de la panne ainsi que les solutions envisageables (voir utilisation d’EditHexa dans ma signature) :

    erreurbisge0

    * si le code exécutable du MBR est endommagé on va se retrouver face à un écran noir sans aucun message d'erreur : en effet c'est le code exécutable qui entraine l'affichage des messages d'erreur qui suivent (et donc sans code exécutable, pas de message d'erreur). La solution consiste dans ce cas à faire un fixmbr sous la console de récupération pour restaurer ce secteur exécutable.

    * si la marque de secteur exécutable est corrompue (le 55AA à la fin du MBR), on va voir s'afficher un message du genre "operating system not found" signifiant que le BIOS ne trouve pas de secteur exécutable. Là encore un fixmbr devrait solutionner le problème.

    * si la partition système n'est pas activée (corruption de la table de partition avec un 00 au lieu de 80 à l'offset 01BEh), on va voir le même message "operating system not found" : cela signifie que le chargeur ne trouve pas la partition système à laquelle il doit donner la main. Dans ce cas le fixmbr n'aura aucune efficacité car il n'agit pas sur la table de partition, et seul PTEDIT (ou un éditeur hexadécimal) peut permettre de diagnostiquer et résoudre le problème (d'autres utilitaires genre fdisk pouvant également permettre d'activer telle ou telle partition).

    * si à contrario une partition non système (de données par exemple) est activée par erreur (code 80 au lieu de 00, là encore par corruption de la table de partition), l'exécutable ayant trouvé le 80 va essayer de booter sur celle-ci, va échouer (puisqu'il n'y a pas de système d'exploitation sur cette partition), va rechercher un autre périphérique pour essayer de booter (floppy ou lecteur CD), et s'il ne trouve rien sur ces autres emplacements il va afficher le message d'erreur suivant : "Non-system disk or disk error, Replace and press any key when ready". là aussi seuls PTEDIT, fdisk ou un éditeur hexadécimal peuvent résoudre le problème.

    * si le descripteur de la partition système est corrompu (ligne 1C0 remplie de 00 par exemple) à l'exception du 80 qui est sur la ligne au dessus, l'exécutable ayant trouvé le 80 va quand même essayer de booter sur cette partition, mais bien sûr il ne la trouvera pas et va afficher le message d'erreur suivant : "missing operating system".

    * petite digression : comment agit un virus touchant le MBR et pourquoi un fixmbr est-il dangereux dans ce cas ? En fait le virus va s’installer à la place du MBR sur le 1er secteur du DD et transférer le secteur original du MBR à un autre endroit du disque dur (souvent le dernier secteur). Au démarrage, lorsque le BIOS va vouloir activer le MBR, il va en réalité activer le virus et charger celui-ci en mémoire, mais le virus va charger à son tour le MBR original si bien que le processus de démarrage va sembler normal. Si l’on fait un fixmbr, le virus va être (en partie) détruit, mais le véritable MBR ayant été déplacé il ne pourra plus être chargé en mémoire et sa table de partition ne sera plus du tout accessible, d’où plantage irrémédiable… certains virus de secteurs de boot se comportent exactement de la même manière, et dans ce cas c’est la commande fixboot (et non plus fixmbr) qui va tout planter… Il faut savoir également que certains virus infectant le MBR peuvent effacer la marque de secteur exécutable 55 AA : or dans ce cas le fixmbr fait encore plus de dégâts car s’il ne trouve pas de 55 AA il va effacer complètement la table de partition en mettant des 00 partout… donc prudence quand même avec cette commande.

    retour haut

    IV) L’EBR (Extended Boot Record)

    a une structure beaucoup plus simple. En effet il n’y a ni code exécutable ni messages d’erreur; on y trouve que la marque de secteur exécutable 55AA (en vert) et les 2 descripteurs de partition (en rouge) de l’unique partition logique qui lui est rattachée et de l’EBR suivant (sauf dans le dernier EBR où il n’y a qu’un descripteur, celui de la dernière partition logique) :

    ebrbishy5

    retour haut

    V) A quoi ressemble le secteur de boot d'une partition ?

    Tout dépend en fait du système de fichiers utilisé :

    1) Sur une partition NTFS le secteur de boot occupe en théorie 16 secteurs, et c'est effectivement ce qu'XP réserve au secteur de boot lors de la création de la partition et ce sont bien 16 secteurs qui sont chargés en mémoire par le MBR lorsque cette partition est appelée. Mais en réalité il faut distinguer 3 parties au sein de ces 16 secteurs :
    - tout d'abord le 1er secteur qui correspond au secteur de boot proprement dit, le seul qui soit vital pour la partition et que je détaille ci-dessous. A noter qu'il existe une sauvegarde de ce secteur de boot située sur le dernier secteur de la partition, ce qui est primordial en cas de gros plantage... C'est d'ailleurs ce secteur de sauvegarde que Testdisk va rechercher quand on fait un " backup BS ".
    - les 6 secteurs suivants correspondent à un code exécutable de boot (bootstrap code) qui est le même dans toutes les partitions NTFS mais qui n'a d'utilité qu'en cas de partition système : en effet ce "bootstrap code" (N.T.L.D.R secteurs) permet, dans une partition système, le lancement du système d'exploitation (et sa corruption est une cause de plantage), mais à contrario il ne joue aucun rôle dans le cas d'une partition de données : on peut effacer ces 6 secteurs et les remplir de 00, les données seront toujours accessibles de la même manière, aussi bien en lecture qu'en écriture.
    - Les 9 derniers secteurs enfin sont habituellement remplis de 00 et n'ont pas d'utilité clairement définie (peut être réservés à d'éventuelles évolutions futures).

    Revenons-en au 1er secteur de la partition, le secteur de boot proprement dit. On y retrouve, comme dans le MBR, différentes parties :

    goto

    - d’abord le code exécutable d'assemblage de 303 octets (en bleu de 054h à 182h) qui va explorer le BPB (en rouge, voir ci-dessous) afin d'analyser les caractéristiques physiques de la partition et ensuite charger en mémoire, dans le cas d'une partition système, le "bootstrap code" (NTLDR) situé sur les 6 secteurs suivants et qui est essentiel au lancement du système d'exploitation. A noter qu'il existe 3 octets importants au début du secteur de boot (EB 52 90) qui contiennent une instruction de saut (jump) vers le code exécutable d'assemblage : or ce "jump" est le premier élément chargé en mémoire par le MBR et sa corruption empêcherait le chargement du code exécutable d'assemblage (donc pas d'analyse du secteur de boot et pas de chargement du bootstrap code...)

    - les 110 à 120 octets en gris (de 183h à 1Eah, variables selon la langue utilisée) correspondent aux messages d'erreur diffusés par le code exécutable d'assemblage lorsque le "bootstrap code" occupant les 6 secteurs suivants ne peut être lancé. à noter qu'on retrouve là le classique "NTLDR manquant" ou encore "entrez Alt + Ctrl + Suppr pour redémarrer", et qu'une des solutions consiste donc à restaurer ces 6 secteurs.

    - les 4 octets en vert sur la dernière ligne correspondent, comme dans le MBR, aux Offsets des messages d'erreur (soulignés en noir juste au dessus) et qui permettent au code exécutable de trouver ces messages.

    - on retrouve également, en fin de secteur, la marque de secteur exécutable 55 AA (indispensable)

    - restent les 84 premiers octets en rose (de 00h à 53h) que l'on appelle le BPB ( bios Parameter Block) qui détaille précisément les caractéristiques de la partition (codées sur 1 à 8 octets chacune) que l’on retrouve sous forme de tableau dans PTEDIT (en cliquant sur "boot record") ou dans les éditeurs hexadécimaux :

    bpbntfssf6

    Vous noterez qu'outre les caractéristiques de la partition, le BPB donne également des informations importantes sur la MFT (Master File Table) que NTLDR utilise pour localiser cette MFT pendant le processus de démarrage. Or ceci est primordial, car contrairement aux partitions en FAT16 ou FAT32, la MFT n'est pas localisée à un endroit prédéfini de la partition NTFS : l'avantage est qu'en cas de secteur défectueux Windows va déplacer la MFT à un autre endroit de la partition (en corrigeant le BPB) ce qui accroît la souplesse et la sécurité du système, mais l'inconvénient est qu'en cas de corruption du BPB, la MFT pouvant se trouver n’importe où sur la partition elle ne pourra plus être localisée par NTLDR et Windows renverra un message d'erreur disant que la partition n'est pas formatée (probablement la cause principale des passages en RAW...). La corruption de ce secteur de boot explique donc de nombreuses situations de partitions disparues…

    2) Sur une partition FAT32 le "secteur" de boot s'étend sur 32 secteurs et la FAT commence invariablement au 33ème secteur. Ces 32 secteurs sont répartis ainsi :
    - 3 secteurs réservés au secteur de boot proprement dit (secteurs logiques 0 à 2) et que je décris ci-dessous,
    - 3 secteurs non utilisés remplis de 00 (secteurs logiques 3 à 5)
    - 3 secteurs occupés par une copie du secteur de boot = backup boot sector (secteurs logiques 6 à 8)
    - 23 secteurs réservés par l'OS mais qui ne sont jamais utilisés et en fait remplis de 00...

    Voici comment s’organisent les 3 premiers secteurs correspondant au secteur de boot proprement dit et d’abord le 1er secteur (qui est assez similaire au secteur de boot d’une partition NTFS) :

    secteurdeboot0fat32im4

    * d’abord une instruction de saut sur les 3 premiers octets (EB 58 90) appelant en mémoire le code exécutable d’assemblage de 278 octets (en vert, offsets 05Ah à 16Fh), qui va lui même charger en mémoire l’exécutable qui se trouve sur le 3ème secteur (voir plus bas) qui contient la plupart des routines permettant au secteur de boot de lire les entrées de la table d’allocation des fichiers (FAT), ce qui va permettre à windows de charger en mémoire les différents fichiers système nécessaires au lancement de l’OS et dont on trouve des références dans ce 1er secteur : NTLDR en gris sur cette copie d’écran (partition formatée sous XP en utilisant MSDOS5.0), ou IO.SYS si le système de formatage utilise MSWIN4.1 comme indiqué ci-dessus à droite (je n’ai représenté ici que la partie texte de l’éditeur)

    * on voit ensuite les messages d’erreurs sur 60 octets (en bleu, de 1ACh à 1E7h) avec 3 octets donnant les offsets des messages d’erreur (en jaune, de 1F9h à 1FBh). Là encore les messages d’erreur ne sont pas les mêmes selon le système DOS qui a formaté la partition

    * marque de secteur exécutable 55 AA (présente à la fin de chacun des 3 secteurs constituant le secteur de boot de la partition FAT32)

    * et enfin le BPB qui occupe 90 octets en début de secteur (en rose, de 00h à 59h) et que les éditeurs hexadécimaux (ainsi que PTEDIT) retranscrivent, comme pour les partitions NTFS, sous la forme d’un tableau :

    bpbfat32ka4

    le 2ème secteur donne des informations à Windows quant à l’utilisation qui est faite de la partition en indiquant le nombre de clusters non utilisés dans la partition ainsi que le 1er cluster libre pour inscrire de nouvelles données. C’est ce qu’on appelle le FSInfo (File System Information) :

    secteurdeboot1fat32dp5

    * Les 4 premiers octets en rouge (52 52 61 41 = RRaA) indiquent à Windows qu’il s’agit bien du secteur FSInfo

    * les 4 octets en bleu situés entre 01E4h et 01E7h (72 72 41 61 = rrAa) indiquent à Windows que les informations dont il a besoin se trouvent juste après : - 4 octets en jaune qui indiquent le nombre d’octets libres disponibles sur la partition (50 6F 04 00 dans mon exemple, correspondant en décimal à clusters de libres)
    - 4 octets en vert qui indiquent à Windows quel est le 1er cluster libre disponible pour écrire de nouvelles données, ce qui permet au pilote de la FAT de ne pas perdre de temps à explorer tous les clusters à la recherche du 1er cluster disponible (2B F9 00 00 dans mon exemple, ce qui signifie que le 1er cluster utilisable est le numéro)
    Ces données sont mises à jour à chaque création ou suppression de fichiers

    * et enfin toujours la marque de secteur exécutable 55 AA à la fin

    Le 3ème secteur est occupé par le code exécutable chargé en mémoire par le 1er secteur et qui va permettre le lancement de Windows lorsqu’il s’agit d’une partition système (si par contre il s’agit d’une simple partition de données ce 3ème secteur ne joue probablement aucun rôle, comme c’est le cas pour le « bootstrap code » des partitions de données NTFS. Je l’ai d’ailleurs bizarrement parfois trouvé sur le secteur 12 ou 15 alors que le 3ème secteur apparaissait rempli de 00)

    secteurdeboot2fat32tp4

    retour haut

    VI) Les tables d'allocation de fichiers (FAT et MFT) ont trois fonctions principales :

    1) le suivi de l'espace alloué et libre, 2) la gestion des répertoires et noms de fichiers et 3) le suivi de l'emplacement dans lequel les différentes parties de chaque fichier sont physiquement stockées sur le disque.

    1) La FAT (File Allocation Table) est une structure contenant la liste des clusters utilisés et non utilisés. Chaque partition comporte, en plus de la FAT originale, une copie de sauvegarde située juste après la FAT originale en début de partition (juste après le secteur de boot), afin que le système puisse récupérer celle-ci si la FAT originale s’avérait corrompue. Chaque FAT occupe plusieurs milliers de clusters sur la partition.
    Lorsque l'on crée un fichier ou un sous-répertoire, les informations correspondantes sont stockées dans la FAT sous la forme de données hexadécimales détaillant le nom et la taille du fichier, la date et l'heure de sa dernière modification, le numéro de cluster de départ et l'attribut (Archive, Caché, Système...). C’est une liste de valeurs numériques permettant de décrire l'allocation des clusters d'une partition, c'est-à-dire l'état de chaque cluster de la partition dont elle fait partie. La table d'allocation est en fait un tableau dont chaque cellule contient un chiffre qui permet de savoir si le cluster qu'elle représente est utilisé par un fichier, et, le cas échéant, indique l'emplacement du prochain cluster que le fichier occupe. On obtient donc une chaîne FAT, c'est-à-dire une liste chainée de références pointant vers les différents clusters successifs jusqu'au cluster de fin de fichier. Chaque entrée de la FAT a une longueur de 16 ou 32 bits (selon qu'il s'agit d'une FAT16 ou d'une FAT32). Les deux premières entrées permettent de stocker des informations sur la table elle-même, tandis que les entrées suivantes permettent de référencer les clusters. Certaines entrées peuvent contenir des valeurs indiquant un état du cluster spécifique. Ainsi la valeur 0000 indique que le cluster n'est pas utilisé, FFF7 permet de marquer le cluster comme défectueux pour éviter de l'utiliser, et les valeurs comprises entre FFF8 et FFFF spécifient que le cluster contient la fin d'un fichier.
    Voici comment se présente le 1er secteur de la FAT (33ème secteur de la partition): les 8 premiers octets sont toujours ceux que j’ai soulignés en rouge (plus rarement on peut avoir FF à la place de 0F sur le 4ème octet, et/ou 0F à la place de FF sur le 8ème octet, voire F7 ou 07 en 8ème position si l’on boot sous Win 9x) :

    secteur32fatdepartitionfat32cj3

    2) La MFT (Master File Table) constitue la structure centrale du système de fichiers NTFS, et comme pour la FAT il existe une copie de sauvegarde sur la partition (MFT Mirror) permettant de se protéger d'une perte éventuelle des données. Là encore la MFT occupe plusieurs milliers de clusters et par défaut NTFS lui réserve 12,5 % de l’espace disponible sur la partition (les données ne pouvant pas être écrites sur cette zone réservée), ce qui évite la fragmentation de la MFT. On peut définir dans la base de registre la taille de la MFT en fonction du type de fichiers que l’on a l’habitude d’enregistrer : si l’on enregistre beaucoup de petits fichiers (de nombreux documents textes par exemple) il vaut mieux avoir une grande MFT (car il y aura beaucoup d’entrées), mais si on enregistre des fichiers peu nombreux mais volumineux (des films par exemple), il vaut mieux avoir une petite MFT pour laisser le plus possible de place sur la partition pour ces gros fichiers :
    en d’autres termes, on peut augmenter la MFT (et ça peut améliorer les performances) tant qu'il reste suffisamment d'espace libre sur la partition. Par contre s'il reste peu d'espace libre sur la partition, augmenter la MFT risque de favoriser sa fragmentation (car des fichiers ne trouvant pas de place sur la partition viendront s'y loger) et on aura l'effet inverse de celui attendu… seuls certains logiciels permettent de défragmenter la MFT en faisant une défragmentation au démarrage de l’ordinateur.
    Pour le réglage de la taille de la MFT dans la base de registre, il faut sauvegarder au préalable son registre avec Erunt puis chercher la clé suivante : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem > clic droit sur la valeur NtfsMftZoneReservation et lui attribuer une valeur entre 1 et 4 selon l’espace que l’on veut réserver pour la MFT (12.5 %, 25 %, 37.5 %, 50 % de l’espace partitionné). Puis quitter le registre et redémarrer le PC…
    A noter qu’une défragmentation préalable en mode sans échec s'impose, mais dans l'idéal il est préférable de fixer la taille de la MFT sur une partition fraichement formatée avant d’y mettre les données lorsqu’on sait par avance quel type de données on va y mettre : de l’intérêt d’avoir autant de partition qu’on a de type de données (films, musiques et photos, documents), ceci permettant au mieux d’adapter la taille de la MFT en fonction de ce qu’on va mettre dans la partition... Voici pour exemple le 1er secteur de la MFT (quelque part sur la partition…) :

    mftcl4

    retour haut

    VII) Voici au final comment sécuriser son PC :

    1) - passer chkdsk régulièrement pour réparer ou isoler les secteurs défectueux : c’est certainement plus important que les défragmentations ou les nettoyages de disques que font certains chaque semaine…

    2) - sauvegarder son MBR, tous les EBR ainsi que les secteurs de boot de toutes les partitions : Pour ce, différents logiciels existent qui, chacun à sa manière, permettent de faire ces sauvegardes. Je n'en citerai que quelques uns :

    * EditHexa : voir toutes les explications dans ma signature…

    * PTedit : voir également dans ma signature le sujet sur les partitions disparues. Ce logiciel cependant ne permet que de faire des sauvegardes papiers et ne montre d'autre part que les tables de partitions et les BPB des secteurs de boot en occultant les codes exécutables et les 55AA.

    * DiskProbe : http://support.microsoft.com/default.aspx?scid=kb;EN-US;q153973

    * DiskMap
    Téléchargement http://www.vector.co.jp/download/file/winnt/util/fh346655.html
    mode d’emploi http://www.microsoft.com/technet/archive/winntas/support/utilitys.mspx

    * MBRWizard http://mbrwizard.tripod.com/

    * Fh_disk : http://worldserver.oleane.com/heissler/progfredo/progfredo.html#FH_Disk

    3) - A contrario il n’est pas possible de sauvegarder FAT et MFT, et ceci pour plusieurs raisons :
    * d’abord c’est trop volumineux (plusieurs milliers de clusters = plusieurs Go voire dizaines de Go)
    * d’autre part parce que ça change tout le temps (à chaque création, suppression ou effacement de fichiers)
    * également parce qu’il existe déjà une sauvegarde sur la partition (FAT backup et MFT Mirror) et qu’il est très peu probable que les 2 exemplaires soient corrompus en même temps,
    * et enfin parce que ce qui est important est inclus dans le secteur de boot (qu’il faut, lui, sauvegarder) : taille de la table d’allocation des fichiers, secteur de début,…

    4) - reste enfin la possibilité d’utiliser des logiciels de récupération de données, mais si on en est là c'est qu'on a oublié de faire les sauvegardes…

    retour haut

    annexe A : Rappel de l’architecture d’un disque dur et de la terminologie employée

    pour mieux comprendre les notions de cylindre, piste, secteur, cluster, coordonnées CHS… :

    Un disque dur est constitué de plusieurs plateaux rigides solidaires d’un axe central auquel un moteur électrique imprime une vitesse de rotation constante (le plus souvent 5400 ou 7200 tours / mn). Chaque plateau est constitué d'un disque (en métal, verre ou céramique) sur la surface magnétique duquel sont stockées les données qui sont écrites en code binaire [0 ou 1] grâce à une tête de lecture/écriture. Il y a une tête par face, et deux faces par plateau. Ces têtes de lecture/écriture sont toutes reliées à un seul et unique bras rendant les têtes solidaires les unes des autres. Le bras est motorisé et les têtes vont donc se déplacer radialement à la surface des plateaux pendant qu'ils tournent, permettant ainsi d'accéder à la totalité des données. Ces têtes sont des électro-aimants qui se baissent et se soulèvent pour pouvoir lire l'information ou l'écrire. Leur géométrie leur permet de survoler la surface du plateau sans jamais le toucher : elles reposent sur un coussin d'air d'environ 10 nanomètres créé par la rotation des plateaux.

    photoddez9

    Les têtes commencent à inscrire des données de la périphérie vers le centre du plateau. Les données sont organisées en cercles concentriques appelés "pistes", créées par le formatage de bas niveau. Chaque piste est divisée en petits morceaux que l'on appelle "secteurs" et contenant les données (512 octets par secteur).

    Le secteur est la plus petite unité fonctionnelle d’un disque dur. La juxtaposition de plusieurs secteurs constitue un "cluster" (unité d'allocation en français) qui représente la plus petite zone du disque que peut occuper un fichier. Le nombre de secteurs par cluster varie en fonction du système de fichier utilisé (FAT ou NTFS) et de la taille de la partition : il y a le plus souvent 2 à 64 secteurs par cluster. Ainsi un fichier, même minuscule, occupera au moins un cluster (d’où la perte d’espace +++ en fonction du système de fichier utilisé…). les têtes étant liées entre elles, elles sont toujours à la verticale les unes des autres si bien que toutes les données lues ou écrites à un instant T vont se situer également à la verticale les unes des autres : on parle de cylindre de données pour désigner l'ensemble des données stockées sur une même verticale sur la totalité des disques. L'intérêt du cylindre est évident : toutes les têtes étant simultanément positionnées sur le même cylindre il est beaucoup plus rapide d'écrire sur les mêmes pistes des plateaux superposés (c'est-à-dire sur un cylindre donné) que de déplacer à chaque fois l’ensemble des bras l'adressage d’un fichier ou d’un secteur se fait donc de manière physique en définissant la position des données grâce aux coordonnées cylindre / tête / secteur (en anglais CHS pour Cylinder / Head / Sector).

    Les cylindres sont codés sur 10 bits dans le MBR (donc 1024 au maximum), la numérotation commençant à 0
    Les têtes sont codées sur 8 bits (256 maxi), la numérotation commençant également à 0
    Les secteurs sont codés sur 6 bits (63 maxi), la numérotation commençant toujours à 1 (contrairement aux numérotations en secteurs absolus ou logiques qui, elles, commencent à 0 : voir ci-dessous)
    1 secteur = 512 octet

    La taille maximale de disque que peut donc gérer en théorie le MBR est de 8 Go environ (1024 x 256 x 63 x 512). Mais en pratique, au-delà de 8 Go, seules les valeurs exprimées en secteurs absolus sont valides (offsets 1C6h et 1CAh dans le MBR) alors que les valeurs De têtes et de cylindres sont fausses (offsets 1C0h et 1C4h du MBR) mais vont être extrapolées par le BIOS grâce aux extensions de l'interruption logicielle 13h qui vont permettre de gérer ces données en mode LBA (Logical Block Addressing).

    Il faut bien distinguer secteur absolu et secteur logique : le terme de secteur absolu fait référence au DD entier alors que le terme de secteur logique fait référence à la partition.
    * Lorsqu’on parle en secteur absolu (à l'échelle du DD), le 1er secteur (qui porte le numéro 0) correspond au MBR, le secteur de boot de la 1ère partition est donc le 63ème secteur et les données commencent au secteur absolu 79 (dans le cadre d’une partition NTFS).
    * Lorsqu’on parle en secteur logique on se place toujours au sein d’une partition lambda et on ne prend pas en compte les 63 premiers secteurs du DD (renfermant MBR et secteurs réservés) ni les secteurs occupés par les partitions qui précèdent : le 1er secteur logique correspond donc au secteur de boot de la partition (et porte là encore le numéro 0) et les données commencent au 16ème secteur logique de la partition (si NTFS) ou au 32ème secteur (si FAT32).
    Chaque emplacement du disque dur peut donc être défini en secteurs absolus (par rapport au DD), en secteurs logiques au sein d’une partition donnée, ou en coordonnées CHS : par exemple le secteur absolu 126 correspond au secteur logique 63 de la 1ère partition ou encore aux coordonnées CHS 0 2 1

    Lorsqu’on installe un disque dur, il faut aller dans la gestion des disques pour "l’initialiser" (création du MBR), puis le "partitionner" (création de la table de partition dans le MBR), et enfin le "formater" (création du secteur de boot et de la Table d’Allocation des Fichiers) : c’est ce qu’on appelle le formatage de haut niveau qui, vous l’aurez compris, n'est pas un véritable formatage puisqu’il ne touche pas aux données éventuellement présentes sur la partition. A contrario, durant le formatage de bas niveau (qui est fait en usine avant qu’on achète le DD mais qu'on peut refaire à tout moment avec certains logiciels spécialisés), des 00 sont écrits sur chaque octet du DD et toutes les données présentes sur le DD sont intégralement effacées : c'est ce que l’on devrait toujours faire avant de donner un ordinateur si l’on a des données sensibles…

    retour haut

    Annexe B : signification et correspondances entre bit, byte, octet, mots (word), décimal et hexadécimal :

    contrairement au système décimal (base 10) que l’on utilise tous les jours, la numérotation hexadécimale fonctionne en base 16 (hexa = 6 + décimal = 10). Pour ce faire, en plus des 10 chiffres utilisés dans le système décimal (de 0 à 9), on a introduit l’utilisation supplémentaire de 6 lettres (de A à F) pour les numérotations hexadécimales. Ainsi les 16 valeurs utilisées en hexadécimal sont 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E et F, et ce sont ces 16 valeurs que l’on retrouve par exemple dans les éditeurs hexadécimaux (voir EditHexa dans ma signature) qui permettent de présenter sous forme de tableau (à 16 colonnes et 32 lignes) les 512 octets d’un secteur.
    Certains nombres hexadécimaux pouvant ne contenir que des chiffres, et pour éviter toute confusion avec une numérotation décimale, on rajoute par convention un "h" après le nombre pour indiquer qu’il s’agit d’un nombre hexadécimal (par exemple 245h) alors qu’on laissera le nombre tel quel lorsqu’il s’agit d’une numérotation décimale (245).
    A noter qu’au cours des processus de lecture/écriture sur les secteurs, les processeurs Intels et compatibles inversent les octets lors de la lecture d’un mot. Par exemple, la lecture des octets consécutifs 5Eh, A3h conduisent au mot A35Eh. Ceci est important à connaître pour les conversions en secteurs des valeurs hexadécimales qui apparaissent dans le MBR et les secteurs de boot des partitions.

    calculenhexadcimalversionpcastucesot5

    Plus simplement, pour ceux que les conversions intéressent, il existe une petite calculatrice disponible sur internet permettant les conversions décimal / hexadécimal (et vice versa) : http://www.collicott.net/john/programming/bits.htm (ou comme le précise tilagoon, la calculatrice de windows fait le même travail )

    Pour mémoire voici les principales correspondances :

    tableauhexadcimalch3

    (*) : sur la plupart des ordinateurs actuels, le comptage des secteurs des DD dans le BIOS est codé sur 28-bits, ce qui explique que les BIOS ne reconnaissent pas les DD > 137 Go (268 435 456 secteurs x 512 octets = 137 Go), et au-delà il faut aller bidouiller la BdR pour activer le mode LBA-48 bits…
    (**) : sur les BIOS les plus récents, le comptage des secteurs se fait sur 48-bits, ce qui permet la reconnaissance de DD de 281 474 976 710 656 secteurs = 144 115 188 Go = 144 PetaOctets (y'a de quoi faire !…)

    retour haut

    Remerciement a romsk pour ce travail

    discussion et problèmes pratiques de ce sujet ici

    Voici d'autres pages que vous pouvez consulté :




    le pisseur


    polo©2006