记一次排查lvm删除swap卷后不开机的问题

默认分类 · 2024-10-30

好久没上来写东西了,上班的杂事越来越多了,本来图闲才来的,现在根本闲不了一点,手上一堆烂事等着做,人都麻了

最近进了一批新机器,全部装pve来替代原来的vmware,原来的虚拟机都比较大,要清理一部分数据,因为vmware workstation不支持热扩容,很多虚拟机都是挂了很多块虚拟盘,再用lvm合并空间的方式扩容,迁移的话多块虚拟盘不好迁,要提前合并在一起

这批虚拟机不知道为什么都用lvm分了swap的空间,一部分机器开了swap,一部分只是分了空间却没启用,不是很懂当时装系统的人在想什么,在这批虚拟机里有一台比较离谱的:
lsblk.jpg
可以看到这台机器lvm分了49g的swap却没有开启
先看看fstab
fstab.jpg
swap是注释的状态,应该问题不大,直接删掉swap的lv
delete-swap-lv.jpg
当时觉得没问题,还顺手处理了几个别的问题,之后就把这台虚拟机导出了
没想到导入的时候开机开不起来了
boot-failed.jpg
直接人傻了,明明fstab里注释掉了swap,也执行了systemctl daemon-reload,为什么开机的时候还会找swap?
没办法,只能在旧机器上回滚快照,把虚拟机开起来临时跑,翻了好多systemd的文档,也试过重新生成initramfs,以为在系统的哪个角落有遗漏的swap配置没有修改,折腾又回滚了好几次,都没解决问题

百思不得其解,瞄到在开机失败打出的日志里/dev/centos/root就在/dev/centos/swap上面几行出现,说明在这个阶段rootswap是一起进行的,根分区应该还没挂载才对,原来系统里的配置应该不会影响开机过程。结合日志中出现的dracut字样,怀疑问题出在boot的早期阶段,应该出现在加载内核和initramfs这一段,initramfs包含了内核和一些基本的驱动模块,之前也试过重新生成initramfs了,问题应该不在这里,那就只能在内核加载这里了

重启到grub界面时,中断自动启动的倒计时,选中启动项后按e编辑
grub.jpg
grub-edit.jpg
果然,看到了理应被删掉的swap,前面还挨着root,问题就在这里

删掉swap后按ctrl+x启动,顺利进入系统,但grub里编辑只是临时生效,还要继续修改grub的启动配置
先看看当前配置里有没有swap
grep-grub-config.jpg
果然有,但不能直接编辑/boot/grub2里的文件,这个文件会被/etc/default/grub覆盖

来到/etc/default/grub,看到了swap字样,估计是安装系统时安装器自动生成的配置,如果是后期手动分的swap,应该不至于来改grub的配置
default-grub.jpg
去掉swap之后重新生成grub配置,问题解决
grub-gen-new-config.jpg

后来在arch的wiki里查了下,rd.lvm.lv这个参数是由dracut提供的,参数的解释如下:

rd.lvm.lv=<volume group name>/<logical volume name>
only activate the logical volumes with the given name. rd.lvm.lv can be specified multiple times on the kernel command line.

看起来是用来激活lv的,可惜文档里也没有进一步解释它的作用

Theme Jasmine by Kent Liao