Accueil de la Caverne Informatique - Les formats exécutables - La mémoire virtuelle - Ecrire son O.S.

Sauver ses partitions

Avant-Propos

Génèse de l'article

6 juin 2000. Suite à un plantage d'un logiciel multiboot, le premier secteur de mon disque dur est détruit (au sens figuré : le disque dur est intact physiquement, mais les données que ce secteur contient sont perdues). Doté d'une disquette boot et d'une disquette contenant un compilateur C pour Ms-Dos, je tente une opération de la dernière chance.

Je connais la structure de mes partitions, leur type, leur nombre, leur taille. Ne disposant que de ma disquette boot et du compilateur C pour Ms-Dos, je me mets à écrire un programme d'édition du secteur boot. Mon idée : reconstituer les données du secteur boot en espérant que le reste du disque dur n'a pas été altéré, et tenter de relancer Windows 98, au moins le temps de sauver mes données.

Après plusieurs jours de travail, pari gagné. Après avoir recalculé tous les paramètres, Windows 98 accepte de redémarrer.

Un article et de nombreuses réactions

Peu de temps après, j'écris un article sur le sauvetage de mes partitions que je publie sur La Caverne Informatique. Cet article a, depuis, suscité de nombreuses réactions. La plupart du temps, il s'agissait de personnes ayant, pour telle ou telle raison, perdu leur disque dur et cherchant à le restaurer à tout prix. Malheureusement, dans 99% des cas, j'étais bien incapable de leur apporter la moindre aide.

Si vous arrivez sur cette page parce que vous vous trouvez également dans cette situation, voici les différents cas et ce que vous pouvez faire.

* Votre disque a été abîmé physiquement. Causes : choc, chute (même de quelques centimètres), décharge électrique (sutension ou électricité statique)... Conséquences : profilération de clusters défectueux dans le meilleur des cas, non-reconnaissance soudaine du disque par le BIOS* dans le pire. Il n'y a généralement plus rien à faire, désolé. Si les têtes de lectures sont endommagées, aucun programme informatique n'y pourra rien changer.

(*) Quand le BIOS ne reconnaît pas un disque dur, cela ne veut pas forcément dire que le disque dur est défectueux. Cependant, lorsque le BIOS de votre machine refuse du jour au lendemain de reconnaître votre disque alors que celui-ci fonctionnait normalement la veille, c'est très mauvais signe.

Si vous êtes riche et que vous tenez énormément à vos données, la seule solution consiste à vous adresser à une entreprise spécialisée. Celle-ci démontera le disque dur et récupérera les pistes magnétiques. Coût : de plusieurs centaines à plusieurs milliers d'euros.

* Le contenu de la FAT a été abîmé. Causes : plantage de Windows, d'un logiciel quelconque, action d'un virus, ou cluster devenu défectueux. Vos fichiers sont probablement toujours intacts sur le disque dur, mais l'adresse de leur début et de leur fin (contenue dans la FAT) a été perdu. Il existe des logiciels spécialisés (et payants) qui tenteront de reconstituer vos fichiers (résultats variables).

* La table des partitions a été effacée. Causes : un programme multiboot qui se crashe, un antivirus qui plante, ou tout simplement un virus. Vous êtes dans mon cas. Peut-être mon expérience vous servira-t-elle ?

Prérequis

Lors de l'opération de sauvetage décrite ci-dessous, j'avais à ma disposition :

Contexte

Attention ! La structure de la table des partitions date des débuts antédiluviens de l'informatique, une époque où l'on ne pensait pas au bug de l'an 2000, ni que les disques durs dépasseraient la centaine de mégaoctets. Son format ne permet pas de gérer les coordonnées de partitions situées au-delà de la 255ème tête, du 1024ème cylindre, du 63ème secteur (il existe des techniques sophistiquées pour se libérer de ces contraintes). Coup de chance, mon disque dur était un IBM de 8 Go, soit 255 têtes, 1024 cylindres, 63 secteurs.

Sauver ses partitions

L'article original (écrit en juin 2000)

Comment t'as fait ça ?

Avec un compilateur C et une bonne grosse doc.

Je veux dire, pour tout planter comme ça ?

Eh bien, c'était le mardi 6 juin 2000. Il était pas loin de 20h, et je mis en route mon Personal Computer. Puis je me rendis aux toilettes en attendant que ça boote. Je dois préciser que mon PC est lent à booter. Je dois aussi préciser que quelques semaines auparavant, j'avais installé le programme multi-boot BootMagic, de PowerQuest.

BootMagic planta - genre plantage définitif.

Pas trop inquiet, je redémarrai à partir d'une disquette, et tapai la commande DOS sys c: pour supprimer BootMagic et remettre le bootloader par défaut du DOS.

J'eu le message d'erreur :  C: lecteur non valide

Pris d'un doute affreux, j'utilisai le fdisk du DOS, qui me confirma la bien triste nouvelle : mes partitions étaient irrémédiablement abîmées. fdisk m'indiquait pour mon disque IBM :

  1. Partition de type inconnu et de taille 25%
  2. Partition de type inconnu et de taille 25%
  3. Partition de type inconnu et de taille 56%
  4. Partition de type inconnu et de taille 100% (!!)

Mon cri de révolte

NNOOOOOOOOONN !!!*

* En fait ce fut une succession d'autres mots que la morale réprouve et que je ne puis reporter ici même.

Pourquoi tu t'es rebellé ?

Tout d'abord parce que j'avais plein de données non sauvegardées.

Ensuite parce que j'étais persuadé que seul le secteur de boot avait été endommagé. Et croyez-moi, c'est rageant de perdre 8 Go de données par la faute d'un simple secteur de 512 octets !

Structure d'un disque

Un disque dur est composé de plateaux (des galettes magnétiques, un peu comme un empilement de CD double-face). A chaque face de plateau est associé une tête de lecture. Les têtes de lectures sont solidaires (c'est-à-dire elles se déplacent simultanément grâce à un bras).

On appelle piste une partie circulaire d'un plateau. On appelle cylindre l'ensemble des pistes situées à la même 'hauteur', c'est-à-dire accessibles par toutes les têtes sans déplacer le bras. On divise les pistes en secteurs. C'est la plus petite unité du disque dur pouvant être lue. Les secteurs ont généralement une taille de 512 octets.

Toute partie du disque dur peut être adressée par un triplet (tête, cylindre, secteur), ou bien par le nombre de secteurs depuis le secteur boot. Les têtes et les cylindres sont numérotés à partir de 0. Les secteurs sont numérotés à partir de 1. Voilà pourquoi le secteur de boot est le secteur (0,0,1).

Un disque codé en 4 * 16 octets

Le secteur de boot est donc situé tête 0 (1ère tête), cylindre 0 (1er cylindre), secteur 1 (1er secteur). On l'appelle le MBR (Master Boot Record).

Le Master Boot Record a la structure suivante :

      +------------------------+
0x000 |       Boot Loader      |
      |   (Programme de boot)  | (Beaucoup d'octets)
      |                        |
      |------------------------|
0x1BE | Première partition     | (16 octets)
      |------------------------|
0x1CE | Seconde partition      | (16 octets)
      |------------------------|
0x1DE | Troisième partition    | (16 octets)
      |------------------------|
0x1EE | Quatrième partition    | (16 octets)
      |------------------------|
0x1FE | Nombre Magique (0xAA55)| ( 2 octets)
      +------------------------+
     Longueur : 0x200 (512 octets)

Le MBR est mal organisé, il n'y a de la place pour n'enregistrer que 4 partitions (les partitions primaires). Les systèmes d'exploitation offrent la possibilité de créer des partitions étendues, ce sont des partitions qui permettent de contenir des partitions secondaires. Mais ça c'est une autre histoire.

Le nombre magique 0xAA55 situé dans les deux derniers octets du MBR. Lors du démarrage, le BIOS charge en mémoire le secteur Boot. Si le nombre magique y est présent, le BIOS considère que le secteur est exécutable, et contient un Boot Loader. Seules les partitions primaires sont bootables. Le Boot Loader se charge de repérer la partition active, et de charger en mémoire son propre programme boot. Puis il lui passe le relais.

Une entrée dans la table des partitions
a la structure suivante :

     +------------------------+
0x00 | Etat de la partition   |
     | 0x00 : non activée     | (1 octet)
     | 0x80 : partition boot  |
     |                        |
     |------------------------|
0x01 | Coordonnées tête,      |
     | cylindre, secteur de   | (3 octets)
     | début de partition     |
     |                        |
     |------------------------|
0x04 | Type de partition      | (1 octet)
     | (Dos, Windows, Linux)  |
     |                        |
     |------------------------|
0x05 | Coordonnées tête,      |
     | cylindre, secteur de   | (3 octets)
     | fin de partition       |
     |                        |
     |------------------------|
0x08 | Nombre de secteurs     | (4 octets)
     | avant le premier       |
     | secteur de la partition|
     |                        |
     |------------------------|
0x0C | Nombre de secteurs de  | (4 octets)
     | la partition           |
     |                        |
     +------------------------+
     Longueur : 0x10 (16 octets)
         cylindre          secteur
  <--------------------> <--------->
  7 6 5 4 3 2 1 0    9 8 5 4 3 2 1 0
 +---------------+  +---------------+
 | | | | | | | | |  | | | | | | | | |
 +---------------+  +---------------+
      octet 1            octet 2

Tu parles beaucoup petit...

Passons à l'action ! Ecrivons notre prog ! Enfin, moi. Vous aussi, si ça vous tente. Sinon, voici l'exécutable et les sources.

Ce programme permet d'éditer chacune des valeurs définissant les 4 partitions. Ce programme ne modifie rien d'autre que le MBR (0,0,1). Ca veut dire : vous pouvez faire toutes les bêtises du monde, si vous avez noté les bons paramètres, vous pourrez toujours réparer. Sinon... Tant pis :)

Tu as la doc, tu as les outils...

Reste à calculer les bons paramètres. Ce n'est pas bien dur, la taille d'un disque dur se calcule ainsi :

La géométrie de mon IBM est : 255 têtes, 1024 cylindres, 63 secteurs (au passage, il s'agit des valeurs maximales reconnues par le BIOS, le coup de chance :-).

Les cylindres sont utilisés comme unité d'allocation d'espace : une partition peut utiliser toutes les têtes et les secteurs situées entre tel et tel cylindre. La première partition commence toujours au cylindre 1, l'espace se situant sur le cylindre 0 à la suite du MBR est donc toujours inutilisé. Et utilisable ;) Certains virus ne s'en privent d'ailleurs pas...

Dans la pratique, les données vraiment importantes sont :

Il semble (?) que l'on puisse entrer des données erronées et continuer à lire ces partitions. Mais je ne le recommande pas personnellement.

Je connais donc les paramètres pour reconstituer mes partitions :

CQFD :)

Et c'est ainsi que une semaine plus tard, après m'être abîmé les yeux à bosser tous les soirs de la semaine jusqu'à 3h du mat' sur l'éditeur MS-DOS, j'eus la joie suprême d'obtenir une réponse favorable à la commande dir C:.

Ce que j'ai fait dans les heures qui ont suivi ? J'ai tout sauvegardé sur CD-ROM, j'ai supprimé toutes les partitions et j'ai tout réinstallé.

Eh bien, merci pour ces précisions

De rien. Ce sera 4.194.304 francs s'il te plaît.

[Haut de page]


Accueil de la Caverne Informatique - Les formats exécutables - La mémoire virtuelle - Ecrire son O.S.

Si vous avez apprécié (ou détesté) cet article ou ce site, vous avez la possibilité de donner une note d'évaluation et indiquer les points forts, les points faibles de ce site. Ce service est offert par l'institut de statistiques Weborama.

Eric Minso - novembre 2003 - La Caverne Informatique - http://cavinfo.fr.st/