Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
mbr [Le 15/04/2011, 15:38]
Nasman
mbr [Le 06/01/2023, 14:09] (Version actuelle)
176.142.4.73 [Qu'est ce que le mbr et comment y accéder]
Ligne 1: Ligne 1:
-{{tag> tutoriel ​BROUILLON}}+{{tag> tutoriel ​ebr}}
 ---- ----
  
 ====== Qu'est ce que le mbr ? ====== ====== Qu'est ce que le mbr ? ======
  
-Ce tutoriel explique ce qu'est le mbr d'un disque ou d'un média amovible, son organisation et à quoi il sert+Ce tutoriel explique ce qu'est le [[wpfr>​Master_boot_record|MBR]] ​d'un disque ou d'un média amovible, son organisation et à quoi il sert.\\ 
 + <​note tip>​**Voir [[GPT]] pour les HDD > 2To**</​note>​
  
 ===== Pré-requis ===== ===== Pré-requis =====
Ligne 10: Ligne 11:
   * Disposer des [[:​sudo|droits d'​administration]]   * Disposer des [[:​sudo|droits d'​administration]]
   * Connaitre la numération hexadécimale.   * Connaitre la numération hexadécimale.
 +  * Utiliser la calculatrice gcalctool en mode programmation (pour faire facilement des conversions hexadécimal/​décimal)
    
 ===== Qu'est ce que le mbr et comment y accéder ===== ===== Qu'est ce que le mbr et comment y accéder =====
Ligne 20: Ligne 22:
  
  
-Compte tenu du risque encouru, son accès ne peut s'​effectuer qu'en mode superutilisateur (sudo). ​\\ +Compte tenu du risque encouru, son accès ne peut s'​effectuer qu'en mode superutilisateur (sudo).
 \\ \\
 Pour y accéder nous aurons besoin de la fonction [[:dd|dd]]. Cette fonction permet d'​accéder directement à un contenu présent sur le disque en s'​affranchissant de tout système de fichiers. Pour y accéder nous aurons besoin de la fonction [[:dd|dd]]. Cette fonction permet d'​accéder directement à un contenu présent sur le disque en s'​affranchissant de tout système de fichiers.
  
-Le disque est considéré comme un espace linéaire constitué de blocs de données, appelés secteurs, de 512 octets chacun, et dont la position est repérée ​par la LBA (Logical block addressing). +Le disque est considéré comme un espace linéaire constitué de blocs de données ​successifs, appelés secteurs, de 512 octets chacun, et dont la position est repérée ​son rang dans cet espace, à partir de 0 (adresse du MBR). Cette méthode d'​adressage est nommée ​LBA (Logical block addressing). 
-La première adresse commence en zéro (mbr) et la dernière ​(pas forcément utilisablepeut être calculée en divisant la taille du disque en octets par 512 et en retirant 1.+La dernière ​adresse, qui n'​est ​pas forcément utilisablepeut être calculée en divisant la taille du disque en octets par 512 et en retirant 1.
  
 \\ \\
Ligne 89: Ligne 91:
  
 \\ \\
-Au milieu de tout ce charabia :-( on distingue quelques messages - en fait des messages d'​erreurs - qui pourraient être affichés en cas de détection de problèmes. ​+Au milieu de tout ce charabia :-( on distingue quelques messages - en fait des messages d'​erreurs - qui pourraient être affichés en cas de détection de problèmes.
 \\ \\
 <note tip>On remarque que nous sommes dans la situation où l'​amorceur Grub est dans le mbr (chaine faisant référence à grub)</​note>​ <note tip>On remarque que nous sommes dans la situation où l'​amorceur Grub est dans le mbr (chaine faisant référence à grub)</​note>​
Ligne 101: Ligne 103:
 La première partie, adresses comprises entre **000 et 1b7**, correspond à la partie exécutable du mbr. Elle est chargée en mémoire vive (ainsi que le reste du mbr) lorsque le PC démarre ("​boote"​) sur ce disque. Elle a pour fonction de vérifier la validité de la table des partitions et de rechercher une partition amorçable du disque. La première partie, adresses comprises entre **000 et 1b7**, correspond à la partie exécutable du mbr. Elle est chargée en mémoire vive (ainsi que le reste du mbr) lorsque le PC démarre ("​boote"​) sur ce disque. Elle a pour fonction de vérifier la validité de la table des partitions et de rechercher une partition amorçable du disque.
  
-<​note>​Détailler cette partie</​note>​+<​note>​Voir par ici une analyse détaillée de [[:​la_partie_executable_du_mbr|la ​partie ​executable du mbr]]</​note>​
 \\ \\
  
Ligne 109: Ligne 111:
 Entre **1b8 et 1bb** se trouve l'​identifiant du disque, soit les octets **5d 52 5d 52**, que l'on peut avoir par exemple en faisant un<​code>​sudo fdisk -lu</​code>​ Entre **1b8 et 1bb** se trouve l'​identifiant du disque, soit les octets **5d 52 5d 52**, que l'on peut avoir par exemple en faisant un<​code>​sudo fdisk -lu</​code>​
 \\ \\
-<​code>​Identifiant de disque : 0x525d525d</​code><​note tip>​L'​ordre des octets est inversé du fait du codage ​"little endian" ​(on commence par mettre les octets de "poids faible"​ avant les octets de "poids fort"​).+<​code>​Identifiant de disque : 0x525d525d</​code><​note tip>​L'​ordre des octets est inversé du fait du codage ​[[wpfr>​Endianness|little endian]] (on commence par mettre les octets de "poids faible"​ avant les octets de "poids fort"​).
 </​note>​ </​note>​
  
Ligne 121: Ligne 123:
  
 <note important>​Cette table commençant à l'​adresse **1be** (446) et se terminant en **1fd** (509) contient 64 octets qui correspondent aux quatre entrées de 16 octets des 4 partitions principales - c'est d'​ailleurs pour cela que les partitions principales sont limitées à 4 dans les tables de type msdos.</​note>​ <note important>​Cette table commençant à l'​adresse **1be** (446) et se terminant en **1fd** (509) contient 64 octets qui correspondent aux quatre entrées de 16 octets des 4 partitions principales - c'est d'​ailleurs pour cela que les partitions principales sont limitées à 4 dans les tables de type msdos.</​note>​
 +<note tip>Dans le cas d'un partitionnement de type GPT, le mbr est un mbr protector qui ne contient qu'une unique partition de type ee commençant à la LBA 1.\\ 
 +Le code présent dans le mbr n'est pas utilisé en cas de boot en mode UEFI 
 +</​note>​
 \\ \\
-Cette table des partitions est donc ici (en séparant par groupes d'​octets)+Cette table des partitions est donc ici (en affichant à partir de l'​adresse 1be pour avoir une ligne par partition puis en séparant par groupes d'​octets)
 \\ \\
  
Ligne 135: Ligne 139:
 La première ligne qui correspond à la première entrée concerne sda1 (qui n'est pas forcément la partition au début du disque). La première ligne qui correspond à la première entrée concerne sda1 (qui n'est pas forcément la partition au début du disque).
 \\ \\
-Elle est marquée comme bootable - l'​étoile qui apparait lors d'un fdisk du fait que le premier octet a la valeur hexa **80**. Si la partition n'est pas marquée comme amorçable alors on aura la valeur **00**.+Elle est marquée comme bootable - l'​étoile qui apparait lors d'un fdisk du fait que le premier octet a la valeur hexa **80**. Si la partition n'est pas marquée comme amorçable alors on aura la valeur **00**.
  
 \\ \\
Ligne 141: Ligne 145:
 Le groupe des 3 octets qui suivent est une réminiscence des temps anciens ;-) où le bios ne reconnaissait que le système "​tête",​ "​secteur"​ et "​cylindre"​. Il indique le début de la partition. Le groupe des 3 octets qui suivent est une réminiscence des temps anciens ;-) où le bios ne reconnaissait que le système "​tête",​ "​secteur"​ et "​cylindre"​. Il indique le début de la partition.
 \\ \\
-La tête est codée sur 8 bits et peut prendre une valeur entre **0 et fe** (entre 0 et 254 en décimal) - ici 0+La tête est codée sur 8 bits et peut prendre une valeur entre **0 et fe** (entre 0 et 254 en décimal) - ici 1
 \\ \\
 Le secteur est codé sur 6 bits et peut prendre une valeur entre **1 et 3f** (entre 1 et 63, soit 63 secteurs par piste au maximum) - ici 1 Le secteur est codé sur 6 bits et peut prendre une valeur entre **1 et 3f** (entre 1 et 63, soit 63 secteurs par piste au maximum) - ici 1
 \\ \\
-Le cylindre est codé sur 10 bits (les deux bits de "poids fort" sont pris sur ceux du secteur), soit entre **0 et 3ff** (0 et 1023) - ici 0+Le cylindre est codé sur 10 bits (les deux bits de "poids fort" sont les bits 6 et 7 de l'​octet précédent), soit entre **0 et 3ff** (0 et 1023) - ici 0
  
 \\ \\
 \\ \\
-L'​octet suivant code le système de fichier de la partition, ici le **07** signifie ntfs (j'ai un dual boot avec Windows :-?), les autres valeurs couramment rencontrées sont :\\+L'​octet suivant code le [[wpfr>​Partition_de_disque_dur|système de fichier de la partition]], ici le **07** signifie ntfs (j'ai un dual boot avec Windows :-?), les autres valeurs couramment rencontrées sont :\\
 **05, 0f** : étendue\\ **05, 0f** : étendue\\
 **0b** : fat32\\ **0b** : fat32\\
Ligne 163: Ligne 167:
 \\ \\
  
-Nous arrivons au plus intéressant car c'est ici que sont codés le début et la taille des partitions dans le système LBA. +Nous arrivons au plus intéressant car c'est ici que sont codés le début et la taille des partitions dans le système LBA (Logical block addressing)
-Le premier groupe de 4 octets correspond à l'​emplacement du début de la partition (en hexadécimal et en "little endian") et la taille (même format).+Le premier groupe de 4 octets correspond à l'​emplacement du début de la partition (en hexadécimal et en [[wpfr>​Endianness|little endian]]) et la taille (même format).
 \\ \\
  
Ligne 181: Ligne 185:
 L'​espace qui suit la partition est donc donné par : L'​espace qui suit la partition est donc donné par :
 \\ \\
-//début espace suivant = début partition + taille partition//+\\ 
 +**//début espace suivant = début partition + taille partition//**
  
-<note tip>​Souvent les partitions principales commencent au début d'un cylindre. Pour une géométrie classique, les pistes font 63 secteurs et le disque possède 255 têtes, ce qui fait une taille de cylindre de 63x255=16065 secteurs.+<note tip>​Souvent les partitions principales commencent au début d'un cylindre. Pour une géométrie classique, les pistes font 63 secteurs et le disque possède ​//au maximum// ​255 têtes, ce qui fait une taille de cylindre de 63x255=16065 secteurs.
 La première partition échappe à cette règle et commence au début de la deuxième tête du premier cylindre, soit à l'​adresse 63 (décimal) La première partition échappe à cette règle et commence au début de la deuxième tête du premier cylindre, soit à l'​adresse 63 (décimal)
 </​note>​ </​note>​
-<note tip>Avec l'​arrivée des disques de grande taille ​(et peut être de seven), il semble que la géométrie (virtuelle) ​des disques ​ait changé ​et la première partition commence souvent à l'​adresse 2048.</​note>​ +<note tip>Avec l'​arrivée des disques de grande taille et des disques ​plus performants comme les ssd, cette antique géométrie tend à disparaître ​et la première partition commence souvent à l'​adresse 2048. Les autres partitions commencent également à un multiple de 2048 secteurs assurant un alignement de ces dernières au Mio.</​note>​ 
-<​note>​Le système des tables des partitions à base de secteurs de 512 octets, limite la taille des disques à 2 Tio. Il est possible que les nouveaux schémas des partitions supposent des secteurs ​de plus grande taille ​avec une structure virtuelle de disque différente</​note>​+<​note>​Le système des tables des partitions à base de secteurs de 512 octets, limite la taille des disques à 2 Tio. Pour les disques ​de plus grande taille ​il faudra abandonner les tables des partitions msdos au profit des tables gpt.</​note>​
 \\ \\
 ==== Le nombre magique ==== ==== Le nombre magique ====
  
 \\ \\
-C'est la "​marque"​ d'un média amorçable, elle est donnée par la présence des deux derniers octets du mbr qui correspond à la valeur **aa55**.+C'est la "​marque"​ d'un média amorçable, elle est donnée par la présence des deux derniers octets du mbr (aux adresses 1fe et 1ff, soit 510 et 511 en décimal) ​qui correspond à la valeur **aa55**.
 Vous allez dire que ça ne va pas car c'est **55** et **aa** que vous avez. Mais je rappelle que les valeurs numériques sont codées sous la forme little endian et donc l'​octet de poids faible **55** est placé avant l'​octet de poids fort **aa**. 8-) Vous allez dire que ça ne va pas car c'est **55** et **aa** que vous avez. Mais je rappelle que les valeurs numériques sont codées sous la forme little endian et donc l'​octet de poids faible **55** est placé avant l'​octet de poids fort **aa**. 8-)
  
Ligne 236: Ligne 241:
 \\ \\
    
-  * **(fr)** [[http://​fr.wikipedia.org/​wiki/​Master_boot_record]] +  * **(fr)** [[wpfr>Master_boot_record|Master boot record sur Wikipédia]] 
-  * **(fr)**[[http://​fr.wikipedia.org/​wiki/​Partition_de_disque_dur]] +  * **(fr)**[[wpfr>Partition_de_disque_dur|Les partition de disque dur sur Wikipédia]] 
-  * [[http://​forum.ubuntu-fr.org/​viewtopic.php?​id=390336]] sur le forum ubuntu-fr+  * [[https://​forum.ubuntu-fr.org/​viewtopic.php?​id=390336|Forum ubuntu-fr]] 
 +  * **(fr)**[[wpfr>​Logical_block_addressing|Adressage logique ​sur Wikipédia]]
  
  
  • mbr.1302874699.txt.gz
  • Dernière modification: Le 18/04/2011, 14:58
  • (modification externe)