linux更新grub内核启动参数的方法

博客指出当前做法存在三个问题,一是grub内核入口参数缺失特定场景;二是转义字符过多,逻辑复杂,可参照--install移出--kernel-args参数选项;三是NEWKERNARGS参数赋值可用字符串加方式减少grubby查询次数,并给出了参考链接。
#!/bin/bash
set -x
set -e
export PS4=+{$LINENO:${FUNCNAME[0]}}
trap 'echo "---NEWKERNARGS=$NEWKERNARGS xx=$xx------"' DEBUG

NEWKERNARGS=""
grubby --info=`/sbin/grubby --default-kernel` 2>/dev/null | grep -q crashkernel
if [ $? -ne 0 ];then
    NEWKERNARGS="--kernel-args=\"crashkernel=auto\""
fi

grubby --info=`/sbin/grubby --default-kernel` 2>/dev/null | grep -q "nopti noibrs noibpb"
if [ $? -ne 0 ];then
    NEWKERNARGS="--kernel-args=\"crashkernel=auto nopti noibrs noibpb\""
fi


/sbin/new-kernel-pkg --package kernel%{?1:-%{1}}  %{!?1:--make-default} --install %{KVERREL}%{?1:.%{1}}

上面的这种做法其实存在3个问题:

1 缺失一种场景,即是grub的内核入口参数中包含"crashkernel=auto"但不包含"nopti noibrs noibpb", 

2 转义字符使用过多,不便理解且容易出错,可参照--install将--kernel-args参数选项移出变量的赋值过程,大大简化原有逻辑和复杂度;

3 NEWKERNARGS参数的赋值其实可以采用字符串加方式,这样可以减少grubby查询次数

具体做法如下:

#!/bin/bash
set -x
set -e
export PS4=+{$LINENO:${FUNCNAME[0]}}
trap 'echo "---NEWKERNARGS=$NEWKERNARGS xx=$xx------"' DEBUG

NEWKERNARGS=""
grubby --info=`/sbin/grubby --default-kernel` 2>/dev/null | grep -q crashkernel
if [ $? -ne 0 ];then
    NEWKERNARGS="crashkernel=auto"
fi

grubby --info=`/sbin/grubby --default-kernel` 2>/dev/null | grep -q "nopti noibrs noibpb"
if [ $? -ne 0 ];then
    NEWKERNARGS=${NEWKERNARGS}"nopti noibrs noibpb"
fi

/sbin/new-kernel-pkg --package kernel%{?1:-%{1}}  %{!?1:--make-default} --install %{KVERREL}%{?1:.%{1}} --kernel-args="$NEWKERNARGS"

  

  

转载于:https://www.cnblogs.com/noxy/p/11066018.html

Linux 内核启动参数用于在系统启动时向内核传递配置信息,这些参数可以影响内核的行为,例如指定根文件系统的位置、启用或禁用某些功能等。这些参数通常通过引导加载程序(如 GRUB 或 U-Boot)传递给内核。 ### 配置 Linux 内核启动参数 #### 1. **查看当前的启动参数** 可以通过读取 `/proc/cmdline` 文件来查看当前正在运行的内核所使用的启动参数: ```bash cat /proc/cmdline ``` 该命令会显示类似以下内容的输出: ``` BOOT_IMAGE=/vmlinuz-5.4.0-80-generic root=UUID=... ro quiet splash audit=1 ``` #### 2. **修改 GRUB 中的启动参数** 对于使用 GRUB 作为引导程序的系统,可以通过编辑 `/etc/default/grub` 文件来修改默认的启动参数。其中 `GRUB_CMDLINE_LINUX` 变量用于定义传递给内核参数列表。例如,添加 `audit=1` 参数以启用审计功能: ```bash GRUB_CMDLINE_LINUX="audit=1" ``` 修改完成后,需要更新 GRUB 配置文件以使更改生效: ```bash sudo grub2-mkconfig -o /boot/grub2/grub.cfg ``` 对于基于 BIOS 的系统,GRUB 配置文件通常位于 `/boot/grub/grub.cfg`;而对于 UEFI 系统,则可能位于 `/boot/efi/EFI/<distro>/grub.cfg`。 #### 3. **临时修改启动参数** 在系统启动过程中,可以在 GRUB 菜单中按下 `e` 键来编辑当前选中的启动项。此时可以直接在 `linux` 行末尾添加或修改内核参数,例如: ``` linux /vmlinuz-5.4.0-80-generic root=UUID=... ro quiet splash audit=1 ``` 修改后按 `Ctrl+X` 或 `F10` 启动该配置。这种方式仅对当前启动有效,不会持久化保存。 #### 4. **常见内核启动参数** - `root=`:指定根文件系统的设备路径或 UUID。 - `ro/rw`:以只读 (`ro`) 或读写 (`rw`) 模式挂载根文件系统。 - `init=`:指定初始进程的路径,默认为 `/sbin/init`。 - `nomodeset`:禁用内核模式设置,适用于显卡驱动问题。 - `audit=1`:启用审计子系统[^2]。 - `console=`:指定控制台设备和波特率,例如 `console=ttyS0,115200`。 #### 5. **调试与验证** 在修改启动参数后,重启系统并检查 `/proc/cmdline` 是否包含预期的参数。此外,可以通过 `dmesg` 命令查看内核日志,确认参数是否被正确解析和应用: ```bash dmesg | grep -i cmdline ``` #### 示例代码:动态生成 GRUB 配置 以下是一个简单的 Bash 脚本示例,用于自动化更新 GRUB 配置: ```bash #!/bin/bash # 添加 audit=1 到 GRUB_CMDLINE_LINUX sudo sed -i 's/GRUB_CMDLINE_LINUX="\(.*\)"/GRUB_CMDLINE_LINUX="\1 audit=1"/' /etc/default/grub # 更新 GRUB 配置 sudo grub2-mkconfig -o /boot/grub2/grub.cfg ``` 执行此脚本后,系统将在下次启动时使用新的内核参数。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值