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
以上