Como depurar problemas Dracut

Caleb McKee, Héctor Louzao, Frank Sträter Versión 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 cuestiones. 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:

 # less /run/initramfs/rdsosreport.txt
 # journalctl -a
 # dmesg
 # 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

Successfully debugging dracut will require some form of console logging during the system boot. This section documents configuring a serial console connection to record boot messages. To enable serial console output for both the kernel and the bootloader, follow the procedure below.

  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)

The exact method for locating and preparing will vary. However, to continue with a successful boot, the objective is to locate your root volume and create a symlink /dev/root which points to the file system. For example, the following example demonstrates accessing and booting a root volume that is an encrypted LVM Logical volume.

  1. Inspecciona sus particiones utilizando parted:

    # parted /dev/sda -s p
    Modelo: ATA HTS541060G9AT00 (scsi)
    Disco /dev/sda: 60.0GB
    Tam. Sector (lógico/físico): 512B/512B
    Tabla de Partición: 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:

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

    # 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=$(cryptsetup luksUUID /dev/mapper/linux-root)
    cryptsetup luksOpen /dev/mapper/linux-root luks-$UUID
    Introduzca la contraseña para /dev/mapper/linux-root:
    Key slot 0 unlocked.
  5. Siguiente, haga un enlace simbólico al volumen raíz desbloqueado

    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.