GRUBとGRUB2のブートパラメータの変更方法についてまとめてみた

# はじめに
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を実行しないという特徴がありました。