Field note / 2026.07.12

Linux 删除 swap 后启动卡住:GRUB/initramfs 残留引用修复

4 分钟阅读 技术笔记

故障背景

原系统删除了 swap 逻辑卷或 swap 分区,但没有同步更新以下启动配置:

  • /etc/default/grub
  • GRUB/BLS 内核启动参数
  • initramfs
  • 可能还有 /etc/fstab

系统重启后,内核启动参数仍尝试查找已经不存在的 swap:

rd.lvm.lv=rl/swap
resume=UUID=3f2484ae-a1d5-494b-8803-030af11ee671

这会导致 dracut 在启动阶段等待不存在的设备,表现为启动卡住、超时或进入 emergency mode。

实际发现的问题

在 rescue 环境挂载并进入原系统后,确认:

/etc/fstab 中已经没有有效的 swap 条目,但:

/etc/default/grub 和现有内核启动项中仍残留:

rd.lvm.lv=rl/swap
resume=UUID=3f2484ae-a1d5-494b-8803-030af11ee671

其中这个 UUID 已经不存在。

修复流程

1. 挂载原系统

mkdir -p /mnt/sysimage
mount /dev/mapper/rl-root /mnt/sysimage
mount /dev/sda2 /mnt/sysimage/boot

绑定必要目录:

mount --bind /dev  /mnt/sysimage/dev
mount --bind /proc /mnt/sysimage/proc
mount --bind /sys  /mnt/sysimage/sys
mount --bind /run  /mnt/sysimage/run

进入原系统:

chroot /mnt/sysimage

注意:块设备不能用 mount --bind 挂载,根卷应直接使用 mount /dev/mapper/rl-root /mnt/sysimage

2. 清除 GRUB 默认参数中的旧 swap 引用

/etc/default/grub 中删除:

rd.lvm.lv=rl/swap
resume=UUID=3f2484ae-a1d5-494b-8803-030af11ee671

处理后应只保留根逻辑卷,例如:

GRUB_CMDLINE_LINUX="crashkernel=2G-64G:256M,64G-:512M rd.lvm.lv=rl/root"

3. 更新所有内核启动项

grubby --update-kernel=ALL \
  --remove-args="resume=UUID=3f2484ae-a1d5-494b-8803-030af11ee671 rd.lvm.lv=rl/swap"

验证:

grubby --info=ALL | grep -E 'kernel=|args='

确认所有启动项中不再出现 resume=rd.lvm.lv=rl/swap

4. 重建 initramfs

dracut -f --regenerate-all

该步骤用于清除 initramfs 中缓存的旧 swap 和 resume 配置。

5. 重建 GRUB 配置

grub2-mkconfig -o /boot/grub2/grub.cfg

期间出现的 LVM 文件描述符泄漏警告通常不影响生成结果。

6. 最终验证

grep -RniE \
'3f2484ae-a1d5-494b-8803-030af11ee671|rd\.lvm\.lv=rl/swap|resume=' \
/etc/default/grub /boot/grub2/grub.cfg /boot/loader/entries 2>/dev/null

预期无输出。

同时确认 grubby --info=ALL 中的启动参数只保留 rd.lvm.lv=rl/root,并确认 /etc/fstab 中没有有效 swap 条目。

修复结果

  • 旧 swap UUID 已从 GRUB 默认配置中移除
  • rd.lvm.lv=rl/swap 已从所有内核启动项中移除
  • initramfs 已重新生成
  • GRUB 配置已重新生成
  • /etc/fstab 中没有残留有效 swap 配置
  • 系统已具备正常重启条件

核心结论

删除 swap 后,不能只修改磁盘或 LVM。还必须同步清理:

  • /etc/fstab
  • /etc/default/grub
  • BLS/grubby 内核参数
  • initramfs
  • GRUB 配置

本次重启异常的直接原因,是 GRUB 和 initramfs 仍引用已删除的 swap,而不是 GRUB 引导程序本身损坏。