use*_*291 5 lvm initramfs dracut centos7
由于 Meltdown 问题,我将 CentOS7 内核从 3.10.0-693.11.1 更新到 3.10.0-693.11.6,但更新后,我无法启动,因为 centos drop 到 dracut 时出现错误
warning /dev/mapper/centos-root does not exist
dracut:/# ls /dev/mapper/
control
dracut:/#
Run Code Online (Sandbox Code Playgroud)
看来我的 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
Run Code Online (Sandbox Code Playgroud)
我发现工具的问题通常是由 /sbin 中缺少二进制文件引起的,所以我安装了稳定内核并检查:
root@localhost ~# ls /sbin/lvm
/sbin/lvm
root@localhost ~# which lvm
/sbin/lvm
Run Code Online (Sandbox Code Playgroud)
因此二进制文件位于正确的位置,但由于某种原因 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
Run Code Online (Sandbox Code Playgroud)
在这里我遇到了一点困难:我浏览了 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
========================================================================
Run Code Online (Sandbox Code Playgroud)
我试图将 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
Run Code Online (Sandbox Code Playgroud)
添加 -v 并没有指出任何有用的东西。
我遇到了这个问题。我通过以下方式修复了它:
登录 Live CD(恢复也应该没问题)
cp /etc/dracut.conf /etc/dracut.conf.bak
nano /etc/dracut.conf
Run Code Online (Sandbox Code Playgroud)
将以下行修改为:
# 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"
Run Code Online (Sandbox Code Playgroud)
(你可能不需要 mdadmconf,我添加它是因为我有 Raid。)
为我的内核重新运行 dracut -f。重启。
这让我解决了lvm问题。我现在遇到了 sysroot 未安装的问题(它使我进入恢复 shell)。修复后我会更新。
归档时间: |
|
查看次数: |
19384 次 |
最近记录: |