2026年5月17日

2026年5月17日

GRUBの設定変更と起動修復の方法|カーネルパラメータ・既定カーネル・再インストール

GRUB は多くの Linux ディストリビューションで使われているブートローダーで、起動メニューの表示、起動するカーネルの選択、カーネルに渡すパラメータの指定を受け持ちます。

この記事では、GRUB の設定を変える基本の手順と、GRUB が壊れて OS が起動しなくなったときの修復手順を説明します。Ubuntu・Debian 系と、RHEL・AlmaLinux・Rocky Linux などの RHEL 系では、コマンドと推奨される手順が異なるので分けて書いています。内容は2026年10月時点の Ubuntu 24.04 と RHEL 9 系の公式ドキュメントに基づいています。

起動にかかわる設定なので、作業の前にスナップショットやバックアップを取り、リモートのサーバーではコンソール(VPS やクラウドの管理画面の画面接続など)を使える状態にしておいてください。

設定ファイルと反映のしかた

GRUB の設定は /etc/default/grub に書き、コマンドで起動用の grub.cfg を生成し直して反映します。grub.cfg は自動生成されるファイルなので、直接編集しません(次の生成で上書きされます)。

ディストリビューション 生成するコマンド 生成されるファイル
Ubuntu・Debian sudo update-grub /boot/grub/grub.cfg
RHEL 9 系 sudo grub2-mkconfig -o /boot/grub2/grub.cfg /boot/grub2/grub.cfg

update-grub は grub-mkconfig -o /boot/grub/grub.cfg を実行する Debian 系のコマンドです。RHEL 9 系では UEFI の機種でも本体は /boot/grub2/grub.cfg で、/boot/efi/EFI/redhat/grub.cfg は本体を読み込むだけの小さなファイルです。こちらを grub2-mkconfig で上書きしないでください。

/etc/default/grub の主な項目

Ubuntu 24.04 の初期状態は次のとおりです。

GRUB_DEFAULT=0
GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=0
GRUB_DISTRIBUTOR=`( . /etc/os-release; echo ${NAME:-Ubuntu} ) 2>/dev/null || echo Ubuntu`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""
項目 意味
GRUB_DEFAULT 既定で起動するメニュー項目。0 は先頭。saved にすると前回選んだ項目などを記憶して使う
GRUB_TIMEOUT メニューを表示して待つ秒数
GRUB_TIMEOUT_STYLE menu でメニューを表示、hidden で表示せずに待つ
GRUB_CMDLINE_LINUX すべての起動項目(リカバリーモードを含む)でカーネルに渡すパラメータ
GRUB_CMDLINE_LINUX_DEFAULT 通常の起動項目だけに渡すパラメータ(リカバリーモードには付かない)

起動メニューを表示する

Ubuntu の初期状態ではメニューが表示されません。毎回表示したいときは次のように変えて、sudo update-grub を実行します。

GRUB_TIMEOUT_STYLE=menu
GRUB_TIMEOUT=5

設定を変えずに一度だけメニューを出したいときは、電源を入れた直後に、UEFI の機種では Esc キーを、BIOS の機種では Shift キーを押します。

カーネルパラメータを追加する

一度だけ試す

起動メニューで項目を選んで e キーを押すと、その起動の設定を編集できます。linux で始まる行の末尾にパラメータを書き足し、Ctrl+X(または F10)で起動します。この変更は保存されないので、パラメータを試すときや、設定の誤りで起動しないときの回避に使えます。

恒久的に設定する(Ubuntu・Debian)

/etc/default/grub の GRUB_CMDLINE_LINUX_DEFAULT(すべての項目に付けたい場合は GRUB_CMDLINE_LINUX)に書き足し、grub.cfg を生成し直します。

sudo nano /etc/default/grub
# 例: GRUB_CMDLINE_LINUX_DEFAULT="quiet splash transparent_hugepage=never"

sudo update-grub
sudo reboot

恒久的に設定する(RHEL 9 系)

RHEL 9 系では、カーネルごとの起動設定が /boot/loader/entries/ に置かれる方式(BootLoaderSpec)になっており、パラメータの変更には grubby を使うのが公式の手順です。

# すべてのカーネルにパラメータを追加する
sudo grubby --update-kernel=ALL --args="transparent_hugepage=never"

# パラメータを削除する
sudo grubby --update-kernel=ALL --remove-args="transparent_hugepage"

# 各カーネルの設定を確認する
sudo grubby --info=ALL

反映を確かめる

再起動したあと、今のカーネルに渡されたパラメータを確認します。

cat /proc/cmdline

既定で起動するカーネルを変える

Ubuntu・Debian

Ubuntu では、古いカーネルは「Advanced options for Ubuntu」という下位メニュー(submenu)の中に入っています。そのため GRUB_DEFAULT=2 のような単純な番号では、下位メニューの中の項目を選べません。項目の名前を確認して、下位メニューの名前>項目の名前 の形で指定します。

# メニュー項目と下位メニューの名前を一覧する
grep -E "^\s*(menuentry|submenu) " /boot/grub/grub.cfg | cut -d "'" -f2
# /etc/default/grub の例(名前は上の一覧の表示に合わせる)
GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 6.8.0-45-generic"

番号で書く場合は "1>2"(上から2番目にある下位メニューの、中の3番目の項目)のように、どちらも0から数えます。変更したら sudo update-grub を実行します。

起動する項目をコマンドで切り替えたいときは、GRUB_DEFAULT=saved にして update-grub を実行したうえで、次のコマンドを使います。

# 既定の項目を変える
sudo grub-set-default "Advanced options for Ubuntu>Ubuntu, with Linux 6.8.0-45-generic"

# 次の1回の起動だけ別の項目にする(新しいカーネルを試すときに便利)
sudo grub-reboot "Advanced options for Ubuntu>Ubuntu, with Linux 6.8.0-45-generic"

RHEL 9 系

# インストールされているカーネルを確認する
sudo grubby --info=ALL | grep -E "^(index|kernel)"

# 既定のカーネルを変える
sudo grubby --set-default=/boot/vmlinuz-5.14.0-503.11.1.el9_5.x86_64

# 今の既定を確認する
sudo grubby --default-kernel

カーネルのファイル名は、--info=ALL の表示に合わせてください。

起動しなくなった GRUB を修復する

GRUB 自体が壊れた、ディスクを入れ替えた、別の OS のインストールで起動の設定が上書きされた、といった場合は、ライブ USB(インストールメディア)から起動して GRUB を入れ直します。

1. 起動方式と対象のパーティションを確かめる

ライブ USB で起動し、端末を開いて確認します。

# UEFI で起動しているか(表示されれば UEFI、エラーなら BIOS)
ls /sys/firmware/efi

# ディスクとパーティション、ファイルシステムの種類を確認する
lsblk -f

ライブ USB も、インストール済みの OS と同じ起動方式(UEFI か BIOS か)で起動してください。UEFI の場合は、vfat で数百 MB 程度の EFI システムパーティション(ESP)も確認しておきます。ディスク名は環境によって /dev/sda・/dev/vda・/dev/nvme0n1 などと変わります。以下は、ルートが /dev/sda2、ESP が /dev/sda1 の例です。LVM を使っている場合は、先に sudo vgchange -ay でボリュームを有効にし、/dev/mapper/... をマウントします。

2. マウントして chroot する(Ubuntu・Debian)

# インストール済みの OS のルートをマウントする
sudo mount /dev/sda2 /mnt

# /boot を別のパーティションにしている場合はマウントする
# sudo mount /dev/sda3 /mnt/boot

# UEFI の場合は ESP をマウントする
sudo mount /dev/sda1 /mnt/boot/efi

# chroot の中でコマンドが動くように、仮想ファイルシステムをつなぐ
for d in /dev /dev/pts /proc /sys /run; do sudo mount --bind $d /mnt$d; done

sudo chroot /mnt

3. GRUB を入れ直す(Ubuntu・Debian)

chroot の中で実行します。grub-install の対象は、BIOS の場合はパーティション(/dev/sda1)ではなくディスク全体(/dev/sda)です。

# BIOS の場合
grub-install /dev/sda
update-grub
# UEFI の場合: EFI 変数が見えるようにする(中身が空のときだけマウントする)
[ -n "$(ls -A /sys/firmware/efi/efivars)" ] || mount -t efivarfs efivarfs /sys/firmware/efi/efivars

grub-install --target=x86_64-efi --efi-directory=/boot/efi
update-grub

Ubuntu でセキュアブートを使っている場合は、署名つきのパッケージも入れ直しておきます(apt install --reinstall grub-efi-amd64-signed shim-signed)。

終わったら chroot を抜けて、マウントを外して再起動します。

exit
sudo umount -R /mnt
sudo reboot

RHEL 9 系の場合

RHEL 9 系では、インストールメディアの「Troubleshooting」から「Rescue a … system」を選ぶと、インストール済みのシステムが /mnt/sysroot にマウントされます。chroot /mnt/sysroot で入ってから作業します。

# BIOS の場合
grub2-install /dev/sda
grub2-mkconfig -o /boot/grub2/grub.cfg
# UEFI の場合: grub2-install は使わず、パッケージを入れ直す
dnf reinstall grub2-efi shim
grub2-mkconfig -o /boot/grub2/grub.cfg

RHEL 系の UEFI では、セキュアブートに対応した署名つきの GRUB がパッケージで配られているため、grub2-install ではなくパッケージの入れ直しで修復するのが公式の手順です。インストールされているパッケージ名は rpm -qa | grep -E "grub2-efi|shim" で確認できます。

注意点

  • grub.cfg は直接編集せず、/etc/default/grub(RHEL 9 系は grubby)で変更して生成し直します。
  • 設定を変えたら、再起動の前に grub.cfg の生成がエラーなく終わったことを確認します。
  • 古いカーネルを1つ以上残しておくと、新しいカーネルで起動できなかったときに、起動メニューから古いカーネルを選んで復旧できます。
  • grub-install / grub2-install の対象ディスクを間違えると、別のディスクの起動設定を上書きします。lsblk で確かめてから実行します。

まとめ

  • 設定は /etc/default/grub に書き、Ubuntu・Debian は update-grub、RHEL 9 系は grub2-mkconfig -o /boot/grub2/grub.cfg で反映する
  • カーネルパラメータは GRUB_CMDLINE_LINUX_DEFAULT / GRUB_CMDLINE_LINUX、RHEL 9 系は grubby --update-kernel=ALL --args=... で追加する
  • 既定カーネルは、Ubuntu では下位メニューを含む名前で GRUB_DEFAULT に指定するか grub-set-default を使い、RHEL 9 系は grubby --set-default を使う
  • 修復はライブ USB から起動し、マウントと chroot のあとで grub-install と update-grub を実行する。RHEL 系の UEFI は dnf reinstall grub2-efi shim
  • 反映後は cat /proc/cmdline で確認する

関連記事:

お気軽にご相談ください

お見積りへ お問い合わせへ
▲