Como depurar problemas Dracut

Caleb McKee, Héctor Louzao, Frank Sträter Version all Last review: 2023-12-06

Prefacio

S está experimentando problemas con las inicialización del sistema debido a Dracut, vea el enlace del documento defectos comunes antes de rellenar un defecto. Se listan allí algunos retoques de configuración que corrigen un amplio rango de incidencias. Si el problemas que está viendo no está listado allí o ninguna de las soluciones alternativas parecen ayudar considere rellenar un gazapo para ayudarnos a conseguir que Fedora corra mejor sobre su hardware.

Esté preparado para incluir alguna información (registros) sobre su sistema también. Esto debería estar completo (sin fragmentos por favor), no en un archivo, descomprimido, con el tipo MIME establecido como texto plano.

Identificar su área del problema

  1. Quite rhgb y quiet desde la línea de comando del kernel

  2. Añadir rd.shell a la línea de comando de kernel. Esto presentará una shell en caso de que dracut es incapaz de localizar su dispositivo raíz

  3. Añada rd.shell rd.debug log_buf_len=1M a la línea de comando de kernel de modo que los comandos de shell dracut se imprimen según se ejecutan

  4. Inspeccionar los registros del sistema:

$ sudo less /run/initramfs/rdsosreport.txt
$ sudo journalctl -a
$ sudo dmesg
$ sudo less /run/initramfs/init.log

Información a incluir en su informe

Todos los informes de error

En todos los casos, se debería mencionar y adjuntar lo siguiente enb su informe de error:

  • El kernel exacto usado en la línea de comandos. Normalmente desde el archivo de configuración del cargador de arranque (p.ej. /etc/grub.conf) o de /proc/cmdline

  • Una copia de la información de su partición de disco de /etc/fstab

  • Un lista de dispositivos de device-mapper. Esto se puede obtener ejecutando el comando dmsetup ls — tree

  • Una lista de atributos de bloque de dispositivo incluyendo vol_id en modo compatible. Esto se puede obtener ejecutando los comando blkid y blkid -o udev

  • Active el depurador de dracut (consulte en la sección de 'debugging dracut'), y adjunte toda la información relevante desde la bitácora de arranque. Esto puede obtenerse ejecutando el comando dmesg|grep dracut

  • Si utilizar un archivo de configuración dracut, incluye /etc/dracut.conf

Así como la información desde la sección 'all bug reports', incluyendo la información siguiente:

  • Incluya información del volumen físico ejecutando la instrucción: lvm pvdisplay

  • Incluye información de grupo de volumen ejecutando la instrucción: lvm vgdisplay

  • Incluye información del volumen lógico ejecutando la instrucción: lvm lvdisplay

Así como la información desde la sección 'all bug reports', incluyendo la información siguiente:

  • Si utiliza software de particiones de disco RAID, incluya la salida de /proc/mdstat

Esta sección detalla la información que debe incluirse al experimentar problemas en un sistema cuyo dispositivo raíz se encuentra en un volumen conectado a la red (p. ej., iSCSI, NFS o NBD). Además de la información de la sección 'todos los informes de errores', incluya la siguiente información:

  • Introduzca la salida de

Depurando dracut

Configurar una consola serie

Depurar dracut correctamente requerirá alguna forma de bitácora por consola durante el arranque del sistema. Esta sección documenta configurar una conexión de consola en serie para los mensajes de arranque del registro. Por tanto habilite la salida de console serie para ambos el kernel y el cargador de arranque, siga el procedimiento a continuación.

  1. Abre el archivo /etc/grub.conf para editar. Debajo de la línea timeout=5, añade lo siguiente:

    serial --unit=0 --speed=9600
    terminal --timeout=5 serial console
  2. Además en /etc/grub.conf, añade los argumentos de arranque siguientes a la línea de kernel:

    console=tty0 console=ttyS0,9600
  3. Cuando finalice, /etc/grub.conf parecería similar al ejemplo siguiente:

    default=0
    timeout=5
    serial --unit=0 --speed=9600
    terminal --timeout=5 serial console
    title Fedora (2.6.29.5-191.fc11.x86_64)
       root (hd0,0)
       kernel /vmlinuz-2.6.29.5-191.fc11.x86_64 ro root=/dev/mapper/vg_uc1-lv_root console=tty0 console=ttyS0,9600
       initrd /dracut-2.6.29.5-191.fc11.x86_64.img

Más información detallada en la configuración como el kernel para salida de consola puede encontrarse en 1.

Empleo del intérprete dracut

Dracur ofrece un intérprete para depuración interactiva en el evento dracut falla para localizar su sistema de archivo raíz. Para habilitar el intérprete:

  1. Añada el parámetro de arranque rd.shell a su configuración del cargador de arranque archivo (p.e. /etc/grub/conf)

  2. Retira los argumentos de arranque rhgb y quiet

Una muestra /etc/grub.conf de la configuración del cargador de arranque está listado a continuación:

default=0
timeout=5
serial --unit=0 --speed=9600
terminal --timeout=5 serial console
title Fedora (2.6.29.5-191.fc11.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.29.5-191.fc11.x86_64 ro root=/dev/mapper/vg_uc1-lv_root console=tty0 rd.shell
        initrd /dracut-2.6.29.5-191.fc11.x86_64.img

Si el sistema de arranque falla, será arrojado al un intérprete como se ve en el ejemplo siguiente:

Ningún dispositivo raíz encontrado
Se le ha dejado en el intérprete de depuración.

sh: no puede acceder al tty; control de tarea apagado
#

Utilice este indicador de intérprete para recopilar la información solicitada anteriormente (consulte la sección 'todos los informes de errores').

Accediendo al volumen raíz desde el intérprete dracut

Desde el intérprete de depuración de Dracut, puedes localizar y preparar manualmente su volumen raíz para el arranque. Los pasos necesarios dependerán de la configuración de su volumen raíz. Algunos escenarios comunes incluyen:

  • Un dispositivo de bloque (p.e. /dev/sda7)

  • Un volumen lógico LVM (p.e. /dev/VolGroup00/LogVol00)

  • Un dispositivo cifrado (p.e. /dev/mapper/luks-4d5972ea-901c-4584-bd75-1da802417d83)

  • Una red adjuntada a dispositvo (p.e. netroot=iscsi:@192.168.0.4::3260::iqn.2009-02.org.fedoraproject:for.all)

El método exacto para localizar y preparar el volumen raíz varía. Sin embargo, para un arranque exitoso, el objetivo es localizar el volumen raíz y crear un enlace simbólico /dev/root que apunte al sistema de archivos. Por ejemplo, el siguiente ejemplo muestra cómo acceder e iniciar un volumen raíz que es un volumen lógico LVM cifrado.

  1. Inspecciona sus particiones utilizando parted:

    $ sudo parted /dev/sda -s p
    Model: ATA HTS541060G9AT00 (scsi)
    Disk /dev/sda: 60.0GB
    Sector size (logical/physical): 512B/512B
    Partition Table: msdos
    
    Nº   Inicio       Final     Tam         Tipo      S.Arch  Indicadores
     1      32'3kB  10'8GB  107MB   primary   ext4         boot
     2      10'8GB  55'6GB  44'7GB  logical                        lvm
  2. Recuerda que tu volumen raíz era un volumen lógico LVM. Analizar y activar cualquier volumen lógico:

    $ sudo lvm vgscan
    $ sudo lvm vgchange -ay
  3. Verías todos los volúmenes lógicos ahora usando el comando blkid:

    $ sudo blkid
    /dev/sda1: UUID="3de247f3-5de4-4a44-afc5-1fe179750cf7" TYPE="ext4"
    /dev/sda2: UUID="Ek4dQw-cOtq-5MJu-OGRF-xz5k-O2l8-wdDj0I" TYPE="LVM2_member"
    /dev/mapper/linux-root: UUID="def0269e-424b-4752-acf3-1077bf96ad2c" TYPE="crypto_LUKS"
    /dev/mapper/linux-home: UUID="c69127c1-f153-4ea2-b58e-4cbfa9257c5e" TYPE="ext3"
    /dev/mapper/linux-swap: UUID="47b4d329-975c-4c08-b218-f9c9bf3635f1" TYPE="swap"
  4. Del resultado anterior, recuerda que su volumen raíz existe en un dispositivo de bloque cifrado. Desbloquee su volumen raíz cifrado.

    $ UUID=$(sudo cryptsetup luksUUID /dev/mapper/linux-root)
    $ sudo cryptsetup luksOpen /dev/mapper/linux-root luks-$UUID
    Introduzca la contraseña para /dev/mapper/linux-root:
    Ranura de clave 0 desbloqueado.
  5. Siguiente, haga un enlace simbólico al volumen raíz desbloqueado

    $ sudo ln -s /dev/mapper/luks-$UUID /dev/root
  6. Con el volumen raíz disponible, puede continuar arrancando el sistema saliendo del intérprete de dracut

    exit

Sumario de opciones de línea de comando del kernel dracut

Una selección de las depuraciones más comunes relacionadas con las opciones de dracut:

rd.shell

Suelta un intérprete, si el initramfs falla.

rd.debug

Establece -x para el intérprete dracut.

rd.break=[cmdline|pre-udev|pre-trigger|initqueue|pre-mount|mount|pre-pivot|cleanup]

Abandona el intérprete en punto de ruptura definido (utilice egrep 'rd.?break' /usr/lib/dracut/modules.d/99base/init.sh para encontrar los puntos de ruptura admitidos por su versión de dracut)

rd.udev.info

Establezca udev para el loglevel info (esto es el nivel por defecto)

rd.udev.debug

Establece udev para depuración de loglevel

Consulte la dracut.cmdline(7) página man para la referencia completa.