Apagando fuegos

A veces hay cosas que son propias de un bombero de sistemas

Kernel panic: /init: conf/conf.d/zz-resume-auto: line 1: syntax error: unexpected "("

Introducción

Nada peor que un kernel panic en un sistema linux y más si este esta en producción.

Que malo es tener servidores baremetal en lugar de virtualizar con KVM. Sonbre todo para el corazón.

Me llamo un cliente, para apagar el fuego. Centralita de rendimiento espectacular (Dos a tres mil euros la hora de facturación por lineas). Como parta estar offline. E infraestructura sin HA o cuando menos espejos de backup.

Ya me han pedido presupuesto.

Kernel panic

Lo primero que se observa en Google o DuckDuckGo es que es un problema recurrente con distintos sabores o variantes.

Pero lo que nos queda claro es que no se trata de encontrar ese fichero sino de otra cosa.

Estamos en OVH así que vamos a abrir un IPMI para tratar de entrar en modo rescate.

Al rescate

Consola remota IPMI de OVH

Bueno la ilusión se nos fue, cuando vimos que el administrador del equipo, tenia configurado de tal forma no visualizar el screen de arranque, sino entrar directamente al trapo con la carga del kernel (Muy mal compañero).

Tampoco el IPMI nos permitía una comunicación correcta del teclado, para forzar la pantalla de inicio, asi que opte por un arranque en modo rescue de OVH basado en una Debian 11.

Modo rescue

Lo primero es ver que tenemos con un fdisk

root@rescue-customer-eu ~# fdisk -l
/dev/nvme0n1p1       2048    1048575   1046528  511M EFI System
/dev/nvme0n1p2    1048576  999161855 998113280  476G Linux RAID
/dev/nvme0n1p3  999161856 1000210431   1048576  512M Linux filesystem
/dev/nvme0n1p4 1000211120 1000215182      4063    2M Linux filesystem

Que bonito, un RAID por software en un sistema en producción de ese nivel.

Vemos que nos cuenta

root@rescue-customer-eu ~ # mdadm --examine --scan
ARRAY /dev/md/md2  metadata=1.2 UUID=f3f612c5:98f99127:fd587ee0:8dc97d19 name=md2
root@rescue-customer-eu  ~ # mount /dev/md/md2 /mnt
mount: /mnt: special device /dev/md/md2 does not exist.

Limpieza con update-initramfs

Bien, vamos a montarlo en modo chroot para poder limpiar el problema

root@rescue-customer-eu ~ # cat /proc/mdstat
Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] [multipath] [faulty]
md127 : active (auto-read-only) raid1 nvme0n1p2[1]
      498924544 blocks super 1.2 [2/1] [_U]
      bitmap: 4/4 pages [16KB], 65536KB chunk

unused devices: <none>

¿Porqué?

Basado en la salida de cat /proc/mdstat, parece que el dispositivo RAID que se ha ensamblado automáticamente al intentar arrancar el sistema en modo rescate es /dev/md127 y no /dev/md/md2 como se esperaba inicialmente. Esto puede suceder a veces, donde el número de dispositivo RAID puede cambiar dependiendo de cómo y cuándo se ensambla el RAID durante el arranque del sistema.

La salida muestra que el dispositivo /dev/md127 es un RAID 1 (espejo) y actualmente está en modo "auto-read-only" con uno de los dos discos funcionando (indicado por [2/1] [_U], donde _U significa que un disco está faltante o no está funcionando).

Problemas a la vista con el raid. Continuar con algunas propuestas no tiene sentido, cuando el raid esta mal, pues se trata de trabajar con el grub y sin el raid consistente, ni lo intentes.

update-grub
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.10.0-28-amd64
Found initrd image: /boot/initrd.img-5.10.0-28-amd64
/usr/sbin/grub-probe: error: disk `mduuid/f3f612c598f99127fd587ee08dc97d19' not found.
/usr/sbin/grub-probe: error: disk `mduuid/f3f612c598f99127fd587ee08dc97d19' not found.
/usr/sbin/grub-probe: error: disk `mduuid/f3f612c598f99127fd587ee08dc97d19' not found.
Found linux image: /boot/vmlinuz-5.10.0-27-amd64
Found initrd image: /boot/initrd.img-5.10.0-27-amd64
/usr/sbin/grub-probe: error: disk `mduuid/f3f612c598f99127fd587ee08dc97d19' not found.
/usr/sbin/grub-probe: error: disk `mduuid/f3f612c598f99127fd587ee08dc97d19' not found.
Found linux image: /boot/vmlinuz-5.10.0-19-amd64
Found initrd image: /boot/initrd.img-5.10.0-19-amd64
/usr/sbin/grub-probe: error: disk `mduuid/f3f612c598f99127fd587ee08dc97d19' not found.
/usr/sbin/grub-probe: error: disk `mduuid/f3f612c598f99127fd587ee08dc97d19' not found.
done

En este punto decir que algunos de los tips de google, sobre este tema, podrán ser validos en determinadas circunstancias pero aquí, con un raid por software la cosa estaba más clara.

Vamos a ensamblar manualmente el array.

ATENCION ⚠️ Lo que se hace, se hace en una máquina con backups, y consciente de lo que haces y de que puede pasar de todo. No soy responsable delos copy & paste sin tener ni idea de sistemas.

mdadm --assemble /dev/md/md2 --uuid f3f612c5:98f99127:fd587ee0:8dc97d19

Después vamos a ver el estado. Es necesario porque lo que haremos después no funcionaria, por los errores que ya tuvimos.

root@rescue-customer-eu:/# cat /proc/mdstat
Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] [multipath] [faulty]
md127 : active raid1 nvme1n1p2[0] nvme0n1p2[1]
      498924544 blocks super 1.2 [2/1] [_U]
      [===>.................]  recovery = 19.6% (98150912/498924544) finish=32.4min speed=205769K/sec
      bitmap: 4/4 pages [16KB], 65536KB chunk

Bien esperaremos hasta que acabe

Si tienes un gran tamaño de discos, tardará. Si tienes discos mecanicos, y raid soft, mejor date una vuelta.

Montemos en chroot cuando termine.

mount /dev/md127 /mnt
mount -t proc /proc /mnt/proc
mount -t sysfs /sys /mnt/sys
mount --rbind /dev /mnt/dev
mount --make-rslave /mnt/dev
chroot /mnt /bin/bash

Ahora ya puedes hacer un update-grub o editar el fichero por ejemplo para tener la venta splash del arranque para poder elegir un kernel o el modo rescue, etc.

En mi caso sirvió el update-grub

update-grub
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.10.0-28-amd64
Found initrd image: /boot/initrd.img-5.10.0-28-amd64
Found linux image: /boot/vmlinuz-5.10.0-27-amd64
Found initrd image: /boot/initrd.img-5.10.0-27-amd64
Found linux image: /boot/vmlinuz-5.10.0-19-amd64
Found initrd image: /boot/initrd.img-5.10.0-19-amd64
done

Si estas en un entorno UEFI de arranque, tendrás que asegurarte. de que estas apuntando correctamente

Desmontado

exit
umount /mnt/sys
umount /mnt/proc
umount /mnt/dev
umount /mnt/boot

Y finalmente desactivar el kernel rescue de OVH y hacer un shutdown.

In Sha Allah... y a disfrutar de tu máquina.

Aviso

Esta documentación y su contenido, no implica que funcione en tu caso o determinados casos. También implica que tienes conocimientos sobre lo que trata, y que en cualquier caso tienes copias de seguridad. El contenido el contenido se entrega, tal y como está, sin que ello implique ningún obligación ni responsabilidad por parte de Castris

Si necesitas soporte profesional puedes contratar con Castris soporte profesional.