为什么很多 Linux 发行版要搞 2 个 initramfs?

2023-02-25 20:44:13 +08:00
 wniming

比如 fedora37 安装后有 2 个 initramfs:

/boot/initramfs-6.0.7-301.fc37.x86_64.img
/boot/initramfs-0-rescue-14f9bf682cca4304af812f6a5b826d7d.img

我知道一个用于正常启动系统,另一个用于启动不起来的时候救援系统,但我不知道为什么要搞 2 个,搞 2 个有什么好处?

2991 次点击
所在节点    Linux
17 条回复
churchmice
2023-02-25 20:48:03 +08:00
我有点错乱,你都说了有一个是用来应付启动不了的情况,就像大楼里面有正常 1 情况用的电梯和楼梯,还有着火时用的消防通道,这道理很难理解吗
Noicdi
2023-02-25 20:54:04 +08:00
有可能搞两个的好处是当第一个启动不起来的时候用第二个救援系统?
slack
2023-02-25 20:56:12 +08:00
Fedora 这种激进更新的发行版有这种设置不奇怪,我用 Archlinux 也装了稳定版内核和 LTS 内核。
CrossEntropy
2023-02-25 20:57:37 +08:00
谜底就在谜面中
wniming
2023-02-25 21:04:09 +08:00
@churchmice @Noicdi 我觉得没必要搞 2 个,让正常那个也有救援系统的功能不久行了?

我会问这个问题是因为我发现我把装在台式机的 Linux 系统拷贝到移动硬盘里然后用笔记本启动,用正常的 initramfs 启动不起来,用救援的就可以,然后我把救援的 initramfs 的 /lib/modules/6.0.7-301.fc37.x86_64/目录添加到正常的 initramfs 里就能正常启动了,我觉得救援的 initramfs 相比正常的 initramfs 的区别不过就是自带的程序多了一点,内核模块也多了一点,就这点区别实在是没必要搞 2 个 initramfs 。
RuralHunter
2023-02-25 21:06:51 +08:00
如果 initramfs 损坏了呢?
wniming
2023-02-25 21:07:12 +08:00
我就是想把台式机配置好的系统拷贝到笔记本上使用,懒得在笔记本上重装重新配置一遍系统,只需要拷贝过去改改 initramfs 和 grub 就能正常启动了
wniming
2023-02-25 21:08:25 +08:00
@RuralHunter 怎么会损坏呢?一般发行版都是会指定 ro 内核参数去挂载 initramfs 的
heiher
2023-02-25 21:29:13 +08:00
@wniming #5 说的没错,原因应该是 SSD/NVME 等高速外存出来前,机械硬盘上启动时间有较为明显的差别吧。
Ayahuasec
2023-02-25 21:34:20 +08:00
我记得 Debian 在安装一些软件包的时候会重新生成 initrd ,把新增的部分可执行程序一起打包进去。
我猜测这种两套 initramfs 的设计应该类似,rescue 的那个是默认的 initramfs ,另一个是按照用户安装软件包的需求,增加了软件功能的 initramfs 。但是可能在生成的过程中造成了意料之外的问题,所以留一个 rescue 的版本给用户应急用。
stein42
2023-02-25 21:38:22 +08:00
第二个 initramfs 包含所有的内核模块。
第一个 initramfs 只包含必需的内核模块,占用内存更少,启动更快,但是改变或添加硬件后可能无法启动。
这时候可以用第二个启动,然后重新构建 initramfs 。

如果你只需要一个 initramfs 的话,可以修改配置,重新构建,再删除多余的 initramfs 。
arch linux 使用 mkinitcpio ,参考: https://wiki.archlinux.org/title/Mkinitcpio
fedora 使用 dracut ,有些不同。
ziseyinzi
2023-02-25 21:47:25 +08:00
一个是根据当前硬件和配置生成的,另一个是大而全的。后者影响启动速度。
deorth
2023-02-25 23:16:46 +08:00
相当于 windows 的安全模式
Tink
2023-02-25 23:56:56 +08:00
第二个是救援啊,你看名字
msg7086
2023-02-26 12:47:54 +08:00
@wniming #8 怎么会损坏呢?

比如升级或者安装内核的时候生成的 initramfs 是坏的?
ericgui
2023-02-26 13:43:38 +08:00
一个用于正常启动系统,另一个用于启动不起来的时候救援系统
suifengdaren
2023-02-26 16:16:05 +08:00
lsinitrd 看一下不就知道

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/919171

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX