centos8关闭基于lvm的swap虚拟内存

问题

#/etc/default/grub

GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/cl-swap rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet"   #移除swap

env

  • centos8.5
  • lvm-swap

解决

GRUB_CMDLINE_LINUX 中,“移除 swap”并不是一个抽象概念,而是同时处理内核启动参数 + 系统 swap 资源两件事。
你这行参数里,与 swap 强相关的只有两处

  • resume=/dev/mapper/cl-swap(休眠 / hibernate 恢复点)
  • rd.lvm.lv=cl/swap(initramfs 阶段激活 swap LV)

1.当前参数逐项拆解

1
2
3
4
5
crashkernel=auto        # kdump 预留内存
resume=/dev/mapper/cl-swap # 休眠恢复,强依赖 swap
rd.lvm.lv=cl/root # root LV,必须保留
rd.lvm.lv=cl/swap # initramfs 激活 swap
rhgb quiet # 启动图形与静默

必须移除的项

  • resume=/dev/mapper/cl-swap
  • rd.lvm.lv=cl/swap

否则后果包括:

  • initramfs 仍然扫描并激活 swap LV
  • systemd 可能报 swap device timeout
  • resume 失败导致启动延迟(30s+ 很常见)

2.精简后的 GRUB 参数(移除 swap)

1
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=cl/root rhgb quiet"

这是最干净、无副作用的版本。


3.编辑 GRUB 配置

1
2
3
4
vi /etc/default/grub
...
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=cl/root rhgb quiet"
...

4.重新生成 grub.cfg

  • RHEL / CentOS / Rocky / Alma(BIOS)
1
grub2-mkconfig -o /boot/grub2/grub.cfg
  • UEFI
1
grub2-mkconfig -o /boot/efi/EFI/*/grub.cfg

5.关闭当前 swap

1
swapoff -a

防止开机自动启用 swap

1
2
3
vi /etc/fstab
#注释或删除类似行:
/dev/mapper/cl-swap swap swap defaults 0 0

如果你想彻底清理 swap LV(可选但更干净)

1
lvremove /dev/cl/swap

这一步是不可逆的,但对纯服务器 / 容器宿主机通常是加分项。


6.重启验证

1
2
3
4
5
reboot
free -m

swapon --show
free -h

7.启动阶段流转

flowchart LR
    GRUB --> Kernel
    Kernel --> initramfs
    initramfs --> LVM_scan
    LVM_scan --> root_lv
    LVM_scan -.-> swap_lv

移除 rd.lvm.lv=cl/swap 后,initramfs 不再扫描 swap LV,启动路径更短、更确定。