Fehlerbehebung bei Dracut-Problemen

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

Vorwort

Falls Sie aufgrund von Dracut Probleme mit der Systeminitialisierung haben, lesen Sie bitte die häufigen Fehlerberichte, bevor Sie einen Fehlerbericht einreichen. Dort finden Sie möglicherweise einfache Konfigurationsanpassungen, die viele Probleme beheben. Sollte Ihr Problem dort nicht aufgeführt sein oder keine der beschriebenen Lösungen helfen, reichen Sie bitte einen Fehlerbericht ein, damit wir Fedora auf Ihrer Hardware optimieren können.

Bitte halten Sie auch Systeminformationen (Protokolldateien) bereit. Diese sollten vollständig sein (keine Ausschnitte), nicht archiviert, unkomprimiert und mit dem MIME-Typ „text/plain“ vorliegen.

Identifizieren Ihres Problemgebiets

  1. Entfernen Sie rhgb und quiet aus der Kernel-Befehlszeile

  2. Fügen Sie rd.shell zur Kernel-Befehlszeile hinzu. Dadurch wird eine Shell angezeigt, falls dracut Ihr Root-Gerät nicht finden kann

  3. Fügen Sie rd.shell rd.debug log_buf_len=1M zur Kernel-Befehlszeile hinzu, damit die dracut-Shell-Befehle während ihrer Ausführung ausgegeben werden.

  4. Überprüfen Sie die Systemprotokolle:

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

Informationen, die in Ihrem Bericht enthalten sein sollten

Alle Fehlerberichte

In jedem Fall sollten die folgenden Angaben Ihrem Fehlerbericht beigefügt werden:

  • Die exakte Kernel-Befehlszeile. Typischerweise aus der Bootloader-Konfigurationsdatei (z.B. /etc/grub.conf) oder aus /proc/cmdline

  • Ihre Festplattenpartitionsinformationen aus /etc/fstab

  • Eine Geräteliste von device-mapper. Diese kann durch Ausführen des Befehls dmsetup ls — tree abgerufen werden

  • Eine Liste der Blockgeräteattribute einschließlich des vol_id-kompatiblen Modus. Diese kann durch Ausführen der Befehle blkid und blkid -o udev abgerufen werden

  • Aktivieren Sie das dracut-Debugging (siehe Abschnitt 'dracut debuggen') und fügen Sie alle relevanten Informationen aus dem Bootprotokoll hinzu. Diese erhalten Sie durch Ausführen des Befehls dmesg | grep dracut.

  • Wenn Sie eine dracut-Konfigurationsdatei verwenden, fügen Sie bitte /etc/dracut.conf hinzu

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

  • Beziehen Sie Informationen zum physischen Datenträger ein, indem Sie den Befehl lvm pvdisplay ausführen.

  • Fügen Sie die Informationen zur Datenträgergruppe hinzu, indem Sie den Befehl lvm vgdisplay ausführen.

  • Fügen Sie Informationen zu logischen Datenträgern durch Ausführen des Befehls lvm lvdisplay hinzu.

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

  • Wenn Sie Software-RAID-Festplattenpartitionen verwenden, fügen Sie bitte die Ausgabe von /proc/mdstat bei.

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

dracut debuggen

Konfiguration einer seriellen Konsole

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. Öffnen Sie die Datei /etc/grub.conf zum Bearbeiten. Fügen Sie unterhalb der Zeile timeout=5 Folgendes hinzu:

    serial --unit=0 --speed=9600
    terminal --timeout=5 serial console
  2. Fügen Sie außerdem in /etc/grub.conf die folgenden Boot-Argumente zur Zeile kernel hinzu:

    console=tty0 console=ttyS0,9600
  3. Nach Fertigstellung sollte die Datei /etc/grub.conf in etwa so aussehen wie im folgenden Beispiel:

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

Detailliertere Informationen zur Konfiguration des Kernels für die Konsolenausgabe finden Sie unter 1.

Verwendung der dracut-Shell

Dracut bietet eine Shell für interaktives Debugging, falls Dracut Ihr Root-Dateisystem nicht finden kann. So aktivieren Sie die Shell:

  1. Fügen Sie den Bootparameter rd.shell zu Ihrer Bootloader-Konfigurationsdatei hinzu (z.B. /etc/grub/conf)

  2. Entfernen Sie die Boot-Argumente rhgb and quiet

Nachfolgend ist eine Beispielkonfigurationsdatei /etc/grub.conf für den Bootloader aufgeführt:

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

Wenn der Systemstart fehlschlägt, gelangen Sie in eine Shell, wie im folgenden Beispiel gezeigt:

No root device found
Dropping to debug shell.

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

Verwenden Sie diese Shell-Eingabeaufforderung, um die oben angeforderten Informationen zu sammeln (siehe der Abschnitt 'Alle Fehlerberichte').

Zugriff auf den Root-Datenträger aus der Dracut-Shell

Über die dracut-Debug-Shell können Sie den Root-Datenträger manuell für den Systemstart suchen und vorbereiten. Die erforderlichen Schritte hängen von der Konfiguration Ihres Root-Datenträgers ab. Häufige Szenarien sind:

  • Ein Blockgerät (z.B. /dev/sda7)

  • Ein logischer LVM-Datenträger (z.B. /dev/VolGroup00/LogVol00)

  • Ein verschlüsseltes Gerät (z.B. /dev/mapper/luks-4d5972ea-901c-4584-bd75-1da802417d83)

  • Ein über das Netzwerk erreichbares Gerät (z.B. 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. Untersuchen Sie Ihre Partitionen mit 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. Sie erinnern sich, dass Ihr Root-Datenträger ein logischer LVM-Datenträger. Scannen Sie ihn und aktivieren Sie logische Datenträger:

    # lvm vgscan
    # lvm vgchange -ay
  3. Sie sollten nun alle logischen Datenträger mit dem Befehl blkid sehen können:

    # 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. Aus der obigen Ausgabe geht hervor, dass sich Ihr Root-Datenträger auf einem verschlüsselten Blockgerät befindet. Entsperren Sie Ihren verschlüsselten Root-Datenträger.

    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. Als Nächstes erstellen Sie einen symbolischen Link zum entsperrten Root-Datenträger.

    ln -s /dev/mapper/luks-$UUID /dev/root
  6. Nachdem der Root-Datenträger verfügbar ist, können Sie den Systemstart fortsetzen, indem Sie die dracut-Shell beenden.

    exit

Zusammenfassung der Dracut-Optionen für die Kernel-Befehlszeile

Eine Auswahl der gängigsten dracut-Optionen zum Debuggen:

rd.shell

Falls initramfs fehlschlägt, wird auf eine Shell gewechselt.

rd.debug

Setzen Sie -x für die 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

In der Handbuchseite dracut.cmdline(7) finden Sie eine vollständige Referenz.