linux更新grub內核啟動參數的方法


#!/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"

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM