Deux méthodes pour réparer une installation Linux effacée sur disque gpt

La démonstration est réalisée avec un PC virtuel sous W10 installé en UEFI sur disque gpt. La situation étant assez courante, autant en faire une simulation.

Attention: si des données ont été écrites sur telle ou telle partition, la récupération ne sera plus possible. On récupérera des partitions incomplètes, et le système ne fonctionnera plus.

1. Situation de départ : une Linux Mint 17.1 installée sur disque gpt uefi

depart

On constate que l’installation est faite en uefi (une partition efi contient le drapeau boot). Le nombre de partitions principales est de six. Le disque est au format gpt. On va donc casser tout ça pour la démonstration.

nlle-table

Avec gparted, présent sur le live-cd Linux, je crée une nouvelle table de partitions ms-dos (autrement dit mbr). Je vais y placer 2 partitions NTFS de taille aléatoire :

formatage_ntfsLe résultat est le suivant : mon disque est passé en mode ms-dos. Mon Linux est complètement passé à la trappe. Comment réparer tout ça ?

2. Récupération des partitions avec Minitool Partition Wizard disque

C’est un LiveCD qu’on trouve au format iso ici : https://www.partitionwizard.com/partition-wizard-bootable-cd.html

Il suffira de décompresser le contenu de l’image iso de la version 64 bits sur une clé usb formatée en fat32 et rendue bootable, avec Rufus par exemple, ou manuellement pour pouvoir démarrer dessus en mode uefi.

  • Voir ce lien pour créer la clé bootable depuis Windows.
  • Depuis Linux, il suffira de formater la clé en fat32, d’y décompresser l’iso, et d’ajouter le drapeau boot depuis Gparted à la partition concernée.

Une fois la clé faite et le démarrage réussi, on aboutira à un bureau de ce genre :

convertgpt

La première chose que nous allons faire, c’est de reconvertir le disque au format gpt. L’onglet disk contient une option de conversion. Il suffit bêtement de l’appliquer pour que le disque soit converti, sans perte de donnée. On voit sur l’image précédente le résultat de cette conversion.

A ce stade, on va pouvoir faire une recherche des partitions effacées grâce à l’option « restore partition« . Une première recherche rapide n’aboutissant qu’à afficher mes partitions NTFS, on va faire une recherche approfondie :

deep_search

Le logiciel a trouvé une vingtaine de partitions… comment choisir ? Je constate que la seconde partition formatée en ext4 contient 4,65 Gib de fichiers. C’est ce qu’occupe le système Linux (une vérification du contenu le confirme). En la sélectionnant, on va griser automatiquement  toutes les partitions qui ne sont pas en accord avec ce choix. Il ne reste plus qu’à chercher parmi celles qui restent les partitions manquantes (on peut également se référer aux secteurs de démarrage et de fin pour être sûr que c’est cohérent) :

recup_parts

Les choix sur l’image précédente créent un ensemble cohérent. Il ne reste qu’à valider tout ça. Le seul bémol, c’est que Partition Wizard ne parvient pas à retrouver la partition efi formatée en fat32.

Ça signifie 3 choses :

  • Il va falloir la recréer.
  • Il va falloir réinstaller grub2 pour que Linux Mint puisse démarrer.
  • Il faudra modifier une ligne dans le fichier /etc/fstab pour supprimer une erreur de montage de partition.

3. Récupération des partitions avec Gdisk et Testdisk

L’inconvénient de la première réparation est d’obliger à l’utilisation d’un outil externe au liveCD Linux. On peut trouver des outils purement Linux qui aboutissent au même résultat. Partons de la même situation : une installation Linux a été effacée par un formatage indésirable :

formatage_ntfs

3.1. Passage de la partition en gpt avec gdisk

On va commencer par supprimer nos deux partitions inutiles depuis gparted, afin qu’elles ne nous gênent pas (gdisk peut renvoyer un message d’erreur si les partitions sont mal positionnées).  Puis on installe le premier outil nécessaire : gdisk (il est préinstallé par défaut sur les dernières versions) .

Si ce n’est pas le cas, on s’assure que le PC est connecté à Internet. On installe et on lance gdisk pour convertir le disque /dev/sda.

sudo apt-get install gdisk
sudo gdisk /dev/sda

On convertit simplement le disque en gpt par la lettre W. Gdisk convertit le disque sans problème. Le tout est résumé sur cette image, avec une vérification via sudo parted -l :

installgdisk

3.2. Récupération des partitions via testdisk.

On commence par l’installer :

sudo apt-get install testdisk
sudo testdisk

On choisis les options suivantes :

- No Log
- Disk /dev/sda
- [EFI-GPT]
- Analyse 
- Quick Search

quicksearch

Comme avec Minitool Wizard, Testdisk ne voit que les partitions NTFS en mode quick search. On va donc passer par un Deeper Search en faisant « entrée » (il peut prendre pas mal de temps). Le résultat est un peu obscur : on obtient une liste plutôt longue et peu parlante de fichiers MS data.

deeper1

Les deux premières lignes sont écartées d’office, puisque ce sont mes partitions NTFS. A partir de la 3 ième la lettre P permet de voir si des fichiers sont présents. La 4 ième ligne est satisfaisante. Mon Linux semble bien être là.

deeper2

Nous la sélectionnons avec les flèches gauche et droite pour lui attribuer la lettre P (elle passe en vert). Cette partition se termine au secteur 13881343. Inutile de vérifier tout ce qui commence avant ce secteur, car nous risquerions un chevauchement de partitions. PgUP /PgDn permet de chercher dans la liste une partition commençant après cette zone :

deeper3
La partition suivante contient elle aussi des fichiers… c’est mon /home. Et on procède ainsi de suite jusqu’à la fin du disque. J’ai retrouvé une nouvelle fois 5 partitions.

deeper4

Il ne reste plus qu’à finaliser par « entrée » et à écrire avec « w » qu’on confirme par « y« .. Nous pouvons contrôler le résultat et vérifier l’absence de chevauchement. Testdisk nous demande de redémarrer.

résultat

A nouveau, nous n’avons pas pu récupérer la partition efi. Nous avons donc les trois mêmes opérations à faire pour finaliser la réparation. 

4. Réparation du démarrage de Grub (pour les deux cas)

Pour simplifier les choses, on va utiliser le logiciel SuperGrub2 Disk pour faire démarrer notre Linux.

On pourrait le faire en chrootant depuis le live-cd (ce qui exclurait tout logiciel tiers): cette technique est expliquée ici.

Le démarrage en UEFI conduit à ces fenêtres. On sélectionne Everything, et pour ne pas se compliquer la vie, on choisit le premier noyau valable.

SD2D_1 SD2D_2

Le système se lance en mode texte jusqu’à un message d’erreur évoquant un problème de montage de partition. On choisit « S » pour ignorer le problème. On aboutit au bureau de notre Mint installée. On fait un état des lieux avec Gparted:

gparted_sansefi9

On va créer sur l’espace libre en début de disque une partition quon formate en fat32. On lui ajoute le drapeau boot (par clic droit) pour qu’elle soit reconnue comme étant « système ».

Avec les Ubuntu et Mint récents, on peut même cocher « esp » pour la rendre purement efi.

gparted_avecefi

On va pouvoir réparer notre démarrage de Mint en réécrivant les fichiers grub nécessaires :

sudo mount /dev/sda1 /boot/efi
sudo grub-install
sudo update-grub

On a monté la partition efi dans le dossier /boot/efi, on réinstalle Grub et on le met à jour.

grub-install

Tout semble s’être bien passé. Notre Linux va être capable de démarrer tout seul. En effet:

fini

Un message d’erreur prévisible informe qu’une partition ne peut être montée : il s’agit de notre partition efi qui a été recréée et dont l’UUID a changé. On passe outre en tapant S une nouvelle fois: la commande blkid va nous donner l’UUID de la nouvelle partition :

essai@essai-virtual-machine ~ $ blkid
/dev/sda1: UUID="906f0d8c-fdf1-4272-8b48-61ce861a5e02" TYPE="ext4" 
/dev/sda2: UUID="cd4d632a-e2d8-4a09-bfff-be24a86c5fc4" TYPE="ext4" 
/dev/sda3: UUID="48DA70FA3FA92B42" TYPE="ntfs" 
/dev/sda4: UUID="54E19840028C0E15" TYPE="ntfs" 
/dev/sda5: UUID="a9193ae0-cd72-4a4a-9ad5-7886916f0b06" TYPE="ext4" 
/dev/sda6: UUID="FF4B-2CC3" TYPE="vfat" 
/dev/sr0: LABEL="ISOIMAGE" TYPE="iso9660" 
essai@essai-virtual-machine ~ $

On édite le fichier fstab pour le modifier via la commande sudo gedit /etc/fstab . Il ne reste plus qu’à remplacer l’UUID erronée par la nouvelle.

fstab

Notre Linux va fonctionner dorénavant tout à fait normalement. Le résultat final :

final