当遇到启动失败时,我看到系统出现 dracut 提示。
据我了解,dracut 用于生成 initramfs 的映像。我感到困惑的是,基于我正在使用一个名为“dracut”的 shell,它似乎不仅仅是一个用于生成 initramfs 的实用程序,但它实际上也是一个独立的程序启动时运行。它是否正确? - 如果上述内容正确,那么 initramfs 和 dracut 之间的区别/关系是什么?
答案1
Dracut 既是一个用于生成 initramfs 实例的工具,而且还具有所谓的 dracut 紧急 shell。 initramfs 的目的是提供一个能够查找、加载并将执行传递给根文件系统的环境。如果在此过程中任何时候出现问题,initramfs 将下降到 dracut 紧急 shell,为您提供调试/尝试修复问题的机会。
关于评论:
“我很乐意这样做。澄清一下,最初发生的情况是我有一个运行 RHEL 的 VMWare 虚拟机。由于将虚拟机直接导入 VMWare Workstation 时出现问题,我决定将虚拟机的硬盘驱动器从 ESXi 拉到新的虚拟机上但是,当我尝试启动 VM 时,我能够成功加载 GRUB 和随后的 dracut,但 dracut 无法找到根文件系统,这很奇怪,因为人们会期望如果 dracut 可以加载系统。也能够找到根文件系统。”
安装 RHEL 时,dracut 会生成 initramfs 的实例,其中仅包含与安装操作系统的硬件兼容所需的驱动程序。当我将 RHEL 实例的硬盘驱动器从一组虚拟硬件上的 ESXi 移动到 VMWare Workstation(另一组虚拟硬件)时,与内核关联的 initramfs 不再具有查找和加载根文件系统所需的适当驱动程序集。
要修复此问题,在移动硬盘之前,您需要运行dracut --force --no-hostonly
。引用https://fedoramagazine.org/initramfs-dracut-and-the-dracut-emergency-shell/
force 参数告诉 dracut 可以覆盖现有的 initramfs 存档。 no-hostonly 参数会覆盖仅包含与当前运行的计算机密切相关的驱动程序的默认行为,并导致 dracut 将所有驱动程序包含在 initramfs 中。
这意味着 dracut 现在将变得“臃肿”,并且拥有移动硬盘驱动器时所需的所有适用驱动程序。完成硬盘驱动器的移动后,您必须重新运行 dracut 以dracut --force
重新生成 dracut 的轻量级版本。