La machine était une nouvelle installation d’Ubuntu 18.04.1 et utilisait LVM et LUKS lors de l’installation. La machine fonctionnait bien sur le noyau 4.15.0-33-generic.
Le noyau est passé de 4.15.0-33 à 4.15.0-34-generic. Une fois le noyau mis à jour, il ne demande plus de mot de passe LUKS et s’amorce directement vers BusyBox v1.27.2.
Lors du démarrage à partir du noyau plus ancien, LUKS est invité comme d'habitude et la machine peut démarrer correctement. Le problème est lors du démarrage à partir du nouveau noyau.
J'ai essayé d'exécuter fsck à partir d'un liveCD de 18.04. J'ai débloqué le lecteur d'abord puis couru
fsck -f /deb/sda3
Cependant je ne reçois que
fsck from util-linux 2.31.1
et rien d'autre.
Existe-t-il un correctif que je peux exécuter?
Le problème est que /sbin/cryptsetup
n'est pas dans le fichier initramfs /boot/initrd.img-4.15.0-36-generic
.
Vous devez ajouter CRYPTSETUP=y
dans /etc/cryptsetup-initramfs/conf-hook
. Vous devez également ajouter l'option initramfs
dans /etc/crypttab
. Ensuite, vous devez exécuter update-initramfs
, qui résout ce problème.
Solution détaillée:
Lorsque le USB Live Ubuntu est prêt, connectez-vous à Internet (WiFi ou filaire)
Ouvrir un terminal
ubuntu@ubuntu:~$ Sudo su
Recherchez le périphérique de bloc chiffré.
root@ubuntu:~# blkid|grep LUKS
/dev/nvme0n1p3: UUID="4b206e76-1531-48ae-95be-ae0ed7a244c1" TYPE="crypto_LUKS" PARTUUID="21db499d-b87b-41c6-864f-04d1531cb083"
Décrypter l'appareil
root@ubuntu:~# cryptsetup open UUID="4b206e76-1531-48ae-95be-ae0ed7a244c1" nvme0n1p3_crypt
Enter passphrase for /dev/disk/by-uuid/4b206e76-1531-48ae-95be-ae0ed7a244c1:
Liste des périphériques mappés. control
est un fichier utilisé pour envoyer une commande au mappeur de périphérique. nvme0n1p3_crypt
est le périphérique déchiffré. ubuntu--vg-root
est un volume logique LVM du groupe de volumes LVM ubuntu-vg
.
root@ubuntu:~# ls /dev/mapper/*
/dev/mapper/control /dev/mapper/ubuntu--vg-root /dev/mapper/nvme0n1p3_crypt
Créer un point de montage. C'est là que nous allons monter le/de notre système qui ne démarre pas.
root@ubuntu:~# mkdir -p /mnt/ubuntu-root
Monter le volume logique racine
root@ubuntu:~# mount /dev/mapper/ubuntu--vg-root /mnt/ubuntu-root/
Monter des pseudo systèmes de fichiers
root@ubuntu:~# mount -o bind /sys /mnt/ubuntu-root/sys
root@ubuntu:~# mount -o bind /proc /mnt/ubuntu-root/proc
root@ubuntu:~# mount -o bind /dev /mnt/ubuntu-root/dev
Copier les informations DNS
root@ubuntu:~# cp /etc/resolv.conf /mnt/ubuntu-root/etc/
Changer de racine
root@ubuntu:~# chroot /mnt/ubuntu-root/
Mount /boot
, qui contient le fichier initramfs. Cette partition n'est pas cryptée.
root@ubuntu:/# mount /boot/
Installez binwalk (pour voir le contenu du système de fichiers init ram)
root@ubuntu:~# apt update
root@ubuntu:~# apt install binwalk
Trouver l'offset du contenu initramfs gzippé
root@ubuntu:~# binwalk /boot/initrd.img-4.15.0-36-generic | grep gzip
1605632 0x188000 gzip compressed data, from Unix, last modified: 2018-10-18 13:00:32
Le problème est que le système de fichiers initramfs ne contient pas cryptsetup. C'est pourquoi il n'y a pas d'invite de mot de passe LUKS.
root@ubuntu:/# cd /root/
root@ubuntu:~# mkdir initramfs-4.15.0-36-generic
root@ubuntu:~# cd initramfs-4.15.0-36-generic
root@ubuntu:~/initramfs-4.15.0-36-generic# dd if=/boot/initrd.img-4.15.0-36-generic bs=1605632 skip=1 | gunzip | cpio -i
root@ubuntu:~/initramfs-4.15.0-36-generic# ls sbin/cryptsetup
ls: cannot access 'sbin/cryptsetup': No such file or directory
Pour déchiffrer la racine au démarrage, initramfs doit contenir:
sbin/cryptsetup
lib/modules/4.15.0-36-generic/kernel/drivers/md/dm-crypt.ko
Ajoutez l'option initramfs
dans /etc/crypttab
root@ubuntu:/# cat /etc/crypttab
nvme0n1p3_crypt UUID=4b206e76-1531-48ae-95be-ae0ed7a244c1 none luks,discard,initramfs
Ajouter CRYPTSETUP=y
dans /etc/cryptsetup-initramfs/conf-hook
Exécutez update-initramfs
:
root@ubuntu:~# update-initramfs -k 4.15.0-36-generic -c -v &> update-initramfs-4.15.0-36-generic.cryptsetup.log
Maintenant, nous avons cryptsetup
dans initramfs et le module de noyau Linux dm-crypt.ko
aussi:
root@ubuntu:~# grep /sbin/cryptsetup update-initramfs-4.15.0-36-generic.cryptsetup.log
Adding binary /sbin/cryptsetup
root@ubuntu:~# grep dm-crypt.ko update-initramfs-4.15.0-36-generic.cryptsetup.log
Adding module /lib/modules/4.15.0-36-generic/kernel/drivers/md/dm-crypt.ko
Maintenant, lancez update-initramfs, sans -c (nouveau) et sans -v (verbose):
root@ubuntu:~# update-initramfs -k 4.15.0-36-generic -u
Vérifier que le initramfs est réellement correct
root@ubuntu:~# binwalk /boot/initrd.img-4.15.0-36-generic | grep gzip
1605632 0x188000 gzip compressed data, from Unix, last modified: 2018-10-18 14:26:29
root@ubuntu:~# dd if=/boot/initrd.img-4.15.0-36-generic bs=1605632 skip=1 2> /dev/null | gunzip | cpio -t 2> /dev/null |grep sbin/crypt
sbin/cryptsetup
root@ubuntu:~# dd if=/boot/initrd.img-4.15.0-36-generic bs=1605632 skip=1 2> /dev/null | gunzip | cpio -t 2> /dev/null |grep dm-crypt.ko
lib/modules/4.15.0-36-generic/kernel/drivers/md/dm-crypt.ko
Maintenant, redémarrez.