Benutzer-Werkzeuge

Webseiten-Werkzeuge


comp:initrd
Übersetzungen dieser Seite?:

Inhalt der initrd

openSUSE verwendet zum Bau der initialen Ramdisk (initrd) seit einiger Zeit dracut (das auch per mkinitrd aufgerufen werden kann). Manchmal möchte man in diese Datei reinschauen, um zu sehen, was denn nun enthalten ist. Das ist nicht ganz trivial. Die Lösung habe ich auf https://ask.fedoraproject.org/en/question/57887/how-to-coorectly-extract-initrd0img-from-fedora21-beta-livecd/ gefunden, und ich habe sie mal für eine konkrete Kernelversion auf openSUSE Leap 42.3 angepasst.

  • man erstelle ein Verzeichnis und wechsle hinein:
    mkdir /tmp/initrdmount
    cd /tmp/initrdmount
  • das Programm binwalk wird benötigt. Wenn es noch nicht installiert ist (es gehört zum Umfang der Distro, wird aber per Default nicht installiert):
    zypper in binwalk
  • wir sehen uns den Inhalt bzw. die Struktur der initrd an:
    binwalk /boot/initrd-4.4.92-31-default
     
    DECIMAL       HEXADECIMAL     DESCRIPTION
    --------------------------------------------------------------------------------
    0             0x0             ASCII cpio archive (SVR4 with no CRC), file name: ".", file name length: "0x00000002", file size: "0x00000000"
    112           0x70            ASCII cpio archive (SVR4 with no CRC), file name: "early_cpio", file name length: "0x0000000B", file size: "0x00000002"
    240           0xF0            ASCII cpio archive (SVR4 with no CRC), file name: "kernel", file name length: "0x00000007", file size: "0x00000000"
    360           0x168           ASCII cpio archive (SVR4 with no CRC), file name: "kernel/x86", file name length: "0x0000000B", file size: "0x00000000"
    484           0x1E4           ASCII cpio archive (SVR4 with no CRC), file name: "kernel/x86/microcode", file name length: "0x00000015", file size: "0x00000000"
    616           0x268           ASCII cpio archive (SVR4 with no CRC), file name: "kernel/x86/microcode/GenuineIntel.bin", file name length: "0x00000026", file size: "0x0000B000"
    45820         0xB2FC          ASCII cpio archive (SVR4 with no CRC), file name: "TRAILER!!!", file name length: "0x0000000B", file size: "0x00000000"
    46080         0xB400          xz compressed data
  • ab hier gibt es zwei Wege, den manuellen und den automagischen:
    • manuell:
      • wir extrahieren den komprimierten Teil:
        dd if=/boot/initrd-4.4.92-31-default of=initramfs.xz bs=46080 skip=1
        219+1 Datensätze ein
        219+1 Datensätze aus
        10126544 bytes (10 MB, 9,7 MiB) copied, 0,00315395 s, 3,2 GB/s
      • die extrahierte Datei wird entkomprimiert:
        unxz initramfs.xz
      • die entkomprimierte Datei wird wieder in etliche Dateien umgewandelt:
        cpio -i -d -H newc --no-absolute-filenames < initramfs
        61140 blocks
    • mit Automatik:
      • Auspacken und Zerlegen in einem Schritt:
        /usr/lib/dracut/skipcpio /boot/initrd-4.4.92-31-default | unxz | cpio -i
      • um zu Wissen, welchen Entpacker man benutzt, muss man mit binwalk den Inhalt der initrd prüfen. Im vorliegenden Fall ist es xz compressed data, also nimmt man unxz. Bei gzip als Inhalt wäre es entsprechend gunzip usw.

Nun hat man ein Verzeichnis mit dem Inhalt der initrd :-)

comp/initrd.txt · Zuletzt geändert: 2017-12-13 1237 von werner