我正在嘗試創建 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
檢查您的模組是否在清單中