storiq logo

La traînée de poudre

Le blog StorIQ

 

Lundi, 09 novembre 2015

Restaurer une table de partition GPT corrompue avec parted

Admettons que (suite à une coupure de courant, un bloc de disque dur défectueux, une erreur de manipulation ou autre) que votre système ne démarre pas, parce que la table de partition est corrompue. Le problème peut se manifester de plusieurs façons, par exemple le chargeur de démarrage GRUB reste coincé sur “Loading GRUB stage 1.5”, ou bien parfois le chargeur de démarrage parvient à charger le noyau, mais celui-ci s’arrête avec “No root found”, puis vous lâche dans le Busybox de l’initrd; après quoi la commande cat /proc/partitions renvoie quelque chose comme:

major minor  #blocks  name

   8       16  488386584 sda

Dépité, vous démarrez sur un système de secours et vous lancez parted sur votre disque:

parted /dev/sda
GNU Parted 3.2
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print                                                            
Error: The primary GPT table is corrupt, but the backup appears OK, so that will be used.
OK/Cancel? OK                                                             
Model: ATA ST3500630AS (scsi)
Disk /dev/sda: 500GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size     File system     Name     Flags
 1      1049kB  24,7GB  24,7GB   ext4            root
 2      24,7GB  25,8GB  1096MB   linux-swap(v1)
 5      24,7GB  500GB  1096MB    xfs

(parted)                                                                  

Vous voyez bien que parted utilise la copie de secours de la table de partition, mais vous avez beau chercher dans la documentation, aucune commande ne permet de réécrire cette table! Heureusement, la solution est simple: il faut modifier la table de partition. Pour cela il suffit de créer une partition bidon, qui commence et qui finit au même bloc, le dernier, comme ceci:

(parted) mkpart                                                           
Partition name?  []? test
File system type?  [ext2]?                                                
Start? -1                                                                 
End? -1                                                                   

On vérifie le résultat:

(parted) print                                                               
Model: ATA ST3500630AS (scsi)
Disk /dev/sda: 500GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size     File system     Name     Flags
 1      1049kB  24,7GB  24,7GB   ext4            root
 2      24,7GB  25,8GB  1096MB   linux-swap(v1)
 5      24,7GB  500GB  1096MB    xfs
 3      500GB   500GB  49,2kB    ext2            test
 
Au passage, remarquez qu’il n’y a plus de message d’erreur… Maintenant supprimons la partition inutile ( attention, interdiction de se tromper! ):
(parted) rm 3                                                             
(parted) q                                                                
Information: You may need to update /etc/fstab.

Et voilà, sauvé!

posté à: 13:50 permalink