はじめに
GRUB2でブートパラメータの変更方法は1つしかないと思っていましたが
実は2パターン存在していました。(もしかしたらまだあるかも知れないけど)
せっかくなのでまとめてみようと思います。
まずは、GRUBの話から書いてみます。
GRUBの話
GRUBでは、/boot/grub/grub.confを
viコマンドなどで直接編集して使用していました。
このファイルを直接編集するのは、とても危険です。
余計な空白をいれてしまったり、改行を消してしまうと
それだけでシステムが立ち上がらなくなってしまいます。
(/bootは起動に関わるファイルが格納されているので繊細な部分です。)
GRUB2の話
そこで、
「設定ファイルといえば/etc以下なんだから、/etc/default/grubをviコマンドなどで変更しよう」
と運用方法が変更されました。
ただ、実際に起動時に使用しているのは、/boot/grub2/grub.cfgです。
どのように、このファイルへ反映させるかというと
grub2-mkconfigコマンドを使用します。
# grub2-mkconfig -o /boot/grub2/grub.cfg
検証
CentOS8.2.2004で確認していきます。
まずは、grub.cfgのバックアップをとります。
# cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bk
デフォルトのブートパラメータを確認します。
# cat /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="resume=/dev/mapper/cl-swap rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet"
GRUB_DISABLE_RECOVERY="true"
GRUB_ENABLE_BLSCFG=true
GRUB_CMDLINE値から「rhgb」と「quiet」を削除してみます。
ちなみに、この2つの文字列を削除すると、
OS起動時にブートログを表示をすることができます。
(デフォルトは、ブートログの表示を抑制します。)
# vi /etc/default/grub
# cat /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
#GRUB_CMDLINE_LINUX="resume=/dev/mapper/cl-swap rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet"
GRUB_CMDLINE_LINUX="resume=/dev/mapper/cl-swap rd.lvm.lv=cl/root rd.lvm.lv=cl/swap"
GRUB_DISABLE_RECOVERY="true"
GRUB_ENABLE_BLSCFG=true
このままでは、grub.cfgファイルには反映されていません。
# grep kernelopts /boot/grub2/grub.cfg
set default_kernelopts="root=/dev/mapper/cl-root ro resume=/dev/mapper/cl-swap rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet "
grub.cfgファイルに反映させます。
# grub2-mkconfig -o /boot/grub2/grub.cfg
# grep kernelopts /boot/grub2/grub.cfg
set default_kernelopts="root=/dev/mapper/cl-root ro resume=/dev/mapper/cl-swap rd.lvm.lv=cl/root rd.lvm.lv=cl/swap "
無事に反映されました。
/etc/default/grubを使わずに変更もできる
ようやく本題です。これが書きたかった
/etc/default/grubを編集する方法は、
LPICやLinuCなどのLinux認定試験の中で出てきました。
これ以外にも、grub2-editenvコマンドを使用することも可能です。
検証
今度は、grub2-editenvコマンドを使って変更してみます。
やりたいことは、先程削除した、「rhgb」と「quiet」を追加してみます。
まずは、先程同様に確認をします。
# grep kernelopts /boot/grub2/grub.cfg
set default_kernelopts="root=/dev/mapper/cl-root ro resume=/dev/mapper/cl-swap rd.lvm.lv=cl/root rd.lvm.lv=cl/swap "
grub2-editenvでも確認できます。
# grub2-editenv list | grep kernelopts
kernelopts=root=/dev/mapper/cl-root ro resume=/dev/mapper/cl-swap rd.lvm.lv=cl/root
ブートパラメータ情報は、/boot/grub2/grubenvに格納されています。
# grep kernelopts /boot/grub2/grubenv
kernelopts=root=/dev/mapper/cl-root ro resume=/dev/mapper/cl-swap rd.lvm.lv=cl/root rd.lvm.lv=cl/swap
ブートパラメータを変更します。
# grub2-editenv - set "kernelopts=root=/dev/mapper/cl-root ro resume=/dev/mapper/cl-swap rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet"
変更できたか確認します。
# grub2-editenv list | grep kernel
kernelopts=root=/dev/mapper/cl-root ro resume=/dev/mapper/cl-swap rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet
変更できました!!
補足
CentOS6では、ブートローダはGRUBを採用しています。
設定ファイルは、/etc/grub/grub.confです。
CentOS7以降では、ブートローダはGRUB2を採用しています。
設定ファイルは、/etc/grub2/grub.cfgです。
まとめ
GRUB2ではブートパラメータの変更方法が2通りあることを確認しました。
1つ目は
/etc/default/grubを編集し、grub2-mkconfigで反映させていく方法
2つ目は
grub2-editenvを実行し、kerneloptsの値を変更する方法
こちらは、grub2-mkconfig -o /boot/grub2/grub.cfgを実行しないという特徴がありました。