Contents

"Unable to find LVM volume" después de una actualización de kernel

Contents

Esta tarde después de actualizar el kernel de mi Debian Jessie de la versión 3.2 a la 3.9 me he encontrado con que no podía cargar los volúmenes LVM de mi disco duro, mostrándome un bonito “Unable to find LVM volume” después de reiniciar el ordenador y seleccionar el nuevo kernel en Grub 2. El error completo es el siguiente:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
Booting the kernel.
Loading, please wait...
 Volume group “debian” not found
 Skipping volume group debian
Unable to find LVM volume debian/Root
 Volume group “debian” not found
 Skipping volume group debian
Unable to find LVM volume debian/Swap
Gave up waiting for root device. Common problems:
- Boot args (cat /proc/cmdline)
 - Check rootdelay= (did the system wait long enough?)
 - Check root= (did the system wait for the right device?)
- Missing modules (cat /proc/modules; ls /dev)
ALERT! /dev/mapper/debian-Root does not exist. Dropping to a shell!

Después de un buen rato de lectura por Internet me he encontrado con este post, que me ha hecho ver que el problema viene a la hora de cargar el sistema de archivos root, ya que esto está sucediendo antes de que el kernel encuentre el volumen LVM en el sistema, y por lo tanto no puede avanzar.

Llegados a este punto hay que ver qué debemos hacer para posponer un poco esta carga del sistema root hasta que el kernel encuentre el volumen LVM.

Lo primero es conseguir cargar el sistema de forma provisional. Para ello ejecutamos en la shell Busybox  la utilidad vgchange con la que activaremos todos los volúmenes LVM:

1
(initramfs) vgchange -a y

Que nos dará una salida parecida a esta:

1
4 logical volume(s) in volume group “debian” now active

Posteriormente saldremos de la shell:

1
(initramfs) exit

Lo que hará que el proceso de arranque continúe y logre ejecutar INIT que a su vez conseguirá arrancar el sistema.

Con el sistema arrancado abrimos un terminal y vamos proceder a realizar la configuración antes comentada. Primero abrimos la configuración de Grub2:

1
$ sudo nano /etc/default/grub

Y modificamos la línea correspondiente así:

1
GRUB_CMDLINE_LINUX=”rootdelay=0.5”

NOTA: El valor que le asignamos a rootdelay será la cantidad de segundos que esperará en cargar el sistema raíz. A mi me ha funcionado con medio segundo, podemos jugar con el valor, teniendo en cuenta que cuanto más alto sea más tardará el sistema en arrancar.

Después de esto deberemos actualizar los ajustes de Grub2 con:

1
$ sudo update-grub

Ya lo tenemos todo hecho, ahora podemos reiniciar el sistema y comprobar si podemos o no arrancar. De no hacerlo podemos jugar con el valor de rootdelay y aumentarlo para comprobar que realmente el problema venga por ahí, por ejemplo asignándole un valor de 20 para asegurarnos de que el problema viene de ahí.

Una buena lectura rápida para comprender lo que está pasando, es decir, cómo funciona el arranque de GNU/Linux, y en concreto initramfs, puede ser esta.