InitRAMFS、Dracut 和 Dracut Emergency Shell

[ad_1]

Linux启动过程 在进入决赛之前经历了几个阶段 图形或多用户目标. initramfs 阶段发生在安装根文件系统之前。 Dracut 是一个用于管理 initramfs 的工具。 dracut 紧急 shell 是一种交互模式,可以在加载 initramfs 时启动。

本文将展示如何使用 dracut 命令修改 initramfs。 还将演示一些可以从 dracut 紧急外壳运行的基本故障排除命令。

InitRAMFS

初始文件 代表初始随机存取存储器文件系统。 在现代 Linux 系统上,它通常存储在 /boot 目录下的文件中。 为其构建的内核版本将包含在文件名中。 每次安装新内核时都会生成一个新的 initramfs。

Linux 引导目录

默认情况下, Fedora 保留内核的前两个版本及其关联的 initramfs。 可以通过修改 /etc/dnf/dnf.conf 文件中 installonly_limit 设置的值来更改此默认值。

您可以使用 lsinitrd 命令列出 initramfs 存档的内容:

LsInitRD 命令

上面的屏幕截图显示我的 initramfs 存档包含 nouveau GPU 驱动程序。 modinfo 命令告诉我 nouveau 驱动程序支持多种型号的 NVIDIA 显卡。 lspci 命令显示我电脑的 PCI 插槽中有一块 NVIDIA GeForce 显卡。 存档中还包含几个基本的 Unix 命令,例如 cat 和 cp。

默认情况下,initramfs 存档仅包含特定计算机所需的驱动程序。 这允许存档更小并减少计算机启动所需的时间。

Dracut 命令

dracut 命令可用于修改 initramfs 的内容。 例如,如果您要将硬盘驱动器移到新计算机上,您可能希望暂时将所有驱动程序包含在 initramfs 中,以确保操作系统可以加载到新计算机上。 为此,您将运行以下命令:

# dracut –force –no-hostonly

force 参数告诉 dracut 可以覆盖现有的 initramfs 存档。 no-hostonly 参数覆盖仅包含与当前运行的计算机密切相关的驱动程序的默认行为,并导致 dracut 将所有驱动程序包含在 initramfs 中。

默认情况下,dracut 在当前运行的内核的 initramfs 上运行。 您可以使用 uname 命令显示您当前运行的 Linux 内核版本:

$ uname -r
5.0.5-200.fc29.x86_64

在新计算机上安装并运行硬盘驱动器后,您可以重新运行 dracut 命令以仅使用新计算机所需的驱动程序重新生成 initramfs:

# dracut –force

还有一些参数可以将任意驱动程序、dracut 模块和文件添加到 initramfs 存档中。 您还可以为 dracut 创建配置文件并将它们保存在 /etc/dracut.conf.d 目录下,以便您的自定义将自动应用于安装新内核时生成的所有新 initramfs 存档。 与往常一样,请查看手册页以了解特定于您计算机上安装的 dracut 版本的详细信息:

$ man dracut

Dracut 应急外壳

Dracut 应急外壳

有时在计算机启动过程的 initramfs 阶段会出现问题。 发生这种情况时,您会在屏幕上看到“进入紧急模式”,然后是 shell 提示。 这让您有机会尝试手动修复问题并继续启动过程。

作为一个有点人为的例子,假设我不小心删除了引导加载程序配置中的一个重要内核参数:

# sed -i ‘s/ rd.lvm.lv=fedora/root / /’ /boot/grub2/grub.cfg

下次我重新启动计算机时,它似乎会在尝试查找根分区时挂起几分钟并最终放弃并进入紧急 shell。

从紧急外壳,我可以输入 journalctl 然后使用 空间 通过启动日志向下翻页的键。 在接近日志末尾时,我看到一条警告,内容为“/dev/mapper/fedora-root 不存在”。 然后我可以使用 ls 命令找出存在的内容:

# ls /dev/mapper
控制 fedora-swap

嗯,fedora-root LVM 卷似乎丢失了。 让我们看看我能用 lvm 命令找到什么:

#lvm lvscan
ACTIVE ‘/dev/fedora/swap’ [3.85 GiB] 继承
不活动的 ‘/dev/fedora/home’ [22.85 GiB] 继承
不活动的 ‘/dev/fedora/root’ [46.80 GiB] 继承

啊哈! 这是我的根分区。 它只是不活动。 我需要做的就是激活它并退出紧急外壳以继续启动过程:

# lvm lvchange -ay fedora/root
# 出口

这 Fedora 登录画面

上面的例子只展示了基本概念。 你可以检查 故障排除部分德拉库特指南 再举几个例子。

可以通过将 rd.break 参数添加到内核命令行来手动访问 dracut 紧急 shell。 如果您需要在启动任何系统服务之前访问您的文件,这会很有用。

查看 dracut.kernel 手册页以了解有关您的 dracut 版本支持哪些内核选项的详细信息:

$ man dracut.kernel

[ad_2]

Related Posts