CentOS7 Dracut lvm 命令未找到

CentOS7 Dracut lvm 命令未找到

由于 Meltdown 问题,我将 CentOS7 内核从 3.10.0-693.11.1 更新到了 3.10.0-693.11.6,但更新之后,由于 centos 出现错误,无法启动

warning /dev/mapper/centos-root does not exist

dracut:/# ls /dev/mapper/
control
dracut:/# 

看起来我的 initrd 配置错误了,我仍然可以毫无问题地启动 3.10.0-693.11.1。我正在尝试调试这个问题(网上有很多资源),但看起来我在这里遗漏了一些东西,因为我无法执行 lvm 命令

dracut:/# lvm scan
sh: lvm: command not found
dracut:/# ls /etc/lvm/lvm.conf
ls: cannot access /etc/lvm/lvm.conf: No file or dictionary
dracut:/# ls /etc/lvm
ls: cannot access /etc/lvm: No file or dictionary

我发现工具问题通常是由于 /sbin 中缺少二进制文件引起的,因此我创建了稳定内核并检查:

root@localhost ~# ls /sbin/lvm
/sbin/lvm
root@localhost ~# which lvm
/sbin/lvm

因此二进制文件位于正确的位置,但由于某种原因,dracut 没有在 /sbin 内看到它。

我对 3.10.0-693.11.1 和 3.10.0-693.11.6 的 grub 配置几乎相同

#: after update kernel params
linux16 /vmlinuz-3.10.0-693.11.6.el7.x86_64 root=/dev/mapper/centos-root ro crashkernel=128M rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rdshell 
#: before update kernel params
linux16 /vmlinuz-3.10.0-693.11.1.el7.x86_64 root=/dev/mapper/centos-root ro crashkernel=128M rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rdshell

这里我遇到了一点困难:我查看了 dracut 手册页,发现那里有很多 LVM 选项,我推测自动发现不起作用,但为什么它在以前的内核上有效,而新内核却有问题?此外,我如何在 initram 上获取可用的 lvm 工具,以便进一步调试它?

感谢您的任何建议!

更新:运行 lsinitrd -m -k 显示 ramdisk 中没有 lvm 模块

========================================================================
Image: /boot/initramfs-3.10.0-693.11.6.el7.x86_64.img: 18M
========================================================================
Early CPIO image
========================================================================
drwxr-xr-x   3 root     root            0 Jan 22 11:15 .
-rw-r--r--   1 root     root            2 Jan 22 11:15 early_cpio
drwxr-xr-x   3 root     root            0 Jan 22 11:15 kernel
drwxr-xr-x   3 root     root            0 Jan 22 11:15 kernel/x86
drwxr-xr-x   2 root     root            0 Jan 22 11:15 kernel/x86    /microcode
-rw-r--r--   1 root     root        24576 Jan 22 11:15 kernel/x86    /microcode/GenuineIntel.bin
========================================================================
Version: dracut-033-502.el7

dracut modules:
bash
nss-softokn
i18n
network
ifcfg
drm
plymouth
kernel-modules
qemu
resume
rootfs-block
terminfo
udev-rules
biosdevname
systemd
usrmount
base
fs-lib
shutdown
========================================================================

我试图将 lvm 内核驱动程序添加到 initram 映像,但不幸的是失败了,没有任何明显问题:

dracut --add-drivers  lvm /boot/initramfs-3.10.0-693.11.6.el7.x86_64.img

dracut[27939]: Failed to install module lvm

添加 -v 并没有指向任何有用的东西。

答案1

我遇到了这个问题。我通过以下方法解决了它:

登录到 live cd(恢复也应该没问题)

cp /etc/dracut.conf /etc/dracut.conf.bak

nano /etc/dracut.conf

将下列行修改为:

# dracut modules to add to the default
add_dracutmodules+="lvm"

# install local /etc/mdadm.conf
mdadmconf="yes"

# install local /etc/lvm/lvm.conf
lvmconf="yes"

(您可能不需要 mdadmconf,因为我有 Raid,所以我添加了它。)

为我的内核重新运行 dracut -f。重新启动。

这让我解决了 lvm 问题。我现在遇到了 sysroot 无法挂载的问题(它让我进入恢复 shell)。修复后我会更新。

答案2

确保该lvm2包已安装。

yum install -y lvm2

相关内容