Como depurar problemas Dracut

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

Prefacio

If you are experiencing a problem with system initialization due to Dracut, please see the common bugs document before filing a bug. Some easy configuration tweaks that fix a wide range of issues may be listed there. If the problem you are seeing is not listed there or none of the workarounds seem to help, please consider filing a bug to help us make Fedora run better on your 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.

Identificando 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

  • Turn on dracut debugging (see the 'debugging dracut' section), and attach all relevant information from the boot log. This can be obtained by running the command dmesg|grep dracut

  • If you use a dracut configuration file, please include /etc/dracut.conf

As well as the information from the 'all bug reports' section, include the following information:

  • Include physical volume information by running the command: lvm pvdisplay

  • Include volume group information by running the command: lvm vgdisplay

  • Include logical volume information by running the command: lvm lvdisplay

As well as the information from the 'all bug reports' section, include the following information:

  • If using software RAID disk partitions, please include the output of /proc/mdstat

This section details information to include when experiencing problems on a system whose root device is located on a network attached volume (e.g. iSCSI, NFS or NBD). As well as the information from the 'all bug reports' section, include the following information:

  • Please include the output of

Debugging dracut

Configure a serial console

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. Open the file /etc/grub.conf for editing. Below the line timeout=5, add the following:

    serial --unit=0 --speed=9600
    terminal --timeout=5 serial console
  2. Also in /etc/grub.conf, add the following boot arguments to the kernel line:

    console=tty0 console=ttyS0,9600
  3. When finished, /etc/grub.conf should look similar to the example below:

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

More detailed information on how to configure the kernel for console output can be found at 1.

Using the dracut shell

Dracut offers a shell for interactive debugging in the event dracut fails to locate your root filesystem. To enable the shell:

  1. Add the boot parameter rd.shell to your bootloader configuration file (e.g. /etc/grub/conf)

  2. Remove the boot arguments rhgb and quiet

A sample /etc/grub.conf bootloader configuration file is listed below:

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

If system boot fails, you will be dropped into a shell as seen in the example below:

No root device found
Dropping to debug shell.

sh: can't access tty; job control turned off
#

Use this shell prompt to gather the information requested above (see the 'all bug reports' section).

Accessing the root volume from the dracut shell

From the dracut debug shell, you can manually perform the task of locating and preparing your root volume for boot. The required steps will depend on how your root volume is configured. Common scenarios include:

  • A block device (e.g. /dev/sda7)

  • A LVM logical volume (e.g. /dev/VolGroup00/LogVol00)

  • An encrypted device (e.g. /dev/mapper/luks-4d5972ea-901c-4584-bd75-1da802417d83)

  • A network attached device (e.g. 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. Inspect your partitions using parted:

    # parted /dev/sda -s p
    Model: ATA HTS541060G9AT00 (scsi)
    Disk /dev/sda: 60.0GB
    Sector size (logical/physical): 512B/512B
    Partition Table: msdos
    
    Number  Start   End     Size    Type      File system  Flags
     1      32.3kB  10.8GB  107MB   primary   ext4         boot
     2      10.8GB  55.6GB  44.7GB  logical                lvm
  2. You recall that your root volume was a LVM logical volume. Scan and activate any logical volumes:

    # lvm vgscan
    # lvm vgchange -ay
  3. You should see any logical volumes now using the command 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. From the output above, you recall that your root volume exists on an encrypted block device. Unlock your encrypted root volume.

    UUID=$(cryptsetup luksUUID /dev/mapper/linux-root)
    cryptsetup luksOpen /dev/mapper/linux-root luks-$UUID
    Enter passphrase for /dev/mapper/linux-root:
    Key slot 0 unlocked.
  5. Next, make a symbolic link to the unlocked root volume

    ln -s /dev/mapper/luks-$UUID /dev/root
  6. With the root volume available, you may continue booting the system by exiting the dracut shell

    exit

Summary of dracut kernel command line options

A selection of the most common debugging related dracut options:

rd.shell

Drop to a shell, if the initramfs fails.

rd.debug

Set -x for the dracut shell.

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

Drop the shell on defined breakpoint (use egrep 'rd.?break' /usr/lib/dracut/modules.d/99base/init.sh to find the breakpoints supported by your dracut version)

rd.udev.info

Set udev to loglevel info (this is the default level)

rd.udev.debug

Set udev to loglevel debug

See the dracut.cmdline(7) man page for the complete reference.