Outils pour utilisateurs

Outils du site


informatique:utiliser_debian_live_pour_reparer_un_probleme_d_initramfs_kernel_panic

Utiliser Debian Live pour réparer un problème de kernel panic

Après une panne de courant, j'ai eu cette erreur :

J'ai trouvé cette solution : https://askubuntu.com/questions/1461061/zstd-compressed-data-is-corrupt-root-filesystem-requires-a-manual-fsck

J'ai téléchargé une Debian Live et je m'apprête à tenter de corriger le problème.

Tout d'abord, mettre le clavier en azerty-be comme expliqué sur le wiki de Debian :

$ sudo dpkg-reconfigure keyboard-configuration
$ sudo service keyboard-setup restart #n'a pas suffit à passer le clavier en azerty-be
$ sudo udevadm trigger --subsystem-match=input --action=change #ça a marché

Identifier la partition à monter

$ lsblk 
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
loop0    7:0    0   2.5G  1 loop /usr/lib/live/mount/rootfs/filesystem.squashfs
                                 /run/live/rootfs/filesystem.squashfs
sda      8:0    0 447.1G  0 disk 
├─sda1   8:1    0   487M  0 part 
├─sda2   8:2    0     1K  0 part 
└─sda5   8:5    0 446.7G  0 part 
sdb      8:16   1  14.6G  0 disk 
├─sdb1   8:17   1     3G  0 part /usr/lib/live/mount/medium
│                                /run/live/medium
└─sdb2   8:18   1   4.7M  0 part 
sr0     11:0    1  1024M  0 rom

C'est bien /dev/sda5 qui est la partition principale.

Monter la partition principale

$ sudo mount /dev/sda5 /mnt
mount: /mnt: unknown filesystem type 'crypto_LUKS'.
       dmesg(1) may have more information after failed mount system call.

Ah ben oui, c'est chiffré.

user@debian:/mnt$ sudo cryptsetup luksOpen /dev/sda5 disque
Enter passphrase for /dev/sda5: 
 
$ lsblk 
NAME                    MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINTS
loop0                     7:0    0   2.5G  1 loop  /usr/lib/live/mount/rootfs/filesystem.squashfs
                                                   /run/live/rootfs/filesystem.squashfs
sda                       8:0    0 447.1G  0 disk  
├─sda1                    8:1    0   487M  0 part  
├─sda2                    8:2    0     1K  0 part  
└─sda5                    8:5    0 446.7G  0 part  
  └─disque              253:0    0 446.6G  0 crypt 
    ├─betula--vg-root   253:1    0 445.7G  0 lvm   
    └─betula--vg-swap_1 253:2    0   980M  0 lvm   
sdb                       8:16   1  14.6G  0 disk  
├─sdb1                    8:17   1     3G  0 part  /usr/lib/live/mount/medium
│                                                  /run/live/medium
└─sdb2                    8:18   1   4.7M  0 part  
sr0                      11:0    1  1024M  0 rom  
 
$ ls /dev/mapper/
betula--vg-root  betula--vg-swap_1  control  disque
 
$ sudo mount /dev/mapper/betula--vg-root /mnt/
 
user@debian:~$ ls /mnt/
bin  boot  dev  etc  home  initrd.img  initrd.img.old  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  snap  srv  sys  tmp  usr  var  vmlinuz  vmlinuz.old

À partir de là, j'ai accès à mes données et à mon disque dur. J'ai des backups de toutes mes données importantes mais à partir de là, je peux au minimum récupérer mes configurations. Mais on va s'arranger pour tout réparer.

Chroot

$ sudo mount --bind /dev/ /mnt/dev/
$ sudo mount --bind /proc/ /mnt/proc/
$ sudo mount --bind /sys/ /mnt/sys/
 
$ sudo chroot /mnt/
root@debian:/# 

On est dedans. C'est comme si j'étais sur mon ordinateur sans qu'il ait bloqué au boot.

Update initramfs

root@debian:/# update-initramfs -u
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
	LANGUAGE = (unset),
	LC_ALL = (unset),
	LANG = "en_US.UTF-8"
    are supported and installed on your system.
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
	LANGUAGE = (unset),
	LC_ALL = (unset),
	LANG = "en_US.UTF-8"
perl: warning: Falling back to the standard locale ("C").
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").

On quitte le chroot et on démonte les partitions :

root@debian:/# exit
$ sudo umount /mnt/dev
$ sudo umount /mnt/proc
$ sudo umount /mnt/sys
$ sudo umount /mnt/

Ce n'était que des warning, je ne pensais pas que ça puisse poser un problème. Mais après avoir quitté le chroot, démonté les partitions et redémarré j'ai toujours l'erreur de départ.

Donc on recommence… Quand on arrive à nouveau dans le chroot, on set les locales :

root@debian:/# export LANG=fr_BE.utf8 
root@debian:/# export LC_ALL=fr_BE.utf8
root@debian:/# export LANGUAGE=fr_BE.utf8
root@debian:/# update-initramfs -u

Et là, on cherche ce qui a manqué… Quand on lance la commande update-initramfs, ça met à jour un fichier dans /boot/. On vérifie ce qu'il y a dedans.

root@debian:/# ls -al /boot/
total 8
drwxr-xr-x  2 root root 4096 26 sep  2024 .
drwxr-xr-x 19 root root 4096 14 mar 20:38 ..

Il n'y a rien dedans… Et en fait, c'est normal. La partition de boot est /dev/sda1 et je ne l'ai pas montée. On sort du chroot, on vérifie :

$ sudo fdisk -l
Disk /dev/sda: 447.13 GiB, 480103981056 bytes, 937703088 sectors
Disk model: SanDisk SSD PLUS
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xaaa66d37
 
Device     Boot   Start       End   Sectors   Size Id Type
/dev/sda1  *       2048    999423    997376   487M 83 Linux
/dev/sda2       1001470 937701375 936699906 446.7G  5 Extended
/dev/sda5       1001472 937701375 936699904 446.7G 83 Linux

On monte /dev/sda1/ :

$ sudo mount /dev/sda1 /mnt/boot/
 
$ ls -al /mnt/boot/
total 144478
drwxr-xr-x  4 root root     1024 Mar 29 19:05 .
drwxr-xr-x 19 root root     4096 Mar 14 19:38 ..
-rw-r--r--  1 root root   259624 Nov  1 04:23 config-6.1.0-27-amd64
-rw-r--r--  1 root root   259624 Nov 22 22:27 config-6.1.0-28-amd64
drwxr-xr-x  5 root root     1024 Jan  2 12:02 grub
-rw-r--r--  1 root root 64437178 Nov 20 18:50 initrd.img-6.1.0-27-amd64
-rw-r--r--  1 root root 66017731 Mar 29 19:05 initrd.img-6.1.0-28-amd64
drwx------  2 root root    12288 Sep 26  2024 lost+found
-rw-r--r--  1 root root       83 Nov  1 04:23 System.map-6.1.0-27-amd64
-rw-r--r--  1 root root       83 Nov 22 22:27 System.map-6.1.0-28-amd64
-rw-r--r--  1 root root  8189888 Nov  1 04:23 vmlinuz-6.1.0-27-amd64
-rw-r--r--  1 root root  8177600 Nov 22 22:27 vmlinuz-6.1.0-28-amd64

Ah ben voilà, là il y a des trucs. On retourne dans le chroot :

$ sudo chroot /mnt/
 
root@debian:/# update-initramfs -u
update-initramfs: Generating /boot/initrd.img-6.1.0-28-amd64
cryptsetup: WARNING: target 'disque' not found in /etc/crypttab

Cette fois, il génère bien un fichier (initrd.img-6.1.0-28-amd64) et ça prend un peu de temps (~30 secondes?). On teste un redémarrage.

J'ai eu une autre erreur au redémarrage…

J'ai ensuite démarré sur le kernel précédent (6.1.0-27) et j'ai relancé la commande :

$ sudo update-initramfs -u
update-initramfs: Generating /boot/initrd.img-6.1.0-28-amd64
informatique/utiliser_debian_live_pour_reparer_un_probleme_d_initramfs_kernel_panic.txt · Dernière modification : 2025/04/05 09:53 de simon