在 /etc/default/grub 中添加内核启动参数,需修改 GRUB_CMDLINE_LINUX 行(非 _DEFAULT),在引号内追加空格分隔的参数(如 rd.driver.blacklist=nouveau net.ifnames=0),保留原有参数以防启动失败;修改后必须执行 sudo grub2-mkconfig -o /boot/grub2/grub.cfg 生效,并通过 cat /proc/cmdline 验证。

怎么在 /etc/default/grub 里加内核启动参数
修改内核启动参数,本质是改 GRUB 引导时传给 kernel 的命令行参数,不是改 /etc/sysctl.conf——后者管的是系统运行时的内核行为,两者完全不重叠。
直接编辑 /etc/default/grub,找到 GRUB_CMDLINE_LINUX 这一行(不是 GRUB_CMDLINE_LINUX_DEFAULT,CentOS 7 默认用前者):
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet"
在引号内追加你需要的参数,多个参数用空格分隔。例如要禁用 nouveau 驱动、固定网卡名、关闭透明大页:
rd.driver.blacklist=nouveaunet.ifnames=0 biosdevname=0transparent_hugepage=never
注意:不要删掉原有参数,否则可能丢掉 root 分区识别或 LVM 支持,导致无法启动。
改完必须执行 grub2-mkconfig -o /boot/grub2/grub.cfg
编辑完 /etc/default/grub 只是改了模板,GRUB 实际读的是 /boot/grub2/grub.cfg,这个文件是自动生成的,不能手改。
必须运行:
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
常见错误:
- 漏掉
-o /boot/grub2/grub.cfg,命令就只打印结果到屏幕,没写入文件 - 路径写成
/boot/grub/grub.cfg(少了个2),在 CentOS 7/8 上会失败 - 没加
sudo,提示 Permission denied ——/boot下文件只能 root 写
执行后会看到类似 Generating grub configuration file ... done,才算真正生效。
CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离
如何验证参数已生效
重启后,用下面任一方式确认参数是否进到 kernel 命令行里:
-
cat /proc/cmdline—— 最直接,显示当前 kernel 实际收到的全部启动参数 -
dmesg | head -20—— 开机早期日志里也会打印 cmdline - 启动时按
e进入 GRUB 编辑模式,光标移到第二行(以linux16或linux开头),看末尾有没有你加的参数
如果没出现,90% 是 grub2-mkconfig 没成功执行,或者改错了配置文件(比如误改了 /etc/default/grub.d/*.cfg 下的碎片文件)。
grubby 工具适合临时或单次调整
如果你只想让**下一次启动**带某个参数(比如调试用),不用改全局配置,grubby 更安全:
sudo grubby --update-kernel=ALL --args="systemd.log_level=debug"
它会为所有 kernel menuentry 加上该参数;也可以指定某一个:
sudo grubby --update-kernel="/boot/vmlinuz-3.10.0-1160.el7.x86_64" --args="init=/bin/bash"
但注意:grubby 不是默认安装的,CentOS 7 需先 yum install -y grubby;CentOS 8+ 可能需 dnf install -y grubby。
这种改法不会污染 /etc/default/grub,但每次内核更新(如 yum update kernel)后,新内核条目不会自动继承这些参数,得重新跑一遍 grubby。
最易被忽略的一点:改启动参数后,一定要验证 /proc/cmdline,而不是只信 grub2-mkconfig 的输出。很多问题出在配置生成后被其他工具(比如 cloud-init、anaconda 残留脚本)悄悄覆盖,或者 /boot 分区满了导致写入失败却无报错。

















