1 カーネルおよびシステム・ブートの管理

この章では、Oracle Linuxブート・プロセスと、GRand統合ブート・ローダー(GRUB)バージョン2およびブート関連のカーネル・パラメータを構成および使用する方法について説明します。

ヒント:

Oracle Linuxでのブート・カーネルの構成に関するハンズオン・チュートリアルとビデオ・デモについては、Oracle Linuxのブート・カーネルの管理を参照してください。

ブート・プロセスについて

Oracle Linuxのブート・プロセスを理解すると、システムのブート時に問題のトラブルシューティングに役立ちます。ブート・プロセスには複数のファイルが含まれ、これらのファイルでのエラーがブートの問題の一般的な原因になります。ブート・プロセスと構成は、ハードウェアがシステム・ブートを処理するために、UEFIファームウェアを使用しているかレガシーBIOSを使用しているかによって異なります。

UEFIベースのブートについて

Oracle Linuxリリースを実行しているUEFIベースのシステムでは、システム・ブート・プロセスでは次のシーケンスが使用されます:

  1. システムのUEFIファームウェアは、電源オン・セルフテスト(POST)を実行し、周辺デバイスおよびハード・ディスクを検出して初期化します。

  2. UEFIは、EFIシステム・パーティション(ESP)として識別する特定のグローバル一意識別子(GUID)を持つGPTパーティションを検索します。このパーティションには、ブート・ローダーなどのEFIアプリケーションが含まれています。複数のブート・デバイスが存在する場合、UEFIブート・マネージャは、ブート・マネージャで定義された順序に基づいて適切なESPを使用します。efibootmgrツールでは、デフォルト定義を使用しない場合に、別の順序を定義できます。

  3. UEFIブート・マネージャは、セキュア・ブートが有効になっているかどうかを確認します。セキュア・ブートが無効の場合、ブート・マネージャはESPでGRUB 2ブート・ローダーを実行します。

    それ以外の場合は、ブート・マネージャがブート・ローダーから証明書をリクエストし、UEFIセキュア・ブート・キー・データベースに格納されているキーに対してこの証明書を検証します。証明書検証プロセスを処理するために、2段階のブート・プロセスを実行するように環境が構成され、GRUB 2ブート・ローダーをロードする前に、認定を実行するshim.efiアプリケーションが最初にロードされます。証明書が有効な場合は、ブート・ローダーが実行され、次に、ロードするように構成されているカーネルが検証されます。

    セキュア・ブートの詳細は、『Oracle Linux: UEFI Secure Bootの操作』を参照してください。

  4. ブート・ローダーはvmlinuzカーネル・イメージ・ファイルをメモリーにロードし、initramfsイメージ・ファイルのコンテンツを一時的なメモリー・ベースのファイル・システム(tmpfs)に抽出します。

  5. カーネルは、ルート・ファイル・システムへのアクセスに必要なドライバ・モジュールをinitramfsファイル・システムからロードします。

  6. カーネルは、プロセスID 1 (PID 1)でsystemdプロセスを開始します。「systemdサービス・マネージャについて」を参照してください。

  7. systemdは、定義されているすべての追加プロセスを実行します。

    ノート:

    独自のsystemdユニットを定義して、ブート・プロセス中に処理する他のアクションを指定します。この方法は、/etc/rc.localファイルを使用するよりも優先される方法です。

BIOSベースのブートについて

Oracle Linuxリリースを実行しているBIOSベースのシステムでは、ブート・プロセスは次のとおりです:

  1. システムのBIOSが電源オン・セルフテスト(POST)を実行し、周辺デバイスおよびハード・ディスクを検出して初期化します。

  2. BIOSがマスター・ブート・レコード(MBR)をブート・デバイスからメモリーに読み取ります。MBRは、そのデバイス上のパーティションの構成、パーティション表、およびエラー検出に使用されるブート署名に関する情報を格納します。MBRにはブート・ローダー・プログラム(GRUB 2)へのポインタも含まれています。ブート・プログラム自体は、同じデバイス上または別のデバイス上に存在できます。

  3. ブート・ローダーはvmlinuzカーネル・イメージ・ファイルをメモリーにロードし、initramfsイメージ・ファイルのコンテンツを一時的なメモリー・ベースのファイル・システム(tmpfs)に抽出します。

  4. カーネルは、ルート・ファイル・システムへのアクセスに必要なドライバ・モジュールをinitramfsファイル・システムからロードします。

  5. カーネルは、プロセスID 1 (PID 1)でsystemdプロセスを開始します。詳細は、「systemdサービス・マネージャについて」を参照してください。

  6. systemdは、定義されているすべての追加プロセスを実行します。

    ノート:

    ユーザーのsystemdユニットを定義して、ブート・プロセス中に処理する他のアクションを指定します。この方法は、/etc/rc.localファイルを使用するよりも優先される方法です。

GRUB 2ブート・ローダーについて

GRUB 2では、Oracle Linuxに加えて、多数の固有のオペレーティング・システムをロードおよびチェーンロードできます。GRUB 2は、ファイル・システムとカーネル実行可能ファイルの形式を認識します。したがって、ブート・デバイス上のカーネルの正確な場所を知らなくても、任意のOSをロードできます。GRUB 2で必要となるのは、ファイル名と、カーネルをロードするドライブ・パーティションのみです。この情報はGRUB 2メニューを使用して、またはコマンドラインで入力して構成できます。

GRUB 2の動作は構成ファイルに基づいています。BIOSベース・システムでは、構成ファイルは/boot/grub2/grub.cfgです。UEFIベース・システムでは、構成ファイルは/boot/efi/EFI/redhat/grub.cfgです。各カーネル・バージョンのブート・パラメータは、/boot/loader/entriesの独立した構成ファイルに格納されます。各カーネル構成は、machine_id-kernel_version.el8.arch.confというファイル名で格納されます。

ノート:

GRUB 2構成ファイルは直接編集しないでください。

grub2-mkconfigコマンドでは、/etc/grub.dのテンプレート・スクリプトおよび構成ファイル/etc/default/grubから取得したメニュー構成設定を使用して構成ファイルを生成します。

デフォルトのメニュー・エントリは/etc/default/grubGRUB_DEFAULTパラメータの値によって設定されます。GRUB_DEFAULTsavedに設定すると、grub2-set-defaultおよびgrub2-rebootコマンドを使用して、デフォルト・エントリを指定できます。コマンドgrub2-set-defaultは、以降のすべての再起動のためのデフォルト・エントリを設定し、grub2-rebootは次の再起動専用のデフォルト・エントリを設定します。

GRUB_DEFAULTの値を数値、あるいはgrub2-rebootまたはgrub2-set-defaultへの引数として指定すると、GRUB 2では構成ファイルのメニュー・エントリを、最初のエントリを0としてカウントします。

GRUB 2の使用、構成およびカスタマイズの詳細は、/usr/share/doc/grub2-tools-2.00/grub.htmlとしてインストールされているGNU GRUBマニュアルを参照してください。

Linuxカーネルについて

The Linux Foundationは、オープン・ソース開発者が様々なオープン・テクノロジ・プロジェクトをコーディング、管理およびスケーリングするためのハブを提供します。また、存在するLinuxカーネル組織も管理し、Oracle Linuxで使用されるものなど、すべてのLinuxディストリビューションのコアにある様々なバージョンのLinuxカーネルを配布します。Linuxカーネルは、コンピュータ・ハードウェアと、Oracle Linuxで実行されるユーザー領域アプリケーション間の相互作用を管理します。

次のLinuxカーネルのいずれかをOracle Linuxとともにインストールして実行する必要があります:

  • Unbreakable Enterprise Kernel (UEK): UEKはThe Linux Foundationの安定したカーネル・ブランチに基づいており、顧客主導で追加でき、特定のOracle Linuxリリースに複数のUEKが存在することが可能です。Linuxカーネル組織が提供するメインライン・ソース・コードをできるだけ詳細に追跡することによって、パフォーマンス、安定性、および最小限のバックポートに焦点を当てています。UEKはテストされ、Oracleのエンジニアド・システム、Oracle Cloud Infrastructure (OCI)およびOracleの顧客の大規模なエンタープライズ・デプロイメントの実行に使用されます。

    UEKには、RHCKで使用できない一部のパッケージまたはパッケージ・バージョンが含まれています。例として、btrfs-toolsrdsrdma関連パッケージ、および一部のカーネル・チューニング・ツールがあります。

  • Red Hat Compatible Kernel (RHCK): RHCKは、対応するRed Hat Enterprise Linux (RHEL)リリースで配布されているLinuxカーネルと完全に互換性があります。RHCKを使用すると、Red Hat Enterprise Linuxで実行されるアプリケーションとの完全な互換性を確保できます。

重要:

Linuxカーネルは、Oracle Linuxユーザー・スペースでアプリケーションを実行するには重要です。そのため、Oracleが提供する最新のバグ修正、拡張機能、およびセキュリティ更新で、カーネルを最新の状態に維持する必要があります。これを実行するには、継続的な更新およびアップグレード戦略を実装します。システムの再起動を必要とせずにカーネルを更新されるようにする方法については、『Oracle Linux: Kspliceユーザーズ・ガイド』を参照してください。システム上のソフトウェアを最新に保つための一般的な情報は、『Oracle Linux: Oracle Linuxでのソフトウェアの管理』を参照してください。

UEKの詳細は、Unbreakable Enterprise Kernelのドキュメントを参照してください。

grubbyを使用したGRUB 2でのカーネルの管理

grubbyコマンドを使用すると、カーネルを表示および管理できます。

次のコマンドを使用して、システムにインストールおよび構成されているカーネルを表示します:

sudo grubby --info=ALL

特定のカーネルをデフォルトのブート・カーネルとして構成するには、次を実行します。

sudo grubby --set-default /boot/vmlinuz-4.18.0-80.el8.x86_64

grubbyコマンドを使用してカーネル構成エントリを更新し、カーネル・ブート引数を追加または削除することもできます。次に例を示します。

sudo grubby --remove-args="rhgb quiet" --args=rd_LUKS_UUID=luks-39fec799-6a6c-4ac1-ac7c-1d68f2e6b1a4 \
--update-kernel /boot/vmlinuz-4.18.0-80.el8.x86_64

grubbyコマンドの詳細は、grubby(8)マニュアル・ページを参照してください。

カーネルを管理するgrubbyの使用の方法に関するハンズオン・チュートリアルについては、Oracle Linuxのブート・カーネルの管理を参照してください。

重要:

システム上のセキュリティ・スキャナは、実行中のカーネルまたはデフォルト・カーネルとして使用されていないシステム上のすべてのカーネルについて、CVEをレポートする可能性があります。スキャナによってレポートされている不要なノイズおよび偽陽性を回避するために、カーネルの切替え後に未使用のカーネルを削除することをお薦めします。

たとえば、UEKからRHCKに切り替える場合は、次のステップに従って適切な遷移が行われるようにします。

  1. 適切なgrubbyコマンドを使用して、デフォルトのカーネルをRHCKに設定します。

    正しいコマンド構文については、前の例を参照してください。

  2. システムを再起動して、RHCKを実行していることを確認します。

  3. UEKカーネルを削除します。

    sudo dnf remove kernel-uek
  4. 次のコマンドを実行してUEKリポジトリを無効にします。

    for uek_repo in $(dnf repolist enabled|grep UEK|awk '{print $1}'); do sudo dnf config-manager disable $uek_repo; done
  5. カーネル配管パッケージをダウングレードし、孤立したパッケージを削除します。

    sudo dnf downgrade $(sudo package-cleanup --orphans)

同様に、UEKを標準カーネルとして使用する場合は、RHCKの削除を検討してください。 RHCKを削除する手順については、kernel-transitionパッケージによるRed Hat Compatible Kernelの削除を参照してください。

カーネル・ブート・パラメータ

次の表では、よく使用されるカーネル・ブート・パラメータの一部について説明します。

オプション 説明

0123456、またはsystemd.unit=runlevelN.target

レガシーSysV実行レベルと一致するように、最も近いsystemd相当のシステム状態ターゲットを指定します。Nは0から6の整数値をとります。

systemdは、レガシーSysV initシステムを模倣するようにシステム状態ターゲットをマップします。

システム状態ターゲットの説明については、「システム状態ターゲットについて」を参照してください。

1sSsingle、またはsystemd.unit=rescue.target

レスキュー・シェルを指定します。システムは単一ユーザー・モードで起動し、rootパスワードの入力を求められます。

3またはsystemd.unit=multi-user.target

マルチユーザーの非グラフィック・ログインにsystemdターゲットを指定します。

5またはsystemd.unit=graphical.target

マルチユーザーのグラフィック・ログインにsystemdターゲットを指定します。

-bemergency、またはsystemd.unit=emergency.target

緊急モードを指定します。システムは単一ユーザー・モードで起動し、rootパスワードの入力を求められます。レスキュー・モードよりも少ないサービスが起動します。

KEYBOARDTYPE=kbtype

キーボード・タイプを指定します。これはinitramfs/etc/sysconfig/keyboardに書き込まれます。

KEYTABLE=kbtype

キーボード・レイアウトを指定します。これはinitramfs/etc/sysconfig/keyboardに書き込まれます。

LANG=language_territory.codeset

システム言語とコード・セットを指定します。これはinitramfs/etc/sysconfig/i18nに書き込まれます。

max_loop=N

ブロック・デバイスとしてファイルにアクセスするために使用できるループ・デバイス(/dev/loop*)の数を指定します。Nのデフォルト値および最大値は、8と255です。

nouptrack

Ksplice Uptrack更新がカーネルに適用されないようにします。

quiet

デバッグ出力を削減します。

rd_LUKS_UUID=UUID

指定したUUIDと一致する暗号化Linux Unified Key Setup (LUKS)パーティションをアクティブ化します。

rd_LVM_VG=vg/lv_vol

LVMボリューム・グループおよびアクティブ化するボリュームを指定します。

rd_NO_LUKS

暗号化LUKSパーティションの検出を無効にします。

rhgb

Red Hatのグラフィカル・ブート表示を使用して、ブートの進捗状況を示すことを指定します。

rn_NO_DM

Device-Mapper (DM) RAID検出を無効にします。

rn_NO_MD

Multiple Device (MD) RAID検出を無効にします。

ro root=/dev/mapper/vg-lv_root

rootファイル・システムを読取り専用でマウントすることを指定し、rootファイル・システムを、そのLVMボリュームのデバイス・パスで指定します(vgはボリューム・グループの名前)。

rw root=UUID=UUID

ルート(/)ファイル・システムをブート時に読取り/書込み可能でマウントすることを指定し、ルート・パーティションをそのUUIDで指定します。

selinux=0

SELinuxを無効にします。

SYSFONT=font

コンソールのフォントを指定します。これはinitramfs/etc/sysconfig/i18nに書き込まれます。

システムをブートするために最後に使用されたカーネル・ブート・パラメータは、/proc/cmdlineに記録されます。たとえば:

sudo cat /proc/cmdline
BOOT_IMAGE=(hd0,msdos1)/vmlinuz-4.18.0-80.el8.x86_64 root=/dev/mapper/ol-root ro \
crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M resume=/dev/mapper/ol-swap rd.lvm.lv=ol/root \
rd.lvm.lv=ol/swap rhgb quiet

詳細は、kernel-command-line(7)マニュアル・ページを参照してください。

起動前のカーネル・ブート・パラメータの変更

カーネルを起動する前にブート・パラメータを変更するには、次のステップを実行します。

  1. ブート・プロセスの開始時にGRUBブート・メニューが表示されたら、矢印キーを使用して必要なカーネルを強調表示し、[Space]キーを押します。

  2. [E]を押してカーネルのブート構成を編集します。

  3. 矢印キーを使用して、カーネルのブート構成行であるlinuxで始まる行の末尾にカーソルを置きます。

  4. ブート・パラメータを変更します。

    レスキュー・シェルへの起動をシステムに指示するsystemd.target=runlevel1.targetなどのパラメータを追加できます。

  5. [Ctrl]+[X]を押して、システムを起動します。

GRUB 2デフォルト・カーネル・ブート・パラメータの変更

GRUB 2構成のブート・パラメータを変更し、再起動するたびにこれらのパラメータがデフォルトで適用されるようにするには、次のステップを実行します。

  1. /etc/default/grubを編集し、GRUB_CMDLINE_LINUX定義にパラメータ設定を追加します。次に例を示します:

    GRUB_CMDLINE_LINUX="vconsole.font=latarcyrheb-sun16 vconsole.keymap=uk 
    crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M  rd.lvm.lv=ol/swap rd.lvm.lv=ol/root biosdevname=0 
    rhgb quiet systemd.unit=runlevel3.target"

    この例では、パラメータsystemd.unit=runlevel3.targetを追加して、システムがデフォルトでマルチユーザーの非グラフィカル・モードでブートするようにします。

  2. /boot/grub2/grub.cfgを再構築します。

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg

    この変更は、構成したカーネルすべての次のシステム再起動で反映されます。

ノート:

UEFIで起動するシステムでは、grub.cfgファイルは/boot/efi/EFI/redhatディレクトリにあります。これは、ブート構成が専用のFAT32-formattedパーティションに格納されるためです。

システムが正常にブートすると、そのパーティションのEFIフォルダは、Oracle Linuxのルート・ファイル・システムの/boot/efiディレクトリ内にマウントされます。