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:

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

Zusätzlich zu den Informationen aus dem Abschnitt „Alle Fehlerberichte“ sollten Sie folgende Informationen angeben:

  • 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.

Zusätzlich zu den Informationen aus dem Abschnitt „Alle Fehlerberichte“ sollten Sie folgende Informationen angeben:

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

Dieser Abschnitt enthält detaillierte Informationen, die bei Problemen mit einem System, dessen Root-Gerät sich auf einem über das Netzwerk angehängten Datenträger (zum Beispiel iSCSI, NFS oder NBD) befindet, anzugeben sind. Zusätzlich zu den Informationen aus dem link:#all-bug-reports[Abschnitt „Alle Fehlerberichte“ sollten Sie folgende Angaben machen:

  • Bitte beziehen Sie die Ausgabe von

dracut debuggen

Konfiguration einer seriellen Konsole

Für ein erfolgreiches Debuggen von dracut ist eine Form der Konsolenprotokollierung während des Systemstarts erforderlich. Dieser Abschnitt beschreibt die Konfiguration einer seriellen Konsolenverbindung zur Aufzeichnung von Startmeldungen. Um die serielle Konsolenausgabe sowohl für den Kernel als auch für den Bootloader zu aktivieren, folgen Sie der unten beschriebenen Vorgehensweise.

  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)

Die genaue Vorgehensweise zum Auffinden und Vorbereiten kann variieren. Um jedoch einen erfolgreichen Systemstart zu gewährleisten, ist es wichtig, den Root-Datenträger zu finden und einen symbolischen Link /dev/root zu erstellen, der auf das Dateisystem verweist. Das folgende Beispiel zeigt beispielsweise den Zugriff auf und das Booten eines Root-Datenträgers, der ein verschlüsselter LVM-Datenträger ist.

  1. Untersuchen Sie Ihre Partitionen mit parted:

    $ sudo parted /dev/sda -s p
    Modell: ATA HTS541060G9AT00 (scsi)
    Festplatte /dev/sda: 60.0GB
    Sektorgröße (logical/physical): 512B/512B
    Partitionstabelle: msdos
    
    Nummer  Anfang   Ende     Größe    Typ      Dateisystem  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:

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

    $ 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. 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=$(sudo cryptsetup luksUUID /dev/mapper/linux-root)
    $ sudo 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.

    $ sudo 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]

Starten Sie die Shell an einem definierten Haltepunkt (verwenden Sie egrep 'rd.?break' /usr/lib/dracut/modules.d/99base/init.sh, um die von Ihrer dracut-Version unterstützten Haltepunkte zu finden).

rd.udev.info

Setzen Sie udev auf die Protokollierstufe info (dies ist die Standardeinstellung).

rd.udev.debug

Setzen Sie udev auf die Protokollierstufe debug

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