我在 VirtualBox VM 中运行了几个 Ubuntu 系统。它们的历史很长;从 16.04 开始,并已连续升级到新的 LTS 版本 - 但不一定同时升级。我最近将我最后的 20.04 Ubuntu 升级到 22.04.3,而其他 Ubuntu VM 则在 22 年 11 月左右升级到 22.04.1。
最新从 20.04 升级到 22.04.3 的 Ubuntu VM 的 initrd.img 内容包含的驱动程序比其他 Ubuntu VM 的 initrd.img 多。具体来说,它还包含许多图形驱动程序/库(amdgpu、i915、nvidia、radeon)及其相关的内核 .ko 模块和内核的加密 .ko 模块。
包含这些内容的原因并不明显。图形驱动程序在 VirtualBox 环境中毫无用处,并且系统不使用任何文件系统、分区或交换文件的加密。
在过去升级的 Ubuntu VM(从 20.04 升级到 22.04.1)中,这些模块不在 initrd.img 中。在现在从 20.04 升级到 22.04.3 的 Ubuntu VM 中,它们突然出现。我之所以注意到这一点,是因为 /boot 分区现在太小,无法容纳 2 个以上的内核,这是因为 initrd.img 文件的大小要大得多。这现在在安装新内核时会导致问题。
当然,我可以增加 /boot 分区的大小。但这只是治标不治本。
因此,真正的问题是:
为什么突然包含这些图形和加密驱动程序/模块?
有没有什么程序可以从 initrd.img 中删除那些不必要的驱动程序/模块?
顺便提一下:在这些 Ubuntu 系统上,我从未篡改过启动/初始化过程。因此,就这一点而言,每个现有配置都应该是“默认”的。此外,所有这些 Ubuntu VM 的 VirtualBox 图形配置都是相同的。
答案1
我不太清楚为什么在您的机器上结果会有所不同,但您可以通过以下方式控制 initramfs 映像中的内容:
其中/etc/initramfs-tools/initramfs.conf
有这样一个区块:
#
# MODULES: [ most | netboot | dep | list ]
#
# most - Add most filesystem and all harddrive drivers.
#
# dep - Try and guess which modules to load.
#
# netboot - Add the base modules, network modules, but skip block devices.
#
# list - Only include modules from the 'additional modules' list
#
MODULES=most
通过从 切换到most
,dep
您将获得一个较小的映像。但这只会在您创建它的机器上启动,因此请确保在更改任何硬件(虚拟机的硬件)之前将其切换回来。
更改后,您必须运行sudo update-initramfs -u -k all
以应用配置。您可能需要创建旧 initramfs 的副本,以防之后缺少所需的模块。