Et si ça ne boot pas
Présentation du Boot
Le Master Boot Record ou MBR (parfois aussi appelé "Zone amorce") est le nom donné au premier secteur adressable de votre SDCard (secteur 0 en adressage logique) dans le cadre d'un partitionnement Intel. Sa taille est de 512 octets. Le MBR contient la table des partitions (les 4 partitions primaires) de la SDCard. Il contient également une routine d'amorçage dont le but est de charger le système d'exploitation, ou le chargeur d'amorçage (boot loader) s'il existe, présent sur la partition active.
Structure du MBR
Adresse | Description | Taille en octets | ||
---|---|---|---|---|
Hex | Déc | |||
0000
|
0 | Routine | 440 (max. 446) | |
01B8
|
440 | Signature facultative | 4 | |
01BC
|
444 | Habituellement nul ; 0x0000 | 2 | |
01BE
|
446 | Table des partitions primaires (Quatre entrées de 16 octets (IBM Partition Table scheme)) |
64 | |
01FE
|
510 | 55h | MBR signature; 0xAA55 |
2 |
01FF
|
511 | AAh | ||
Taille totale du MBR : 440 + 4 + 2 + 64 + 2 = | 512 |
À l'octet 510 du MBR, le mot 0xAA55, appelé nombre magique ou magic number, doit impérativement être présent pour que le BIOS charge et exécute la routine de démarrage présente dans le MBR. En effet, après la phase de test du BIOS (appelée POST), le BIOS lit le premier secteur des périphériques amorçables qui ont été définis par l'utilisateur à l'aide du programme SETUP (Section BOOT DEVICE ORDERING). Lorsqu'il trouve un périphérique contenant le magic number 0xAA55, il charge le code d'amorçage à l'adresse mémoire 0x7C00 et l'exécute. La main est alors donnée au chargeur d'amorçage (boot strap loader) par ce code d'amorçage.
Réparation, sauvegarde, et restauration du MBR
Microsoft Windows
Sous MS-DOS et les versions grand public de Windows jusqu'à Windows Millenium, il est possible de recréer la routine de boot du MBR sous DOS à l'aide de la commande FDISK /MBR.
Sous Windows XP, la commande à utiliser pour restaurer le MBR est fixmbr. Elle est accessible depuis la console de récupération.
Sous Windows Vista et Windows 7, la commande à utiliser pour restaurer le MBR est bootrec /FixMbr. Elle est accessible depuis la console de récupération.
UNIX et GNU/Linux
Sous Linux, la commande dd permet de copier n'importe quelle portion d'un fichier. On peut donc l'utiliser pour sauvegarder le MBR d'un disque, ou pour le restaurer. Celui-ci se trouve sur les 512 premiers octets du disque.
ATTENTION : cette opération peut être très risquée, si l'utilisateur se trompe de disque à copier/restaurer. Par exemple, restaurer le MBR d'un disque dur sur un autre disque, remplacera la table des partitions du second disque par celle du premier. Il y a de fortes chances que votre second disque soit alors illisible. La seule exception à cette règle concerne le cas où les deux disques durs (SDCard dans notre cas) sont les mêmes ainsi que leur partitionnement.
Dans l'exemple qui suit, on sauve le MBR de la SDCard mmcblk0 dans un fichier nommé boot.mbr à l'aide de la commande dd :
dd if=/dev/mmcblk0 of=boot.mbr bs=512 count=1
On le restaure de cette manière : (boot.mbr est le fichier qui a été sauvegardé ci-dessus)
dd if=boot.mbr of=/dev/mmcblk0 bs=512 count=1
Pour ne sauver que le programme et le désassembler :
dd if=/dev/mmcblk0 of=pg.mbr bs=1 count=440
objdump -D -b binary -mi386 -Maddr16,data16 pg.mbr
Remarque : si la table de partition a changé, on peut très bien ne recharger que les 446 premiers octets du MBR (en indiquant count=1 bs=446
).
Restauration de la SDCard
Notre procédure ne touche pas aux partitions, mais uniquement aux octets qui sont fréquement corrompu sur le secteur boot. Utilisez Hxd pour ecrire sur le secteur boot de la sdcard
Allez chercher votre SDCard et décocher "Ouvrir en lecture seule"
Ma carte SD est ici (G:)
ouvrez le fichier boot-sector.img (disponible dans la zone de téléchargement : https://outils.electroniciens.cnrs.fr/rde/browser.php?dir=972 )
Sélectionnez tout ( CTRL + A )
Copiez ( CTRL + C )
Allez dans la fenetre de votre SDCard et verifiez que le curseur est bien à l'offset 0x00000000
Collez ( CTRL + V )
Enregistrez la modification ( CTRL + S )
Maintenant votre SDCard ne fera plus un ecran noir et une LED Rouge Fixe.
A votre boot !