InitRAMFS, Dracut y Dracut Emergency Shell

los Proceso de inicio de Linux pasa por varias etapas antes de llegar a la final objetivo gráfico o multiusuario . La etapa initramfs ocurre justo antes de que se monte el sistema de archivos raíz. Dracut es una herramienta que se utiliza para gestionar los initramfs. El shell de emergencia de dracut es un modo interactivo que se puede iniciar mientras se carga initramfs.

Este artículo mostrará cómo usar el comando dracut para modificar el archivo initramfs. También se demostrarán algunos comandos básicos de solución de problemas que se pueden ejecutar desde el shell de emergencia de dracut.

El InitRAMFS

Initramfs significa Sistema de archivos de memoria de acceso aleatorio inicial. En los sistemas Linux modernos, normalmente se almacena en un archivo en el directorio /boot. La versión del kernel para la que se creó se incluirá en el nombre del archivo. Se genera un nuevo initramfs cada vez que se instala un nuevo kernel.

Un directorio de arranque de Linux

Por defecto, Fedora mantiene las dos versiones anteriores del kernel y su initramfs asociado. Este valor predeterminado se puede cambiar modificando el valor de installonly_limit configurando el archivo /etc/dnf/dnf.conf.

Puede usar el comando lsinitrd para enumerar el contenido de su archivo initramfs:

El comando LsInitRD

La captura de pantalla anterior muestra que mi archivo initramfs contiene el controlador GPU nouveau. El comando modinfo me dice que el controlador nouveau admite varios modelos de tarjetas de video NVIDIA. El comando lspci muestra que hay una tarjeta de video NVIDIA GeForce en la ranura PCI de mi computadora. También hay varios comandos básicos de Unix incluidos en el archivo, como cat y cp.

De manera predeterminada, el archivo initramfs solo incluye los controladores necesarios para su computadora específica. Esto permite que el archivo sea más pequeño y disminuye el tiempo que tarda su computadora en arrancar.

El comando Dracut

El comando dracut se puede usar para modificar el contenido de su archivo initramfs. Para example, si va a mover su disco duro a una computadora nueva, es posible que desee incluir temporalmente todos los controladores en initramfs para asegurarse de que el sistema operativo pueda cargarse en la computadora nueva. Para hacerlo, ejecutaría el siguiente comando:

# dracut –force –no-solo host

El parámetro de fuerza le dice a dracut que está bien sobrescribir el archivo initramfs existente. El parámetro no-hostonly anula el comportamiento predeterminado de incluir solo los controladores relacionados con la computadora que se está ejecutando actualmente y hace que dracut incluya en su lugar todos los controladores en initramfs.

Por defecto, dracut opera en initramfs para el kernel que se está ejecutando actualmente. Puede usar el comando uname para mostrar qué versión del kernel de Linux está ejecutando actualmente:

$ uname -r
5.0.5-200.fc29.x86_64

Una vez que tenga su disco duro instalado y ejecutándose en su nueva computadora, puede volver a ejecutar el comando dracut para regenerar initramfs solo con los controladores que se necesitan para la nueva computadora:

# dracut –fuerza

También hay parámetros para agregar controladores arbitrarios, módulos dracut y archivos al archivo initramfs. También puede crear archivos de configuración para dracut y guardarlos en el directorio /etc/dracut.conf.d para que sus personalizaciones se apliquen automáticamente a todos los nuevos archivos initramfs que se generan cuando se instalan nuevos núcleos. Como siempre, consulte la página de manual para conocer los detalles específicos de la versión de dracut que ha instalado en su computadora:

$ hombre dracut

El proyectil de emergencia de Dracut

El proyectil de emergencia de Dracut

A veces, algo sale mal durante la etapa initramfs del proceso de arranque de su computadora. Cuando esto suceda, verá “Entrando en modo de emergencia” impreso en la pantalla seguido de un indicador de shell. Esto le da la oportunidad de intentar arreglar las cosas manualmente y continuar con el proceso de arranque.

Como algo artificial examplesupongamos que eliminé accidentalmente un parámetro importante del kernel en la configuración de mi cargador de arranque:

# sed -i ‘s/ rd.lvm.lv=fedora/root / /’ /boot/grub2/grub.cfg

La próxima vez que reinicie mi computadora, parecerá colgarse durante varios minutos mientras intenta encontrar la partición raíz y, finalmente, se dará por vencido y caerá en un shell de emergencia.

Desde el shell de emergencia, puedo ingresar journalctl y luego usar el Espacio tecla para avanzar página a través de los registros de inicio. Cerca del final del registro, veo una advertencia que dice “/dev/mapper/fedora-root is not exist”. Luego puedo usar el comando ls para averiguar qué existe:

# ls /dev/mapeador
controlar el intercambio de fedora

Hmm, parece que falta el volumen LVM raíz de fedora. Veamos qué puedo encontrar con el comando lvm:

# lvm lvscan
ACTIVO ‘/dev/fedora/swap’ [3.85 GiB] heredar
inactivo ‘/dev/fedora/home’ [22.85 GiB] heredar
inactivo ‘/dev/fedora/raíz’ [46.80 GiB] heredar

¡Ajá! Ahí está mi partición raíz. Simplemente está inactivo. Todo lo que necesito hacer es activarlo y salir del shell de emergencia para continuar con el proceso de arranque:

# lvm lvchange -ay fedora/raíz
# Salida

los Fedora Pantalla de ingreso al sistema

Lo anterior example sólo demuestra el concepto básico. Puedes comprobar el sección de solución de problemas de El guía de dibujo para algunos ejemplos más.

Es posible acceder al shell de emergencia de dracut manualmente agregando el parámetro rd.break a la línea de comando de su kernel. Esto puede ser útil si necesita acceder a sus archivos antes de que se inicien los servicios del sistema.

Consulte la página de manual de dracut.kernel para obtener detalles sobre qué opciones de kernel admite su versión de dracut:

$ hombre dracut.kernel

Related Posts