Ubuntu dual-boot LUKS — dracut et clavier USB au boot
Diagnostiquer et corriger une urgency mode dracut sur un Ubuntu chiffré LUKS en dual-boot : timing USB, modules initramfs, crypttab, et SMART NVMe.
[TUTO-17] Ubuntu dual-boot LUKS — dracut et clavier USB au boot
Objectif
Résoudre le dracut emergency mode sur un Ubuntu 24.04/26.04 chiffré LUKS quand le clavier USB n’est pas prêt au moment du prompt de passphrase.
Symptôme : le boot affiche dracut: FATAL: Failed to decrypt ou passe en emergency mode à la saisie de la passphrase LUKS. Fonctionne au second tentative.
Prérequis
- Ubuntu 24.04 ou 26.04 avec chiffrement LUKS actif
- Accès à un boot de secours (dual-boot, live USB, ou second boot réussi)
smartmontools(installation couverte dans ce tuto)
Étape 1 — Diagnostiquer la cause
# Lire les logs du boot précédent
journalctl -b -1 | grep -E "(dracut|luks|crypt|usb|xhci|hid)" | head -30
# Identifier le timing critique
journalctl -b -1 | grep -E "(xhci|hidraw|input)" | head -10
# Si le timestamp xhci et le prompt LUKS sont à < 1 seconde d'écart :
# → c'est un problème de timing USB, pas de config LUKS
Causes fréquentes à distinguer :
| Symptôme | Cause | Fix |
|---|---|---|
| Clavier ne répond pas au prompt LUKS | USB HID non initialisé à temps | Modules usbhid dans initramfs |
Failed to find device | UUID LUKS incorrect dans crypttab | Vérifier UUID avec blkid |
| Fonctionne uniquement au 2e boot | Race condition xHCI | Même fix modules USB |
| Echec aléatoire | Vieux SSD/HDD lent | Augmenter le timeout crypttab |
Étape 2 — Vérifier crypttab
cat /etc/crypttab
# Format attendu : dm_crypt-0 UUID=xxxx-xxxx none luks,discard
# Vérifier que l'UUID correspond bien à la partition chiffrée
blkid | grep crypto_LUKS
# Comparer les UUID — doivent être identiques
⚠️ Sécurité : l’option
discard(TRIM passthrough) améliore les performances sur NVMe mais révèle au niveau du disque physique quels blocs sont utilisés. Sur un NVMe personnel non partagé, c’est un compromis acceptable et recommandé. Sur un système à haute confidentialité, désactiver TRIM.
Étape 3 — Ajouter les modules USB à dracut
# Créer le fichier de config dracut
sudo tee /etc/dracut.conf.d/usbhid.conf << 'EOF'
# Modules HID USB nécessaires pour le clavier au prompt LUKS
# usbhid : pilote générique USB HID (claviers, souris)
# usbkbd : pilote clavier USB bas niveau (fallback)
# usbmouse : pilote souris USB (bon à avoir)
add_drivers+=" usbhid usbkbd usbmouse "
EOF
⚠️ Piège fréquent : ne pas confondre
add_driversetadd_dracutmodules.add_dracutmodules+=" usb-storage "ajoute le module de stockage USB (clés USB, disques) — complètement différent des pilotes HID clavier/souris.add_driverspour les modules kernel,add_dracutmodulespour les modules dracut.
Régénérer l’initramfs :
# Identifier le kernel actif
uname -r # ex: 6.8.0-57-generic
# Régénérer
sudo dracut --force --verbose /boot/initramfs-$(uname -r).img $(uname -r)
# Vérifier que les modules sont bien inclus
sudo lsinitramfs /boot/initramfs-$(uname -r).img | grep -E "usbhid|usbkbd"
# Attendu : kernel/drivers/hid/usbhid/usbhid.ko.zst ou similaire
Étape 4 — Vérifier la santé du NVMe
Profiter du contexte pour vérifier l’état du disque :
sudo apt install smartmontools -y
sudo smartctl --all /dev/nvme0 | grep -E "(Power_On|Unsafe|Wear|Temperature|Health)"
# Mettre à jour la base de données SMART
sudo update-smart-drivedb
Valeurs à surveiller :
| Attribut | Valeur OK | Valeur préoccupante |
|---|---|---|
| Wear leveling | < 10% | > 80% |
| Unsafe shutdowns | < 5 | > 20 ou en croissance |
| Media errors | 0 | > 0 |
| Temperature | < 50°C | > 70°C |
⚠️ Sécurité : les “unsafe shutdowns” augmentent lors de coupures brutales. Sous Ubuntu avec LUKS, une coupure sans démontage propre peut corrompre le header LUKS. Garder une sauvegarde du header :
sudo cryptsetup luksHeaderBackup /dev/nvme0p3 --header-backup-file luks-header.bakStocker ce fichier hors du disque chiffré.
Étape 5 — Redémarrer et valider
# Reboot et vérifier le boot qui suit
sudo reboot
# Après reboot, confirmer que les modules étaient bien là
journalctl -b 0 | grep -E "(usbhid|luks|dracut.*OK|unlock)" | head -20
# Confirmer l'absence d'emergency mode dans le boot précédent
journalctl -b 0 | grep "emergency" | wc -l
# Attendu : 0
Checklist ☑ :
- crypttab : UUID correct, option
luks,discardprésente -
/etc/dracut.conf.d/usbhid.conf: directiveadd_drivers(pasadd_dracutmodules) -
lsinitramfs: modules usbhid confirmés dans l’initramfs - SMART NVMe : 0 media errors, wear < 10%
- Header LUKS sauvegardé hors du disque chiffré
- Boot suivant : aucun emergency mode
Dépannage
| Problème | Vérification |
|---|---|
| Toujours en emergency mode après fix | journalctl -b -1 | grep dracut — chercher une cause différente |
lsinitramfs ne montre pas usbhid | Vérifier la syntaxe add_drivers+=" usbhid " (espaces autour) |
dracut --force échoue | sudo apt install dracut-core si non installé |
| Autre disque LUKS détecté (conflit VG) | vgscan → noter tous les VG → vgchange -an NOM_VG_INUTILE |
Références
- dracut man page : https://man7.org/linux/man-pages/man8/dracut.8.html
- Ubuntu LUKS docs : https://help.ubuntu.com/community/Full_Disk_Encryption_Howto_2019
- cryptsetup luksHeaderBackup : https://manpages.ubuntu.com/manpages/cryptsetup.8.html
- TUTO-12 — VPS hardening (durcissement Ubuntu)