18.04.2 将 initrd 加载到 ramdisk

18.04.2 将 initrd 加载到 ramdisk

我正在尝试为克隆部署。我有一块 NIC,它需要一些驱动程序,这些驱动程序无法开箱即用,但在 Ubuntu 安装中可以正常工作,因此我认为只需使用我从中启动 Ubuntu 的内核和 initrd 进行 PXE 启动即可(由于对 Linux 不是很精通,我想不出更好的方法,尝试构建自己的内核但未能产生可用的 NIC)。

我正在运行最新的 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

启动时,一堆相关设备被初始化(包括我的 NIC!)但随后我遇到以下错误:

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

检查你的模块是否在列表中

相关内容