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 | crashkernel=auto # kdump 预留内存 |
必须移除的项
resume=/dev/mapper/cl-swaprd.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 | vi /etc/default/grub |
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 | vi /etc/fstab |
如果你想彻底清理 swap LV(可选但更干净)
1 | lvremove /dev/cl/swap |
这一步是不可逆的,但对纯服务器 / 容器宿主机通常是加分项。
6.重启验证
1 | reboot |
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,启动路径更短、更确定。