Restaurer GRUB avec une partition chiffrée séparée
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.
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.