Convertir une table de partition GPT en MBR

Rédigé par Alexandre le 2014-10-01

#debian #loisir

A jouer les apprentis sorcier, parfois, on fait des bêtises... En effet, il y a quelques mois maintenant, j'ai préparé un modèle de machine virtuelle sous Debian Wheezy pour le boulot. Souhaitant bénéficier d'une grande souplesse, je mets en place une table de partition GPT sur laquelle je crée une partition de swap et une racine.

Plus tard, après avoir déployé moult machines virtuelles, un collègue redimmensionne la partition racine d'un serveur pendant mes vacances ; c'est le drame. Impossible de redémarrer le serveur, grub est cassé ! Mon collègue trouve une parade en ajoutant un drapeau sur la partition de swap, ce qui la rend maintenant indisponible.

A mon retour de vacances, je me penche sur une vraie solution : installer grub sur une table de partition GPT. La gueule enfarinée, j'essaie sur une autre machine, dans le même cas, de redimmensionner et de réinstaller grub. Evidemment, ça ne fonctionne pas. Quelques pages de documentation plus tard, je finis par me dire que le plus simple est peut-être de changer le format de la table de partition.

Pour procéder à la conversion directement depuis le système du serveur, j'utilise SuperGrubDisk pour démarrer sur mon système.

Une fois sur le système, il nous faut un outil de gestion des partitions qui gère les tables GPT, gdisk :

sudo apt-get install gdisk

Maintenant, utiliser gdisk pour convertir la table de partition GPT en MBR :

sudo gdisk /dev/sda

Les commandes à passer sont en gras :

GPT fdisk (gdisk) version 0.8.5

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.

Command (? for help): p
Disk /dev/sda: 10485760 sectors, 5.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): F75FA640-062F-45C1-B0B3-5253150951C0
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 10485726
Partitions will be aligned on 2048-sector boundaries
Total free space is 223165 sectors (109.0 MiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048          499711   243.0 MiB   8200
   2          499712        10264575   4.7 GiB     0700

Command (? for help): r

Recovery/transformation command (? for help): g

MBR command (? for help): w

Converted 2 partitions. Finalize and exit? (Y/N): <strong>y</strong>
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot.
GPT data structures destroyed! You may now partition the disk using fdisk or
other utilities.

Avant de redémarrer, il est préférable de réinstaller grub (valider simplement les champs, ne rien modifier) :

sudo dpkg-reconfigure grub-pc && reboot

Une fois redémarrée, il faut impérativement changer le type du système de fichiers de la partition racine :

sudo fdisk /dev/sda

Les commandes sont en gras :

Commande (m pour l'aide): p

Disque /dev/sda : 5368 Mo, 5368709120 octets
166 têtes, 62 secteurs/piste, 1018 cylindres, total 10485760 secteurs
Unités = secteurs de 1 * 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets
Identifiant de disque : 0x00000000

Périphérique Amorce  Début        Fin      Blocs     Id  Système
/dev/sda1            2048      499711      248832   82  partition d'échange Linux / Solaris
/dev/sda2          499712    10264575     4882432    7  HPFS/NTFS/exFAT

Commande (m pour l'aide): t
Numéro de partition (1-4): 2
Code Hexa (taper L pour lister les codes): 83
Type système de partition modifié de 2 à 83 (Linux)

Commande (m pour l'aide): w
La table de partitions a été altérée.

Appel de ioctl() pour relire la table de partitions.

Attention : la table de partitions n'a pas pu être relue : erreur 16 : Périphérique ou ressource occupé.
Le noyau continue à utiliser l'ancienne table. La nouvelle sera utilisée
lors du prochain démarrage ou après avoir exécuté partprobe(8) ou kpartx(8).
Synchronisation des disques.

Dans certains cas, la partition de swap ne suit pas, il faut donc la recréer et changer son UUID dans /etc/fstab. Je ne détaille pas cette partie qui peut être réalisée via SysRescueCD et/ou gparted.

Moralité de l'histoire, il vaut mieux avoir un disque système en MBR et, au besoin, des disques additionnels en GPT.