Cara melakukan debug masalah Dracut

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

Pendahuluan

Jika Anda mengalami masalah saat inisialisasi sistem karena Dracut, silakan lihat dokumen common bugs sebelum melaporkan bug. Beberapa penyesuaian konfigurasi sederhana yang dapat memperbaiki berbagai masalah mungkin tercantum di sana. Jika masalah yang Anda alami tidak ada di daftar tersebut atau tidak ada solusi sementara yang membantu, pertimbangkan untuk melaporkan bug agar Fedora dapat berfungsi lebih baik di perangkat keras Anda.

Siapkan juga informasi (log) tentang sistem Anda. Informasi ini harus lengkap (jangan hanya potongan singkat), tidak dalam bentuk arsip, tidak dikompresi, dan dengan jenis MIME diset ke text/plain.

Mengidentifikasi area masalah Anda

  1. Hapus rhgb dan quiet dari baris perintah kernel

  2. Tambahkan rd.shell ke baris perintah kernel. Ini akan menampilkan shell jika dracut tidak dapat menemukan perangkat root Anda

  3. Tambahkan rd.shell rd.debug log_buf_len=1M ke baris perintah kernel agar perintah shell dracut ditampilkan saat dieksekusi

  4. Periksa log sistem:

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

Informasi yang perlu disertakan dalam laporan Anda

Semua laporan bug

Dalam semua kasus, hal-hal berikut harus disebutkan dan dilampirkan pada laporan bug Anda:

  • Baris perintah kernel yang digunakan secara tepat. Biasanya diambil dari berkas konfigurasi bootloader (misalnya /etc/grub.conf) atau dari /proc/cmdline

  • Salinan informasi partisi disk Anda dari /etc/fstab

  • Daftar perangkat dari device-mapper. Ini dapat diperoleh dengan menjalankan perintah dmsetup ls — tree

  • Daftar atribut perangkat blok termasuk mode kompatibilitas vol_id. Ini dapat diperoleh dengan menjalankan perintah blkid dan blkid -o udev

  • Aktifkan debugging dracut (lihat bagian ‘debugging dracut’) dan lampirkan semua informasi relevan dari log boot. Informasi ini dapat diperoleh dengan perintah dmesg|grep dracut

  • Jika Anda menggunakan berkas konfigurasi dracut, sertakan /etc/dracut.conf

Selain informasi dari bagian ‘semua laporan bug’, sertakan informasi berikut:

  • Sertakan informasi physical volume dengan menjalankan perintah: lvm pvdisplay

  • Sertakan informasi volume group dengan menjalankan perintah: lvm vgdisplay

  • Sertakan informasi logical volume dengan menjalankan perintah: lvm lvdisplay

Selain informasi dari bagian ‘semua laporan bug’, sertakan informasi berikut:

  • Jika menggunakan partisi disk dengan Software RAID, sertakan output dari /proc/mdstat

Bagian ini menjelaskan informasi yang harus disertakan ketika masalah terjadi pada sistem dengan perangkat root yang terhubung melalui jaringan (misalnya iSCSI, NFS, atau NBD). Selain informasi dari bagian ‘semua laporan bug’, sertakan informasi berikut:

  • Sertakan output dari perintah berikut

Melakukan debug Dracut

Mengonfigurasi console serial

Untuk berhasil melakukan debug Dracut, diperlukan metode pencatatan log console selama booting sistem. Bagian ini menjelaskan cara mengonfigurasi koneksi console serial untuk merekam pesan boot. Untuk mengaktifkan output console serial pada kernel dan bootloader, ikuti langkah-langkah berikut.

  1. Buka berkas /etc/grub.conf untuk diedit. Di bawah baris timeout=5, tambahkan baris berikut:

    serial --unit=0 --speed=9600
    terminal --timeout=5 serial console
  2. Tambahkan juga argumen boot berikut pada baris kernel di /etc/grub.conf:

    console=tty0 console=ttyS0,9600
  3. Setelah selesai, /etc/grub.conf akan terlihat mirip dengan contoh berikut:

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

Informasi lebih rinci tentang cara mengonfigurasi kernel untuk output console dapat ditemukan di tautan ini.

Menggunakan shell dracut

Dracut menyediakan shell untuk debugging interaktif jika gagal menemukan sistem berkas root Anda. Untuk mengaktifkan shell ini:

  1. Tambahkan parameter boot rd.shell ke konfigurasi bootloader Anda misalnya pada berkas /etc/grub/conf

  2. Hapus argumen boot rhgb dan quiet

Contoh berkas konfigurasi bootloader /etc/grub.conf ditunjukkan di bawah ini:

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

Jika boot sistem gagal, Anda akan diarahkan ke shell seperti pada contoh berikut:

Tidak ditemukan perangkat root
Beralih ke shell debug.

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

Gunakan prompt shell ini untuk mengumpulkan informasi yang diminta di atas (lihat bagian ‘semua laporan bug’).

Mengakses volume root dari shell dracut

Dari shell debug dracut, Anda dapat secara manual melakukan tugas untuk menemukan dan menyiapkan volume root agar sistem dapat melakukan boot. Langkah yang diperlukan akan bergantung pada bagaimana volume root Anda dikonfigurasi. Skenario umum meliputi:

  • Perangkat blok (misalnya /dev/sda7)

  • Volume logis LVM (misalnya /dev/VolGroup00/LogVol00)

  • Perangkat terenkripsi (misalnya /dev/mapper/luks-4d5972ea-901c-4584-bd75-1da802417d83)

  • Perangkat yang terhubung melalui jaringan (misalnya netroot=iscsi:@192.168.0.4::3260::iqn.2009-02.org.fedoraproject:for.all)

Metode spesifik untuk menemukan dan menyiapkan perangkat akan bervariasi. Namun, untuk melanjutkan proses boot yang berhasil, tujuannya adalah menemukan volume root dan membuat symlink /dev/root yang mengarah ke sistem berkas. Contoh berikut menunjukkan cara mengakses dan melakukan boot dari volume root yang berupa volume logis LVM terenkripsi.

  1. Periksa partisi Anda menggunakan 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. Anda mengingat bahwa volume root Anda adalah volume logis LVM. Lakukan pemindaian dan aktifkan semua volume logis:

    # lvm vgscan
    # lvm vgchange -ay
  3. Sekarang Anda seharusnya dapat melihat semua volume logis dengan perintah 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. Dari output di atas, Anda mengetahui bahwa volume root berada pada perangkat blok terenkripsi. Buka kunci volume root terenkripsi Anda.

    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. Selanjutnya, buat tautan simbolik ke volume root yang telah dibuka kuncinya

    ln -s /dev/mapper/luks-$UUID /dev/root
  6. Setelah volume root tersedia, Anda dapat melanjutkan proses boot dengan keluar dari shell dracut

    exit

Ringkasan opsi baris perintah kernel dracut

Berikut adalah beberapa opsi dracut yang paling umum digunakan untuk debugging:

rd.shell

Masuk ke shell jika initramfs gagal.

rd.debug

Aktifkan mode -x pada shell dracut.

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

Masuk ke shell pada breakpoint tertentu (gunakan egrep 'rd.?break' /usr/lib/dracut/modules.d/99base/init.sh untuk menemukan breakpoint yang didukung oleh versi dracut Anda)

rd.udev.info

Atur udev ke loglevel info (ini adalah tingkat default)

rd.udev.debug

Atur udev ke loglevel debug

Lihat halaman manual dracut.cmdline(7) man page untuk referensi lengkapnya.