在 CentOS 系统的生命周期中,驱动的正确加载是保障硬件功能正常和系统稳定运行的基石,尤其是在系统启动阶段,关键驱动的加载机制直接决定了系统能否成功进入运行状态,理解这一过程,对于系统管理员排查和解决启动故障至关重要。

CentOS 启动与驱动加载机制
CentOS 的启动过程遵循一个清晰的链条:BIOS/UEFI 固件初始化硬件,然后调用引导加载程序(通常是 GRUB2),GRUB2 接着加载 Linux 内核(vmlinuz)和一个至关重要的初始内存盘文件。
这个初始内存盘,通常以 initramfs-<kernel-version>.img 的形式存在于 /boot 目录下,是一个临时的、在内存中运行的根文件系统,它的核心使命是在真正的根文件系统被挂载之前,提供访问该根文件系统所必需的驱动程序,如果您的根文件系统位于 LVM、软件 RAID 阵列上,或者使用了 XFS/Btrfs 等非标准文件系统,那么相应的驱动模块就必须包含在 initramfs 中,内核加载后,会解压并运行 initramfs 中的脚本,这些脚本负责加载上述驱动,识别并挂载真实的根文件系统,最后将控制权移交给根文件系统中的 systemd 进程,完成启动。
常见问题与解决方法
当驱动加载出现问题时,通常表现为启动失败或启动后硬件设备不可用,以下是两种典型场景及其解决方案。
根文件系统驱动缺失导致启动失败
这是最严重的启动问题之一,症状通常是在内核加载后,系统停止响应并报告类似 “cannot mount root filesystem” 或 “VFS: Cannot open root device” 的错误,这明确指向 initramfs 中缺少访问根文件系统所需的驱动。
解决方案:重建 initramfs
dracut 是 CentOS 用来创建和管理 initramfs 的工具,它会自动检测当前系统硬件和根文件系统类型,并将所需的所有驱动模块打包进新的 initramfs 镜像。

- 进入救援模式:使用 CentOS 安装光盘或 U 盘启动,选择 “Troubleshooting” -> “Rescue a CentOS system”。
- 切换到根环境:在救援模式下,执行
chroot /mnt/sysimage命令。 - 重建镜像:执行以下命令,强制为当前运行的内核重建
initramfs。dracut -f
如果需要为特定内核版本重建,可以使用:
dracut -f /boot/initramfs-$(uname -r).img $(uname -r)
- 重启系统:退出
chroot环境,重启计算机,问题通常能得到解决。
非关键硬件驱动未自动加载
系统虽然能正常启动,但某些硬件(如第二块网卡、特定的 HBA 卡、USB 设备等)没有被识别,这是因为这些驱动对于挂载根文件系统不是必需的,因此没有被包含在 initramfs 中,而内核在启动后也未能自动探测加载它们。
解决方案:配置系统启动时加载模块
现代 Linux 系统推荐使用 systemd 的模块加载机制。
- 创建配置文件:在
/etc/modules-load.d/目录下创建一个以.conf结尾的配置文件,my-drivers.conf。vim /etc/modules-load.d/my-drivers.conf
- 添加模块名:在文件中,每行写入一个需要加载的驱动模块名,要加载
ixgbe驱动:ixgbe - 保存并重启:保存文件后,重启系统或在当前会话中手动使用
modprobe ixgbe加载,系统在下次启动时会自动读取此配置并加载指定模块。
方法对比与小编总结
为了更清晰地理解不同场景下的处理方法,下表进行了小编总结:
| 方法 | 配置文件/命令 | 使用场景 | 优点 |
|---|---|---|---|
| 重建 initramfs | dracut -f | 根文件系统、LVM、RAID 等关键驱动缺失导致无法启动 | 解决根本的启动问题,自动化程度高 |
| modules-load.d | /etc/modules-load.d/*.conf | 非关键硬件驱动需要在启动时加载 | 官方推荐,配置清晰,易于管理 |
| 临时加载 | modprobe <module_name> | 临时测试或立即加载驱动,无需重启 | 操作快捷,不影响配置 |
相关问答FAQs
Q1: 如何检查当前 initramfs 镜像中包含了哪些驱动模块?

A: 可以使用 lsinitrd 命令来查看 initramfs 的内容,要查看其中包含的内核模块,可以结合 grep 命令使用,要查看当前内核版本 initramfs 中的所有 .ko(内核模块)文件,可以执行:
lsinitrd /boot/initramfs-$(uname -r).img | grep '.ko'
这个命令会列出所有被打包进该镜像的驱动模块,帮助您确认所需的驱动是否在内。
Q2: 我更新了内核后,新内核无法启动,提示找不到根文件系统,但旧内核正常,该怎么办?
A: 这个问题的根本原因通常是新内核的 initramfs 在生成时出现了问题,或者没有正确包含根文件系统所需的驱动,解决方法如下:
- 使用旧内核启动:在 GRUB 启动菜单中,选择旧版本的内核进入系统。
:进入系统后,首先确认新内核的版本号( uname -r显示为旧内核,可以通过ls /boot/vmlinuz-*查看所有内核版本),针对新内核版本执行dracut命令:# 假设新内核版本是 4.18.0-348.el8.x86_64 dracut -f /boot/initramfs-4.18.0-348.el8.x86_64.img 4.18.0-348.el8.x86_64
- 重启验证:完成重建后,重启电脑并选择新内核启动,问题一般会得到解决。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复