在Arch Linux中禁止生成/boot/initramfs-linux-fallback.img以节省/boot分区空间

发布日期:分类:Linux & homelab 在Arch Linux中禁止生成/boot/initramfs-linux-fallback.img以节省/boot分区空间无评论
时效性提醒:本文首次编写发布于6 年前。

在Arch Linux中linux软件包安装或更新时会生成两个initramfs:initramfs-linux.img和initramfs-linux-fallback.img,后者顾名思义,就是个后备的,而其文件大小也远大于前者,足足有28MB。

对于将EFI分区直接挂在到/boot的分区方案而言(用于让UEFI直接加载内核而不用通过Bootloader),预装的Windows所自带的EFI分区只有100MB左右,这个巨大的initramfs-linux-fallback.img几乎要将它彻底占满。EFI分区可用空间过少会导致Windows10在进行大版本更新时出现“无法更新EFI系统分区”这样的错误,从而造成更新失败。

究竟是什么导致了initramfs-linux-fallback.img如此巨大?我们可以看一看/etc/mkinitcpio.d/linux.preset文件的内容,这个文件是linux软件包对mkinitcpio提供的预设文件,控制了那两个initramfs的生成:

# mkinitcpio preset file for the 'linux' package

ALL_config="/etc/mkinitcpio.conf"
ALL_kver="/boot/vmlinuz-linux"

PRESETS=('default' 'fallback')

#default_config="/etc/mkinitcpio.conf"
default_image="/boot/initramfs-linux.img"
#default_options=""

#fallback_config="/etc/mkinitcpio.conf"
fallback_image="/boot/initramfs-linux-fallback.img"
fallback_options="-S autodetect"

从最后一行可以看出,这initramfs-linux-fallback.img与initramfs-linux.img区别就是其禁用了autodetect钩子,而autodetect钩子的功能为“通过生成模块白名单缩减 initramfs 的大小,白名单中仅包含 sysfs 中扫描到的模块。”,也就是说,initramfs-linux-fallback.img的不同,便是其一股脑的将许多用不到的东西,也添加进了initramfs。

也就是说,对于一般的桌面系统,这个initramfs-linux-fallback.img实际上就是个鸡肋,如果你的系统一直能正常启动,那你根本不需要它,可以删掉。但手动删除了initramfs-linux-fallback.img后,在每次内核更新时它都又会自动生成,要想一劳永逸,我们还需要修改刚才的/etc/mkinitcpio.d/linux.preset文件,删掉fallback的配置:(记着备份原版)

# mkinitcpio preset file for the 'linux' package

ALL_config="/etc/mkinitcpio.conf"
ALL_kver="/boot/vmlinuz-linux"

PRESETS=('default')

#default_config="/etc/mkinitcpio.conf"
default_image="/boot/initramfs-linux.img"
#default_options=""

这样,EFI分区就可以剩下一小半的空间,足够WIndows10正常更新。

作者:WuSiYu

学生,Web开发者,智能硬件&IOT爱好者

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注