0
1

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

Posted at

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

以上

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1