V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
wniming
V2EX  ›  Linux

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

  •  
  •   wniming · 2023-02-25 20:44:13 +08:00 · 2649 次点击
    这是一个创建于 418 天前的主题,其中的信息可能已经有所发展或是发生改变。

    比如 fedora37 安装后有 2 个 initramfs:

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

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

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

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

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

    比如升级或者安装内核的时候生成的 initramfs 是坏的?
    ericgui
        16
    ericgui  
       2023-02-26 13:43:38 +08:00
    一个用于正常启动系统,另一个用于启动不起来的时候救援系统
    suifengdaren
        17
    suifengdaren  
       2023-02-26 16:16:05 +08:00 via Android
    lsinitrd 看一下不就知道
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4209 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 05:28 · PVG 13:28 · LAX 22:28 · JFK 01:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.