PROJET AUTOBLOG


Planet-Libre

source: Planet-Libre

⇐ retour index

Cyprien Pouzenc : Restaurer GRUB avec une partition chiffrée séparée

vendredi 18 mai 2018 à 08:24

Logos de GRUB (© Karol Krenski)

Lorsque l'ordinateur ne peut plus démarrer à cause d'un chargeur d'amorçage cassé, il suffit de réparer le-dit chargeur d'amorçage — en l'occurence GRUB, dans le cas qui nous intéresse ici. Classiquement, cela implique de démarrer l'ordinateur sur le Live CD de sa distribution GNU/Linux favorite, de taper quelques commandes dans le terminal, puis de redémarrer. Cela se complique un poil lorsque le système est installé sur plusieurs partitions, potentiellement chiffrées. Voici un petit article bloc-note, pour savoir quoi faire quand la situation se présentera à nouveau sous les orteils de mes mains.

Logos de GRUB (© Karol Krenski)
Logos de GRUB (© Karol Krenski)

Démêlons les fils, LVM2 et LUKS

Je démarre donc l'ordinateur sur un Live CD de Debian GNU/Linux. Une fois passées les quelques étapes cosmétiques — à savoir la sélection d'une disposition de clavier française et l'installation des pilotes non-libres de la carte wifi pour avoir une connexion Internet — je peux m'attaquer au vif du sujet.

Dans ce cas précis, le disque dur contient trois partitions : /dev/sda1 pour /boot/efi, /dev/sda2 pour /boot et /dev/sda3 comme groupe de volumes logiques LVM2, chiffré avec LUKS — et qui contient, notamment, la partition racine. Afin de gérer LVM2 et LUKS, il faut commencer par installer les paquets nécessaires sur le système autonome du Live CD. Les étapes à suivre sont énoncées ci-dessous.

Se connecter en tant que super-utilisateur :

su -

Mettre à jour la liste des paquets :

apt update

Installer les paquets lvm2 et cryptsetup :

apt install lvm2 cryptsetup

Charger le module noyau dm-crypt utile au chiffrement des volumes :

modprobe dm-crypt

Déverrouiller et charger la partition chiffrée :

cryptsetup luksOpen /dev/sda3 luks_sda3

Il est maintenant possible de trouver les groupes de volumes LVM2 présents :

vgscan

Lequel nous répond :

Found volume group "portable-vg" using metadata type lvm2

J'active donc le groupe indiqué, afin de pouvoir accéder aux volumes qu'il contient :

vgchange -a y portable-vg

Pour trouver les-dits volumes :

lvscan

Qui nous répond à son tour :

ACTIVE            '/dev/portable-vg/root' [107,12 GiB] inherit
ACTIVE            '/dev/portable-vg/swap_1' [3,93 GiB] inherit

Le groupe contient donc deux volumes, à savoir la racine du système et une partition d'échange — qui est passablement inutile dans le cadre de cet article. Information intéressante s'il en est, le volume de la racine est accessible sur /dev/portable-vg/root.

Sus au chroot !

Il est maintenant possible de procéder à la restauration — désormais classique — de GRUB. Cela commence par la création d'un point de montage :

mkdir /mnt/chroot

Sur lequel monter le volume de la racine :

mount /dev/portable-vg/root /mnt/chroot/

Ainsi que quelques partitions spéciales du disque autonome :

mount --bind /dev /mnt/chroot/dev
mount -t proc /proc /mnt/chroot/proc
mount -t sysfs /sys /mnt/chroot/sys

Enfin, plongeons la tête dans le chroot :

chroot /mnt/chroot

Désormais, attention les doigts, toute opération prendra effet sur le disque à récupérer, non-plus sur le système autonome du Live CD. Finie la rigolade. À noter que les partitions /dev/sda1 et /dev/sda2 n'ont pas été montées précédemment. Si cela avait été le cas, le système chrooté aurait eu l'impression qu'il s'agissait d'une seule et unique partition, ce qui n'est évidemment ici pas l'ombre du reflet de la réalité. Et cela aurait posé problème lors de la configuration de GRUB. Ce n'est que maintenant, une fois entré dans le chroot, qu'il faut monter ces partitions :

mount /dev/sda2 /boot
mount /dev/sda1 /boot/efi

Pour enfin, objectif ultime, réparer ce foutu GRUB :

update-grub
grub-install /dev/sda

Pour terminer proprement le travail avant de quitter l'usine, on sort du chroot et on démonte toutes les partitions :

exit
umount /mnt/chroot/boot/efi
umount /mnt/chroot/boot
umount /mnt/chroot/dev
umount /mnt/chroot/proc
umount /mnt/chroot/sys
umount /mnt/chroot

Puis on redémarre l'ordinateur en croisant les narines :

reboot

Article sous licence Creative Commons BY-SA 3.0 France.

Gravatar de Cyprien Pouzenc
Original post of Cyprien Pouzenc.Votez pour ce billet sur Planet Libre.