定時帰る術-grubを変更したい場合は？

grubについて話そうと思って、仕組みまでは触らず、設定の話


# 定義ファイルはどこ
■/etc/grub*.cfg

「/etc/grub*.cfg」がインクになっていて、インク先が実際の「grub.cfg」ファイル

①8系

どっちかだけの形
UEFIの場合：/boot/efi/EFI/redhat/grub.cfg
BIOSの場合：/boot/grub2/grub.cfg


```
[root@suica ~]# ll /etc/grub*.cfg
lrwxrwxrwx. 1 root root 31  9月 10  2022 /etc/grub2-efi.cfg -> ../boot/efi/EFI/redhat/grub.cfg
[root@suica ~]# find / -name grub.cfg
/boot/efi/EFI/redhat/grub.cfg
```

②9系
「UEFI」か「BIOS」にもかかわらず、両方もっている


```
[root@test9-3 ~]# ll /etc/grub*.cfg
lrwxrwxrwx. 1 root root 22  9月  8 00:51 /etc/grub2-efi.cfg -> ../boot/grub2/grub.cfg
lrwxrwxrwx. 1 root root 22  9月  8 00:51 /etc/grub2.cfg -> ../boot/grub2/grub.cfg
[root@test9-3 ~]# find / -name grub.cfg
/boot/efi/EFI/redhat/grub.cfg
/boot/grub2/grub.cfg
```

「/boot/efi/EFI/redhat/grub.cfg」の中身を見てみよう。
非常にシンプルな内容となり、「kernelopts」などは書かれていない

```
[root@test9-3 ~]# cat /boot/efi/EFI/redhat/grub.cfg
search --no-floppy --fs-uuid --set=dev 3d314f99-9760-4cbc-be0a-dc3adcc7237b
set prefix=($dev)/grub2

export $prefix
configfile $prefix/grub.cfg
```


追ってみよう
「dev」は「/boot」のことを指しているね。
なので、「configfile」が「/boot/grub2/grub.cfg」になることがわかった。

```
[root@test9-3 ~]# blkid |grep 3d314f99-9760-4cbc-be0a-dc3adcc7237b
/dev/sda2: UUID="3d314f99-9760-4cbc-be0a-dc3adcc7237b" TYPE="xfs" PARTUUID="3921e04f-94b4-437f-b418-3e2050dcbf2c"
[root@test9-3 ~]# df -h | grep /dev/sda2
/dev/sda2               960M  185M  776M   20% /boot

```


# 結論
①「/boot/efi/EFI/redhat/grub.cfg」は「/boot/grub2/grub.cfg」を読み込んでブートする
②UEFIでもBIOSでも、「/boot/grub2/grub.cfg」だけ認識すれば大丈夫
③「/boot/grub2/grub.cfg」には詳細情報が書かれているので、「grub2-mkconfig -o」の出力先は「/boot/grub2/grub.cfg」一選になる
（grub2-mkconfig -o /boot/grub2/grub.cfg）
④「vi」で「grub.cfg」を変更しようとする勇者がいないと思うけど、いい子の皆さん、ブートローダーを変更したい場合は、「/etc/default/grub」を変更して、「grub2-mkconfig」で「grub.cfg」を変更するようにしよう

⑤「grubby」コマンドでも「/etc/default/grub」の「GRUB_CMDLINE_LINUX」を変更できるので、活用してみよう
（「--args」後ろの内容がそのまま「grub.cfg」に反映されるので、気をつけてくださいね）
↓は川口がよく使うモノ（selinuxの無効化とipv6の無効化）
grubby --update-kernel ALL --args "selinux=0 ipv6.disable=1"
↑の実行すると「/etc/default/grub」の「GRUB_CMDLINE_LINUX」の後ろに「selinux=0 ipv6.disable=1」が追加される形になる。

ipv6の無効化を削除（有効にする）
grubby --update-kernel ALL --remove-args ipv6.disable
（「 --remove-args」の場合は、「=」からのは指定しても、しなくてもOK）

⑥「grub.cfg」が「/etc/default/grub」だけではなく、「/etc/grub.d」配下のも読み込める

# 「grub.cfg」の変更流れ
変更前確認
```
[root@test9-3 ~]# 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/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap"
GRUB_DISABLE_RECOVERY="true"
GRUB_ENABLE_BLSCFG=true
```


selinux、ipv6を無効化にする（例）
（「vi /etc/default/grub」でもいいし ）
```
[root@test9-3 ~]# grubby --update-kernel ALL --args "selinux=0 ipv6.disable=1"
```

実行後確認
```
[root@test9-3 ~]# 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/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap selinux=0 ipv6.disable=1"
GRUB_DISABLE_RECOVERY="true"
GRUB_ENABLE_BLSCFG=true
```

「grub2-mkconfig」をやる前、一応「grub.cfg」を見てみよう。
```
[root@test9-3 ~]# grep kernelopts /boot/grub2/grub.cfg  | grep -v "#"
if [ -z "${kernelopts}" ]; then
  set kernelopts="root=/dev/mapper/rhel-root ro resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap "
```

「/etc/default/grub」で新しい「grub.cfg」を作る
```
[root@test9-3 ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Adding boot menu entry for UEFI Firmware Settings ...
done
```

最後、確認してOSを再起動すればOK
```
[root@test9-3 ~]#  grep kernelopts /boot/grub2/grub.cfg  | grep -v "#"
if [ -z "${kernelopts}" ]; then
  set kernelopts="root=/dev/mapper/rhel-root ro resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap selinux=0 ipv6.disable=1
```


以上