Tanglu de Aequorea a Bartholomea – System not start
Al actualizar Tanglu me encontré con un problema gordo, el sistema no iniciaba. Intentaba montar /usr para seguir cargando pero como no podía, se paraba y me daba una shell para que lo arreglase.
ALERT! /dev/mapper/hostlocal-usr does not exist. Dropping to a shell! (initramfs) |
Mientras averiguaba que había pasado recargue con una copia de seguridad que hice con Clonezilla. Siempre hago una copia de seguridad en estos casos para evitar tirarme de los pelos si llega el desastre.
Porque ocurre esto:
Para que se de este problema necesitas cumplir estos requisitos:
- /usr separado en una partición o volumen diferente del raiz
- Utilizar volúmenes lógicos (lvm)
- Sistema de inicio con systemd
Systemd es muy dependiente de las aplicaciones que están en /usr y si no está disponible durante el arranque, no se inicia el sistema.
Actualmente los sistemas Linux en el arranque primero se carga el Kernel y luego este carga initramfs en memoria. Initramfs es un pequeño sistema de ficheros que tiene todos los scripts necesarios para poder iniciar el sistema desde configuraciones muy variadas que de otra forma no se podría.
El problema está en el script que se carga en initramfs para que descubra los volúmenes logicos durante el arranque y pueda montar /usr.
Como lo solucionamos durante el desastre:
Cuando te devuelve el prom al no poder montar /usr tenemos que montarlo a mano y continuar con el arranque.
- Ver que volúmenes o particiones encuentra el sistema:
blkid
- Descubrir los grupos lógicos:
vgchange -a y
- Montar el sistema usr
mount -t ext3 -o ro /dev/mapper/hostlocal-usr /usr
- Continuar con el arranque del sistema:
Control+D
Nota: Si no tienes cargado BusyBox en el sistema cuando se generó initramfs puede que algunos de los comandos anteriores no estén disponibles.
Como lo solucionamos de manera permanente:
Hay que crear un script para que descubra los VG durante el arranque y actualizar initramfs.
El script lo creas en /etc/initramfs-tools/script/local-top/ con el nombre vg-lvm y le das permisos de ejecución con el siguiente contenido:
#!/bin/sh
vgchange -a y
Y actualizamos initramfs con el comando:
update-initramfs -u
Actualmente la versión de lvm2-2.02.111-2.1 ya está parcheada para corregir este error.
Puedes ver el Bug en Debian y el parche que lo corrige.