1 カーネルおよびシステム・ブートの管理
この章では、Oracle Linuxブート・プロセスと、GRand統合ブート・ローダー(GRUB)バージョン2およびブート関連のカーネル・パラメータを構成および使用する方法について説明します。
ブート・プロセスについて
Oracle Linuxのブート・プロセスを理解すると、システムのブート時に問題のトラブルシューティングに役立ちます。ブート・プロセスには複数のファイルが含まれ、これらのファイルでのエラーがブートの問題の一般的な原因になります。ブート・プロセスと構成は、ハードウェアがシステム・ブートを処理するために、UEFIファームウェアを使用しているかレガシーBIOSを使用しているかによって異なります。
UEFIベースのブートについて
Oracle Linuxリリースを実行しているUEFIベースのシステムでは、システム・ブート・プロセスでは次のシーケンスが使用されます:
-
システムのUEFIファームウェアは、電源オン・セルフテスト(POST)を実行し、周辺デバイスおよびハード・ディスクを検出して初期化します。
-
UEFIは、EFIシステム・パーティション(ESP)として識別する特定のグローバル一意識別子(GUID)を持つGPTパーティションを検索します。このパーティションには、ブート・ローダーなどのEFIアプリケーションが含まれています。複数のブート・デバイスが存在する場合、UEFIブート・マネージャは、ブート・マネージャで定義された順序に基づいて適切なESPを使用します。efibootmgrツールでは、デフォルト定義を使用しない場合に、別の順序を定義できます。
-
UEFIブート・マネージャは、セキュア・ブートが有効になっているかどうかを確認します。セキュア・ブートが無効の場合、ブート・マネージャはESPでGRUB 2ブート・ローダーを実行します。
それ以外の場合は、ブート・マネージャがブート・ローダーから証明書をリクエストし、UEFIセキュア・ブート・キー・データベースに格納されているキーに対してこの証明書を検証します。証明書検証プロセスを処理するために、2段階のブート・プロセスを実行するように環境が構成され、GRUB 2ブート・ローダーをロードする前に、認定を実行する
shim.efi
アプリケーションが最初にロードされます。証明書が有効な場合は、ブート・ローダーが実行され、次に、ロードするように構成されているカーネルが検証されます。セキュア・ブートの詳細は、『Oracle Linux: UEFI Secure Bootの操作』を参照してください。
-
ブート・ローダーは
vmlinuz
カーネル・イメージ・ファイルをメモリーにロードし、initramfs
イメージ・ファイルのコンテンツを一時的なメモリー・ベースのファイル・システム(tmpfs
)に抽出します。 -
カーネルは、ルート・ファイル・システムへのアクセスに必要なドライバ・モジュールを
initramfs
ファイル・システムからロードします。 -
カーネルは、プロセスID 1 (PID 1)で
systemd
プロセスを開始します。「systemdサービス・マネージャについて」を参照してください。 -
systemd
は、定義されているすべての追加プロセスを実行します。ノート:
独自の
systemd
ユニットを定義して、ブート・プロセス中に処理する他のアクションを指定します。この方法は、/etc/rc.local
ファイルを使用するよりも優先される方法です。
BIOSベースのブートについて
Oracle Linuxリリースを実行しているBIOSベースのシステムでは、ブート・プロセスは次のとおりです:
-
システムのBIOSが電源オン・セルフテスト(POST)を実行し、周辺デバイスおよびハード・ディスクを検出して初期化します。
-
BIOSがマスター・ブート・レコード(MBR)をブート・デバイスからメモリーに読み取ります。MBRは、そのデバイス上のパーティションの構成、パーティション表、およびエラー検出に使用されるブート署名に関する情報を格納します。MBRにはブート・ローダー・プログラム(GRUB 2)へのポインタも含まれています。ブート・プログラム自体は、同じデバイス上または別のデバイス上に存在できます。
-
ブート・ローダーは
vmlinuz
カーネル・イメージ・ファイルをメモリーにロードし、initramfs
イメージ・ファイルのコンテンツを一時的なメモリー・ベースのファイル・システム(tmpfs
)に抽出します。 -
カーネルは、ルート・ファイル・システムへのアクセスに必要なドライバ・モジュールを
initramfs
ファイル・システムからロードします。 -
カーネルは、プロセスID 1 (PID 1)で
systemd
プロセスを開始します。詳細は、「systemdサービス・マネージャについて」を参照してください。 -
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/grub
のGRUB_DEFAULT
パラメータの値によって設定されます。GRUB_DEFAULT
をsaved
に設定すると、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-tools
、rds
、rdma
関連パッケージ、および一部のカーネル・チューニング・ツールがあります。 -
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に切り替える場合は、次のステップに従って適切な遷移が行われるようにします。
-
適切な
grubby
コマンドを使用して、デフォルトのカーネルをRHCKに設定します。正しいコマンド構文については、前の例を参照してください。
-
システムを再起動して、RHCKを実行していることを確認します。
-
UEKカーネルを削除します。
sudo dnf remove kernel-uek
-
次のコマンドを実行してUEKリポジトリを無効にします。
for uek_repo in $(dnf repolist enabled|grep UEK|awk '{print $1}'); do sudo dnf config-manager disable $uek_repo; done
-
カーネル配管パッケージをダウングレードし、孤立したパッケージを削除します。
sudo dnf downgrade $(sudo package-cleanup --orphans)
同様に、UEKを標準カーネルとして使用する場合は、RHCKの削除を検討してください。 RHCKを削除する手順については、kernel-transitionパッケージによるRed Hat Compatible Kernelの削除を参照してください。
カーネル・ブート・パラメータ
次の表では、よく使用されるカーネル・ブート・パラメータの一部について説明します。
オプション | 説明 |
---|---|
|
レガシーSysV実行レベルと一致するように、最も近い システム状態ターゲットの説明については、「システム状態ターゲットについて」を参照してください。 |
|
レスキュー・シェルを指定します。システムは単一ユーザー・モードで起動し、 |
|
マルチユーザーの非グラフィック・ログインに |
|
マルチユーザーのグラフィック・ログインに |
|
緊急モードを指定します。システムは単一ユーザー・モードで起動し、 |
|
キーボード・タイプを指定します。これは |
|
キーボード・レイアウトを指定します。これは |
|
システム言語とコード・セットを指定します。これは |
|
ブロック・デバイスとしてファイルにアクセスするために使用できるループ・デバイス( |
|
Ksplice Uptrack更新がカーネルに適用されないようにします。 |
|
デバッグ出力を削減します。 |
|
指定したUUIDと一致する暗号化Linux Unified Key Setup (LUKS)パーティションをアクティブ化します。 |
|
LVMボリューム・グループおよびアクティブ化するボリュームを指定します。 |
|
暗号化LUKSパーティションの検出を無効にします。 |
|
Red Hatのグラフィカル・ブート表示を使用して、ブートの進捗状況を示すことを指定します。 |
|
Device-Mapper (DM) RAID検出を無効にします。 |
|
Multiple Device (MD) RAID検出を無効にします。 |
|
rootファイル・システムを読取り専用でマウントすることを指定し、rootファイル・システムを、そのLVMボリュームのデバイス・パスで指定します(vgはボリューム・グループの名前)。 |
|
ルート( |
|
SELinuxを無効にします。 |
|
コンソールのフォントを指定します。これは |
システムをブートするために最後に使用されたカーネル・ブート・パラメータは、/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)
マニュアル・ページを参照してください。
起動前のカーネル・ブート・パラメータの変更
カーネルを起動する前にブート・パラメータを変更するには、次のステップを実行します。
-
ブート・プロセスの開始時にGRUBブート・メニューが表示されたら、矢印キーを使用して必要なカーネルを強調表示し、[Space]キーを押します。
-
[E]を押してカーネルのブート構成を編集します。
-
矢印キーを使用して、カーネルのブート構成行である
linux
で始まる行の末尾にカーソルを置きます。 -
ブート・パラメータを変更します。
レスキュー・シェルへの起動をシステムに指示する
systemd.target=runlevel1.target
などのパラメータを追加できます。 -
[Ctrl]+[X]を押して、システムを起動します。
GRUB 2デフォルト・カーネル・ブート・パラメータの変更
GRUB 2構成のブート・パラメータを変更し、再起動するたびにこれらのパラメータがデフォルトで適用されるようにするには、次のステップを実行します。
-
/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
を追加して、システムがデフォルトでマルチユーザーの非グラフィカル・モードでブートするようにします。 -
/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
ディレクトリ内にマウントされます。