「カーネルパラメータを変更したくて grub.cfg を直接編集したら、次の grub2-mkconfig で上書きされてしまった」
「設定が消えないようにしたいが、/etc/default/grub を毎回触るのも怖い」
RHEL 9 系や Rocky Linux を運用していると、こういった場面に出くわすことがあります。
この記事では、grubby コマンドを使って grub.cfg を直接編集せずにカーネルコマンドラインパラメータを安全に管理する方法を解説します。RHEL 9 系~Rocky Linux 9 を想定環境として説明します。基本操作(--info・--args・--remove-args)から、Transparent Huge Pages の無効化・mitigations 設定変更などの実務パターン、反映されない場合のトラブルシュートまで、ひととおりカバーします。
この記事のポイント
・grubbyはRHEL9/Rocky Linuxでgrub.cfgを直接編集しない安全なカーネルパラメータ管理ツール
・--update-kernel=ALL --argsでパラメータ追加、--remove-argsで削除できる
・THP無効化・mitigations・iommu設定など実務パターンもコマンド1本で永続化できる
・変更後はgrubby --infoとcat /proc/cmdlineで設定反映を必ず確認する
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
grubbyとは何か|grub.cfgを直接編集してはいけない理由
grubby は、RHEL 系 Linux(RHEL・CentOS・Rocky Linux・AlmaLinux など)で標準搭載されているカーネルエントリ管理ツールです。GRUB2 の設定ファイルを直接書き換えずに、カーネルコマンドラインパラメータの追加・削除・確認ができます。
grub.cfg を直接編集してはいけない根本的な理由は、grub2-mkconfig で上書きされる点にあります。
RHEL 系 Linux では、次のタイミングで grub.cfg が再生成されます。
・カーネル更新(dnf update kernel)時
・grub2-mkconfig を手動実行した時
・kernel-install スクリプトが走った時
直接 grub.cfg を書き換えても、次のカーネルアップデートで設定が消えます。また、grub.cfg は厳格な構文を持つ生成済みファイルであり、誤った編集はブート不能に直結します。grubby を使うと /etc/default/grub や grub.cfg の整合性を保ちながら安全に設定できます。
grubbyがサポートする主な環境
| ディストリビューション | 標準搭載 | 備考 |
|---|---|---|
| RHEL 8/9 | ○ | grubby パッケージとして同梱 |
| Rocky Linux 8/9 | ○ | RHEL 互換、動作は同様 |
| AlmaLinux 8/9 | ○ | RHEL 互換 |
| CentOS Stream 9 | ○ | 標準搭載 |
| Ubuntu / Debian 系 | × | grub-editenv や /etc/default/grub で管理 |
Ubuntu / Debian 系では grubby が標準搭載されていません。この記事は RHEL 9 系・Rocky Linux 9 を前提としています。
grubbyの基本コマンド|構文と主要オプション
1. インストール確認とバージョン確認
まず grubby がインストールされているか確認します。
# インストール確認 rpm -q grubby # 出力例(環境により異なります) grubby-8.40-66.el9.x86_64 # インストールされていない場合 dnf install grubby -y
2. 現在のカーネルエントリを確認する(--info)
grubby --info=ALL で全カーネルエントリの設定を確認できます。出力に args= 行があり、現在有効なカーネルコマンドラインパラメータが表示されます。
# 全カーネルエントリの情報を表示 grubby --info=ALL # 出力例(環境により異なります) index=0 kernel="/boot/vmlinuz-5.14.0-427.28.1.el9_4.x86_64" args="ro crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M resume=/dev/mapper/rl-swap rd.lvm.lv=rl/root rd.lvm.lv=rl/swap rhgb quiet" root="/dev/mapper/rl-root" initrd="/boot/initramfs-5.14.0-427.28.1.el9_4.x86_64.img" title="Rocky Linux 9.4" id="2f3d...(省略)...d1"
特定カーネルだけ確認したい場合は、カーネルパスを指定します。
# 現在起動中のカーネルの情報を確認 grubby --info=/boot/vmlinuz-$(uname -r)
3. デフォルトカーネルを確認する
# デフォルトカーネルのパスを表示 grubby --default-kernel # 出力例(環境により異なります) /boot/vmlinuz-5.14.0-427.28.1.el9_4.x86_64 # デフォルトカーネルのインデックス番号を表示 grubby --default-index # 出力例(環境により異なります) 0
インデックス番号は --info=ALL の出力にある index=N と対応します。
カーネルパラメータを変更する手順
1. パラメータを追加する(--args)
カーネルパラメータを追加するには --update-kernel と --args を組み合わせます。
# 全カーネルエントリにパラメータを追加する場合 grubby --update-kernel=ALL --args="パラメータ名=値" # 特定インデックス番号のカーネルにのみ追加する場合 grubby --update-kernel=0 --args="パラメータ名=値" # デフォルトカーネルのみに追加する場合 grubby --update-kernel="$(grubby --default-kernel)" --args="パラメータ名=値"
--update-kernel=ALL を指定すると、インストールされている全カーネルエントリに同じパラメータが追加されます。本番環境では まず1つのカーネルで試して再起動後に確認してから全適用する方が安全です。
2. パラメータを削除する(--remove-args)
# 全カーネルエントリからパラメータを削除する grubby --update-kernel=ALL --remove-args="パラメータ名" # 値付きパラメータを削除する("="以降も含めて指定) grubby --update-kernel=ALL --remove-args="transparent_hugepages=never" # パラメータ名だけ指定してもOK(値は自動マッチ) grubby --update-kernel=ALL --remove-args="transparent_hugepages"
3. 変更結果を確認して再起動する
変更後は再起動前に grubby --info で正しく設定されているか確認します。
# 変更内容を確認(args行を確認する) grubby --info=ALL | grep -E "^(kernel|args)=" # 出力例(環境により異なります) kernel="/boot/vmlinuz-5.14.0-427.28.1.el9_4.x86_64" args="ro crashkernel=... transparent_hugepages=never rhgb quiet" # 問題なければ再起動する systemctl reboot # 再起動後:実際に有効なパラメータを確認する cat /proc/cmdline
/proc/cmdline は現在起動中のカーネルが実際に受け取ったコマンドライン引数を表示します。grubby で設定した内容が正しく反映されているかをここで最終確認します。
実務でよく使うカーネルパラメータの設定例
1. Transparent Huge Pages(THP)を無効化する
MySQL、Redis、PostgreSQL、MongoDB などのデータベースサーバーでは、Transparent Huge Pages(THP)を無効化することが推奨されています。THP が有効なままだとメモリのコンパクション処理が非同期に走り、レイテンシのスパイクや khugepagedプロセスのCPU 使用率上昇を引き起こすことがあります。
# THP を無効化する(カーネルコマンドラインで永続設定) grubby --update-kernel=ALL --args="transparent_hugepages=never" # 設定を確認する grubby --info=ALL | grep args # 再起動後、THP の状態を確認する cat /sys/kernel/mm/transparent_hugepage/enabled # [always] madvise never → 有効な状態 # always madvise [never] → 無効化されている # 再起動後の /proc/cmdline でも確認できる cat /proc/cmdline | grep transparent_hugepages
なお、再起動不要の一時的な無効化は /sys/kernel/mm/transparent_hugepage/enabled への書き込みで対応できますが、再起動で元に戻ります。本番サーバーでは grubby による永続化が必要です。
2. CPU 脆弱性対策(mitigations)の制御
Spectre・Meltdown 対策パッチは CPU パフォーマンスに影響します。パフォーマンスを優先したいテスト環境や、物理的に隔離された専用サーバーでは mitigations=off を検討することがあります。
# mitigations を無効化(本番環境への適用は慎重に) grubby --update-kernel=ALL --args="mitigations=off" # mitigations の現在状態を確認する(再起動後) cat /sys/devices/system/cpu/vulnerabilities/spectre_v2 # 出力例: Not affected または Mitigation: Retpolines # mitigations を元に戻す grubby --update-kernel=ALL --remove-args="mitigations"
注意: mitigations=off はセキュリティリスクを伴います。本番サーバーやマルチテナント環境には適用しないことを強く推奨します。
3. quietパラメータを削除して詳細なブートメッセージを表示する
通常、RHEL 系 Linux は quiet パラメータが設定されており、ブート時の詳細メッセージが抑制されています。起動トラブルの調査時には quiet を外すとカーネルの初期化メッセージが確認できます。
# quiet を削除して詳細ブートメッセージを有効化する grubby --update-kernel=ALL --remove-args="quiet" # rhgb(グラフィカルブート)も合わせて外す場合 grubby --update-kernel=ALL --remove-args="rhgb quiet" # 確認 grubby --info=ALL | grep args
4. iommu 設定(仮想化・VFIO パススルー用)
KVM ホストで VFIO を使った PCI パススルーをする場合や、デバイスのメモリマッピング問題を解消したい場合に iommu パラメータを追加します。
# Intel CPU の場合 grubby --update-kernel=ALL --args="intel_iommu=on iommu=pt" # AMD CPU の場合 grubby --update-kernel=ALL --args="amd_iommu=on iommu=pt" # iommu が有効化されているか確認(再起動後) dmesg | grep -i iommu | head -5
grubbyが効かない場合のトラブルシュート
1. grubby設定がgrub2-mkconfigで上書きされる問題
grubby が設定した args は grub.cfg に書き込まれますが、grub2-mkconfig が実行されると /etc/default/grub の GRUB_CMDLINE_LINUX を元に grub.cfg が再生成されます。カーネルアップデート時にこの再生成が走り、grubby で追加したパラメータが消えることがあります。
解決策: grubby での変更を永続的に保持するには、/etc/default/grub の GRUB_CMDLINE_LINUX にも同じパラメータを追記しておきます。
# /etc/default/grub の GRUB_CMDLINE_LINUX を確認する grep GRUB_CMDLINE_LINUX /etc/default/grub # 出力例(環境により異なります) GRUB_CMDLINE_LINUX="crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M resume=/dev/mapper/rl-swap rd.lvm.lv=rl/root rd.lvm.lv=rl/swap" # パラメータを追記する(エディタで末尾に追加) vi /etc/default/grub # GRUB_CMDLINE_LINUX="... transparent_hugepages=never" # /etc/default/grub 変更後は grub2-mkconfig で grub.cfg を再生成する # BIOS 環境の場合 grub2-mkconfig -o /boot/grub2/grub.cfg # UEFI 環境(Rocky Linux の標準パス)の場合 grub2-mkconfig -o /boot/efi/EFI/rocky/grub.cfg
2. UEFI環境とBIOS環境での grub.cfg パスの違い
grubby は自動的に適切な grub.cfg を検出して書き換えます。ただし grub2-mkconfig を手動実行する際はパスを正しく指定する必要があります。
| 環境 | grub.cfg の場所 | 確認方法 |
|---|---|---|
| BIOS(Legacy) | /boot/grub2/grub.cfg | ls /boot/grub2/grub.cfg |
| UEFI(Rocky Linux) | /boot/efi/EFI/rocky/grub.cfg | ls /boot/efi/EFI/rocky/grub.cfg |
| UEFI(RHEL) | /boot/efi/EFI/redhat/grub.cfg | ls /boot/efi/EFI/redhat/grub.cfg |
# UEFI 環境か BIOS 環境かを確認する [ -d /sys/firmware/efi ] && echo "UEFI" || echo "BIOS"
3. カーネルパラメータが反映されない時のデバッグ手順
再起動後に設定が反映されていないと感じたときの確認手順を整理します。
# ステップ1: grubby の設定を確認する(args 行に期待パラメータがあるか) grubby --info=ALL | grep -E "^(kernel|args)=" # ステップ2: 実際に起動したカーネルのパラメータを確認する cat /proc/cmdline # ステップ3: /proc/cmdline に期待パラメータがない場合 # → 複数のカーネルエントリがあり、別エントリで起動した可能性がある # デフォルトカーネルを確認する grubby --default-kernel grubby --default-index # ステップ4: /proc/cmdline にあるがアプリ側で効いていない場合 # → アプリケーション側の設定が優先されていないか確認する # THP の場合: sysfs の現在値を確認する cat /sys/kernel/mm/transparent_hugepage/enabled
grubby の設定変更は必ず再起動後に有効になります。再起動後の応答時間の変化を測定したい場合は、systemd-analyze で起動時間計測すると再起動後のブート品質も合わせて確認できます。
本記事のまとめ
grubby コマンドのポイントをまとめます。
| やりたいこと | コマンド |
|---|---|
| 全カーネルエントリのパラメータを確認する | grubby --info=ALL |
| デフォルトカーネルを確認する | grubby --default-kernel |
| 全カーネルにパラメータを追加する | grubby --update-kernel=ALL --args="パラメータ" |
| 全カーネルからパラメータを削除する | grubby --update-kernel=ALL --remove-args="パラメータ" |
| THP を無効化する(再起動後永続) | grubby --update-kernel=ALL --args="transparent_hugepages=never" |
| quietを削除してブートメッセージを表示 | grubby --update-kernel=ALL --remove-args="quiet" |
| 変更が反映されているか確認する(再起動後) | cat /proc/cmdline |
grubby を使う最大のメリットは 「grub.cfg を直接触らないこと」にあります。カーネルアップデートで設定が消えない、構文ミスでブート不能にならない、UEFI と BIOS の差を意識しなくてよい。この3点が grubby の設計思想です。
「とりあえず grub.cfg に書いた」「コピペして動いたからよし」では、いつかカーネルアップデートのタイミングで設定が消え、本番サーバーが期待通りに動かなくなります。grubby で設定したうえで cat /proc/cmdline で確認する、というセットを習慣にすると設定漏れを防げます。
GRUB 設定・カーネルパラメータチューニング・トラブルシュートのノウハウを体系的に学べる2日間のハンズオンセミナーを開催しています。
>> Linux Master Pro Seminarの詳細・申込はこちら
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら
- 前のページへ:LinuxサーバーにSNMPエージェントを設定する方法|snmpd.confのコミュニティ設定からsnmpwalkで疎通確認まで
- この記事の属するカテゴリ:Linuxサーバー構築(Rocky Linux/RHEL9)へ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。
登録無料・いつでも解除できます