跳转至

1. initrams介绍

initramfs(initial RAM filesystem)是一个临时的根文件系统,initramfs的主要目的是开机过程或者装机过程中挂载用户根文件系统。虽然内核也能够挂载根文件系统,但是用户根文件系统可能会在任意类型设备和任意文件系统上,内核如果包含所有类型设备和文件系统的驱动会变得很臃肿,难以维护,因此将相关的设备驱动放入initramfs中。

1.1 initramfs的工作流程

以下是 initramfs 如何找到并挂载根文件系统的过程

img

2 initramfs的查看

2.1 安装dracut

dnf install dracut -y

2.2 解压查看当前系统上的initramfs

mkdir initramfs_content&&cd initramfs_content
/usr/lib/dracut/skipcpio /boot/initramfs-$(uname -r).img | zcat | cpio -id

可以看到其目录结构为:

>ls
bin  dev  etc  init  lib  lib64  proc  root  run  sbin  shutdown  sys  sysroot  tmp  usr  var

2.3 使用lsinitrd查看initramfs

lsinitrd /boot/initramfs-$(uname -r).img

3 为当前系统重新制作initramfs

当操作系统出现如下情况时,我们需要重新为其制作initramfs

    1. 内核更新: 当您更新系统的 Linux 内核版本时,需要创建一个与新内核版本匹配的 initramfs 映像。
    1. 添加/删除硬件设备驱动: 如果您需要在 initramfs 中添加新的设备驱动,或者从中删除已有的设备驱动时,需要重新制作 initramfs。这确保在引导过程中,新添加的驱动可以被正确加载,从而支持系统中新增的硬件。
    1. 更改文件系统: 如果您更改了根文件系统的类型(例如,从 ext4 切换为 xfs),需要重新制作 initramfs,以确保引导过程中使用正确的文件系统驱动。

若是设备驱动和文件系统的更改,在重新制作initramfs前,需修改dracut.conf

3.1 配置dracut.conf

dracut.conf 是一个用于配置和定制 dracut 的设置的配置文件。它允许您修改 initramfs 映像的各种属性,包括要包含的驱动程序、文件系统支持、压缩格式等。 dracut 会在构建initramfs(初始化 RAM 文件系统)映像时读取该文件中的设置。

dracut.conf 涉及 /etc/dracut.conf; /etc/dracut.conf.d/*.conf;/usr/lib/dracut/dracut.conf.d/*.conf 其在 dracut 的初始化阶段加载。命令行参数将覆盖此处设置的任何值。 注意

    1. 任何 /etc/dracut.conf.d/*.conf文件都可以覆盖//etc/dracut.conf中的值 。配置文件按字母数字顺序读取。
    1. /etc/dracut.conf/etc/dracut.conf.d/*.conf 的设置优先级最高,将覆盖 /usr/lib/dracut/dracut.conf.d/*.conf 中的相应设置

使用文本编辑器打开 /etc/dracut.conf

添加内容如下

# 添加 Intel Pro/1000 网络适配器 (e1000e)  AHCI 驱动
add_drivers+=" e1000e "

# 系统使用 ext4 文件系统
filesystems+=" ext4 "

3.2重新制作initramfs

dracut -f --kver $(uname -r)

查看重新制作的initramfs是否包含我们所需的驱动

> lsinitrd /boot/initramfs-$(uname -r).img | grep e1000e
drwxr-xr-x   2 root     root            0 Apr 28 17:22 usr/lib/modules/6.1.26-2303.1.0.ocs23.x86_64/kernel/drivers/net/ethernet/intel/e1000e
-rw-r--r--   1 root     root       146356 Apr 28 17:22 usr/lib/modules/6.1.26-2303.1.0.ocs23.x86_64/kernel/drivers/net/ethernet/intel/e1000e/e1000e.ko.xz

3.3 重启判断是否生效

执行 reboot,重启成功后,使用 dmesg查看与驱动模块相关的日志条目

> dmesg | grep e1000
[    2.339278] e1000: Intel(R) PRO/1000 Network Driver
[    2.339279] e1000: Copyright (c) 1999-2006 Intel Corporation.
[    2.714188] e1000 0000:02:01.0 eth0: (PCI:66MHz:32-bit) 00:0c:29:9e:d0:4f
[    2.714196] e1000 0000:02:01.0 eth0: Intel(R) PRO/1000 Network Connection
[    2.716442] e1000 0000:02:01.0 ens33: renamed from eth0
[    5.055971] e1000: ens33 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None