18.04.2 initrd in Ramdisk laden

18.04.2 initrd in Ramdisk laden

Ich versuche einen PXE-Boot-Kernel zu erstellen fürKlonenBereitstellen. Ich habe eine Netzwerkkarte, die einige Treiber benötigt, die nicht sofort funktionieren, bei einer Ubuntu-Installation jedoch einwandfrei funktionieren. Daher dachte ich, ich könnte einfach per PXE mit dem Kernel und initrd booten, von denen ich mein Ubuntu boote (da ich mich mit Linux nicht besonders gut auskenne, fällt mir keine bessere Möglichkeit ein, die Dinge zu erledigen; Versuche, meinen eigenen Kernel zu bauen, haben bisher keine funktionierende Netzwerkkarte hervorgebracht).

Ich verwende eine aktuelle 18.04.2-Installation. Also habe ich die Dateien kopiert: vmlinuz-4.18.0-20-genericund initrd.img-4.18.0-20-generic an die richtigen Stellen meines PXE-Systems und versuche, von ihnen zu booten.

Dies ist die (ipxe) Boot-Befehlszeile (mit gekürzten Speicherorten der Bilder, um die Lesbarkeit zu verbessern):

kernel http://.../IpxeBoot?filename=vmlinuz-4.18.0-20-generic&type=kernel initrd=initrd.img-4.18.0-20-generic root=/dev/ram0 rw ramdisk_size=1560000  web=http://.../ USER_TOKEN= task=debug consoleblank=0 
imgfetch --name initrd.img-4.18.0-20-generic http://.../IpxeBoot?filename=initrd.img-4.18.0-20-generic&type=bootimage
boot

Beim Booten werden eine Reihe relevanter Geräte initialisiert (einschließlich meiner Netzwerkkarte!), aber dann tritt der folgende Fehler auf:

gave up waiting for root file system device
ALERT! /dev/ram0 does not exist. Dropping to a shell!

ich habe gefundendiese Frage, was darauf hindeutet, dass ich während des Bootvorgangs irgendwo einen zusätzlichen Schritt ausführen muss, um das brd-Modul zu laden und das initrd in eine tatsächlich nutzbare RAM-Disk umzuwandeln. Es wurde vorgeschlagen add "brd rd_size=16777216" to /etc/initramfs/modules, aber wenn ich die Datei initrd.img-4.18.0-20-generic (mit unmkinitramfs) entpacke, gibt es kein /etc/initramfs. (Ich stelle auch fest, rd_nr=1 rd_size=1048576dass ich wahrscheinlich nur ram0 erstellen sollte, anstatt ram0 bis ram15).

Wie überwinde ich den Boot-Fehler? Und wenn das Laden von brd erforderlich ist, wie mache ich das für diese Kernel-Version?

Antwort1

Die anfängliche Ramdisk (in Ihrem Fall ist es das ) wird während der Kernelinstallation in Ihrem System automatisch initrd.img-4.18.0-20-genericvom Tool generiert .update-initramfs

update-initramfsüberprüft Ihr System und fügt die erforderlichen Module hinzu, initrdum es während des Bootvorgangs zu laden.

Es gibt zwei Speicherorte, an denen Sie Ihre Skripte ablegen können initial ramdisk:

/usr/share/initramfs-tools

Und

/etc/initramfs-tools 

In Ihrem Fall müssen Sie diese Zeile einfügen /etc/initramfs-tools/modulesund ausführen

update-initramfs -u

für Ihren aktuellen Kernel.

Dann schauen Sie sich das Ergebnis an:

mkdir myinitramfs

cd myinitramfs

zcat /boot/initrd.img-4.18.0-20-generic | cpio --extract

cat conf/modules

Überprüfen Sie, ob Ihr Modul in der Liste enthalten ist

verwandte Informationen