18.04.2 將initrd載入到ramdisk中

18.04.2 將initrd載入到ramdisk中

我正在嘗試創建 PXE 啟動內核克隆部署。我有一個網卡,需要一些驅動程序,這些驅動程序不能開箱即用,但在 Ubuntu 安裝上運行良好,所以我想我只需使用我啟動 Ubuntu 的內核和 initrd 進行 PXE 啟動(不是很 Linux -savvy我想不出更好的方法來做事,構建我自己的核心的嘗試未能產生一個工作的網卡)。

我正在運行最新的 18.04.2 安裝。所以我將檔案: vmlinuz-4.18.0-20-generic並複製initrd.img-4.18.0-20-generic 到我的 PXE 系統的正確位置,並嘗試從它們啟動。

這是 (ipxe) 啟動命令列(縮短了影像的位置以保持清晰):

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

啟動時,一堆相關設備被初始化(包括我的網卡!),但隨後我遇到了以下錯誤:

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

我已經發現這個問題,這表明我需要在啟動期間執行額外的步驟,以載入 brd 模組並將 initrd 轉換為實際可用的 ram 磁碟。有人建議add "brd rd_size=16777216" to /etc/initramfs/modules,但是當我解壓縮 initrd.img-4.18.0-20-generic 檔案(使用unmkinitramfs)時,沒有 /etc/initramfs。 (我還注意到我應該rd_nr=1 rd_size=1048576只創建 ram0,而不是 ram0 到 ram15)。

我如何克服啟動錯誤。如果這涉及到載入 brd,我該如何為此核心版本執行此操作?

答案1

初始 ramdisk(在您的情況下是initrd.img-4.18.0-20-generic)是update-initramfs在將核心安裝到系統期間由工具自動產生的。

update-initramfs檢查您的系統並添加所需的模組initrd以在引導期間加載它。

您可以將腳本放置在兩個位置initial ramdisk

/usr/share/initramfs-tools

/etc/initramfs-tools 

在您的情況下,您必須將該行插入/etc/initramfs-tools/modules並運行

update-initramfs -u

對於您當前的內核。

然後查看結果:

mkdir myinitramfs

cd myinitramfs

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

cat conf/modules

檢查您的模組是否在清單中

相關內容