カーネルの管理、監視、および更新
Red Hat Enterprise Linux 9 上で Linux カーネルを管理するためのガイド
概要
Red Hat ドキュメントへのフィードバック (英語のみ) リンクのコピーリンクがクリップボードにコピーされました!
Red Hat ドキュメントに関するご意見やご感想をお寄せください。また、改善点があればお知らせください。
Jira からのフィードバック送信 (アカウントが必要)
- Jira の Web サイトにログインします。
- 上部のナビゲーションバーで Create をクリックします。
- Summary フィールドにわかりやすいタイトルを入力します。
- Description フィールドに、ドキュメントの改善に関するご意見を記入してください。ドキュメントの該当部分へのリンクも追加してください。
- ダイアログの下部にある Create をクリックします。
第1章 Linux カーネル リンクのコピーリンクがクリップボードにコピーされました!
Linux カーネルと、Red Hat が提供および管理する Linux カーネル RPM パッケージ (Red Hat カーネル) を学びます。Red Hat カーネルを最新の状態に保ちます。これにより、オペレーティングシステムに最新のバグ修正、パフォーマンス強化、およびパッチがすべて適用され、新しいハードウェアとの互換性が保たれます。
1.1. カーネルとは リンクのコピーリンクがクリップボードにコピーされました!
カーネルは Linux オペレーティングシステムのコア部分で、システムリソースを管理し、ハードウェアアプリケーションおよびソフトウェアアプリケーション間のインターフェイスを確立します。
Red Hat カーネルは、アップストリームの Linux メインラインカーネルをベースにしたカスタムカーネルです。Red Hat のエンジニアは、安定性と、最新のテクノロジーおよびハードウェアとの互換性に重点を置き、さらなる開発と強化を行っています。
Red Hat が新しいカーネルバージョンをリリースする前に、カーネルは厳格な品質保証テストをクリアしなければなりません。
Red Hat カーネルは RPM 形式でパッケージ化されているため、DNF パッケージマネージャーにより簡単にアップグレードおよび検証できます。
Red Hat によってコンパイルされていないカーネルは、Red Hat では サポートされていません。
1.2. RPM パッケージ リンクのコピーリンクがクリップボードにコピーされました!
RPM パッケージは、ファイルのアーカイブと、これらのファイルのインストールと消去に使用されるメタデータで構成されます。具体的には、RPM パッケージには次の要素が含まれています。
- GPG 署名
- GPG 署名は、パッケージの整合性を検証するために使用されます。
- ヘッダー (パッケージのメタデータ)
- RPM パッケージマネージャーは、このメタデータを使用して、パッケージの依存関係、ファイルのインストール先、その他の情報を確認します。
- ペイロード
-
ペイロードは、システムにインストールするファイルを含む
cpioアーカイブです。
RPM パッケージには 2 つの種類があります。いずれも、同じファイル形式とツールを使用しますが、コンテンツが異なるため、目的が異なります。
ソース RPM (SRPM)
SRPM には、ソースコードと、ソースコードをバイナリー RPM にビルドする方法を記述した
specファイルが含まれています。必要に応じて、SRPM にはソースコードへのパッチを含めることができます。バイナリー RPM
バイナリー RPM には、ソースおよびパッチから構築されたバイナリーが含まれます。
1.3. Linux カーネル RPM パッケージの概要 リンクのコピーリンクがクリップボードにコピーされました!
カーネル RPM は、ファイルを含まないメタパッケージで、以下の必須サブパッケージが正しくインストールされるようにします。
kernel-core-
Linux カーネル (
vmlinuz) のバイナリーイメージを提供します。 kernel-modules-core- コア機能を確保するための基本的なカーネルモジュールを提供します。これには、最も一般的に使用されるハードウェアが適切に機能するために不可欠なモジュールが含まれます。
kernel-modules-
kernel-coreに存在しない残りのカーネルモジュールを提供します。
kernel-core サブパッケージと kernel-modules-core サブパッケージを仮想化環境やクラウド環境で一緒に使用すると、起動時間が短く、ディスクサイズのフットプリントが小さい RHEL 9 カーネルを提供できます。このようなデプロイメントでは、通常、kernel-modules サブパッケージは必要ありません。
オプションのカーネルパッケージの例:
kernel-modules-extra- 希少なハードウェア用のカーネルモジュールを提供します。このモジュールのロードはデフォルトで無効になっています。
kernel-debug- カーネル診断用に多くのデバッグオプションが有効になっているカーネルを提供しますが、これによりパフォーマンスが低下します。
kernel-tools- Linux カーネルを操作するためのツールとサポートドキュメントを提供します。
kernel-devel-
kernelパッケージに対してモジュールをビルドするのに十分なカーネルヘッダーと makefile を提供します。 kernel-abi-stablelists-
RHEL カーネル ABI に関する情報を提供します。これには、外部の Linux カーネルモジュールに必要なカーネルシンボルのリストや、ABI への準拠を支援するための
dnfプラグインが含まれています。 kernel-headers- Linux カーネルと、ユーザー空間ライブラリーおよびプログラムとの間のインターフェイスを指定する C ヘッダーファイルが含まれます。ヘッダーファイルは、ほとんどの標準プログラムをビルドするのに必要な構造と定数を定義します。
kernel-uki-virtRHEL カーネルの統合カーネルイメージ (UKI) が含まれています。
UKI は、Linux カーネル、
initramfs、およびカーネルコマンドラインを単一の署名付きバイナリーに結合し、UEFI ファームウェアから直接起動できるようにします。kernel-uki-virtには、仮想環境およびクラウド環境で実行するために必要なカーネルモジュールが含まれており、kernel-coreサブパッケージの代わりに使用できます。
1.4. カーネルパッケージの内容の表示 リンクのコピーリンクがクリップボードにコピーされました!
リポジトリーをクエリーすると、カーネルパッケージがモジュールなどの特定のファイルを提供しているかどうかを確認できます。ファイルリストを表示するためにパッケージをダウンロードまたはインストールする必要はありません。
dnf ユーティリティーを使用して、たとえば kernel-core、kernel-modules-core、または kernel-modules パッケージのファイルリストをクエリーします。kernel パッケージはファイルを含まないメタパッケージであることに注意してください。
手順
パッケージの利用可能なバージョンをリスト表示します。
dnf repoquery <package_name>
$ dnf repoquery <package_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow パッケージ内のファイルをリスト表示します。
dnf repoquery -l <package_name>
$ dnf repoquery -l <package_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.5. 特定のカーネルバージョンのインストール リンクのコピーリンクがクリップボードにコピーされました!
dnf パッケージマネージャーを使用して新しいカーネルをインストールします。
手順
特定のカーネルバージョンをインストールするには、次のコマンドを実行します。
dnf install kernel-5.14.0
# dnf install kernel-5.14.0Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.6. カーネルの更新 リンクのコピーリンクがクリップボードにコピーされました!
dnf パッケージマネージャーを使用してカーネルを更新します。
手順
カーネルを更新するには、次のコマンドを入力します。
dnf update kernel
# dnf update kernelCopy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは、カーネルと、利用可能な最新バージョンへのすべての依存関係を更新します。
- システムを再起動して、変更を有効にします。
1.7. カーネルのデフォルトとしての設定 リンクのコピーリンクがクリップボードにコピーされました!
grubby コマンドラインツールと GRUB を使用して、特定のカーネルをデフォルトとして設定します。
手順
grubbyツールを使用し、デフォルトとしてカーネルを設定する以下のコマンドを実行し、
grubbyツールを使用してカーネルをデフォルトとして設定します。grubby --set-default $kernel_path
# grubby --set-default $kernel_pathCopy to Clipboard Copied! Toggle word wrap Toggle overflow コマンドは、
.confの接尾辞のないマシン ID を引数として使用します。注記マシン ID は
/boot/loader/entries/ディレクトリーにあります。
id引数を使用し、デフォルトとしてカーネルを設定するid引数を使用してブートエントリーのリストを表示し、任意のカーネルをデフォルトとして設定します。grubby --info ALL | grep id grubby --set-default /boot/vmlinuz-<version>.<architecture>
# grubby --info ALL | grep id # grubby --set-default /boot/vmlinuz-<version>.<architecture>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記title引数を使用してブートエントリーのリストを表示するには、# grubby --info=ALL | grep titleコマンドを実行します。
次回の起動時のみ用にデフォルトのカーネルを設定する
次のコマンドを実行し、
grub2-rebootコマンドを使用して、次回の再起動限定でデフォルトのカーネルを設定します。grub2-reboot <index|title|id>
# grub2-reboot <index|title|id>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 警告取り扱いに注意して、次回の起動時限定のデフォルトのカーネルを設定します。新しいカーネル RPM、自己ビルドカーネルをインストールし、エントリーを
/boot/loader/entries/ディレクトリーに手動で追加すると、インデックス値が変更される可能性があります。
第2章 64k ページサイズのカーネル リンクのコピーリンクがクリップボードにコピーされました!
kernel-64k は、64k ページをサポートする、追加のオプションの 64 ビット ARM アーキテクチャーカーネルパッケージです。この追加カーネルは、4k ページをサポートする ARM カーネル用の RHEL 9 と並んで存在します。
最適なシステムパフォーマンスは、さまざまなメモリー設定要件と直接関係しています。このような要件に、それぞれ異なるワークロードに適した 2 つのカーネルバリアントによって対応しています。したがって、64 ビット ARM ハードウェア上の RHEL 9 では、次の 2 つの MMU ページサイズを提供しています。
- 小規模な環境でメモリーを効率的に使用するための 4k ページカーネル
-
大規模な連続したメモリーワーキングセットを使用するワークロード向けの
kernel-64k
ユーザー空間が同じであるため、4k ページカーネルと kernel-64k のユーザーエクスペリエンスに違いはありません。状況に合わせて最適なバリアントを選択できます。
- 4K ページカーネル
エッジや低コストの小規模なクラウドインスタンスなどの小規模な環境でメモリーをより効率的に使用するには、4k ページを使用します。このような環境では、スペース、電力、コストの制約により、物理システムメモリー量を増やすことは現実的ではありません。また、すべての 64 ビット ARM アーキテクチャープロセッサーが 64k ページサイズをサポートしているわけではありません。
4k ページカーネルは、Anaconda を使用したグラフィカルインストール、システムまたはクラウドイメージベースのインストール、およびキックスタートを使用した高度なインストールをサポートしています。
kernel-64k64k ページサイズのカーネルは、ARM プラットフォーム上の大規模なデータセットに便利なオプションです。
kernel-64kは、大規模なデータベース、HPC、高ネットワークパフォーマンスなど、全体的なシステムパフォーマンスが大幅に向上するため、メモリーを大量に消費するワークロードに適しています。64 ビット ARM アーキテクチャーシステムでは、インストール時にページサイズを選択する必要があります。
kernel-64kパッケージをKickstartファイルのパッケージリストに追加すると、Kickstart のみでkernel-64kをインストールできます。
第3章 カーネルモジュールの管理 リンクのコピーリンクがクリップボードにコピーされました!
カーネルモジュール、それらの情報を表示する方法、およびカーネルモジュールを使用して基本的な管理タスクを実行する方法を学びます。
3.1. モジュールの紹介 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Enterprise Linux カーネルはカーネルモジュールを使用して拡張でき、システムを再起動せずにオプションの追加機能を提供します。RHEL 9 では、カーネルモジュールは追加のカーネルコードで、圧縮された <KERNEL_MODULE_NAME>.ko.xz オブジェクトファイルに組み込まれています。
カーネルモジュールにより有効になっている最も一般的な機能は、以下のとおりです。
- 新しいハードウェアのサポートを追加するデバイスドライバー
- GFS2 や NFS などのファイルシステムのサポート
- システムコール
最新のシステムでは、必要に応じて自動的にカーネルモジュールが読み込まれます。ただし、場合によっては、モジュールを手動でロードまたはアンロードする必要があります。
カーネルと同様に、モジュールは動作をカスタマイズするパラメーターを受け入れます。
カーネルツールを使用して、モジュールに対して次のアクションを実行できます。
- 現在実行中のモジュールを検査する。
- カーネルにロードできるモジュールを検査する。
- モジュールが受け入れるパラメーターを検査する。
- 実行中のカーネルにカーネルモジュールをロードおよびアンロードするメカニズムを有効化する。
3.2. カーネルモジュールの依存関係 リンクのコピーリンクがクリップボードにコピーされました!
カーネルモジュールによっては、1 つ以上の他のカーネルモジュールに依存するものもあります。/lib/modules/<KERNEL_VERSION>/modules.dep ファイルには、対応するカーネルバージョンに対するカーネルモジュールの依存関係の完全なリストが含まれます。
depmod
依存関係ファイルは、kmod パッケージに含まれる depmod プログラムによって生成されます。kmod によって提供される多くのユーティリティーは、操作を実行するときにモジュールの依存関係を考慮します。したがって、手動 での依存関係の追跡は、ほとんど必要ありません。
カーネルモジュールのコードは、カーネル空間で無制限モードで実行されます。どのモジュールを読み込んでいるかに注意してください。
weak-modules
depmod に加えて、Red Hat Enterprise Linux は、kmod パッケージの一部である weak-modules スクリプトを提供します。weak-modules は、インストールされているカーネルと kABI 互換性のあるモジュールを決定します。モジュールカーネルの互換性をチェックしている間、weak-modules はモジュールシンボルの依存関係を、それらがビルドされたカーネルの上位リリースから下位リリースへと処理します。カーネルのリリースとは独立して各モジュールを処理します。
3.3. インストール済みカーネルモジュールのリスト表示 リンクのコピーリンクがクリップボードにコピーされました!
grubby --info=ALL コマンドは、!BLS インストールおよび BLS インストールにインストールされたカーネルのインデックスリストを表示します。
手順
以下のコマンドを使用して、インストールされているカーネルをリスト表示します。
grubby --info=ALL | grep title
# grubby --info=ALL | grep titleCopy to Clipboard Copied! Toggle word wrap Toggle overflow インストールされているカーネルのリストは、以下のようになります。
title="Red Hat Enterprise Linux (5.14.0-1.el9.x86_64) 9.0 (Plow)" title="Red Hat Enterprise Linux (0-rescue-0d772916a9724907a5d1350bcd39ac92) 9.0 (Plow)"
title="Red Hat Enterprise Linux (5.14.0-1.el9.x86_64) 9.0 (Plow)" title="Red Hat Enterprise Linux (0-rescue-0d772916a9724907a5d1350bcd39ac92) 9.0 (Plow)"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
これは、GRUB メニューからの grubby-8.40-17 のインストール済みカーネルのリストです。
3.4. 現在読み込み済みカーネルモジュールのリスト表示 リンクのコピーリンクがクリップボードにコピーされました!
現在ロードされているカーネルモジュールを表示します。
前提条件
-
kmodパッケージがインストールされている。
手順
現在読み込み済みのカーネルモジュールの一覧を表示するには、以下のコマンドを実行します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 上記の例では、以下のようになります。
-
Module列は、現在読み込まれているモジュールの 名前 を示します。 -
Size列は、モジュールごとの メモリー 容量をキロバイト単位で表示します。 -
Used by列には、特定のモジュールに 依存する モジュールの数と、オプションで名前が表示されます。
-
3.5. モジュール情報の表示 リンクのコピーリンクがクリップボードにコピーされました!
modinfo コマンドを使用して、指定したカーネルモジュールに関する詳細情報を表示します。
前提条件
-
kmodパッケージがインストールされている。
手順
カーネルモジュールの情報を表示するには、以下を実行します。
modinfo <KERNEL_MODULE_NAME>
$ modinfo <KERNEL_MODULE_NAME>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下に例を示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ロードされているかどうかに関係なく、利用可能なすべてのモジュールに関する情報をクエリーできます。
parmエントリーは、ユーザーがモジュールに設定できるパラメーターと、期待される値のタイプを示します。注記カーネルモジュールの名前を入力する際には、
.ko.xz拡張子は名前の末尾に追加しないでください。カーネルモジュール名には拡張子はありません。ただし、対応するファイルには拡張子があります。
3.6. システム実行時のカーネルモジュールのロード リンクのコピーリンクがクリップボードにコピーされました!
Linux カーネルの機能を拡張する最適な方法は、カーネルモジュールを読み込むことです。modprobe コマンドを使用して、カーネルモジュールを検出し、現在実行しているカーネルに読み込みます。
この手順で説明されている変更は、システムの再起動後は 維持されません。システムの再起動後にも 設定を維持 するようにカーネルモジュールを読み込む方法は、システムの起動時に自動的にカーネルモジュールを読み込む を参照してください。
前提条件
- root 権限がある。
-
kmodパッケージがインストールされている。 - 関連のカーネルモジュールが読み込まれていない。これを確認するには、現在読み込まれているカーネルモジュールの リスト を一覧表示します。
手順
読み込むカーネルモジュールを選択します。
モジュールは
/lib/modules/$(uname -r)/kernel/<SUBSYSTEM>/ディレクトリーにあります。関連するカーネルモジュールを読み込みます。
modprobe <MODULE_NAME>
# modprobe <MODULE_NAME>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記カーネルモジュールの名前を入力する際には、
.ko.xz拡張子は名前の末尾に追加しないでください。カーネルモジュール名には拡張子はありません。ただし、対応するファイルには拡張子があります。
検証
必要に応じて、関連モジュールが読み込まれたことを確認します。
lsmod | grep <MODULE_NAME>
$ lsmod | grep <MODULE_NAME>Copy to Clipboard Copied! Toggle word wrap Toggle overflow モジュールが正しく読み込まれた場合、このコマンドは関連するカーネルモジュールを表示します。以下に例を示します。
lsmod | grep serio_raw serio_raw 16384 0
$ lsmod | grep serio_raw serio_raw 16384 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.7. システム実行時のカーネルモジュールのアンロード リンクのコピーリンクがクリップボードにコピーされました!
実行中のカーネルから特定のカーネルモジュールをアンロードするには、modprobe コマンドを使用して、システム実行時に現在ロードされているカーネルからカーネルモジュールを検索してアンロードします。
実行中のシステムで使用されているカーネルモジュールをアンロードしないでください。システムが不安定になったり、動作しなくなったりする可能性があります。
非アクティブなカーネルモジュールのアンロードが完了すると、起動時に自動的にロードされるように定義されているモジュールは、システムの再起動後もアンロードされたままになることはありません。この結果を防ぐ方法は、システムの起動時にカーネルモジュールが自動的にロードされないように する を参照してください。
前提条件
- root 権限がある。
-
kmodパッケージがインストールされている。
手順
ロードされたすべてのカーネルモジュールをリスト表示します。
lsmod
# lsmodCopy to Clipboard Copied! Toggle word wrap Toggle overflow アンロードするカーネルモジュールを選択します。
カーネルモジュールに依存関係がある場合は、カーネルモジュールをアンロードする前に、これらをアンロードします。依存関係のあるモジュールを特定する方法は、現在読み込まれているカーネルモジュールの一覧表示 および カーネル モジュール の依存関係 を 参照してください。
関連するカーネルモジュールをアンロードします。
modprobe -r <MODULE_NAME>
# modprobe -r <MODULE_NAME>Copy to Clipboard Copied! Toggle word wrap Toggle overflow カーネルモジュールの名前を入力する際には、
.ko.xz拡張子は名前の末尾に追加しないでください。カーネルモジュール名には拡張子はありません。ただし、対応するファイルには拡張子があります。
検証
必要に応じて、関連モジュールがアンロードされたことを確認します。
lsmod | grep <MODULE_NAME>
$ lsmod | grep <MODULE_NAME>Copy to Clipboard Copied! Toggle word wrap Toggle overflow モジュールが正常にアンロードされる場合、このコマンドは出力を表示しません。
3.8. 起動プロセスの初期段階でのカーネルモジュールのアンロード リンクのコピーリンクがクリップボードにコピーされました!
特定の状況では、たとえば、カーネルモジュールにシステムが応答しなくなるコードがあり、ユーザーが不正なカーネルモジュールを永続的に無効にする段階に到達できない場合、起動プロセスの早い段階でカーネルモジュールをアンロードする必要が出てくる場合があります。カーネルモジュールのロードを一時的にブロックするには、ブートローダーを使用します。
ブートシーケンスの続行前に、関連するブートローダーエントリーを編集して、必要なカーネルモジュールをアンロードできます。
この手順で説明されている変更は、システムを再起動すると維持されません。起動プロセス時にカーネルモジュールが自動的に読み込まれないように、denylist にカーネルモジュールを追加する方法は、システムの起動時にカーネルモジュールが自動的にロードされないようにする を参照してください。
前提条件
- なんらかの理由で読み込みを阻止する必要のある、読み込み可能なカーネルモジュールがある。
手順
- システムをブートローダーで起動します。
- カーソルキーを使用して、関連するブートローダーエントリーを強調表示します。
e キーを押してエントリーを編集します。
- カーソルキーを使用して、linux で始まる行に移動します。
modprobe.blacklist=module_nameを行末に追加します。図3.2 カーネルブートエントリー
serio_rawカーネルモジュールは、起動プロセスの初期段階でアンロードする不正なモジュールを示しています。- Ctrl+X を押して、変更した設定を使用して起動します。
検証
システムの起動後、関連するカーネルモジュールがロードされていないことを確認します。
lsmod | grep serio_raw
# lsmod | grep serio_rawCopy to Clipboard Copied! Toggle word wrap Toggle overflow
3.9. システムの起動時にカーネルモジュールを自動的にロードする リンクのコピーリンクがクリップボードにコピーされました!
起動プロセス中にカーネルモジュールを自動的にロードするように設定します。
前提条件
- root 権限がある。
-
kmodパッケージがインストールされている。
手順
起動プロセス中に読み込むカーネルモジュールを選択します。
モジュールは
/lib/modules/$(uname -r)/kernel/<SUBSYSTEM>/ディレクトリーにあります。モジュールの設定ファイルを作成します。
echo <MODULE_NAME> > /etc/modules-load.d/<MODULE_NAME>.conf
# echo <MODULE_NAME> > /etc/modules-load.d/<MODULE_NAME>.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注記カーネルモジュールの名前を入力する際には、
.ko.xz拡張子は名前の末尾に追加しないでください。カーネルモジュール名には拡張子はありません。ただし、対応するファイルには拡張子があります。
検証
再起動後、関連するモジュールがロードされていることを確認します。
lsmod | grep <MODULE_NAME>
$ lsmod | grep <MODULE_NAME>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
この手順で説明している変更は、システムを再起動しても 持続されます。
3.10. システムの起動時にカーネルモジュールが自動的にロードされないようにする リンクのコピーリンクがクリップボードにコピーされました!
対応するコマンドを使用して、modprobe 設定ファイルにモジュールを一覧表示することで、起動プロセス中にシステムが自動的にカーネルモジュールを読み込むことを阻止できます。
前提条件
-
この手順のコマンドには root 権限が必要です。
su -を使用して root ユーザーに切り替えるか、コマンドの前にsudoを付けます。 -
kmodパッケージがインストールされている。 - 現在のシステム設定に、拒否する予定のカーネルモジュールが必要ないことを確認する。
手順
lsmodコマンドを使用して、現在実行中のカーネルに読み込まれているモジュールを一覧表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力で、ロードを阻止するモジュールを特定します。
または、
/lib/modules/<KERNEL-VERSION>/kernel/<SUBSYSTEM>/ディレクトリーに読み込まれないようにするアンロードしたカーネルモジュールを特定します。以下に例を示します。ls /lib/modules/4.18.0-477.20.1.el8_8.x86_64/kernel/crypto/ ansi_cprng.ko.xz chacha20poly1305.ko.xz md4.ko.xz serpent_generic.ko.xz anubis.ko.xz cmac.ko.xz…
$ ls /lib/modules/4.18.0-477.20.1.el8_8.x86_64/kernel/crypto/ ansi_cprng.ko.xz chacha20poly1305.ko.xz md4.ko.xz serpent_generic.ko.xz anubis.ko.xz cmac.ko.xz…Copy to Clipboard Copied! Toggle word wrap Toggle overflow
拒否リストとして機能する設定ファイルを作成します。
touch /etc/modprobe.d/denylist.conf
# touch /etc/modprobe.d/denylist.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow 任意のテキストエディターで、カーネルへの自動読み込みから除外するモジュール名を
blacklist設定コマンドと組み合わせます。以下に例を示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow blacklistコマンドは、モジュールが、拒否リストにない別のカーネルモジュールの依存関係としてロードされることを阻止しないため、install行も定義する必要があります。この場合、システムはモジュールをインストールする代わりに/bin/falseを実行します。ハッシュ記号で始まる行は、ファイルをより読みやすくするために使用可能なコメントです。注記カーネルモジュールの名前を入力する際には、
.ko.xz拡張子は名前の末尾に追加しないでください。カーネルモジュール名には拡張子はありません。ただし、対応するファイルには拡張子があります。再構築を行う前に、現在の初期 RAM ディスクイメージのバックアップコピーを作成します。
cp /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).bak.$(date +%m-%d-%H%M%S).img
# cp /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).bak.$(date +%m-%d-%H%M%S).imgCopy to Clipboard Copied! Toggle word wrap Toggle overflow または、カーネルモジュールの自動読み込みを阻止するカーネルバージョンに対応する初期 RAM ディスクイメージのバックアップコピーを作成します。
cp /boot/initramfs-<VERSION>.img /boot/initramfs-<VERSION>.img.bak.$(date +%m-%d-%H%M%S)
# cp /boot/initramfs-<VERSION>.img /boot/initramfs-<VERSION>.img.bak.$(date +%m-%d-%H%M%S)Copy to Clipboard Copied! Toggle word wrap Toggle overflow
新しい初期 RAM ディスクイメージを生成して、変更を適用します。
dracut -f -v
# dracut -f -vCopy to Clipboard Copied! Toggle word wrap Toggle overflow システムで現在使用中のものとは異なるカーネルバージョンの初期 RAM ディスクイメージを構築する場合は、ターゲット
initramfsとカーネルバージョンの両方を指定します。dracut -f -v /boot/initramfs-<TARGET-VERSION>.img <CORRESPONDING-TARGET-KERNEL-VERSION>
# dracut -f -v /boot/initramfs-<TARGET-VERSION>.img <CORRESPONDING-TARGET-KERNEL-VERSION>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
システムを再起動します。
reboot
$ rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow
この手順で説明されている変更は、システムの再起動後も 有効なまま維持されます。重要なカーネルモジュールを誤って拒否リストに指定すると、システムが不安定または操作不能な状態になる可能性があります。
3.11. カスタムカーネルモジュールのコンパイル リンクのコピーリンクがクリップボードにコピーされました!
ハードウェアおよびソフトウェアレベルで、さまざまな設定による要求に応じて、サンプリングカーネルモジュールを構築できます。
前提条件
kernel-develパッケージ、gccパッケージ、およびelfutils-libelf-develパッケージをインストールしている。dnf install kernel-devel-$(uname -r) gcc elfutils-libelf-devel
# dnf install kernel-devel-$(uname -r) gcc elfutils-libelf-develCopy to Clipboard Copied! Toggle word wrap Toggle overflow - root 権限がある。
-
カスタムカーネルモジュールをコンパイルする
/root/testmodule/ディレクトリーを作成している。
手順
以下の内容で
/root/testmodule/test.cを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow test.cファイルは、カーネルモジュールに主な機能を提供するソースファイルです。このファイルは、組織的な目的で、専用の/root/testmodule/ディレクトリーに作成されています。モジュールをコンパイルすると、/root/testmodule/ディレクトリーには複数のファイルが含まれます。test.cファイルには、システムライブラリーから次のものが含まれます。-
サンプルコードの
printk()機能には、linux/kernel.hヘッダーファイルが必要です。 -
linux/module.hファイルには、C プログラミング言語で記述された複数のソースファイル間で共有される関数宣言とマクロ定義が含まれています。
-
サンプルコードの
-
次に、
init_module()関数およびcleanup_module()関数に従い、テキストを出力するカーネルロギング機能printk()を起動および終了します。 以下の内容で
/root/testmodule/Makefileを作成します。obj-m := test.o
obj-m := test.oCopy to Clipboard Copied! Toggle word wrap Toggle overflow Makefile には、コンパイラーが
test.oという名前のオブジェクトファイルを生成するための指示が含まれています。obj-mディレクティブは、生成されるtest.koファイルを、読み込み可能なカーネルモジュールとしてコンパイルすることを指定します。あるいは、obj-yディレクティブは、組み込みカーネルモジュールとしてtest.koをビルドするように指示できます。カーネルモジュールをコンパイルします。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow コンパイラーは、各ソースファイル (
test.c) のオブジェクトファイル (test.o) を中間手順として作成してから、それらを最終カーネルモジュール (test.ko) にリンクします。コンパイルが成功すると、
/root/testmodule/には、コンパイル済みカスタムカーネルモジュールに関連する追加ファイルが含まれます。コンパイル済みモジュール自身は、test.koファイルで表されます。
検証
必要に応じて、
/root/testmodule/ディレクトリーのコンテンツを確認します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow カーネルモジュールを
/lib/modules/$(uname -r)/ディレクトリーにコピーします。cp /root/testmodule/test.ko /lib/modules/$(uname -r)/
# cp /root/testmodule/test.ko /lib/modules/$(uname -r)/Copy to Clipboard Copied! Toggle word wrap Toggle overflow モジュールの依存関係のリストを更新します。
depmod -a
# depmod -aCopy to Clipboard Copied! Toggle word wrap Toggle overflow カーネルモジュールを読み込みます。
modprobe -v test insmod /lib/modules/5.14.0-1.el9.x86_64/test.ko
# modprobe -v test insmod /lib/modules/5.14.0-1.el9.x86_64/test.koCopy to Clipboard Copied! Toggle word wrap Toggle overflow カーネルモジュールが正常に読み込まれたことを確認します。
lsmod | grep test test 16384 0
# lsmod | grep test test 16384 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow カーネルリングバッファーから最新のメッセージを読み込みます。
dmesg [74422.545004] Hello World This is a test# dmesg [74422.545004] Hello World This is a testCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第4章 カーネルコマンドラインパラメーターの設定 リンクのコピーリンクがクリップボードにコピーされました!
カーネルコマンドラインパラメーターを使用すると、起動時に Red Hat Enterprise Linux カーネルの特定の側面の動作を変更できます。システム管理者は、起動時に設定されるオプションを制御します。特定のカーネル動作は起動時にのみ設定できることに注意してください。
カーネルコマンドラインパラメーターを変更してシステムの動作を変更すると、システムに悪影響を及ぼす可能性があります。変更を実稼働環境にデプロイする前に必ずテストしてください。詳細なガイダンスは、Red Hat Support チームまでご連絡ください。
4.1. カーネルコマンドラインパラメーターとは リンクのコピーリンクがクリップボードにコピーされました!
カーネルコマンドラインパラメーターを使用すると、デフォルト値を上書きしたり、特定のハードウェア設定を指定したりできます。ブート時に、次の機能を設定できます。
- Red Hat Enterprise Linux カーネル
- 初期 RAM ディスク
- ユーザー領域機能
デフォルトでは、GRUB ブートローダーを使用するシステムのカーネルコマンドラインパラメーターは、カーネルブートエントリーごとにブートエントリー設定ファイルに定義されます。
grubby ユーティリティーを使用すると、ブートローダー設定ファイルを操作できます。grubby を使用すると、次のアクションを実行できます。
- デフォルトのブートエントリーの変更
- GRUB メニューエントリーに対する引数の追加または削除
4.2. ブートエントリーについて リンクのコピーリンクがクリップボードにコピーされました!
ブートエントリーは、設定ファイルに保存され、特定のカーネルバージョンに関連付けられたオプションのコレクションです。実際には、ブートエントリーは、システムにカーネルがインストールされているのと同じ数だけあります。ブートエントリー設定ファイルは、/boot/loader/entries/ ディレクトリーにあります。
d8712ab6d4f14683c5625e87b52b6b6e-5.14.0-1.el9.x86_64.conf
d8712ab6d4f14683c5625e87b52b6b6e-5.14.0-1.el9.x86_64.conf
上記のファイル名は、/etc/machine-id ファイルに保存されているマシン ID と、カーネルバージョンから構成されます。
ブートエントリーの設定ファイルには、カーネルバージョン、初期 ramdisk イメージ、およびカーネルコマンドラインパラメーターに関する情報が含まれます。ブートエントリー設定例の内容は、以下のようになります。
4.3. すべてのブートエントリーでカーネルコマンドラインパラメーターの変更 リンクのコピーリンクがクリップボードにコピーされました!
システム上のすべてのブートエントリーのカーネルコマンドラインパラメーターを変更します。
RHEL 9 システムに新しいバージョンのカーネルをインストールすると、grubby ツールは以前のカーネルバージョンからカーネルコマンドライン引数を渡します。
ただし、これは、新しくインストールされたカーネルが以前のコマンドラインオプションを失う RHEL バージョン 9.0 には適用されません。新しくインストールしたカーネルで grub2-mkconfig コマンドを実行して、パラメーターを新しいカーネルに渡す必要があります。この既知の問題の詳細は、ブートローダー を参照してください。
前提条件
-
grubbyユーティリティーがシステムにインストールされている。 -
ziplユーティリティーが IBM Z システムにインストールされている。
手順
パラメーターを追加するには、以下を行います。
grubby --update-kernel=ALL --args="<NEW_PARAMETER>"
# grubby --update-kernel=ALL --args="<NEW_PARAMETER>"Copy to Clipboard Copied! Toggle word wrap Toggle overflow GRUB ブートローダーを使用するシステムの場合、zIPL ブートローダーを使用する IBM Z では、新しいカーネルパラメーターを各
/boot/loader/entries/<ENTRY>.confファイルに追加します。IBM Z で、ブートメニューを更新します。
zipl
# ziplCopy to Clipboard Copied! Toggle word wrap Toggle overflow
パラメーターを削除するには、次のコマンドを実行します。
grubby --update-kernel=ALL --remove-args="<PARAMETER_TO_REMOVE>"
# grubby --update-kernel=ALL --remove-args="<PARAMETER_TO_REMOVE>"Copy to Clipboard Copied! Toggle word wrap Toggle overflow IBM Z で、ブートメニューを更新します。
zipl
# ziplCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4.4. 1 つのブートエントリーでカーネルコマンドラインパラメーターの変更 リンクのコピーリンクがクリップボードにコピーされました!
システム上の単一のブートエントリーのカーネルコマンドラインパラメーターを変更します。
前提条件
-
grubbyおよびziplユーティリティーがシステムにインストールされている。
手順
パラメーターを追加するには、以下を行います。
grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="<NEW_PARAMETER>"
# grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="<NEW_PARAMETER>"Copy to Clipboard Copied! Toggle word wrap Toggle overflow IBM Z で、ブートメニューを更新します。
grubby --args="<NEW_PARAMETER> --update-kernel=ALL --zipl
# grubby --args="<NEW_PARAMETER> --update-kernel=ALL --ziplCopy to Clipboard Copied! Toggle word wrap Toggle overflow
パラメーターを削除するには、次のコマンドを実行します。
grubby --update-kernel=/boot/vmlinuz-$(uname -r) --remove-args="<PARAMETER_TO_REMOVE>"
# grubby --update-kernel=/boot/vmlinuz-$(uname -r) --remove-args="<PARAMETER_TO_REMOVE>"Copy to Clipboard Copied! Toggle word wrap Toggle overflow IBM Z で、ブートメニューを更新します。
grubby --args="<PARAMETER_TO_REMOVE> --update-kernel=ALL --zipl
# grubby --args="<PARAMETER_TO_REMOVE> --update-kernel=ALL --ziplCopy to Clipboard Copied! Toggle word wrap Toggle overflow
-
grubbyは、個別のカーネルブートエントリーのカーネルコマンドラインパラメーターを変更して、/boot/loader/entries/<ENTRY>.confファイルに保存します。
4.5. 起動時の一時的なカーネルコマンドラインパラメーターの変更 リンクのコピーリンクがクリップボードにコピーされました!
1 回の起動プロセス中にのみカーネルパラメーターを変更することで、カーネルメニューエントリーを一時的に変更します。
この手順は単一ブートにのみ適用され、変更は永続的に行われません。
手順
- GRUB ブートメニューを起動します。
- 起動するカーネルを選択します。
- e キーを押してカーネルパラメーターを編集します。
-
カーソルを下に移動してカーネルコマンドラインを見つけます。カーネルコマンドラインは、64 ビット IBM Power シリーズおよび x86-64 BIOS ベースのシステムの場合は
linuxで始まり、UEFI システムの場合はlinuxefiで始まります。 カーソルを行の最後に移動します。
注記行の最初に移動するには Ctrl+a を押します。行の最後に移動するには Ctrl+e を押します。システムによっては、Home キーおよび End キーも機能する場合があります。
必要に応じてカーネルパラメーターを編集します。たとえば、緊急モードでシステムを実行するには、
linux行の最後にemergencyパラメーターを追加します。linux ($root)/vmlinuz-5.14.0-63.el9.x86_64 root=/dev/mapper/rhel-root ro crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet emergency
linux ($root)/vmlinuz-5.14.0-63.el9.x86_64 root=/dev/mapper/rhel-root ro crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet emergencyCopy to Clipboard Copied! Toggle word wrap Toggle overflow システムメッセージを有効にするには、
rhgbおよびquietパラメーターを削除します。- Ctrl+x を押して、選択したカーネルと変更したコマンドラインパラメーターで起動します。
Esc キーを押してコマンドラインの編集を終了すると、ユーザーの加えた変更はすべて破棄されます。
4.6. シリアルコンソール接続を有効にする GRUB 設定 リンクのコピーリンクがクリップボードにコピーされました!
シリアルコンソールは、ネットワークがダウンしている場合にヘッドレスサーバーまたは埋め込みシステムに接続する際に便利です。あるいは、セキュリティールールを回避し、別のシステムへのログインアクセスを取得する必要がある場合などです。
シリアルコンソール接続を使用するように、デフォルトの GRUB 設定の一部を設定する必要があります。
前提条件
- root 権限がある。
手順
/etc/default/grubファイルに以下の 2 つの行を追加します。GRUB_TERMINAL="serial" GRUB_SERIAL_COMMAND="serial --speed=9600 --unit=0 --word=8 --parity=no --stop=1"
GRUB_TERMINAL="serial" GRUB_SERIAL_COMMAND="serial --speed=9600 --unit=0 --word=8 --parity=no --stop=1"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 最初の行は、グラフィカルターミナルを無効にします。
GRUB_TERMINALキーは、GRUB_TERMINAL_INPUTおよびGRUB_TERMINAL_OUTPUTの値を上書きします。2 行目は、ボーレート (
--speed)、パリティー、および他の値を使用中の環境とハードウェアに適合するように調整します。以下のログファイルのようなタスクには、115200 のように非常に高いボーレートが推奨されます。GRUB 設定ファイルを更新します。
BIOS ベースのマシンの場合:
grub2-mkconfig -o /boot/grub2/grub.cfg
# grub2-mkconfig -o /boot/grub2/grub.cfgCopy to Clipboard Copied! Toggle word wrap Toggle overflow UEFI ベースのマシンの場合:
grub2-mkconfig -o /boot/grub2/grub.cfg
# grub2-mkconfig -o /boot/grub2/grub.cfgCopy to Clipboard Copied! Toggle word wrap Toggle overflow
- システムを再起動して、変更を有効にします。
4.7. GRUB 設定ファイルを使用したブートエントリーの変更 リンクのコピーリンクがクリップボードにコピーされました!
/etc/default/grub GRUB 設定ファイルには、Linux カーネルのブートエントリーに追加するカーネルコマンドライン引数をリスト表示する GRUB_CMDLINE_LINUX キーが含まれます。以下に例を示します。
GRUB_CMDLINE_LINUX="crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap"
GRUB_CMDLINE_LINUX="crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap"
ブートエントリーを変更するには、ブートローダー仕様 (BLS) スニペットを GRUB_CMDLINE_LINUX 値の内容で上書きします。
前提条件
- 新規の RHEL 9 インストールである。
手順
grubbyを使用して、インストール後のスクリプトで個々のカーネルのカーネルパラメーターを追加または削除します。grubby --update-kernel <PATH_TO_KERNEL> --args "<NEW_ARGUMENTS>"
# grubby --update-kernel <PATH_TO_KERNEL> --args "<NEW_ARGUMENTS>"Copy to Clipboard Copied! Toggle word wrap Toggle overflow たとえば、選択したカーネルに
noapicパラメーターを追加します。grubby --update-kernel /boot/vmlinuz-5.14.0-362.8.1.el9_3.x86_64 --args "noapic"
# grubby --update-kernel /boot/vmlinuz-5.14.0-362.8.1.el9_3.x86_64 --args "noapic"Copy to Clipboard Copied! Toggle word wrap Toggle overflow パラメーターは BLS スニペットには伝播しますが、
/etc/default/grubファイルには伝播しません。/etc/default/grubファイルに存在するGRUB_CMDLINE_LINUX値の内容で BLS スニペットを上書きします。grub2-mkconfig -o /boot/grub2/grub.cfg --update-bls-cmdline Generating grub configuration file … Adding boot menu entry for UEFI Firmware Settings … done
# grub2-mkconfig -o /boot/grub2/grub.cfg --update-bls-cmdline Generating grub configuration file … Adding boot menu entry for UEFI Firmware Settings … doneCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注記GRUB_TIMEOUTキー (/etc/default/grubGRUB 設定ファイルにも含まれています) に加えられた変更など、その他の変更は、デフォルトで新しいgrub.cfgに伝搬します。
検証
- オペレーティングシステムを再起動します。
パラメーターが
/proc/cmdlineファイルに含まれていることを確認します。たとえば、
/proc/cmdlineには、noapicカーネルパラメーターが含まれています。BOOT_IMAGE=(hd0,gpt2)/vmlinuz-4.18.0-425.3.1.el8.x86_64 root=/dev/mapper/RHELCSB-Root ro vconsole.keymap=us crashkernel=auto rd.lvm.lv=RHELCSB/Root rd.luks.uuid=luks-d8a28c4c-96aa-4319-be26-96896272151d rhgb quiet noapic rd.luks.key=d8a28c4c-96aa-4319-be26-96896272151d=/keyfile:UUID=c47d962e-4be8-41d6-8216-8cf7a0d3b911 ipv6.disable=1
BOOT_IMAGE=(hd0,gpt2)/vmlinuz-4.18.0-425.3.1.el8.x86_64 root=/dev/mapper/RHELCSB-Root ro vconsole.keymap=us crashkernel=auto rd.lvm.lv=RHELCSB/Root rd.luks.uuid=luks-d8a28c4c-96aa-4319-be26-96896272151d rhgb quiet noapic rd.luks.key=d8a28c4c-96aa-4319-be26-96896272151d=/keyfile:UUID=c47d962e-4be8-41d6-8216-8cf7a0d3b911 ipv6.disable=1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第5章 ランタイム時のカーネルパラメーターの設定 リンクのコピーリンクがクリップボードにコピーされました!
システム管理者は、実行時に Red Hat Enterprise Linux カーネルの動作のさまざまな側面を変更できます。sysctl コマンドを使用し、/etc/sysctl.d/ および /proc/sys/ ディレクトリー内の設定ファイルを変更して、実行時にカーネルパラメーターを設定します。
プロダクションシステムでカーネルパラメーターを設定するには、慎重なプランニングが必要です。計画外の変更を行うと、カーネルが不安定になり、システムの再起動が必要になる場合があります。カーネル値を変更する前に、有効なオプションを使用していることを確認してください。
IBM DB2 でのカーネルのチューニングに関する詳細は、Tuning Red Hat Enterprise Linux for IBM DB2 を参照してください。
5.1. カーネルパラメーターとは リンクのコピーリンクがクリップボードにコピーされました!
カーネルパラメーターは、システムの実行中に調整できる調整可能な値です。変更を有効にするために、システムを再起動したりカーネルを再コンパイルしたりする必要がないことに注意してください。
以下を使用してカーネルパラメーターに対応できます。
-
sysctlコマンド -
/proc/sys/ディレクトリーにマウントされている仮想ファイルシステム -
/etc/sysctl.d/ディレクトリー内の設定ファイル
調整可能パラメーターは、カーネルサブシステムでクラスに分割されます。Red Hat Enterprise Linux には、以下の調整可能のクラスがあります。
| 調整パラメーターのクラス | サブシステム |
|---|---|
|
| 実行ドメインおよびパーソナリティー |
|
| 暗号化インターフェイス |
|
| カーネルのデバッグインターフェイス |
|
| デバイス固有の情報 |
|
| グローバルおよび特定のファイルシステムの設定項目 |
|
| グローバルなカーネルの設定項目 |
|
| ネットワークの設定項目 |
|
| Sun Remote Procedure Call (NFS) |
|
| ユーザー名前空間の制限 |
|
| メモリー、バッファー、およびキャッシュのチューニングと管理 |
5.2. sysctl でカーネルパラメーターの一時的な設定 リンクのコピーリンクがクリップボードにコピーされました!
sysctl コマンドを使用して、実行時に一時的にカーネルパラメーターを設定します。このコマンドは、調整可能パラメーターのリスト表示およびフィルタリングにも便利です。
前提条件
- root 権限がある。
手順
すべてのパラメーターとその値をリストします。
sysctl -a
# sysctl -aCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注記# sysctl -aコマンドは、ランタイム時およびシステムの起動時に調整できるカーネルパラメーターを表示します。パラメーターを一時的に設定するには、次のように入力します。
sysctl <TUNABLE_CLASS>.<PARAMETER>=<TARGET_VALUE>
# sysctl <TUNABLE_CLASS>.<PARAMETER>=<TARGET_VALUE>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 上記のサンプルコマンドは、システムの実行中にパラメーター値を変更します。この変更は、再起動なしですぐに適用されます。
注記変更は、システムの再起動後にデフォルトに戻ります。
5.3. sysctl を使用したカーネルパラメーターの永続的な設定 リンクのコピーリンクがクリップボードにコピーされました!
sysctl コマンドを使用して、カーネルパラメーターを永続的に設定します。
前提条件
- root 権限がある。
手順
すべてのパラメーターをリストします。
sysctl -a
# sysctl -aCopy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは、実行時に設定できるカーネルパラメーターをすべて表示します。
パラメーターを永続的に設定します。
sysctl -w <TUNABLE_CLASS>.<PARAMETER>=<TARGET_VALUE> >> /etc/sysctl.conf
# sysctl -w <TUNABLE_CLASS>.<PARAMETER>=<TARGET_VALUE> >> /etc/sysctl.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow サンプルコマンドは、調整可能な値を変更して、
/etc/sysctl.confファイルに書き込みます。これにより、カーネルパラメーターのデフォルト値が上書きされます。変更は、再起動なしで即座に永続的に反映されます。
カーネルパラメーターを永続的に変更するには、/etc/sysctl.d/ ディレクトリーの設定ファイルを手動で変更することもできます。
5.4. /etc/sysctl.d/ の設定ファイルでカーネルパラメーターの調整 リンクのコピーリンクがクリップボードにコピーされました!
カーネルパラメーターを永続的に設定するには、/etc/sysctl.d/ ディレクトリー内の設定ファイルを手動で変更する必要があります。
前提条件
- root 権限がある。
手順
/etc/sysctl.d/に新しい設定ファイルを作成します。vim /etc/sysctl.d/<some_file.conf>
# vim /etc/sysctl.d/<some_file.conf>Copy to Clipboard Copied! Toggle word wrap Toggle overflow カーネルパラメーターを 1 行に 1 つずつ含めます。
<TUNABLE_CLASS>.<PARAMETER>=<TARGET_VALUE> <TUNABLE_CLASS>.<PARAMETER>=<TARGET_VALUE>
<TUNABLE_CLASS>.<PARAMETER>=<TARGET_VALUE> <TUNABLE_CLASS>.<PARAMETER>=<TARGET_VALUE>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 設定ファイルを保存します。
マシンを再起動して、変更を有効にします。
または、再起動せずに変更を適用します。
sysctl -p /etc/sysctl.d/<some_file.conf>
# sysctl -p /etc/sysctl.d/<some_file.conf>Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドにより、以前に作成した設定ファイルから値を読み取ることができます。
5.5. /proc/sys/ でカーネルパラメーターの一時的な設定 リンクのコピーリンクがクリップボードにコピーされました!
/proc/sys/ 仮想ファイルシステムディレクトリー内のファイルを使用して、一時的にカーネルパラメーターを設定します。
前提条件
- root 権限がある。
手順
設定するカーネルパラメーターを特定します。
ls -l /proc/sys/<TUNABLE_CLASS>/
# ls -l /proc/sys/<TUNABLE_CLASS>/Copy to Clipboard Copied! Toggle word wrap Toggle overflow コマンドが返した書き込み可能なファイルは、カーネルの設定に使用できます。読み取り専用権限を持つファイルは、現在の設定に関するフィードバックを提供します。
カーネルパラメーターにターゲットの値を割り当てます。
echo <TARGET_VALUE> > /proc/sys/<TUNABLE_CLASS>/<PARAMETER>
# echo <TARGET_VALUE> > /proc/sys/<TUNABLE_CLASS>/<PARAMETER>Copy to Clipboard Copied! Toggle word wrap Toggle overflow コマンドを使用して適用された設定の変更は永続的なものではなく、システムを再起動すると消えてしまいます。
検証
新しく設定したカーネルパラメーターの値を確認します。
cat /proc/sys/<TUNABLE_CLASS>/<PARAMETER>
# cat /proc/sys/<TUNABLE_CLASS>/<PARAMETER>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第6章 RHEL システムロールを使用したカーネルパラメーターの永続的な設定 リンクのコピーリンクがクリップボードにコピーされました!
kernel_settings RHEL システムロールを使用すると、複数のクライアントにカーネルパラメーターを同時に設定できます。同時設定には次の利点があります。
- 効率的な入力設定を持つ使いやすいインターフェイスを提供します。
- すべてのカーネルパラメーターを 1 か所で保持します。
コントロールマシンから kernel_settings ロールを実行すると、カーネルパラメーターはすぐに管理システムに適用され、再起動後も維持されます。
RHEL チャネルで提供される RHEL システムロールは、デフォルトの AppStream リポジトリー内の RPM パッケージとして RHEL のお客様に提供されることに注意してください。また、RHEL システムロールは、Ansible Automation Hub を介して Ansible サブスクリプションをご利用のお客様に、コレクションとして提供されます。
6.1. kernel_settings RHEL システムロールを使用して選択したカーネルパラメーターの適用 リンクのコピーリンクがクリップボードにコピーされました!
kernel_settings RHEL システムロールを使用すると、複数の管理対象オペレーティングシステムにわたってさまざまなカーネルパラメーターをリモートで設定し、永続的に有効にできます。たとえば、以下を設定できます。
- 小さなページを管理するオーバーヘッドを削減し、パフォーマンスを向上するための Transparent huge page
- ループバックインターフェイスを使用してネットワーク経由で送信する最大パケットサイズ
- 同時に開くことができるファイル数の制限
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo権限がある。
手順
次の内容を含む Playbook ファイル (例:
~/playbook.yml) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow サンプル Playbook で指定されている設定は次のとおりです。
kernel_settings_sysfs: <list_of_sysctl_settings>-
sysctl設定とこの設定に割り当てる値の YAML リスト。 kernel_settings_transparent_hugepages: <value>-
メモリーサブシステムの Transparent Huge Pages (THP) 設定を制御します。THP のサポートを無効にするか (
never)、サポートをシステム全体で有効にするか (always)、またはMAD_HUGEPAGEリージョン内で有効にする (madvise) ことができます。 kernel_settings_reboot_ok: <true|false>-
デフォルトは
falseです。trueに設定すると、要求された変更を有効にするために管理対象ホストの再起動が必要かどうかをシステムロールが判断し、ホストを再起動します。falseに設定すると、再起動が必要であることを示すtrue値を持つ変数kernel_settings_reboot_requiredがロールによって返されます。この場合、ユーザーが管理対象ノードを手動で再起動する必要があります。
Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.kdump/README.md ファイルを参照してください。
Playbook の構文を検証します。
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
影響を受けるカーネルパラメーターを確認します。
ansible managed-node-01.example.com -m command -a 'sysctl fs.file-max kernel.threads-max net.ipv6.conf.lo.mtu' ansible managed-node-01.example.com -m command -a 'cat /sys/kernel/mm/transparent_hugepage/enabled'
# ansible managed-node-01.example.com -m command -a 'sysctl fs.file-max kernel.threads-max net.ipv6.conf.lo.mtu' # ansible managed-node-01.example.com -m command -a 'cat /sys/kernel/mm/transparent_hugepage/enabled'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第7章 RHEL システムロールを使用した GRUB ブートローダーの設定 リンクのコピーリンクがクリップボードにコピーされました!
bootloader RHEL システムロールを使用すると、GRUB ブートローダーに関連する設定および管理タスクを自動化できます。
このロールは、現在、次の CPU アーキテクチャーで実行される GRUB ブートローダーの設定をサポートしています。
- AMD および Intel 64 ビットアーキテクチャー (x86-64)
- 64 ビット ARM アーキテクチャー (ARMv8.0)
- IBM Power Systems、リトルエンディアン (POWER9)
7.1. bootloader RHEL システムロールを使用した既存のブートローダーエントリーの更新 リンクのコピーリンクがクリップボードにコピーされました!
bootloader RHEL システムロールを使用して、GRUB ブートメニュー内の既存のエントリーを自動的に更新できます。この方法により、システムのパフォーマンスや動作を最適化できる特定のカーネルコマンドラインパラメーターを効率的に渡すことができます。
たとえば、カーネルや init システムからの詳細なブートメッセージが必要ないシステムを活用する場合は、bootloader を使用して管理対象ノード上の既存のブートローダーエントリーに quiet パラメーターを適用すると、よりクリーンで簡潔かつユーザーフレンドリーなブートエクスペリエンスを実現できます。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo権限がある。 - 更新するブートローダーエントリーに対応するカーネルを特定した。
手順
次の内容を含む Playbook ファイル (例:
~/playbook.yml) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow サンプル Playbook で指定されている設定は次のとおりです。
kernel- 更新するブートローダーエントリーに関連するカーネルを指定します。
options- 選択したブートローダーエントリー (カーネル) の更新するカーネルコマンドラインパラメーターを指定します。
bootloader_reboot_ok: true- 変更を有効にするために再起動が必要であることをロールが検出し、管理対象ノードの再起動を実行します。
Playbook で使用されるすべての変数の詳細は、コントロールノードの
/usr/share/ansible/roles/rhel-system-roles.bootloader/README.mdファイルを参照してください。Playbook の構文を検証します。
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
指定したブートローダーエントリーのカーネルコマンドラインパラメーターが更新されていることを確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.4. bootloader RHEL システムロールを使用したブートローダー設定情報の収集 リンクのコピーリンクがクリップボードにコピーされました!
bootloader RHEL システムロールを使用して、GRUB ブートローダーエントリーに関する情報を自動的に収集できます。この情報を使用して、カーネルや初期 RAM ディスクイメージパスなど、システムブートパラメーターの正しい設定を確認できます。
その結果、たとえば次のことが可能になります。
- ブートの失敗を防止する。
- トラブルシューティング時に既知の正常な状態に戻す。
- セキュリティー関連のカーネルコマンドラインパラメーターを確実に正しく設定する。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo権限がある。
手順
次の内容を含む Playbook ファイル (例:
~/playbook.yml) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow Playbook で使用されるすべての変数の詳細は、コントロールノードの
/usr/share/ansible/roles/rhel-system-roles.bootloader/README.mdファイルを参照してください。Playbook の構文を検証します。
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
コントロールノードで前述の Playbook を実行すると、次の例のようなコマンドライン出力が表示されます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow コマンドライン出力には、ブートエントリーに関する次の重要な設定情報が表示されます。
args- 起動プロセス中に GRUB2 ブートローダーによってカーネルに渡されるコマンドラインパラメーター。このパラメーターは、カーネル、initramfs、その他のブート時コンポーネントのさまざまな設定と動作を設定します。
id- ブートローダーメニュー内の各ブートエントリーに割り当てられる一意の識別子。マシン ID とカーネルバージョンで構成されています。
root- カーネルがマウントし、ブート中にプライマリーファイルシステムとして使用するルートファイルシステム。
第8章 カーネルライブパッチでパッチの適用 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Enterprise Linux カーネルのライブパッチソリューションを使用すると、再起動やプロセスの再起動を行わずに実行中のカーネルにパッチを適用できます。
このソリューションでは、システム管理者は以下を行うことができます。
- 重大なセキュリティーパッチをカーネルに即座に適用することが可能。
- 長時間実行しているタスクの完了、ユーザーのログオフ、スケジュールダウンタイムを待つ必要がない。
- システムのアップタイムをより制御し、セキュリティーや安定性を犠牲にしない。
カーネルライブパッチを使用すると、セキュリティーパッチに必要な再起動の回数を減らすことができます。ただし、すべての重大または重要な CVE に対処できるわけではないことに注意してください。ライブパッチの範囲の詳細は、Red Hat ナレッジベースソリューション Is live kernel patch (kpatch) supported in Red Hat Enterprise Linux? を参照してください。
カーネルのライブパッチとその他のカーネルサブコンポーネントの間には、いくつかの非互換性が存在します。カーネルのライブパッチを使用する前に、kpatch の制限 を慎重に確認してください。
カーネルのライブパッチ更新のサポート頻度の詳細は、以下を参照してください。
8.1. kpatch の制限 リンクのコピーリンクがクリップボードにコピーされました!
-
kpatch機能を使用すると、システムをすぐに再起動する必要のない、簡単なセキュリティーおよびバグ修正の更新を適用できます。 -
パッチのロード中またはロード後に
SystemTapまたはkprobeツールを使用しないでください。プローブが削除されるまでパッチは有効にならない可能性があります。
8.2. サードパーティーのライブパッチサポート リンクのコピーリンクがクリップボードにコピーされました!
kpatch ユーティリティーは、Red Hat リポジトリー提供の RPM モジュールを含む、Red Hat がサポートする唯一のカーネルライブパッチユーティリティーです。Red Hat はサードパーティーが提供するライブパッチをサポートしていません。
サードパーティーソフトウェアのサポートポリシーの詳細は、As a customer how does Red Hat support me when I use third party components? を参照してください。
8.3. カーネルライブパッチへのアクセス リンクのコピーリンクがクリップボードにコピーされました!
カーネルモジュール (kmod) はカーネルのライブパッチ機能を実装し、RPM パッケージとして提供されます。
すべてのお客様は、通常のチャンネルから提供されるカーネルライブパッチにアクセスできます。ただし、延長サポートサービスにサブスクライブしていないお客様は、次のマイナーリリースが利用可能になると、現行のマイナーリリースに対する新しいパッチへのアクセスを失うことになります。たとえば、標準のサブスクリプションを購入しているお客様は、RHEL 9.2 カーネルがリリースされるまで RHEL 9.1 カーネルのライブパッチのみを行うことができます。
カーネルのライブパッチのコンポーネントは、以下のようになります。
- カーネルパッチモジュール
- カーネルライブパッチの配信メカニズム
- パッチが適用されるカーネル専用に構築されたカーネルモジュール。
- パッチモジュールには、カーネルに必要な修正のコードが含まれます。
-
パッチモジュールは、
livepatchカーネルサブシステムに登録され、置換する元の関数と置換関数へのポインターを指定します。カーネルパッチモジュールは RPM として提供されます。 -
命名規則は、
kpatch_<kernel version>_<kpatch version>_<kpatch release>です。名前の "kernel version" 部分の ドット は、アンダースコア に置き換えます。
kpatchユーティリティー- パッチモジュールを管理するためのコマンドラインユーティリティー。
kpatchサービス-
multiuser.targetで必要なsystemdサービス。このターゲットは、システムの起動時にカーネルパッチをロードします。 kpatch-dnfパッケージ- RPM パッケージ形式で配信される DNF プラグイン。このプラグインは、カーネルライブパッチへの自動サブスクリプションを管理します。
8.4. カーネルのライブパッチ適用のプロセス リンクのコピーリンクがクリップボードにコピーされました!
kpatch カーネルパッチソリューションは、livepatch カーネルサブシステムを使用して、古い関数を更新された関数にリダイレクトします。システムにライブカーネルパッチを適用すると、次のプロセスがトリガーされます。
-
カーネルパッチモジュールは、
/var/lib/kpatch/ディレクトリーにコピーされ、次回の起動時にsystemdを介して、カーネルへの再適用として登録されます。 -
kpatchモジュールは実行中のカーネルにロードされ、新しい関数は新しいコードのメモリー内のロケーションへのポインターとともにftraceメカニズムに登録されます。
カーネルがパッチを適用した関数にアクセスすると、ftrace メカニズムによって関数がリダイレクトされ、元の関数がバイパスされてカーネルが関数のパッチを適用したバージョンに誘導されます。
図8.1 カーネルライブパッチの仕組み
8.5. 現在インストールされているカーネルをライブパッチストリームにサブスクライブする手順 リンクのコピーリンクがクリップボードにコピーされました!
カーネルパッチモジュールは RPM パッケージに含まれ、パッチが適用されたカーネルバージョンに固有のものとなります。各 RPM パッケージは時間とともに累積的に更新されます。
以下の手順では、指定のカーネルに対して、今後の累積パッチ更新をすべてサブスクライブする方法を説明します。ライブパッチは累積的であるため、特定のカーネルにデプロイされている個々のパッチを選択できません。
Red Hat は、Red Hat がサポートするシステムに適用されたサードパーティーのライブパッチをサポートしません。
前提条件
- root 権限がある。
手順
オプション: カーネルのバージョンを確認します。
uname -r 5.14.0-1.el9.x86_64
# uname -r 5.14.0-1.el9.x86_64Copy to Clipboard Copied! Toggle word wrap Toggle overflow カーネルのバージョンに一致するライブパッチパッケージを検索します。
dnf search $(uname -r)
# dnf search $(uname -r)Copy to Clipboard Copied! Toggle word wrap Toggle overflow ライブパッチパッケージをインストールします。
dnf install "kpatch-patch = $(uname -r)"
# dnf install "kpatch-patch = $(uname -r)"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 上記のコマンドでは、特定カーネルにのみに最新の累積パッチをインストールし、適用します。
ライブパッチパッケージのバージョンが 1-1 以上である場合には、パッケージにパッチモジュールが含まれます。この場合、ライブパッチパッケージのインストール時に、カーネルにパッチが自動的に適用されます。
カーネルパッチモジュールは、今後の再起動時に
systemdシステムおよびサービスマネージャーにより読み込まれる/var/lib/kpatch/ディレクトリーにもインストールされます。注記指定のカーネルに利用可能なライブパッチがない場合は、空のライブパッチパッケージがインストールされます。空のライブパッチパッケージには、kpatch_version-kpatch_release 0-0 (例:
kpatch-patch-5_14_0-1-0-0.x86_64.rpm) が含まれます。空の RPM のインストールを行うと、指定のカーネルの将来のすべてのライブパッチにシステムがサブスクライブされます。
検証
インストールされているすべてのカーネルにパッチが当てられていることを確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この出力は、カーネルパッチモジュールがカーネルに読み込まれていることを示しています。このカーネルには、
kpatch-patch-5_14_0-1-0-1.el9.x86_64.rpmパッケージで修正された最新のパッチが当てられています。注記kpatch listコマンドを入力しても、空のライブパッチパッケージが返されません。代わりにrpm -qa | grep kpatchコマンドを使用します。rpm -qa | grep kpatch kpatch-dnf-0.4-3.el9.noarch kpatch-0.9.7-2.el9.noarch kpatch-patch-5_14_0-284_25_1-0-0.el9_2.x86_64
# rpm -qa | grep kpatch kpatch-dnf-0.4-3.el9.noarch kpatch-0.9.7-2.el9.noarch kpatch-patch-5_14_0-284_25_1-0-0.el9_2.x86_64Copy to Clipboard Copied! Toggle word wrap Toggle overflow
8.6. ライブパッチストリームに新しいカーネルを自動的にサブスクライブする手順 リンクのコピーリンクがクリップボードにコピーされました!
kpatch-dnf DNF プラグインを使用して、カーネルパッチモジュール (別称カーネルライブパッチ) が提供する修正にシステムをサブスクライブできます。このプラグインは、現在システムが使用するカーネルと、今後インストールされる カーネルの 自動 サブスクリプションを有効にします。
前提条件
- root 権限がある。
手順
オプション: インストールされているすべてのカーネルと現在実行中のカーネルを確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow kpatch-dnfプラグインをインストールします。dnf install kpatch-dnf
# dnf install kpatch-dnfCopy to Clipboard Copied! Toggle word wrap Toggle overflow カーネルライブパッチの自動サブスクリプションを有効にします。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは、現在インストールされているすべてのカーネルをサブスクライブして、カーネルライブパッチを受け取ります。このコマンドは、インストールされている全カーネルに、最新の累積パッチ (存在する場合) をインストールして適用します。
カーネルを更新すると、新しいカーネルのインストールプロセス中にライブパッチが自動的にインストールされます。
カーネルパッチモジュールは、今後の再起動時に
systemdシステムおよびサービスマネージャーにより読み込まれる/var/lib/kpatch/ディレクトリーにもインストールされます。注記指定のカーネルに利用可能なライブパッチがない場合は、空のライブパッチパッケージがインストールされます。空のライブパッチパッケージには、kpatch_version-kpatch_release 0-0 (例:
kpatch-patch-5_14_0-1-0-0.el9.x86_64.rpm) が含まれます。空の RPM のインストールを行うと、指定のカーネルの将来のすべてのライブパッチにシステムがサブスクライブされます。
検証
インストールされているすべてのカーネルにパッチが適用されていることを確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この出力から、実行中のカーネルとインストールされている他のカーネル両方に
kpatch-patch-5_14_0-1-0-1.el9.x86_64.rpmとkpatch-patch-5_14_0-2-0-1.el9.x86_64.rpmパッケージそれぞれからの修正が適用されたことが分かります。注記kpatch listコマンドを入力しても、空のライブパッチパッケージが返されません。代わりにrpm -qa | grep kpatchコマンドを使用します。rpm -qa | grep kpatch kpatch-dnf-0.4-3.el9.noarch kpatch-0.9.7-2.el9.noarch kpatch-patch-5_14_0-284_25_1-0-0.el9_2.x86_64
# rpm -qa | grep kpatch kpatch-dnf-0.4-3.el9.noarch kpatch-0.9.7-2.el9.noarch kpatch-patch-5_14_0-284_25_1-0-0.el9_2.x86_64Copy to Clipboard Copied! Toggle word wrap Toggle overflow
8.7. ライブパッチストリームへの自動サブスクリプションの無効化 リンクのコピーリンクがクリップボードにコピーされました!
カーネルパッチモジュールが提供する修正にシステムをサブスクライブする場合、サブスクリプションは 自動的 です。この機能を無効にして、kpatch-patch パッケージの自動インストールを無効化できます。
前提条件
- root 権限がある。
手順
オプション: インストールされているすべてのカーネルと現在実行中のカーネルを確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow カーネルライブパッチへの自動サブスクリプションを無効にします。
dnf kpatch manual Updating Subscription Management repositories.
# dnf kpatch manual Updating Subscription Management repositories.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
成功した出力を確認できます。
yum kpatch status ... Updating Subscription Management repositories. Last metadata expiration check: 0:30:41 ago on Tue Jun 14 15:59:26 2022. Kpatch update setting: manual
# yum kpatch status ... Updating Subscription Management repositories. Last metadata expiration check: 0:30:41 ago on Tue Jun 14 15:59:26 2022. Kpatch update setting: manualCopy to Clipboard Copied! Toggle word wrap Toggle overflow
8.8. カーネルパッチモジュールの更新 リンクのコピーリンクがクリップボードにコピーされました!
カーネルパッチモジュールは、RPM パッケージを通じて配信および適用されます。累積的なカーネルパッチモジュールを更新するプロセスは、他の RPM パッケージの更新と同様です。
前提条件
- 現在インストールされているカーネルをライブパッチストリームにサブスクライブする手順 に従って、システムがライブパッチストリームにサブスクライブされている。
手順
現在のカーネルの新しい累積バージョンを更新します。
dnf update "kpatch-patch = $(uname -r)"
# dnf update "kpatch-patch = $(uname -r)"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 上記のコマンドは、現在実行中のカーネルに利用可能な更新を自動的にインストールし、適用します。これには、新たにリリースされた累計なライブパッチが含まれます。
もしくは、インストールしたすべてのカーネルパッチモジュールを更新します。
dnf update "kpatch-patch"
# dnf update "kpatch-patch"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
システムが同じカーネルで再起動すると、kpatch.service systemd サービスにより、再度カーネルにライブパッチが自動的に適用されます。
8.9. ライブパッチパッケージの削除 リンクのコピーリンクがクリップボードにコピーされました!
ライブパッチパッケージを削除して、Red Hat Enterprise Linux カーネルライブパッチソリューションを無効にします。
前提条件
- root 権限がある。
- ライブパッチパッケージがインストールされている。
手順
ライブパッチパッケージを選択します。
dnf list installed | grep kpatch-patch kpatch-patch-5_14_0-1.x86_64 0-1.el9 @@commandline …
# dnf list installed | grep kpatch-patch kpatch-patch-5_14_0-1.x86_64 0-1.el9 @@commandline …Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例には、インストールしたライブパッチパッケージがリストされます。
ライブパッチパッケージを削除します。
dnf remove kpatch-patch-5_14_0-1.x86_64
# dnf remove kpatch-patch-5_14_0-1.x86_64Copy to Clipboard Copied! Toggle word wrap Toggle overflow ライブパッチパッケージが削除されると、カーネルは次回の再起動までパッチが当てられたままになりますが、カーネルパッチモジュールはディスクから削除されます。今後の再起動では、対応するカーネルにはパッチが適用されなくなります。
- システムを再起動します。
ライブパッチパッケージが削除されたことを確認します。
dnf list installed | grep kpatch-patch
# dnf list installed | grep kpatch-patchCopy to Clipboard Copied! Toggle word wrap Toggle overflow パッケージが正常に削除された場合、このコマンドでは何も出力されません。
検証
カーネルライブパッチソリューションが無効になっていることを確認します。
kpatch list Loaded patch modules:
# kpatch list Loaded patch modules:Copy to Clipboard Copied! Toggle word wrap Toggle overflow この出力例では、現在読み込まれているパッチモジュールがないため、カーネルにパッチが適用されておらず、ライブパッチソリューションがアクティブでないことが示されています。
現在、Red Hat はシステムの再起動なしで、ライブパッチを元に戻すことはサポートしていません。ご不明な点がございましたら、サポートチームまでお問い合わせください。
8.10. カーネルパッチモジュールのアンインストール リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Enterprise Linux カーネルライブパッチソリューションが、以降の起動時にカーネルパッチモジュールを適用しないようにします。
前提条件
- root 権限がある。
- ライブパッチパッケージがインストールされている。
- カーネルパッチモジュールがインストールされ、ロードされている。
手順
カーネルパッチモジュールを選択します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 選択したカーネルパッチモジュールをアンインストールします。
kpatch uninstall kpatch_5_14_0_1_0_1 uninstalling kpatch_5_14_0_1_0_1 (5.14.0-1.el9.x86_64)
# kpatch uninstall kpatch_5_14_0_1_0_1 uninstalling kpatch_5_14_0_1_0_1 (5.14.0-1.el9.x86_64)Copy to Clipboard Copied! Toggle word wrap Toggle overflow アンインストールしたカーネルモジュールが読み込まれていることに注意してください。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 選択したモジュールをアンインストールすると、カーネルは次回の再起動までパッチが当てられますが、カーネルパッチモジュールはディスクから削除されます。
- システムを再起動します。
検証
カーネルパッチモジュールがアンインストールされていることを確認します。
kpatch list Loaded patch modules: …
# kpatch list Loaded patch modules: …Copy to Clipboard Copied! Toggle word wrap Toggle overflow この出力例では、カーネルパッチモジュールがロードまたはインストールされていないことが示されています。そのため、カーネルにパッチが適用されておらず、カーネルライブパッチソリューションがアクティブではありません。
8.11. kpatch.service の無効化 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Enterprise Linux カーネルライブパッチソリューションが、以降の起動時にすべてのカーネルパッチモジュールをグローバルに適用しないようにします。
前提条件
- root 権限がある。
- ライブパッチパッケージがインストールされている。
- カーネルパッチモジュールがインストールされ、ロードされている。
手順
kpatch.serviceが有効化されていることを確認します。systemctl is-enabled kpatch.service enabled
# systemctl is-enabled kpatch.service enabledCopy to Clipboard Copied! Toggle word wrap Toggle overflow kpatch.serviceを無効にします。systemctl disable kpatch.service Removed /etc/systemd/system/multi-user.target.wants/kpatch.service.
# systemctl disable kpatch.service Removed /etc/systemd/system/multi-user.target.wants/kpatch.service.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 適用されたカーネルモジュールが依然としてロードされていることに注意してください。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- システムを再起動します。
オプション:
kpatch.serviceのステータスを確認します。systemctl status kpatch.service ● kpatch.service - "Apply kpatch kernel patches" Loaded: loaded (/usr/lib/systemd/system/kpatch.service; disabled; vendor preset: disabled) Active: inactive (dead)
# systemctl status kpatch.service ● kpatch.service - "Apply kpatch kernel patches" Loaded: loaded (/usr/lib/systemd/system/kpatch.service; disabled; vendor preset: disabled) Active: inactive (dead)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例は、
kpatch.serviceが無効になっていることを証明しています。したがって、カーネルのライブパッチソリューションはアクティブではありません。カーネルパッチモジュールがアンロードされたことを確認します。
kpatch list Loaded patch modules: Installed patch modules: kpatch_5_14_0_1_0_1 (5.14.0-1.el9.x86_64)
# kpatch list Loaded patch modules: Installed patch modules: kpatch_5_14_0_1_0_1 (5.14.0-1.el9.x86_64)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 上記の出力例では、カーネルパッチモジュールがインストールされていても、カーネルにパッチが適用されていないことを示しています。
現在、Red Hat はシステムの再起動なしで、ライブパッチを元に戻すことはサポートしていません。ご不明な点がございましたら、サポートチームまでお問い合わせください。
第9章 仮想化環境でカーネルパニックのパラメーターを無効のままにする リンクのコピーリンクがクリップボードにコピーされました!
RHEL 9 に仮想マシンを設定する場合は、仮想マシンで偽ソフトロックアップが発生する可能性があるため、カーネルパラメーター softlockup_panic および nmi_watchdog を有効にしないでください。また、カーネルパニックは必要ありません。
以下のセクションで、このアドバイスの背後にある理由を見つけてください。
9.1. ソフトロックアップとは リンクのコピーリンクがクリップボードにコピーされました!
ソフトロックアップは、通常、タスクが再スケジュールされずに CPU のカーネル領域で実行しているときにバグによって生じる状況です。また、このタスクは、その他のタスクがその特定の CPU で実行することを許可しません。これにより、警告が、システムコンソールを介してユーザーに表示されます。この問題は、ソフトロックアップの発生 (fire) とも呼ばれます。
9.2. カーネルパニックを制御するパラメーター リンクのコピーリンクがクリップボードにコピーされました!
ソフトロックの検出時にシステムの動作を制御する、以下のカーネルパラメーターを設定できます。
softlockup_panicソフトロックアップが検出されたときにカーネルでパニックを発生させるどうかを制御します。
Expand タイプ 値 効果 整数
0
カーネルが、ソフトロックアップでパニックにならない
整数
1
カーネルが、ソフトロックアップでパニックになる
RHEL 8 では、この値はデフォルトで 0 です。
システムでパニックを発生させるには、その前にハードロックアップを検出する必要があります。検出は、
nmi_watchdogパラメーターで制御されます。nmi_watchdogロックアップ検出メカニズム (
watchdogs) がアクティブかどうかを制御します。このパラメーターは整数型です。Expand 値 効果 0
ロックアップ検出を無効にする
1
ロックアップ検出を有効にする
ハードロックアップ検出は、各 CPU で割り込みに応答する機能を監視します。
watchdog_threshウォッチドッグの
hrtimer、NMI イベント、およびソフトロックアップまたはハードロックアップのしきい値を制御します。Expand デフォルトのしきい値 ソフトロックアップのしきい値 10 秒
2 *
watchdog_threshこのパラメーターをゼロに設定すると、ロックアップ検出を無効にします。
9.3. 仮想化環境で誤ったソフトロックアップ リンクのコピーリンクがクリップボードにコピーされました!
物理ホスト上で発生する ソフトロックアップ は、通常、カーネルまたはハードウェアのバグを表します。仮想化環境のゲストオペレーティングシステムで同じ現象が発生すると、誤った警告が表示される可能性があります。
ホストのワークロードが重い場合や、メモリーなどの特定のリソースに対する競合が激しい場合は、誤ったソフトロックアップが発生する可能性があります。これは、ホストがゲスト CPU のスケジューリングを 20 秒超中断する場合に起こります。ゲスト CPU がホスト上で再度実行されるようにスケジュールされると、時間のジャンプ が発生し、それによって期限が来たタイマーが作動します。タイマーには、ゲスト CPU のソフトロックアップを報告できる hrtimer ウォッチドッグも含まれます。
仮想化環境でのソフトロックアップは誤りである可能性があります。ソフトロックアップがゲスト CPU に報告する際にシステムパニックをトリガーするカーネルパラメーターを有効にしないでください。
ゲストのソフトロックアップを理解するには、ホストがゲストをタスクとしてスケジュールしてから、ゲストが独自のタスクをスケジュールしていることを理解することが重要になります。
第10章 データベースサーバーのカーネルパラメーターの調整 リンクのコピーリンクがクリップボードにコピーされました!
データベースサーバーとデータベースの効率的な操作を確保するには、必要なカーネルパラメーターのセットを設定する必要があります。
10.1. データベースサーバーの概要 リンクのコピーリンクがクリップボードにコピーされました!
データベースサーバーは、データベース管理システム (DBMS) の機能を提供するサービスです。DBMS は、データベース管理のためのユーティリティーを提供し、エンドユーザー、アプリケーション、およびデータベースと対話します。
Red Hat Enterprise Linux 9 は、以下のデータベース管理システムを提供します。
- MariaDB 10.5
- MariaDB 10.11 - RHEL 9.4 以降で利用可能
- MySQL 8.0
- PostgreSQL 13
- PostgreSQL 15 - RHEL 9.2 以降で利用可能
- PostgreSQL 16 - RHEL 9.4 以降で利用可能
- Redis 6
10.2. データベースアプリケーションのパフォーマンスに影響するパラメーター リンクのコピーリンクがクリップボードにコピーされました!
次のカーネルパラメーターは、データベースアプリケーションのパフォーマンスに影響します。
- fs.aio-max-nr
サーバー上でシステムが処理できる非同期 I/O 操作の最大数を定義します。
注記fs.aio-max-nrパラメーターを増やしても、aio の制限以上を追加することはありません。- fs.file-max
システムが同時にサポートするファイルハンドル (開いているファイルに割り当てられた一時ファイル名または ID) の最大数を定義します。
カーネルは、アプリケーションからファイルハンドルが要求されるたびに、ファイルハンドルを動的に割り当てます。ただし、アプリケーションによってこれらのファイルハンドルが解放されても、カーネルはそれらを解放しません。代わりにこれらのファイルハンドルをリサイクルします。現在使用されているファイルハンドルの数が少ない場合でも、割り当てられたファイルハンドルの合計数は時間の経過とともに増加します。
kernel.shmall-
システム全体で使用できる共有メモリーページの合計を定義します。メインメモリー全体を使用するには、
kernel.shmallパラメーターの値が、メインメモリーの合計サイズ以下である必要があります。 kernel.shmmax- Linux プロセスが仮想アドレス空間に割り当てることができる 1 つの共有メモリーセグメントの最大サイズをバイト単位で定義します。
kernel.shmmni- データベースサーバーが処理できる共有メモリーセグメントの最大数を定義します。
net.ipv4.ip_local_port_range- システムは、ポート番号を指定せずにデータベースサーバーに接続するプログラムにこのポート範囲を使用します。
net.core.rmem_default- TCP (Transmission Control Protocol) を介してデフォルトの受信ソケットメモリーを定義します。
net.core.rmem_max- TCP (Transmission Control Protocol) による最大受信ソケットメモリーを定義します。
net.core.wmem_default- TCP (Transmission Control Protocol) によるデフォルトの送信ソケットメモリーを定義します。
net.core.wmem_max- TCP (Transmission Control Protocol) による最大送信ソケットメモリーを定義します。
vm.dirty_bytes/vm.dirty_ratio-
ダーティーデータを生成しているプロセスが
write()関数内でディスクへの書き出しを開始する、ダーティー化可能なメモリーのしきい値を、バイト単位またはパーセンテージ単位で定義します。
一度に指定できるのは、vm.dirty_bytes または vm.dirty_ratio の いずれか です。
vm.dirty_background_bytes/vm.dirty_background_ratio- カーネルがハードディスクにダーティーデータを積極的に書き出し始める、ダーティー化可能なメモリーのしきい値を、バイト単位またはパーセンテージ単位で定義します。
一度に指定できるのは、vm.dirty_background_bytes または vm.dirty_background_ratio の いずれか です。
vm.dirty_writeback_centisecsハードディスクへのダーティーデータの書き込みを行うカーネルスレッドの起動を定期的に行う間隔を定義します。
このカーネルパラメーターは、100 分の 1 秒単位で測定されます。
vm.dirty_expire_centisecs古くなったダーティーデータが、ハードディスクに書き込まれるまでの時間を定義します。
このカーネルパラメーターは、100 分の 1 秒単位で測定されます。
第11章 カーネルロギングの使用 リンクのコピーリンクがクリップボードにコピーされました!
ログファイルは、カーネル、サービス、システム上で実行されているアプリケーションなど、システムに関するメッセージを提供します。syslog サービスは、Red Hat Enterprise Linux でのロギング用にネイティブサポートを提供します。さまざまなユーティリティーがこのシステムを使用してイベントを記録し、ログファイルにまとめます。このファイルは、オペレーティングシステムの監査や問題のトラブルシューティングに役に立ちます。
11.1. カーネルリングバッファーとは リンクのコピーリンクがクリップボードにコピーされました!
起動プロセス中、コンソールはシステム起動の初期段階に関する重要な情報を提供します。先に出力されたメッセージが失われないように、カーネルはリングバッファーを利用します。このバッファーは、カーネルコード内の printk() 関数により生成されるブートメッセージなど、すべてのメッセージを格納します。次に、カーネルリングバッファーからのメッセージは、syslog サービスなどの永続ストレージのログファイルに読み込まれ、保存されます。
リングバッファーは、固定サイズの循環データ構造で、カーネルにハードコーディングされています。ユーザーは、dmesg コマンドまたは /var/log/boot.log ファイル介して、カーネルリングバッファーに保存されているデータを表示できます。リングバッファーが満杯になると、新しいデータにより古いデータが上書きされます。
11.2. ログレベルおよびカーネルロギングにおける printk のロール リンクのコピーリンクがクリップボードにコピーされました!
カーネルが報告する各メッセージには、メッセージの重要性を定義するログレベルが関連付けられています。カーネルリングバッファーは、カーネルリングバッファーとは で説明されているように、すべてのログレベルのカーネルメッセージを収集します。バッファーからコンソールに出力されるメッセージを定義するのは kernel.printk パラメーターです。
ログレベルの値は、以下の順序で分類されます。
- 0
- カーネルの緊急事態。システムが利用できません。
- 1
- カーネルアラート。すぐに対処する必要があります。
- 2
- 重大な問題があると見なされるカーネルの状態。
- 3
- 一般的なカーネルのエラー状態。
- 4
- 一般的なカーネルの警告状態。
- 5
- 正常だが重要な状態に関するカーネル通知。
- 6
- カーネル情報メッセージ。
- 7
- カーネルのデバッグレベルのメッセージ。
デフォルトでは、RHEL 9 の kernel.printk には次の値があります。
sysctl kernel.printk kernel.printk = 7 4 1 7
# sysctl kernel.printk
kernel.printk = 7 4 1 7
この 4 つの値は、順に以下を定義します。
- コンソールログレベル。コンソールに出力されるメッセージの最低優先度を定義します。
- 明示的なログレベルが付いていないメッセージのデフォルトのログレベル。
- コンソールのログレベルに、可能な限り低いログレベル設定を設定します。
起動時のコンソールのログレベルのデフォルト値を設定します。
これらの各値は、エラーメッセージを処理するさまざまなルールを定義します。
デフォルトの 7 4 1 7 printk 値を使用することで、カーネルアクティビティーのデバッグを改善できます。ただし、シリアルコンソールと組み合わせると、この printk 設定により激しい I/O バーストが発生し、RHEL システムが一時的に応答しなくなる可能性があります。通常 4 4 1 7 に printk 値を設定するとこのような状況を回避できますが、代わりに追加のデバッグ情報が失われてしまいます。
また、quiet、debug などの特定のカーネルコマンドラインパラメーターにより、デフォルトの kernel.printk 値が変更される点に注意してください。
第12章 GRUB の再インストール リンクのコピーリンクがクリップボードにコピーされました!
GRUB ブートローダーを再インストールすると、GRUB の誤ったインストール、ファイルの欠落、またはシステムの破損によってよく発生する一部の問題を修正できます。これらの問題は、不足しているファイルを復元し、ブート情報を更新することで解決できます。
GRUB を再インストールする理由:
- GRUB ブートローダーパッケージをアップグレードする。
- 別のドライブにブート情報を追加する。
- インストール済みのオペレーティングシステムを制御するために、ユーザーが GRUB ブートローダーを必要としている。ただし、一部のオペレーティングシステムには独自のブートローダーがインストールされており、GRUB を再インストールすると、目的のオペレーティングシステムに制御権限が戻されます。
GRUB は、ファイルが破損していない場合にのみファイルを復元します。
12.1. BIOS ベースマシンへの GRUB の再インストール リンクのコピーリンクがクリップボードにコピーされました!
BIOS ベースのシステムに GRUB ブートローダーを再インストールできます。GRUB パッケージを更新した後は必ず GRUB を再インストールしてください。
これにより、既存の GRUB が上書きされ、新しい GRUB がインストールされます。インストール中にシステムでデータの破損やブートクラッシュが発生しないようにしてください。
手順
GRUB がインストールされているデバイスに GRUB を再インストールします。たとえば、
sdaがデバイスの場合は、以下のようになります。grub2-install /dev/sda
# grub2-install /dev/sdaCopy to Clipboard Copied! Toggle word wrap Toggle overflow システムを再起動して、変更を有効にします。
reboot
# rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow
12.2. UEFI ベースマシンへの GRUB の再インストール リンクのコピーリンクがクリップボードにコピーされました!
UEFI ベースのシステムに GRUB ブートローダーを再インストールできます。
インストール中にシステムでデータの破損やブートクラッシュが発生しないようにしてください。
手順
grub2-efiおよびshimブートローダーファイルを再インストールします。yum reinstall grub2-efi shim
# yum reinstall grub2-efi shimCopy to Clipboard Copied! Toggle word wrap Toggle overflow システムを再起動して、変更を有効にします。
reboot
# rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow
12.3. IBM Power マシンへの GRUB の再インストール リンクのコピーリンクがクリップボードにコピーされました!
IBM Power システムの Power PC Reference Platform (PReP) ブートパーティションに GRUB ブートローダーを再インストールできます。GRUB パッケージを更新した後は必ず GRUB を再インストールしてください。
これにより、既存の GRUB が上書きされ、新しい GRUB がインストールされます。インストール中にシステムでデータの破損やブートクラッシュが発生しないようにしてください。
手順
GRUB が格納されているディスクパーティションを特定します。
bootlist -m normal -o sda1
# bootlist -m normal -o sda1Copy to Clipboard Copied! Toggle word wrap Toggle overflow ディスクパーティションに GRUB を再インストールします。
grub2-install partition
# grub2-install partitionCopy to Clipboard Copied! Toggle word wrap Toggle overflow partitionは、識別された GRUB パーティション (/dev/sda1など) に置き換えます。システムを再起動して、変更を有効にします。
reboot
# rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow
12.4. GRUB のリセット リンクのコピーリンクがクリップボードにコピーされました!
GRUB をリセットすると、すべての GRUB 設定ファイルとシステム設定が完全に削除され、ブートローダーが再インストールされます。すべての設定をデフォルト値にリセットして、破損したファイルや無効な設定によって発生した障害を修正できます。
次の手順では、ユーザーが行ったすべてのカスタマイズが削除されます。
手順
設定ファイルを削除します。
rm /etc/grub.d/* rm /etc/sysconfig/grub
# rm /etc/grub.d/* # rm /etc/sysconfig/grubCopy to Clipboard Copied! Toggle word wrap Toggle overflow パッケージを再インストールします。
BIOS ベースのマシンの場合:
yum reinstall grub2-tools
# yum reinstall grub2-toolsCopy to Clipboard Copied! Toggle word wrap Toggle overflow UEFI ベースのマシンの場合:
yum reinstall grub2-efi shim grub2-tools grub2-common
# yum reinstall grub2-efi shim grub2-tools grub2-commonCopy to Clipboard Copied! Toggle word wrap Toggle overflow
変更を有効にするために
grub.cfgファイルを再ビルドします。BIOS ベースのマシンの場合:
grub2-mkconfig -o /boot/grub2/grub.cfg
# grub2-mkconfig -o /boot/grub2/grub.cfgCopy to Clipboard Copied! Toggle word wrap Toggle overflow UEFI ベースのマシンの場合:
grub2-mkconfig -o /boot/grub2/grub.cfg
# grub2-mkconfig -o /boot/grub2/grub.cfgCopy to Clipboard Copied! Toggle word wrap Toggle overflow 警告grub.cfgを再構築するパスは、BIOS ベースと UEFI ベースの両マシンで同じです。実際のgrub.cfgは BIOS パスにのみ存在します。UEFI パスには、grub2-mkconfigコマンドを使用して変更または再作成してはならないスタブファイルがあります。
-
GRUB の再インストール 手順に従って、
/boot/パーティションに GRUB を復元します。
第13章 kdump のインストール リンクのコピーリンクがクリップボードにコピーされました!
新しいバージョンの RHEL 9 インストールでは、kdump サービスはデフォルトでインストールされ、アクティブ化されます。
13.1. kdump とは リンクのコピーリンクがクリップボードにコピーされました!
kdump は、クラッシュダンプメカニズムを提供し、クラッシュダンプまたは vmcore ダンプファイルを生成するサービスです。vmcore には、分析およびトラブルシューティング用のシステムメモリーの内容が含まれています。kdump は、kexec システムコールを使用して、再起動せずに 2 番目のカーネルである capture kernel を起動します。このカーネルはクラッシュしたカーネルのメモリーの内容をキャプチャーし、ファイルに保存します。この別のカーネルは、システムメモリーの予約部分で使用できます。
カーネルクラッシュダンプは、システム障害時に利用できる唯一の情報になります。したがって、ミッションクリティカルな環境では、kdump を稼働させることが重要です。Red Hat は、通常のカーネル更新サイクルで kexec-tools を定期的に更新してテストすることを推奨します。これは、新しいカーネル機能をインストールするときに重要です。
マシンに複数のカーネルがある場合は、インストールされているすべてのカーネルに対して、または指定したカーネルに対してのみ kdump を有効にできます。kdump をインストールすると、システムによってデフォルトの /etc/kdump.conf ファイルが作成されます。/etc/kdump.conf にはデフォルトの最小 kdump 設定が含まれています。これを編集して kdump 設定をカスタマイズできます。
13.2. Anaconda を使用した kdump のインストール リンクのコピーリンクがクリップボードにコピーされました!
Anaconda インストーラーでは、対話式インストール時に kdump 設定用のグラフィカルインターフェイス画面が表示されます。kdump を有効にして、必要な量のメモリーを予約できます。
手順
-
Anaconda インストーラーで、KDUMP をクリックして
kdumpを有効にします。 - メモリー予約をカスタマイズする必要がある場合は、Kdump Memory Reservation で Manual を選択します。
KDUMP > Memory To Be Reserved (MB) で、
kdumpに必要なメモリー予約を設定します。= コマンドラインでの kdump のインストール
カスタムの キックスタート インストールなどのインストール方法では、kdump がデフルトでインストールまたは有効化 されない 場合があります。その場合、次の手順で kdump を有効にできます。
前提条件
- アクティブな RHEL サブスクリプションがある。
-
システムの CPU アーキテクチャー用の
kexec-toolsパッケージを含むリポジトリーがある。 -
kdump設定とターゲットの要件をすべて満たしている。詳細は サポートされている kdump 設定とターゲット を参照してください。
手順
システムに
kdumpがインストールされているかどうかを確認します。rpm -q kexec-tools
# rpm -q kexec-toolsCopy to Clipboard Copied! Toggle word wrap Toggle overflow このパッケージがインストールされている場合は以下を出力します。
kexec-tools-2.0.22-13.el9.x86_64
# kexec-tools-2.0.22-13.el9.x86_64Copy to Clipboard Copied! Toggle word wrap Toggle overflow このパッケージがインストールされていない場合は以下を出力します
package kexec-tools is not installed
package kexec-tools is not installedCopy to Clipboard Copied! Toggle word wrap Toggle overflow kdumpおよび必要なパッケージをインストールします。dnf install kexec-tools
# dnf install kexec-toolsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第14章 コマンドラインで kdump の設定 リンクのコピーリンクがクリップボードにコピーされました!
kdump 用メモリーは、システムの起動時に予約されます。システムの Grand Unified Bootloader (GRUB) 設定ファイルでメモリーサイズを設定できます。メモリーサイズは、設定ファイルで指定された crashkernel= 値と、システムの物理メモリーのサイズによって異なります。
14.1. kdump サイズの見積もり リンクのコピーリンクがクリップボードにコピーされました!
kdump 環境を計画および構築するときは、クラッシュダンプファイルに必要な容量を把握することが重要です。
makedumpfile --mem-usage コマンドは、クラッシュダンプファイルに必要な容量を推定します。また、メモリー使用量に関するレポートを生成します。このレポートは、ダンプレベルと、除外しても問題ないページを決定するのに役立ちます。
手順
次のコマンドを入力して、メモリー使用量に関するレポートを生成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
makedumpfile --mem-usage は、必要なメモリーをページ単位で報告します。つまり、カーネルページサイズを元に、使用するメモリーのサイズを計算する必要があります。
デフォルトでは、RHEL カーネルは、AMD64 および Intel 64 の CPU アーキテクチャーで 4KB のサイズのページを使用し、IBM POWER アーキテクチャーで 64KB のサイズのページを使用します。
14.2. RHEL 9 での kdump メモリー使用量の設定 リンクのコピーリンクがクリップボードにコピーされました!
kexec-tools パッケージは、デフォルトの crashkernel= メモリー予約値を維持します。kdump サービスはデフォルト値を使用して、各カーネルのクラッシュカーネルメモリーを予約します。デフォルト値は、crashkernel= 値を手動で設定するときに必要なメモリーサイズを見積もるための基準値としても機能します。クラッシュカーネルの最小サイズは、ハードウェアおよびマシンの仕様により異なります。
また、kdump の自動メモリー割り当ては、システムハードウェアアーキテクチャーと利用可能なメモリーサイズにより異なります。たとえば、AMD64 および Intel 64 ビットアーキテクチャーでは、crashkernel= パラメーターのデフォルト値は、使用可能なメモリーが 1 GB を超える場合にのみ機能します。kexec-tools ユーティリティーは、AMD64 および Intel 64 ビットアーキテクチャーで次のデフォルトのメモリー予約を設定します。
crashkernel=1G-4G:192M,4G-64G:256M,64G:512M
crashkernel=1G-4G:192M,4G-64G:256M,64G:512M
kdumpctl estimate を実行して、クラッシュをトリガーせずにおおよその値を取得することもできます。crashkernel= の推定値は正確でない可能性がありますが、適切な crashkernel= 値を設定する際の参考として役立ちます。
起動コマンドラインの crashkernel=auto オプションは、RHEL 9 以降のリリースでは対応しなくなりました。
前提条件
- システムの root 権限がある。
-
kdumpの設定とターゲットの要件をすべて満たしている。詳細は サポートされている kdump 設定とターゲット を参照してください。 -
IBM Z システムの場合は、
ziplユーティリティーがインストールされている。
手順
クラッシュカーネルのデフォルト値を設定します。
kdumpctl reset-crashkernel --kernel=ALL
# kdumpctl reset-crashkernel --kernel=ALLCopy to Clipboard Copied! Toggle word wrap Toggle overflow crashkernel=値を設定する場合は、kdumpを有効にしてシステムを再起動し、設定をテストします。kdumpカーネルの起動に失敗した場合は、メモリーサイズを徐々に増やして許容可能な値を設定します。カスタムの
crashkernel=値を使用するには、以下を実行します。必要なメモリー予約を設定します。
crashkernel=192M
crashkernel=192MCopy to Clipboard Copied! Toggle word wrap Toggle overflow 必要に応じて、構文
crashkernel=<range1>:<size1>,<range2>:<size2>を使用して、予約メモリーの量を、インストールされているメモリーの合計量に応じて変動する値に設定できます。以下に例を示します。crashkernel=1G-4G:192M,2G-64G:256M
crashkernel=1G-4G:192M,2G-64G:256MCopy to Clipboard Copied! Toggle word wrap Toggle overflow この例では、システムメモリーの合計量が 1 GB 以上 4 GB 未満の場合、192 MB のメモリーが予約されます。メモリーの合計量が 4 GB を超える場合、256 MB が
kdump用に予約されます。オプション: 予約済みメモリーをオフセットします。
crashkernel予約は非常に早いため、特定の固定オフセットでメモリーを予約する必要があるシステムもあります。また、特別な用途にいくつかの領域を予約したいシステムもあります。オフセットが設定されると、予約メモリーはそこから開始されます。予約メモリーをオフセットするには、以下の構文を使用します。crashkernel=192M@16M
crashkernel=192M@16MCopy to Clipboard Copied! Toggle word wrap Toggle overflow この例では、16 MB (物理アドレス 0x01000000) から始まる 192 MB のメモリーを予約します。オフセットを 0 に設定するか、値を指定しない場合、
kdumpは予約されたメモリーを自動的にオフセットします。オフセットを最後の値として指定することにより、変数メモリー予約を設定するときにメモリーをオフセットすることもできます。たとえば、crashkernel=1G-4G:192M,2G-64G:256M@16Mです。ブートローダー設定を更新します。
grubby --update-kernel ALL --args "crashkernel=<custom-value>"
# grubby --update-kernel ALL --args "crashkernel=<custom-value>"Copy to Clipboard Copied! Toggle word wrap Toggle overflow <custom-value>には、クラッシュカーネル用に設定したカスタムのcrashkernel=値を含める必要があります。
変更を有効にするために再起動します。
reboot
# rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow
kdump 設定をテストするコマンドにより、カーネルがクラッシュし、データが失われます。注意して手順を実行してください。kdump 設定のテストにアクティブな実稼働システムを使用しないでください。
sysrq キーをアクティブ化してカーネルをクラッシュさせます。address-YYYY-MM-DD-HH:MM:SS/vmcore ファイルは、/etc/kdump.conf ファイルで指定されているターゲットの場所に保存されます。デフォルトのターゲットの場所を選択した場合、vmcore ファイルは /var/crash/ の下にマウントされたパーティションに保存されます。
sysrqキーをアクティブにして、kdumpカーネルを起動します。echo c > /proc/sysrq-trigger
# echo c > /proc/sysrq-triggerCopy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドによりカーネルがクラッシュし、必要に応じてカーネルが再起動されます。
-
/etc/kdump.confファイルを表示し、ターゲットの保存先にvmcoreファイルが保存されているかどうかを確認します。
14.3. kdump ターゲットの設定 リンクのコピーリンクがクリップボードにコピーされました!
クラッシュダンプは通常、ローカルファイルシステムにファイルとして保存され、デバイスに直接書き込まれます。必要に応じて、NFS または SSH プロトコルを使用して、ネットワーク経由でクラッシュダンプを送信できます。クラッシュダンプファイルを保存するオプションは、一度に 1 つだけ設定できます。デフォルトの動作では、ローカルファイルシステムの /var/crash/ ディレクトリーに保存されます。
前提条件
- システムの root 権限がある。
-
kdump設定とターゲットの要件をすべて満たしている。詳細は サポートされている kdump 設定とターゲット を参照してください。
手順
ローカルファイルシステムの
/var/crash/ディレクトリーにクラッシュダンプファイルを保存するには、/etc/kdump.confファイルを変更して、パスを指定します。path /var/crash
path /var/crashCopy to Clipboard Copied! Toggle word wrap Toggle overflow path /var/crashオプションは、kdumpがクラッシュダンプファイルを保存するファイルシステムへのパスを表します。注記-
/etc/kdump.confファイルでダンプターゲットを指定すると、path は指定されたダンプ出力先に対する相対パスになります。 -
/etc/kdump.confファイルでダンプターゲットを指定しない場合、パスはルートディレクトリーからの 絶対 パスを表します。
現在のシステムにマウントされているファイルシステムに応じて、ダンプターゲットと調整されたダンプパスが自動的に設定されます。
-
kdumpによって生成されるクラッシュダンプファイルと付随するファイルを保護するには、ユーザー権限や SELinux コンテキストなど、ターゲットの宛先ディレクトリーの属性を適切に設定する必要があります。さらに、次のようにkdump.confファイルでkdump_post.shなどのスクリプトを定義することもできます。kdump_post <path_to_kdump_post.sh>
kdump_post <path_to_kdump_post.sh>Copy to Clipboard Copied! Toggle word wrap Toggle overflow kdump_postディレクティブは、kdumpがクラッシュダンプの取得と指定の保存先への保存を完了した 後に 実行されるシェルスクリプトまたはコマンドを指定するものです。このメカニズムを使用すると、kdumpの機能を拡張して、ファイル権限の調整などの操作を実行できます。-
kdumpターゲット設定
# *grep -v ^# /etc/kdump.conf | grep -v ^$* ext4 /dev/mapper/vg00-varcrashvol path /var/crash core_collector makedumpfile -c --message-level 1 -d 31
# *grep -v ^# /etc/kdump.conf | grep -v ^$*
ext4 /dev/mapper/vg00-varcrashvol
path /var/crash
core_collector makedumpfile -c --message-level 1 -d 31
ダンプターゲットが指定されています (ext4 /dev/mapper/vg00-varcrashvol)。そのため、ダンプターゲットは /var/crash にマウントされます。path オプションも /var/crash に設定されています。したがって、kdump は、vmcore ファイルを /var/crash/var/crash ディレクトリーに保存します。
クラッシュダンプを保存するローカルディレクトリーを変更するには、
rootユーザーとして/etc/kdump.conf設定ファイルを編集します。-
#path /var/crashの行頭にあるハッシュ記号 (#) を削除します。 値を対象のディレクトリーパスに置き換えます。以下に例を示します。
path /usr/local/cores
path /usr/local/coresCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要RHEL 9 では、障害を回避するために、
kdumpsystemdサービスの起動時に、pathディレクティブを使用してkdumpターゲットとして定義されたディレクトリーが存在している必要があります。以前のバージョンの RHEL とは異なり、サービス起動時にディレクトリーが存在しない場合、ディレクトリーは自動的に作成されなくなりました。
-
ファイルを別のパーティションに書き込むには、
/etc/kdump.conf設定ファイルを編集します。必要に応じて
#ext4の行頭にあるハッシュ記号 (#) を削除します。-
デバイス名 (
#ext4 /dev/vg/lv_kdump行) -
ファイルシステムラベル (
#0ext4 LABEL=/boot行) -
UUID (
#ext4 UUID=03138356-5e61-4ab3-b58e-27507ac41937の行)
-
デバイス名 (
ファイルシステムタイプとデバイス名、ラベル、または UUID を必要な値に変更します。UUID 値を指定するための正しい構文は、
UUID="correct-uuid"とUUID=correct-uuidの両方です。以下に例を示します。ext4 UUID=03138356-5e61-4ab3-b58e-27507ac41937
ext4 UUID=03138356-5e61-4ab3-b58e-27507ac41937Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要LABEL=またはUUID=を使用してストレージデバイスを指定することを推奨します。/dev/sda3などのディスクデバイス名は、再起動した場合に一貫性が保証されません。IBM Z ハードウェアで Direct Access Storage Device (DASD) を使用する場合は、
kdumpに進む前に、ダンプデバイスが/etc/dasd.confで正しく指定されていることを確認してください。
クラッシュダンプを直接書き込むには、
/etc/kdump.conf設定ファイルを修正します。-
#raw /dev/vg/lv_kdumpの行頭にあるハッシュ記号 (#) を削除します。 値を対象のデバイス名に置き換えます。以下に例を示します。
raw /dev/sdb1
raw /dev/sdb1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
NFSプロトコルを使用してクラッシュダンプをリモートマシンに保存するには、次の手順を実行します。-
#nfs my.server.com:/export/tmpの行頭にあるハッシュ記号 (#) を削除します。 値を、正しいホスト名およびディレクトリーパスに置き換えます。以下に例を示します。
nfs penguin.example.com:/export/cores
nfs penguin.example.com:/export/coresCopy to Clipboard Copied! Toggle word wrap Toggle overflow 変更を有効にするには、
kdumpサービスを再起動します。sudo systemctl restart kdump.service
sudo systemctl restart kdump.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注記NFS ディレクティブを使用して NFS ターゲットを指定すると、
kdump.serviceが自動的に NFS ターゲットをマウントしてディスク容量をチェックしようとします。NFS ターゲットを事前にマウントする必要はありません。kdump.serviceがターゲットをマウントしないようにするには、kdump.confでdracut_args --mountディレクティブを使用します。これにより、kdump.serviceが--mount引数を使用してdracutユーティリティーを呼び出して NFS ターゲットを指定できるようになります。
-
SSH プロトコルを使用してクラッシュダンプをリモートマシンに保存するには、次の手順を実行します。
-
#ssh user@my.server.comの行頭にあるハッシュ記号 (#) を削除します。 - 値を正しいユーザー名およびホスト名に置き換えます。
SSH キーを設定に含めます。
-
#sshkey /root/.ssh/kdump_id_rsaの行頭にあるハッシュ記号 (#) を削除します。 値を、ダンプ先のサーバー上の正しいキーの場所に変更します。以下に例を示します。
ssh john@penguin.example.com sshkey /root/.ssh/mykey
ssh john@penguin.example.com sshkey /root/.ssh/mykeyCopy to Clipboard Copied! Toggle word wrap Toggle overflow
-
-
14.4. kdump コアコレクターの設定 リンクのコピーリンクがクリップボードにコピーされました!
kdump では、core_collector を使用してクラッシュダンプイメージをキャプチャーします。RHEL では、makedumpfile ユーティリティーがデフォルトのコアコレクターです。これは、以下に示すプロセスによりダンプファイルを縮小するのに役立ちます。
- クラッシュダンプファイルのサイズを圧縮し、さまざまなダンプレベルを使用して必要なページのみをコピーする
- 不要なクラッシュダンプページを除外する
- クラッシュダンプに含めるページタイプをフィルタリングする
クラッシュダンプファイルの圧縮は、RHEL 7 以降ではデフォルトで有効になっています。
クラッシュダンプファイルの圧縮をカスタマイズする必要がある場合は、以下の手順に従います。
構文
core_collector makedumpfile -l --message-level 1 -d 31
core_collector makedumpfile -l --message-level 1 -d 31
オプション
-
-c、-l、または-p:zlib(-cオプションの場合)、lzo(-lオプションの場合)、またはsnappy(-pオプションの場合) のいずれかを使用して、ページごとに圧縮ダンプファイルの形式を指定します。 -
-d(dump_level): ページを除外して、ダンプファイルにコピーされないようにします。 -
--message-level: メッセージタイプを指定します。このオプションでmessage_levelを指定すると、出力の表示量を制限できます。たとえば、message_levelで 7 を指定すると、一般的なメッセージとエラーメッセージを出力します。message_levelの最大値は 31 です。
前提条件
- システムの root 権限がある。
-
kdump設定とターゲットの要件をすべて満たしている。詳細は サポートされている kdump 設定とターゲット を参照してください。
手順
-
rootとして、/etc/kdump.conf設定ファイルを編集し、#core_collector makedumpfile -l --message-level 1 -d 31の先頭からハッシュ記号 ("#") を削除します。 - 次のコマンドを入力して、クラッシュダンプファイルの圧縮を有効にします。
core_collector makedumpfile -l --message-level 1 -d 31
core_collector makedumpfile -l --message-level 1 -d 31
-l オプションにより、dump の圧縮ファイル形式を指定します。-d オプションで、ダンプレベルを 31 に指定します。--message-level オプションで、メッセージレベルを 1 に指定します。
また、-c オプションおよび -p オプションを使用した以下の例を検討してください。
-cを使用してクラッシュダンプファイルを圧縮するには、次のコマンドを実行します。core_collector makedumpfile -c -d 31 --message-level 1
core_collector makedumpfile -c -d 31 --message-level 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow -pを使用してクラッシュダンプファイルを圧縮するには、次のコマンドを実行します。core_collector makedumpfile -p -d 31 --message-level 1
core_collector makedumpfile -p -d 31 --message-level 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
14.5. kdump のデフォルト障害応答の設定 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、設定したターゲットの場所で kdump がクラッシュダンプファイルの作成に失敗すると、システムが再起動し、ダンプがプロセス内で失われます。デフォルトの失敗応答を変更し、コアダンプをプライマリーターゲットに保存できない場合に別の操作を実行するように kdump を設定できます。追加のアクションは次のとおりです。
dump_to_rootfs-
コアダンプを
rootファイルシステムに保存します。 reboot- システムを再起動します。コアダンプは失われます。
halt- システムを停止します。コアダンプは失われます。
poweroff- システムの電源を切ります。コアダンプは失われます。
shell-
initramfs内からシェルセッションを実行します。コアダンプを手動で記録できます。 final_action-
kdumpの成功後、またはシェルまたはdump_to_rootfsの失敗アクションの完了時に、reboot、haltおよびpoweroffなどの追加操作を有効にします。デフォルトはrebootです。 failure_action-
カーネルクラッシュでダンプが失敗する可能性がある場合に実行するアクションを指定します。デフォルトは
rebootです。
前提条件
- root 権限
-
kdump設定とターゲットの要件をすべて満たしている。詳細は サポートされている kdump 設定とターゲット を参照してください。
手順
-
rootユーザーとして、/etc/kdump.conf設定ファイルの#failure_action行の先頭からハッシュ記号 (#) を削除します。 値を必要なアクションに置き換えます。
failure_action poweroff
failure_action poweroffCopy to Clipboard Copied! Toggle word wrap Toggle overflow
14.6. kdump の設定ファイル リンクのコピーリンクがクリップボードにコピーされました!
kdump カーネルの設定ファイルは /etc/sysconfig/kdump です。このファイルは、kdump カーネルコマンドラインパラメーターを制御します。ほとんどの設定では、デフォルトオプションを使用します。ただし、シナリオによっては、kdump カーネルの動作を制御するために特定のパラメーターを変更する必要があります。たとえば、KDUMP_COMMANDLINE_APPEND オプションを変更して kdump カーネルコマンドラインを追加して詳細なデバッグ出力を取得したり、KDUMP_COMMANDLINE_REMOVE オプションを変更して kdump コマンドラインから引数を削除したりします。
KDUMP_COMMANDLINE_REMOVE現在の
kdumpコマンドラインから引数を削除します。これにより、kdumpエラーやkdumpカーネルの起動失敗の原因となるパラメーターが削除されます。これらのパラメーターは、以前のKDUMP_COMMANDLINEプロセスから解析されるか、/proc/cmdlineファイルから継承されたものである場合があります。この変数が設定されていない場合は、
/proc/cmdlineファイルからすべての値が継承されます。このオプションを設定すると、問題のデバッグに役立つ情報も提供されます。特定の引数を削除するには、以下のようにして
KDUMP_COMMANDLINE_REMOVEに追加します。
KDUMP_COMMANDLINE_REMOVE="hugepages hugepagesz slub_debug quiet log_buf_len swiotlb"
# KDUMP_COMMANDLINE_REMOVE="hugepages hugepagesz slub_debug quiet log_buf_len swiotlb"
KDUMP_COMMANDLINE_APPENDこのオプションは、現在のコマンドラインに引数を追加します。この引数は、以前の
KDUMP_COMMANDLINE_REMOVE変数によって解析されたものである場合があります。kdumpカーネルの場合は、mce、cgroup、numa、hest_disableなどの特定のモジュールを無効にすると、カーネルエラーを防ぐのに役立ちます。これらのモジュールは、kdump用に予約されているカーネルメモリーの大部分を消費したり、kdumpカーネルの起動失敗を引き起こしたりする可能性があります。kdumpカーネルコマンドラインでメモリーcgroupを無効にするには、以下のコマンドを実行します。
KDUMP_COMMANDLINE_APPEND="cgroup_disable=memory"
KDUMP_COMMANDLINE_APPEND="cgroup_disable=memory"
14.7. kdump 設定のテスト リンクのコピーリンクがクリップボードにコピーされました!
kdump を設定したら、システムクラッシュを手動でテストして、定義した kdump ターゲットに vmcore ファイルが生成されていることを確認する必要があります。vmcore ファイルは、新しく起動したカーネルのコンテキストからキャプチャーされます。したがって、vmcore にはカーネルクラッシュをデバッグするための重要な情報が含まれています。
アクティブな実稼働システムでは kdump をテストしないでください。kdump をテストするコマンドにより、カーネルがクラッシュし、データが失われます。システムアーキテクチャーに応じて、十分なメンテナンス時間を必ず確保してください。kdump のテストでは時間のかかる再起動が数回必要になる場合があります。
kdump のテスト中に vmcore ファイルが生成されない場合は、kdump のテストを成功させるために、再度テストを実行する前に問題を特定して修正してください。
手動でシステムを変更した場合は、システム変更の最後に kdump 設定をテストする必要があります。たとえば、次のいずれかの変更を行った場合は、kdump のパフォーマンスが最適になるように、kdump の設定をテストしてください。
- パッケージのアップグレード。
- ハードウェアレベルの変更 (ストレージやネットワークの変更など)。
- ファームウェアのアップグレード。
- サードパーティーのモジュールを含む新規のインストールおよびアプリケーションのアップグレード。
- ホットプラグメカニズムを使用した、このメカニズムをサポートするハードウェアへのメモリーの追加。
-
/etc/kdump.confファイルまたは/etc/sysconfig/kdumpファイルに対する変更。
前提条件
- システムの root 権限がある。
-
重要なデータがすべて保存されている。
kdumpをテストするコマンドにより、カーネルがクラッシュし、データが失われます。 - システムアーキテクチャーに応じて、十分なマシンメンテナンス時間が確保されている。
手順
kdumpサービスを有効にします。kdumpctl restart
# kdumpctl restartCopy to Clipboard Copied! Toggle word wrap Toggle overflow kdumpctlを使用してkdumpサービスのステータスを確認します。kdumpctl status kdump:Kdump is operational
# kdumpctl status kdump:Kdump is operationalCopy to Clipboard Copied! Toggle word wrap Toggle overflow 必要に応じて
systemctlコマンドを使用すると、出力がsystemdジャーナルに印刷されます。カーネルクラッシュを開始して、
kdumpの設定をテストします。sysrq-triggerキーの組み合わせによりカーネルがクラッシュし、必要に応じてシステムが再起動します。echo c > /proc/sysrq-trigger
# echo c > /proc/sysrq-triggerCopy to Clipboard Copied! Toggle word wrap Toggle overflow カーネルの再起動時に、
/etc/kdump.confファイルで指定した場所にaddress-YYYY-MM-DD-HH:MM:SS/vmcoreファイルが作成されます。デフォルトは/var/crash/です。
14.8. システムクラッシュ後に kdump によって生成されるファイル リンクのコピーリンクがクリップボードにコピーされました!
システムがクラッシュすると、kdump サービスは、カーネルメモリーをダンプファイル (vmcore) にキャプチャーします。また、トラブルシューティングと事後分析に役立つ追加の診断ファイルを生成します。
kdump によって生成されるファイル:
-
vmcore- クラッシュ時のシステムメモリーを含む主なカーネルメモリーダンプファイル。これには、kdump設定で指定されているcore_collectorプログラムの設定に従ってデータが追加されます。デフォルトでは、カーネルデータ構造、プロセス情報、スタックトレース、およびその他の診断情報が含まれます。 -
vmcore-dmesg.txt- パニックになったプライマリーカーネルからのカーネルリングバッファーログ (dmesg) の内容。 -
kexec-dmesg.log-vmcoreデータを収集するセカンダリーのkexecカーネルの実行に基づくカーネルおよびシステムログメッセージが含まれます。
14.9. kdump サービスの有効化および無効化 リンクのコピーリンクがクリップボードにコピーされました!
kdump 機能は、特定のカーネルまたはインストールされているすべてのカーネルで有効または無効にするように設定できます。kdump 機能を定期的にテストし、正しく動作することを検証する必要があります。
前提条件
- システムの root 権限がある。
-
kdumpの設定とターゲットの要件をすべて満たしている。サポートされている kdump 設定とターゲット を参照してください。 -
kdumpをインストールするためのすべての設定が、要件に応じてセットアップされている。
手順
multi-user.targetのkdumpサービスを有効にします。systemctl enable kdump.service
# systemctl enable kdump.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 現在のセッションでサービスを起動します。
systemctl start kdump.service
# systemctl start kdump.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow kdumpサービスを停止します。systemctl stop kdump.service
# systemctl stop kdump.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow kdumpサービスを無効にします。systemctl disable kdump.service
# systemctl disable kdump.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
kptr_restrict=1 をデフォルトとして設定することが推奨されます。kptr_restrict がデフォルトで (1) に設定されている場合、Kernel Address Space Layout (KASLR) が有効かどうかに関係なく、kdumpctl サービスがクラッシュカーネルをロードします。
kptr_restrict が 1 に設定されておらず、KASLR が有効になっている場合は、/proc/kore ファイルの内容がすべてゼロとして生成されます。kdumpctl サービスは、/proc/kcore ファイルにアクセスしてクラッシュカーネルを読み込むことができません。kexec-kdump-howto.txt ファイルには、kptr_restrict=1 に設定することを推奨する警告メッセージが表示されます。kdumpctl サービスが必ずクラッシュカーネルを読み込むように、sysctl.conf ファイルで次の内容を確認します。
-
sysctl.confファイルでのカーネルのkptr_restrict=1設定
14.10. カーネルドライバーが kdump を読み込まないようにする設定 リンクのコピーリンクがクリップボードにコピーされました!
/etc/sysconfig/kdump 設定ファイルに KDUMP_COMMANDLINE_APPEND= 変数を追加することで、キャプチャーカーネルが特定のカーネルドライバーをロードしないように制御できます。この方法を使用すると、kdump 初期 RAM ディスクイメージ initramfs が、指定されたカーネルモジュールをロードするのを防ぐことができます。これにより、メモリー不足 (OOM) killer エラーやその他のクラッシュカーネル障害を防ぐことができます。
次のいずれかの設定オプションを使用して、KDUMP_COMMANDLINE_APPEND= 変数を追加できます。
-
rd.driver.blacklist=<modules> -
modprobe.blacklist=<modules>
前提条件
- システムの root 権限がある。
手順
現在実行中のカーネルに読み込まれるモジュールのリストを表示します。ロードをブロックするカーネルモジュールを選択します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/sysconfig/kdumpファイルのKDUMP_COMMANDLINE_APPEND=変数を更新します。以下に例を示します。KDUMP_COMMANDLINE_APPEND="rd.driver.blacklist=hv_vmbus,hv_storvsc,hv_utils,hv_netvsc,hid-hyperv"
KDUMP_COMMANDLINE_APPEND="rd.driver.blacklist=hv_vmbus,hv_storvsc,hv_utils,hv_netvsc,hid-hyperv"Copy to Clipboard Copied! Toggle word wrap Toggle overflow modprobe.blacklist=<modules>設定オプションを使用した以下の例も検討してください。KDUMP_COMMANDLINE_APPEND="modprobe.blacklist=emcp modprobe.blacklist=bnx2fc modprobe.blacklist=libfcoe modprobe.blacklist=fcoe"
KDUMP_COMMANDLINE_APPEND="modprobe.blacklist=emcp modprobe.blacklist=bnx2fc modprobe.blacklist=libfcoe modprobe.blacklist=fcoe"Copy to Clipboard Copied! Toggle word wrap Toggle overflow kdumpサービスを再起動します。systemctl restart kdump
# systemctl restart kdumpCopy to Clipboard Copied! Toggle word wrap Toggle overflow
14.11. 暗号化されたディスクがあるシステムでの kdump の実行 リンクのコピーリンクがクリップボードにコピーされました!
LUKS 暗号化パーティションを実行すると、システムで利用可能なメモリーが一定量必要になります。システムが必要なメモリー量を下回ると、cryptsetup ユーティリティーがパーティションのマウントに失敗します。その結果、2 番目のカーネル (キャプチャーカーネル) で、暗号化したターゲットの場所に vmcore ファイルをキャプチャーできませんでした。
kdumpctl estimate コマンドは、kdump に必要なメモリー容量を予測できます。kdumpctl estimate は、推奨の crashkernel 値を出力します。この値は kdump に必要な最適なメモリーサイズです。
推奨の crashkernel 値は、現在のカーネルサイズ、カーネルモジュール、initramfs、および暗号化したターゲットメモリー要件に基づいて計算されます。
カスタムの crashkernel= オプションを使用している場合、kdumpctl estimate は LUKS required size 値を出力します。この値は、LUKS 暗号化ターゲットに必要なメモリーサイズです。
手順
crashkernel=の推定値を出力します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
crashkernel=の値を増やして、必要なメモリー量を設定します。 - システムを再起動します。
それでも kdump がダンプファイルを暗号化したターゲットに保存できない場合は、必要に応じて crashkernel= を増やしてください。
第15章 Web コンソールで kdump の設定 リンクのコピーリンクがクリップボードにコピーされました!
RHEL 9 Web コンソールを使用して、kdump 設定をセットアップおよびテストできます。Web コンソールでは、起動時に kdump サービスを有効にすることができます。Web コンソールを使用すると、kdump 用に予約されたメモリーを設定し、vmcore の保存場所を非圧縮形式または圧縮形式で選択できます。
15.1. Web コンソールで kdump メモリーの使用量およびターゲットの場所を設定 リンクのコピーリンクがクリップボードにコピーされました!
RHEL Web コンソールインターフェイスを使用して、kdump カーネルのメモリー予約を設定し、vmcore ダンプファイルをキャプチャーするターゲットの場所を指定することもできます。
前提条件
- Web コンソールがインストールされており、アクセス可能である。詳細は、Web コンソールのインストール を参照してください。
手順
-
Web コンソールで、 タブを開き、Kernel crash dump スイッチをオンに設定して
kdumpサービスを起動します。 ターミナルで
kdumpのメモリー使用量を設定します。以下に例を示します。sudo grubby --update-kernel ALL --args crashkernel=512M
$ sudo grubby --update-kernel ALL --args crashkernel=512MCopy to Clipboard Copied! Toggle word wrap Toggle overflow 変更を適用するにはシステムを再起動します。
- Kernel dump タブで、Crash dump location フィールドの末尾にある Edit をクリックします。
vmcoreダンプファイルを保存するターゲットディレクトリーを指定します。- ローカルファイルシステムの場合は、ドロップダウンメニューから Local Filesystem を選択します。
SSH プロトコルを使用したリモートシステムの場合は、ドロップダウンメニューから Remote over SSH を選択し、次のフィールドを指定します。
- Server フィールドに、リモートサーバーのアドレスを入力します。
- SSH key フィールドに、SSH キーの場所を入力します。
- Directory フィールドに、ターゲットディレクトリーを入力します。
NFS プロトコルを使用したリモートシステムの場合は、ドロップダウンメニューから Remote over NFS を選択し、次のフィールドを指定します。
- Server フィールドに、リモートサーバーのアドレスを入力します。
- Export フィールドに、NFS サーバーの共有フォルダーの場所を入力します。
Directory フィールドに、ターゲットディレクトリーを入力します。
注記Compression チェックボックスをオンにすると、
vmcoreファイルのサイズを削減できます。
オプション: View automation script をクリッ自動化スクリプトを表示します。
生成されたスクリプトを含むウィンドウが開きます。シェルスクリプトと Ansible Playbook 生成オプションのタブを参照できます。
オプション: Copy to clipboard をクリックして、スクリプトをコピーします。
このスクリプトを使用すると、複数のマシンに同じ設定を適用できます。
検証
- をクリックします。
Test kdump settings の下にある Crash system をクリックします。
警告システムクラッシュを開始すると、カーネルの動作が停止し、システムがクラッシュしてデータが失われます。
第16章 kdump の有効化 リンクのコピーリンクがクリップボードにコピーされました!
RHEL 9 システムでは、特定のカーネルまたはインストールされているすべてのカーネルで kdump 機能を有効または無効にするように設定できます。ただし、kdump 機能を定期的にテストし、その動作状態を検証する必要があります。
16.1. インストールされているすべてのカーネルでの kdump の有効化 リンクのコピーリンクがクリップボードにコピーされました!
kdump サービスは、kexec ツールのインストール後に kdump.service を有効にすることで起動します。マシンにインストールされているすべてのカーネルに対して、kdump を有効にして起動できます。
前提条件
- 管理者権限がある。
手順
インストールされているすべてのカーネルに
crashkernel=コマンドラインパラメーターを追加します。grubby --update-kernel=ALL --args="crashkernel=xxM"
# grubby --update-kernel=ALL --args="crashkernel=xxM"Copy to Clipboard Copied! Toggle word wrap Toggle overflow xxMは必要なメモリー (メガバイト単位) です。システムを再起動します。
reboot
# rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow kdumpサービスを有効にします。systemctl enable --now kdump.service
# systemctl enable --now kdump.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
kdumpが実行されていることを確認します。systemctl status kdump.service ○ kdump.service - Crash recovery kernel arming Loaded: loaded (/usr/lib/systemd/system/kdump.service; enabled; vendor preset: disabled) Active: active (live)# systemctl status kdump.service ○ kdump.service - Crash recovery kernel arming Loaded: loaded (/usr/lib/systemd/system/kdump.service; enabled; vendor preset: disabled) Active: active (live)Copy to Clipboard Copied! Toggle word wrap Toggle overflow
16.2. 特定のインストール済みカーネルでの kdump の有効化 リンクのコピーリンクがクリップボードにコピーされました!
マシン上の特定カーネルに対して、kdump を有効にできます。
前提条件
- 管理者権限がある。
手順
マシンにインストールされているカーネルをリスト表示します。
ls -a /boot/vmlinuz-* /boot/vmlinuz-0-rescue-2930657cd0dc43c2b75db480e5e5b4a9 /boot/vmlinuz-4.18.0-330.el8.x86_64 /boot/vmlinuz-4.18.0-330.rt7.111.el8.x86_64
# ls -a /boot/vmlinuz-* /boot/vmlinuz-0-rescue-2930657cd0dc43c2b75db480e5e5b4a9 /boot/vmlinuz-4.18.0-330.el8.x86_64 /boot/vmlinuz-4.18.0-330.rt7.111.el8.x86_64Copy to Clipboard Copied! Toggle word wrap Toggle overflow 特定の
kdumpカーネルを、システムの Grand Unified Bootloader (GRUB) 設定に追加します。以下に例を示します。
grubby --update-kernel=vmlinuz-4.18.0-330.el8.x86_64 --args="crashkernel=xxM"
# grubby --update-kernel=vmlinuz-4.18.0-330.el8.x86_64 --args="crashkernel=xxM"Copy to Clipboard Copied! Toggle word wrap Toggle overflow xxMは必要なメモリー予約 (メガバイト単位) です。kdumpを有効にします。systemctl enable --now kdump.service
# systemctl enable --now kdump.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
kdumpが実行されていることを確認します。systemctl status kdump.service ○ kdump.service - Crash recovery kernel arming Loaded: loaded (/usr/lib/systemd/system/kdump.service; enabled; vendor preset: disabled) Active: active (live)# systemctl status kdump.service ○ kdump.service - Crash recovery kernel arming Loaded: loaded (/usr/lib/systemd/system/kdump.service; enabled; vendor preset: disabled) Active: active (live)Copy to Clipboard Copied! Toggle word wrap Toggle overflow
16.3. kdump サービスの無効化 リンクのコピーリンクがクリップボードにコピーされました!
kdump.service を停止し、RHEL 9 システムでのサービスの起動を無効にすることができます。
前提条件
-
kdump設定とターゲットの要件をすべて満たしている。詳細は サポートされている kdump 設定とターゲット を参照してください。 -
kdumpのインストール用のオプションがすべて、要件に応じて設定されている。詳細は kdump のインストール を参照してください。
手順
現在のセッションで
kdumpを停止するには、以下のコマンドを実行します。systemctl stop kdump.service
# systemctl stop kdump.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow kdumpを無効にするには、以下を行います。systemctl disable kdump.service
# systemctl disable kdump.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
kptr_restrict=1 をデフォルトとして設定することが推奨されます。kptr_restrict がデフォルトで (1) に設定されている場合、Kernel Address Space Layout (KASLR) が有効かどうかに関係なく、kdumpctl サービスがクラッシュカーネルをロードします。
kptr_restrict が 1 に設定されておらず、KASLR が有効になっている場合は、/proc/kore ファイルの内容がすべてゼロとして生成されます。kdumpctl サービスは、/proc/kcore ファイルにアクセスしてクラッシュカーネルを読み込むことができません。kexec-kdump-howto.txt ファイルには、kptr_restrict=1 に設定することを推奨する警告メッセージが表示されます。kdumpctl サービスが必ずクラッシュカーネルを読み込むように、sysctl.conf ファイルで次の内容を確認します。
-
sysctl.confファイルでのカーネルのkptr_restrict=1設定
第17章 サポートされている kdump 設定とターゲット リンクのコピーリンクがクリップボードにコピーされました!
kdump メカニズムは、カーネルクラッシュが発生したときにクラッシュダンプファイルを生成する Linux カーネルの機能です。カーネルダンプファイルには、カーネルクラッシュの根本原因を分析して特定するのに役立つ重要な情報が含まれています。クラッシュの原因は、ハードウェアの問題やサードパーティーのカーネルモジュールの問題など、さまざまな要因が考えられます。
提供された情報と手順を使用することで、次のアクションを実行できます。
- RHEL 9 システムでサポートされている設定とターゲットを特定します。
- kdump を設定します。
- kdump 操作を確認します。
17.1. kdump メモリー要件 リンクのコピーリンクがクリップボードにコピーされました!
kdump がカーネルクラッシュダンプをキャプチャーし、さらなる分析のために保存するには、システムメモリーの一部をキャプチャーカーネル用に永続的に予約しておく必要があります。予約されている場合、システムメモリーのこの部分はメインカーネルでは使用できません。
メモリー要件は、特定のシステムパラメーターによって異なります。主な要因は、システムのハードウェアアーキテクチャーです。Intel 64 や AMD64 (別称: x86_64 ) などの正確なマシンアーキテクチャーを識別し、それを標準出力に出力するには、次のコマンドを使用します。
uname -m
$ uname -m
下記の最小メモリー要件のリストを使用して、利用可能な最新バージョンで kdump 用のメモリーを自動的に予約するための適切なメモリーサイズを設定できます。メモリーサイズは、システムのアーキテクチャーと利用可能な物理メモリーの合計によって異なります。
| アーキテクチャー | 使用可能なメモリー | 最小予約メモリー |
|---|---|---|
|
AMD64 と Intel 64 ( | 1 GB から 4 GB | 192 MB のメモリー |
| 4 GB から 64 GB | 256 MB のメモリー | |
| 64 GB 以上 | 512 MB のメモリー | |
| 64 ビット ARM (4k ページ) | 1 GB から 4 GB | 256 MB の RAM |
| 4 GB から 64 GB | 320 MB の RAM | |
| 64 GB 以上 | 576 MB の RAM | |
| 64 ビット ARM (64k ページ) | 1 GB から 4 GB | 356 MB の RAM |
| 4 GB から 64 GB | 420 MB の RAM | |
| 64 GB 以上 | 676 MB の RAM | |
|
IBM Power Systems ( | 2 GB から 4 GB | 384 MB のメモリー |
| 4 GB から 16 GB | 512 MB のメモリー | |
| 16 GB から 64 GB | 1 GB のメモリー | |
| 64 GB から 128 GB | 2 GB のメモリー | |
| 128 GB 以上 | 4 GB のメモリー | |
|
IBM Z ( | 1 GB から 4 GB | 192 MB のメモリー |
| 4 GB から 64 GB | 256 MB のメモリー | |
| 64 GB 以上 | 512 MB のメモリー |
多くのシステムでは、kdump は必要なメモリー量を予測して、自動的に予約できます。この動作はデフォルトで有効になっていますが、利用可能な合計メモリーサイズが一定以上搭載されているシステムに限られます。この自動割り当て動作に必要なメモリーサイズはシステムのアーキテクチャーによって異なります。
システムのメモリー合計量に基づく予約メモリーの自動設定は、ベストエフォート予測です。実際に必要なメモリーは、I/O デバイスなどの他の要因によって異なる場合があります。十分なメモリーを使用しないと、カーネルパニックが発生したときに、デバッグカーネルがキャプチャーカーネルとして起動できなくなる可能性があります。この問題を回避するには、クラッシュカーネルメモリーを十分に増やしてください。
17.2. メモリー自動予約の最小しきい値 リンクのコピーリンクがクリップボードにコピーされました!
kexec-tools ユーティリティーは、デフォルトで、crashkernel コマンドラインパラメーターを設定し、kdump 用に一定量のメモリーを予約します。ただし、一部のシステムでは、ブートローダー設定ファイルで crashkernel=auto パラメーターを使用するか、グラフィカル設定ユーティリティーでこのオプションを有効にすることで、kdump 用のメモリーを割り当てることが可能です。この自動予約を機能させるには、システムで一定量の合計メモリーが使用可能である必要があります。メモリー要件はシステムのアーキテクチャーによって異なります。システムのメモリーが指定のしきい値よりも小さい場合は、メモリーを手動で設定する必要があります。
| アーキテクチャー | 必要なメモリー |
|---|---|
|
AMD64 と Intel 64 ( | 1 GB |
|
IBM Power Systems ( | 2 GB |
|
IBM Z ( | 1 GB |
| 64-bit ARM | 1 GB |
起動コマンドラインの crashkernel=auto オプションは、RHEL 9 以降のリリースでは対応しなくなりました。
17.3. サポートしている kdump のダンプ出力先 リンクのコピーリンクがクリップボードにコピーされました!
カーネルクラッシュが発生すると、オペレーティングシステムは、設定したダンプ出力先またはデフォルトのダンプ出力先にダンプファイルを保存します。ダンプファイルは、デバイスに直接保存することも、ローカルファイルシステムにファイルとして保存することも、ネットワーク経由で送信することもできます。以下に示すダンプ出力先のリストを使用すると、kdump で現在サポートされているダンプ出力先とサポートされていないダンプ出力先を把握できます。
| ダンプ出力先の種類 | 対応しているダンプ出力先 | 対応していないダンプ出力先 |
|---|---|---|
| 物理ストレージ |
|
|
| ネットワーク |
|
|
| ハイパーバイザー |
| |
| ファイルシステム |
|
|
| ファームウェア |
|
17.4. 対応している kdump のフィルターレベル リンクのコピーリンクがクリップボードにコピーされました!
ダンプファイルのサイズを削減するために、kdump は makedumpfile コアコレクターを使用してデータを圧縮し、さらに不要な情報を除外します。たとえば、-8 レベルを使用すると、hugepages および hugetlbfs ページを削除できます。makedumpfile が現在サポートしているレベルは `kdump` のフィルタリングレベル の表で確認できます。
| オプション | 説明 |
|---|---|
|
| ゼロページ |
|
| キャッシュページ |
|
| キャッシュプライベート |
|
| ユーザーページ |
|
| フリーページ |
17.5. 対応しているデフォルトの障害応答 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、kdump がコアダンプを作成できない場合、オペレーティングシステムが再起動します。ただし、コアダンプをプライマリーターゲットに保存できない場合に別の操作を実行するように kdump を設定できます。
dump_to_rootfs- root ファイルシステムにコアダンプの保存を試行します。ネットワーク上のダンプ出力先と併用する場合に特に便利なオプションです。ネットワーク上のダンプ出力先にアクセスできない場合、ローカルにコアダンプを保存するよう kdump の設定を行います。システムは、後で再起動します。
reboot- システムを再起動します。コアダンプは失われます。
halt- システムを停止します。コアダンプは失われます。
poweroff- システムの電源を切ります。コアダンプは失われます。
shell- initramfs 内から shell セッションを実行して、ユーザーが手動でコアダンプを記録できるようにします。
final_action-
kdumpの成功後、またはshellまたはdump_to_rootfsの失敗アクションの完了時に、reboot、haltおよびpoweroffアクションなどの追加の操作を有効にします。デフォルトのfinal_actionオプションはrebootです。 failure_action-
カーネルがクラッシュした場合にダンプが失敗する可能性がある場合に実行するアクションを指定します。デフォルトの
failure_actionオプションはrebootです。
17.6. final_action パラメーターの使用 リンクのコピーリンクがクリップボードにコピーされました!
kdump が成功した場合、または kdump が設定されたターゲットでの vmcore ファイルの保存に失敗した場合は、final_action パラメーターを使用して、reboot、halt、poweroff などの追加操作を実行できます。final_action パラメーターが指定されていない場合、デフォルトの応答は reboot です。
手順
final_actionを設定するには、/etc/kdump.confファイルを編集して、次のいずれかのオプションを追加します。-
final_action reboot -
final_action halt -
final_action poweroff
-
変更を有効にするには、
kdumpサービスを再起動します。kdumpctl restart
# kdumpctl restartCopy to Clipboard Copied! Toggle word wrap Toggle overflow
17.7. failure_action パラメーターの使用 リンクのコピーリンクがクリップボードにコピーされました!
failure_action パラメーターは、カーネルがクラッシュした場合にダンプが失敗したときに実行するアクションを指定します。failure_action のデフォルトのアクションは、システムを再起動する reboot です。
このパラメーターは、実行する以下のアクションを認識します。
reboot- ダンプが失敗した後、システムを再起動します。
dump_to_rootfs- 非ルートダンプターゲットが設定されている場合、ダンプファイルをルートファイルシステムに保存します。
halt- システムを停止します。
poweroff- システムで実行中の操作を停止します。
shell-
initramfs内でシェルセッションを開始します。このセッションから、追加のリカバリーアクションを手動で実行できます。
手順
ダンプが失敗した場合に実行するアクションを設定するには、
/etc/kdump.confファイルを編集して、failure_actionオプションの 1 つを指定します。-
failure_action reboot -
failure_action halt -
failure_action poweroff -
failure_action shell -
failure_action dump_to_rootfs
-
変更を有効にするには、
kdumpサービスを再起動します。kdumpctl restart
# kdumpctl restartCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第18章 ファームウェア支援ダンプの仕組み リンクのコピーリンクがクリップボードにコピーされました!
ファームウェア支援ダンプ (fadump) は、IBM POWER システムの kdump メカニズムの代わりに提供されるダンプ取得メカニズムです。kexec および kdump のメカニズムは、AMD64 および Intel 64 システムでコアダンプを取得する際に役立ちます。ただし、ミニシステムやメインフレームコンピューターなどの一部のハードウェアでは、オンボードファームウェアを使用してメモリー領域を分離し、クラッシュ分析で重要なデータが誤って上書きされることを防ぎます。fadump ユーティリティーは、fadump メカニズムと IBM POWER システム上の RHEL とのインテグレーション向けに最適化されています。
18.1. IBM PowerPC ハードウェアにおけるファームウェア支援ダンプ リンクのコピーリンクがクリップボードにコピーされました!
fadump ユーティリティーは、PCI デバイスおよび I/O デバイスが搭載され、完全にリセットされたシステムから vmcore ファイルをキャプチャーします。この仕組みでは、クラッシュするとファームウェアを使用してメモリー領域を保存し、kdump ユーザー空間スクリプトをもう一度使用して vmcore ファイルを保存します。このメモリー領域には、ブートメモリー、システムレジスター、およびハードウェアのページテーブルエントリー (PTE) を除く、すべてのシステムメモリーコンテンツが含まれます。
fadump メカニズムは、パーティションを再起動し、新規カーネルを使用して以前のカーネルクラッシュからのデータをダンプすることで従来のダンプタイプに比べて信頼性が向上されています。fadump には、IBM POWER6 プロセッサーベースまたはそれ以降バージョンのハードウェアプラットフォームが必要です。
PowerPC 固有のハードウェアのリセット方法など、fadump メカニズムの詳細は、/usr/share/doc/kexec-tools/fadump-howto.txt ファイルを参照してください。
保持されないメモリー領域はブートメモリーと呼ばれており、この領域はクラッシュ後にカーネルを正常に起動するのに必要なメモリー容量です。デフォルトのブートメモリーサイズは、256 MB または全システム RAM の 5% のいずれか大きい方です。
kexec で開始されたイベントとは異なり、fadump メカニズムでは実稼働用のカーネルを使用してクラッシュダンプを復元します。PowerPC ハードウェアは、クラッシュ後の起動時に、デバイスノード /proc/device-tree/rtas/ibm.kernel-dump が proc ファイルシステム (procfs) で利用できるようにします。fadump-aware kdump スクリプトでは、保存された vmcore があるかを確認してから、システムの再起動を正常に完了させます。
18.2. ファームウェア支援ダンプメカニズムの有効化 リンクのコピーリンクがクリップボードにコピーされました!
IBM POWER システムのクラッシュダンプ機能は、ファームウェア支援ダンプ (fadump) メカニズムを有効にすることで強化できます。
セキュアブート環境では、GRUB ブートローダーは、Real Mode Area (RMA) と呼ばれるブートメモリー領域を割り当てます。RMA のサイズは 512 MB で、ブートコンポーネント間で分割されます。コンポーネントがサイズ割り当てを超えると、GRUB はメモリー不足 (OOM) エラーで失敗します。
RHEL 9.1 以前のバージョンのセキュアブート環境では、ファームウェア支援ダンプ (fadump) メカニズムを有効にしないでください。GRUB ブートローダーが次のエラーで失敗します。
error: ../../grub-core/kern/mm.c:376:out of memory. Press any key to continue…
error: ../../grub-core/kern/mm.c:376:out of memory.
Press any key to continue…
システムは、fadump 設定のためにデフォルトの initramfs サイズを増やした場合にのみ回復可能です。
システムを回復するための回避策は、記事 System boot ends in GRUB Out of Memory (OOM) を参照してください。
前提条件
- システムの root 権限がある。
手順
-
kexec-toolsパッケージをインストールします。 crashkernelのデフォルト値を設定します。kdumpctl reset-crashkernel --fadump=on --kernel=ALL
# kdumpctl reset-crashkernel --fadump=on --kernel=ALLCopy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: デフォルト値の代わりにブートメモリーを予約します。
grubby --update-kernel ALL --args="fadump=on crashkernel=xxM"
# grubby --update-kernel ALL --args="fadump=on crashkernel=xxM"Copy to Clipboard Copied! Toggle word wrap Toggle overflow xxMは必要なメモリーサイズ (メガバイト単位) です。注記ブート設定オプションを指定するときは、
kdumpを有効にしてカーネルを再起動して設定をテストします。kdumpカーネルの起動に失敗した場合は、crashkernelの値を徐々に増やして、適切な値を設定します。変更を有効にするために再起動します。
reboot
# rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow
18.3. IBM Z ハードウェアにおけるファームウェア支援ダンプの仕組み リンクのコピーリンクがクリップボードにコピーされました!
IBM Z システムは、以下のファームウェア支援ダンプメカニズムをサポートします。
-
スタンドアロンダンプ (sadump) -
VMDUMP
IBM Z システムでは、kdump インフラストラクチャーはサポート対象で、使用されています。ただし、IBM Z のファームウェア支援ダンプ (fadump) 方式のいずれかを使用すると、次のような利点があります。
-
システムコンソールは
sadumpメカニズムを開始および制御し、それをIPLブート可能なデバイスに保存します。 -
VMDUMPメカニズムはsadumpに似ています。このツールもシステムコンソールから開始しますが、ハードウェアから生成されたダンプを取得して解析用にシステムにコピーします。 -
(他のハードウェアベースのダンプメカニズムと同様に) これらの手法では、(
kdumpサービスが開始される前の) 起動初期段階におけるマシンの状態をキャプチャーできます。 -
VMDUMPには、ダンプファイルを Red Hat Enterprise Linux システムに受信するメカニズムが含まれていますが、VMDUMPの設定と制御は IBM Z ハードウェアコンソールから管理されます。
18.4. Fujitsu PRIMEQUEST システムにおける sadump の使用 リンクのコピーリンクがクリップボードにコピーされました!
Fujitsu sadump メカニズムは、kdump が正常に完了できない場合に fallback ダンプキャプチャーを提供します。システム管理ボード (MMB) インターフェイスから sadump を手動で呼び出すことができます。MMB を使用して、Intel 64 または AMD 64 サーバーの場合と同様に kdump を設定し、sadump を有効にします。
手順
sadumpに対してkdumpが予想どおりに起動するように/etc/sysctl.confファイルで以下の行を追加または編集します。kernel.panic=0 kernel.unknown_nmi_panic=1
kernel.panic=0 kernel.unknown_nmi_panic=1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 警告特に、
kdumpの後にシステムが再起動しないようにする必要があります。kdumpがvmcoreファイルの保存に失敗した後にシステムが再起動すると、sadumpを呼び出すことができなくなります。/etc/kdump.confのfailure_actionパラメーターをhaltまたはshellとして適切に設定します。failure_action shell
failure_action shellCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第19章 コアダンプの分析 リンクのコピーリンクがクリップボードにコピーされました!
システムクラッシュの原因を確認するには、crash ユーティリティーを使用します。これにより、GNU Debugger (GDB) に似たインタラクティブなプロンプトが提供されます。crash を使用すると、kdump、netdump、diskdump、または xendump によって作成されたコアダンプと実行中の Linux システムを分析できます。あるいは、Kernel Oops Analyzer または Kdump Helper ツールを使用することもできます。
19.1. crash ユーティリティーのインストール リンクのコピーリンクがクリップボードにコピーされました!
crash ユーティリティーをインストールするために必要なパッケージと手順を説明します。RHEL 9 システムでは、crash ユーティリティーがデフォルトでインストールされていない可能性があります。crash は、システムの実行中、またはカーネルクラッシュが発生してコアダンプファイルが作成された後に、システムの状態を対話的に分析するためのツールです。コアダンプファイルは、vmcore ファイルとも呼ばれます。
手順
関連するリポジトリーを有効にします。
subscription-manager repos --enable baseos repository
# subscription-manager repos --enable baseos repositoryCopy to Clipboard Copied! Toggle word wrap Toggle overflow subscription-manager repos --enable appstream repository
# subscription-manager repos --enable appstream repositoryCopy to Clipboard Copied! Toggle word wrap Toggle overflow subscription-manager repos --enable rhel-9-for-x86_64-baseos-debug-rpms
# subscription-manager repos --enable rhel-9-for-x86_64-baseos-debug-rpmsCopy to Clipboard Copied! Toggle word wrap Toggle overflow crashパッケージをインストールします。dnf install crash
# dnf install crashCopy to Clipboard Copied! Toggle word wrap Toggle overflow kernel-debuginfoパッケージをインストールします。dnf install kernel-debuginfo
# dnf install kernel-debuginfoCopy to Clipboard Copied! Toggle word wrap Toggle overflow パッケージ
kernel-debuginfoは実行中のカーネルに対応し、ダンプ分析に必要なデータを提供します。
19.2. crash ユーティリティーの実行および終了 リンクのコピーリンクがクリップボードにコピーされました!
crash ユーティリティーは、kdump を分析するための強力なツールです。クラッシュダンプファイルに対して crash を実行すると、クラッシュ時のシステムの状態を把握し、問題の根本原因を特定し、カーネル関連の問題をトラブルシューティングできます。
前提条件
-
現在実行しているカーネルを特定します (
5.14.0-1.el9.x86_64など)。
手順
crashユーティリティーを起動するには、2 つの必要なパラメーターをコマンドに渡す必要があります。-
debug-info (圧縮解除された vmlinuz イメージ) (特定の
kernel-debuginfoパッケージに含まれる/usr/lib/debug/lib/modules/5.14.0-1.el9.x86_64/vmlinuxなど) 実際の vmcore ファイル (例:
/var/crash/127.0.0.1-2021-09-13-14:05:33/vmcore)結果として得られる
crashコマンドは次のようになります。crash /usr/lib/debug/lib/modules/5.14.0-1.el9.x86_64/vmlinux /var/crash/127.0.0.1-2021-09-13-14:05:33/vmcore
# crash /usr/lib/debug/lib/modules/5.14.0-1.el9.x86_64/vmlinux /var/crash/127.0.0.1-2021-09-13-14:05:33/vmcoreCopy to Clipboard Copied! Toggle word wrap Toggle overflow kdumpで取得したのと同じ <kernel> のバージョンを使用します。
-
debug-info (圧縮解除された vmlinuz イメージ) (特定の
crash ユーティリティーの実行
以下の例は、5.14.0-1.el9.x86_64 カーネルを使用して 2021 年 9 月 13 日の 14:05 PM に作成されたコアダンプを分析する方法を示しています。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 対話型プロンプトを終了して
crashを停止するには、exitまたはqと入力します。crash> exit ~]#
crash> exit ~]#Copy to Clipboard Copied! Toggle word wrap Toggle overflow
crash コマンドは、ライブシステムをデバッグするための強力なツールとして利用することもできます。ただし、システムレベルの問題を回避するために注意して使用する必要があります。
19.3. crash ユーティリティーのさまざまなインジケーターの表示 リンクのコピーリンクがクリップボードにコピーされました!
crash ユーティリティーを使用して、カーネルメッセージバッファー、バックトレース、プロセスステータス、仮想メモリー情報、開いているファイルなど、さまざまなインジケータを表示します。
メッセージバッファーの表示
カーネルメッセージバッファーを表示するには、対話式プロンプトで
logコマンドを入力します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドの使用方法の詳細を参照するには、
help logと入力してください。注記カーネルメッセージバッファーには、システムクラッシュに関する最も重要な情報が含まれています。カーネルメッセージバッファーは、常に最初に
vmcore-dmesg.txtファイルにダンプされます。たとえば、ターゲットロケーションに十分なスペースがないために完全なvmcoreファイルを取得できなかった場合は、カーネルメッセージバッファーから必要な情報を取得できます。デフォルトでは、vmcore-dmesg.txtは/var/crash/ディレクトリーに格納されます。
バックトレースの表示
カーネルスタックトレースを表示するには、
btコマンドを使用します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow bt <pid>を入力して特定のプロセスのバックトレースを表示するか、help btを実行して、btの使用の詳細を表示します。
プロセスの状態表示
システム内のプロセスの状態を表示するには、
psコマンドを使用します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow ps <pid>を使用して、単一プロセスのステータスを表示します。psの詳細な使用方法は、help ps を使用します。
仮想メモリー情報の表示
基本的な仮想メモリー情報を表示するには、対話式プロンプトで
vmコマンドを入力します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow vm <pid>を実行して、1 つのプロセスの情報を表示するか、help vmを実行して、vmの使用方法を表示します。
オープンファイルの表示
オープンファイルの情報を表示するには、
filesコマンドを実行します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow files <pid>を実行して、選択した 1 つのプロセスによって開かれたファイルを表示するか、help filesを実行して、filesの使用方法を表示します。
19.4. Kernel Oops Analyzer の使用 リンクのコピーリンクがクリップボードにコピーされました!
Kernel Oops Analyzer ツールは、ナレッジベースの既知の問題と oops メッセージを比較することで、クラッシュダンプを分析します。
前提条件
-
oopsメッセージは、Kernel Oops Analyzer にフィードするために保護されています。
手順
- Kernel Oops Analyzer ツールにアクセスします。
カーネルクラッシュの問題を診断するには、
vmcoreに生成されたカーネルの oops ログをアップロードします。-
あるいは、テキストメッセージまたは
vmcore-dmesg.txtを入力として提供することで、カーネルクラッシュの問題を診断することもできます。
-
あるいは、テキストメッセージまたは
-
DETECTをクリックして、makedumpfileからの情報に基づくoopsメッセージを既知のソリューションと比較します。
19.5. Kdump Helper ツール リンクのコピーリンクがクリップボードにコピーされました!
Kdump ヘルパーツールは、提供された情報を使用して kdump を設定するのに役立ちます。Kdump Helper は、ユーザーの設定に基づいて設定スクリプトを生成します。サーバーでスクリプトを開始して実行すると、kdump サービスが設定されます。
第20章 early kdump を使用した起動時間クラッシュの取得 リンクのコピーリンクがクリップボードにコピーされました!
early kdump は、kdump メカニズムの機能です。システムサービスが起動する前の起動プロセス初期段階でシステムまたはカーネルのクラッシュが発生した場合に、vmcore ファイルをキャプチャーします。early kdump はクラッシュカーネルとクラッシュカーネルの initramfs を早い段階でメモリーにロードします。
カーネルクラッシュは、kdump サービスが起動する前のブート初期段階で発生することがあります。その場合、kdump はクラッシュしたカーネルメモリーの内容をキャプチャーして保存できません。そのため、トラブルシューティングにとって重要なクラッシュ関連の重大な情報が失われます。この問題に対処するには、kdump サービスの一部である early kdump 機能を使用できます。
20.1. early kdump の有効化 リンクのコピーリンクがクリップボードにコピーされました!
early kdump 機能は、初期クラッシュの vmcore 情報をキャプチャーするため、十分に早めにロードされるように、クラッシュカーネルと初期 RAM ディスクイメージ (initramfs) をセットアップします。これにより、初期のブートカーネルクラッシュに関する情報が失われるリスクを排除できます。
前提条件
- アクティブな RHEL サブスクリプションがある。
-
システムの CPU アーキテクチャー用の
kexec-toolsパッケージを含むリポジトリーがある。 -
kdumpの設定とターゲットの要件を満たしている詳細は、サポートされている kdump 設定とターゲット を参照してください。
手順
kdumpサービスが有効でアクティブであることを確認します。systemctl is-enabled kdump.service && systemctl is-active kdump.service enabled active
# systemctl is-enabled kdump.service && systemctl is-active kdump.service enabled activeCopy to Clipboard Copied! Toggle word wrap Toggle overflow kdumpが有効ではなく、実行されていない場合は、必要な設定をすべて設定し、kdumpサービスが有効化されていることを確認します。起動カーネルの
initramfsイメージを、early kdump機能で再構築します。dracut -f --add earlykdump
# dracut -f --add earlykdumpCopy to Clipboard Copied! Toggle word wrap Toggle overflow rd.earlykdumpカーネルコマンドラインパラメーターを追加します。grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="rd.earlykdump"
# grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="rd.earlykdump"Copy to Clipboard Copied! Toggle word wrap Toggle overflow システムを再起動して変更を反映します。
reboot
# rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
rd.earlykdumpが正常に追加され、early kdump機能が有効になっていることを確認します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第21章 セキュアブート用のカーネルとモジュールの署名 リンクのコピーリンクがクリップボードにコピーされました!
署名済みカーネルと署名済みカーネルモジュールを使用して、システムのセキュリティーを強化できます。セキュアブートが有効になっている UEFI ベースのビルドシステムでは、プライベートにビルドされたカーネルまたはカーネルモジュールに自己署名できます。さらに、カーネルまたはカーネルモジュールをデプロイするターゲットシステムに公開鍵をインポートすることもできます。
セキュアブートが有効な場合、次のすべてのコンポーネントを秘密鍵で署名し、対応する公開鍵で認証する必要があります。
- UEFI オペレーティングシステムのブートローダー
- Red Hat Enterprise Linux カーネル
- すべてのカーネルモジュール
これらのコンポーネントのいずれかが署名および認証されていない場合、システムは起動プロセスを完了できません。
RHEL 9 には以下が含まれます。
- 署名済みブートローダー
- 署名済みカーネル
- 署名済みカーネルモジュール
さらに、署名済みの第 1 ステージのブートローダーと署名済みカーネルには、Red Hat 公開鍵が組み込まれています。これらの署名済みの実行可能バイナリーと組み込まれた鍵により、RHEL 9 は Microsoft UEFI セキュアブート認証局の鍵を使用してインストール、起動、実行できるようになります。これらの鍵は、UEFI セキュアブートをサポートするシステムの UEFI ファームウェアによって提供されます。
- セキュアブートのサポートは、すべての UEFI ベースのシステムに含まれるわけではありません。
- カーネルモジュールを構築、署名するビルドシステムは、UEFI セキュアブートを有効にする必要がなく、UEFI ベースのシステムである必要すらありません。
21.1. 前提条件 リンクのコピーリンクがクリップボードにコピーされました!
外部でビルドされたカーネルモジュールに署名できるようにするには、次のパッケージからユーティリティーをインストールします。
dnf install pesign openssl kernel-devel mokutil keyutils
# dnf install pesign openssl kernel-devel mokutil keyutilsCopy to Clipboard Copied! Toggle word wrap Toggle overflow Expand 表21.1 必要なユーティリティー ユーティリティー 提供するパッケージ 使用対象 目的 efikeygenpesignビルドシステム
公開および秘密 X.509 鍵のペアを生成
opensslopensslビルドシステム
暗号化されていない秘密鍵をエクスポートします。
sign-filekernel-develビルドシステム
秘密鍵でカーネルモジュールに署名するために使用する実行ファイル
mokutilmokutilターゲットシステム
公開鍵を手動で登録する際に使用するオプションのユーティリティー
keyctlkeyutilsターゲットシステム
システムキーリングへの公開鍵の表示時に使用するオプションのユーティリティー
21.2. UEFI セキュアブートとは リンクのコピーリンクがクリップボードにコピーされました!
Unified Extensible Firmware Interface (UEFI) セキュアブートテクノロジーを使用すると、信頼できる鍵によって署名されていないカーネル空間コードの実行を防ぐことができます。システムブートローダーは暗号鍵で署名されています。ファームウェア内の公開鍵のデータベースは、鍵に署名するプロセスを認可します。その後、次のステージのブートローダーとカーネルで署名を検証できます。
UEFI セキュアブートは、以下のようにファームウェアから署名済みドライバーおよびカーネルモジュールへの信頼チェーンを確立します。
-
UEFI 秘密鍵が
shim第 1 ステージブートローダーに署名し、それを公開鍵が認証します。認証局 (CA) は公開鍵に署名します。CA はファームウェアのデータベースに保存されます。 -
shimファイルには、GRUB ブートローダーとカーネルを認証するための Red Hat 公開鍵 Red Hat Secure Boot (CA key 1) が含まれています。 - カーネルには、ドライバーおよびモジュールを認証する公開鍵が含まれます。
セキュアブートは、UEFI 仕様のブートパス検証コンポーネントです。この仕様は、以下を定義します。
- 揮発性ではないストレージでの暗号で保護された UEFI 変数用のプログラミングインターフェイス
- UEFI 変数での信頼できる X.509 ルート証明書の保存
- ブートローダーやドライバーなどの UEFI アプリケーションの検証
- 既知の問題のある証明書およびアプリケーションハッシュを無効にする手順
UEFI セキュアブートは、不正な変更の検出には役立ちますが、以下を行うことは できません。
- 第 2 ステージブートローダーのインストールまたは削除を防止する。
- このような変更について、ユーザーによる明示的な確認を要求する。
- ブートパスの操作を停止する。署名は、ブートローダーのインストールや更新時ではなく、起動時に検証されます。
ブートローダーまたはカーネルがシステムの信頼された鍵で署名されていない場合、セキュアブートにより起動が妨げられます。
21.3. UEFI セキュアブートのサポート リンクのコピーリンクがクリップボードにコピーされました!
カーネルとロードされたすべてのドライバーが信頼できる鍵で署名されている場合、UEFI セキュアブートが有効になっているシステムに RHEL 9 をインストールして実行できます。Red Hat は、関連する Red Hat キーによって署名および認証されたカーネルとドライバーを提供します。
外部でビルドされたカーネルまたはドライバーをロードする場合は、それらにも署名する必要があります。
UEFI セキュアブートによる制限
- システムは、署名が適切に認証された後にのみ、カーネルモードコードを実行します。
- GRUB モジュールの署名および検証を行うインフラストラクチャーがないため、GRUB モジュールの読み込みは無効です。モジュールのロードを許可すると、セキュアブートによって定義されたセキュリティー境界内で信頼できないコードが実行されます。
- Red Hat は、RHEL 9 でサポートされているすべてのモジュールを含む署名済み GRUB バイナリーを提供します。
21.4. X.509 鍵でカーネルモジュールを認証するための要件 リンクのコピーリンクがクリップボードにコピーされました!
RHEL 9 では、カーネルモジュールがロードされると、カーネルがモジュールの署名をカーネルシステムキーリング (.builtin_trusted_keys) とカーネルプラットフォームキーリング (.platform) の X.509 公開鍵と照合します。.platform キーリングは、サードパーティーのプラットフォームプロバイダーおよびカスタム公開鍵からの鍵を提供します。カーネルシステムの .blacklist キーリングからの鍵は検証から除外されます。
UEFI セキュアブート機能が有効になっているシステムでカーネルモジュールをロードするには、特定の条件を満たす必要があります。
UEFI セキュアブートが有効な場合、または
module.sig_enforceカーネルパラメーターが指定されている場合:-
署名がシステムキーリング (
.builtin_trusted_keys) およびプラットフォームキーリング (.platform) からの鍵に対して認証されている署名済みのカーネルモジュールだけを読み込みできます。 -
公開鍵は、システムで拒否されたキーのキーリング (
.blacklist) に配置できません。
-
署名がシステムキーリング (
UEFI セキュアブートが無効で
module.sig_enforceカーネルパラメーターが指定されていない場合:- 公開鍵なしで、未署名のカーネルモジュールと署名済みカーネルモジュールを読み込むことができます。
システムが UEFI ベースでない場合、または UEFI セキュアブートが無効になっている場合:
-
カーネルに埋め込まれた鍵のみが
.builtin_trusted_keysおよび.platformに読み込まれます。 - カーネルの再構築なしでキーセットを拡張することはできません。
-
カーネルに埋め込まれた鍵のみが
| モジュールの署名 | 公開鍵ありおよび署名が有効 | UEFI セキュアブートの状態 | sig_enforce | モジュールの読み込み | カーネルのテイント |
|---|---|---|---|---|---|
| 署名なし | - | 有効でない | 有効でない | 成功 | はい |
| 有効でない | 有効 | 失敗 | - | ||
| 有効 | - | 失敗 | - | ||
| 署名あり | いいえ | 有効でない | 有効でない | 成功 | はい |
| 有効でない | 有効 | 失敗 | - | ||
| 有効 | - | 失敗 | - | ||
| 署名あり | はい | 有効でない | 有効でない | 成功 | いいえ |
| 有効でない | 有効 | 成功 | いいえ | ||
| 有効 | - | 成功 | いいえ |
21.5. 公開鍵のソース リンクのコピーリンクがクリップボードにコピーされました!
カーネルは、起動時に X.509 キーを永続キーストアから以下のキーリングに読み込みます。
-
システムキーリング (
.builtin_trusted_keys) -
.platformキーリング -
システムの
.blacklistキーリング
| X.509 鍵のソース | ユーザーによるキーの追加 | UEFI セキュアブートの状態 | ブート中に読み込まれる鍵 |
|---|---|---|---|
| カーネルに埋め込み | いいえ | - |
|
|
UEFI | 限定的 | 有効でない | いいえ |
| 有効 |
| ||
|
| いいえ | 有効でない | いいえ |
| 有効 |
| ||
| Machine Owner Key (MOK) リスト | はい | 有効でない | いいえ |
| 有効 |
|
.builtin_trusted_keys- 起動時にビルドされるキーリング
- 信頼できる公開鍵を提供します。
-
キーを表示するには、
root権限が必要です。
.platform- 起動時にビルドされるキーリング
- サードパーティーのプラットフォームプロバイダーからの鍵とカスタムの公開鍵を提供します。
-
キーを表示するには、
root権限が必要です。
.blacklist- 失効した X.509 キーを含むキーリング
-
公開鍵が
.builtin_trusted_keysにある場合でも、.blacklistからの鍵で署名されたモジュールは認証に失敗します。
- UEFI セキュアブート
db - 署名データベース
- UEFI アプリケーション、UEFI ドライバー、およびブートローダーのキー (ハッシュ) を保存します。
- キーはマシンにロードできます。
- UEFI セキュアブート
dbx - 失効した署名データベース
- キーがロードされるのを防ぎます。
-
このデータベースからの失効したキーは、
.blacklistキーリングに追加されます。
21.6. 公開鍵と秘密鍵の生成 リンクのコピーリンクがクリップボードにコピーされました!
セキュアブート対応システムでカスタムカーネルまたはカスタムカーネルモジュールを使用するには、X.509 の公開鍵と秘密鍵のペアを生成する必要があります。生成された秘密鍵を使用して、カーネルまたはカーネルモジュールに署名できます。また、対応する公開鍵をセキュアブートの Machine Owner Key (MOK) に追加することで、署名済みのカーネルまたはカーネルモジュールを検証できます。
強力なセキュリティー対策とアクセスポリシーを適用して、秘密鍵の内容を保護します。悪用すれば、この鍵は、一致する公開鍵で認証されるシステムのセキュリティーに危害を与えるために使用できます。
手順
X.509 の公開鍵と秘密鍵のペアを作成します。
カスタムカーネル モジュール に署名するだけの場合:
efikeygen --dbdir /etc/pki/pesign \ --self-sign \ --module \ --common-name 'CN=Organization signing key' \ --nickname 'Custom Secure Boot key'# efikeygen --dbdir /etc/pki/pesign \ --self-sign \ --module \ --common-name 'CN=Organization signing key' \ --nickname 'Custom Secure Boot key'Copy to Clipboard Copied! Toggle word wrap Toggle overflow カスタム カーネル に署名する場合:
efikeygen --dbdir /etc/pki/pesign \ --self-sign \ --kernel \ --common-name 'CN=Organization signing key' \ --nickname 'Custom Secure Boot key'# efikeygen --dbdir /etc/pki/pesign \ --self-sign \ --kernel \ --common-name 'CN=Organization signing key' \ --nickname 'Custom Secure Boot key'Copy to Clipboard Copied! Toggle word wrap Toggle overflow RHEL システムが FIPS モードを実行している場合:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記FIPS モードでは、
efikeygenが PKI データベース内でデフォルトの "NSS Certificate DB" トークンを検索できるように、--tokenオプションを使用する必要があります。公開鍵と秘密鍵は
/etc/pki/pesign/ディレクトリーに保存されます。
セキュリティー上、署名鍵の有効期間内にカーネルとカーネルモジュールに署名することが推奨されます。ただし、sign-file ユーティリティーは警告を出さず、鍵は有効期限に関係なく RHEL 9 で使用できます。
21.7. システムキーリングの出力例 リンクのコピーリンクがクリップボードにコピーされました!
keyutils パッケージからの keyctl ユーティリティーを使用して、システムのキーリングの鍵に関する情報を表示できます。
前提条件
- root 権限がある。
-
keyutilsパッケージからkeyctlユーティリティーをインストールしました。
例21.1 キーリング出力
以下は、UEFI セキュアブートが有効な RHEL 9 システムからの .builtin_trusted_keys、.platform、および .blacklist キーリングの短い出力例です。
この例の .builtin_trusted_keys キーリングは、UEFI セキュアブート db キーからの 2 つのキー、および shim ブートローダーに組み込まれている Red Hat Secure Boot (CA key 1) の追加を表しています。
例21.2 カーネルコンソール出力
以下の例は、カーネルコンソールの出力を示しています。このメッセージでは、UEFI セキュアブートに関連するソースの鍵を特定します。これらには、UEFI セキュアブート db、組み込みの shim、および MOK リストが含まれます。
21.8. 公開鍵を MOK リストに追加してターゲットシステムに公開鍵を登録する リンクのコピーリンクがクリップボードにコピーされました!
カーネルまたはカーネルモジュールへのアクセスのために、システム上で公開鍵を認証し、それをターゲットシステムのプラットフォームキーリング (.platform) に登録する必要があります。セキュアブートが有効な UEFI ベースのシステムで RHEL 9 を起動すると、カーネルが db 鍵データベースから公開鍵をインポートし、dbx データベースから失効した鍵を除外します。
Machine Owner Key (MOK) 機能を使用すると、UEFI セキュアブートキーデータベースを拡張できます。セキュアブートが有効な UEFI 対応システムで RHEL 9 を起動すると、セキュアブートデータベースの鍵に加えて、MOK リストの鍵がプラットフォームキーリング (.platform) に追加されます。MOK リストの鍵も、同じ方法でセキュアかつ永続的に保存されますが、これはセキュアブートデータベースとは別の機能です。
MOK 機能は、shim、MokManager、GRUB、および UEFI ベースのシステムでセキュアな鍵管理と認証を可能にする mokutil ユーティリティーによってサポートされています。
システムでカーネルモジュールの認証サービスを取得するには、ファクトリーファームウェアイメージで公開鍵を UEFI セキュアブート鍵データベースに組み入れるようシステムベンダーに要求することを検討してください。
前提条件
- 公開鍵と秘密鍵のペアを生成し、公開鍵の有効期限を知っています。詳細は、公開鍵と秘密鍵のペアの生成 を参照してください。
手順
公開鍵を
sb_cert.cerファイルにエクスポートします。certutil -d /etc/pki/pesign \ -n 'Custom Secure Boot key' \ -Lr \ > sb_cert.cer# certutil -d /etc/pki/pesign \ -n 'Custom Secure Boot key' \ -Lr \ > sb_cert.cerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 公開鍵を MOK リストにインポートします。
mokutil --import sb_cert.cer
# mokutil --import sb_cert.cerCopy to Clipboard Copied! Toggle word wrap Toggle overflow - この MOK 登録要求の新しいパスワードを入力してください。
マシンを再起動します。
shimブートローダーは、保留中の MOK キー登録要求を認識し、MokManager.efiを起動して、UEFI コンソールから登録を完了できるようにします。Enroll MOKを選択し、プロンプトが表示されたら、この要求に関連付けたパスワードを入力し、登録を確認します。公開鍵が MOK リストに永続的に追加されます。
キーが MOK リストに追加されると、UEFI セキュアブートが有効になっている場合は、このブートおよび後続のブートで
.platformキーリングに自動的に伝達されます。
21.9. 秘密鍵でカーネルに署名する リンクのコピーリンクがクリップボードにコピーされました!
UEFI セキュアブート機能が有効になっている場合は、署名済みカーネルをロードすると、システムのセキュリティーを強化できます。
前提条件
- 公開鍵と秘密鍵のペアを生成し、公開鍵の有効期限を知っています。詳細は、公開鍵と秘密鍵のペアの生成 を参照してください。
- ターゲットシステムに公開鍵を登録しています。詳細は、公開鍵を MOK リストに追加して、ターゲットシステムに公開鍵を登録する を参照してください。
- 署名に使用できる ELF 形式のカーネルイメージがあります。
手順
x64 アーキテクチャーの場合:
署名済みイメージを作成します。
pesign --certificate 'Custom Secure Boot key' \ --in vmlinuz-version \ --sign \ --out vmlinuz-version.signed# pesign --certificate 'Custom Secure Boot key' \ --in vmlinuz-version \ --sign \ --out vmlinuz-version.signedCopy to Clipboard Copied! Toggle word wrap Toggle overflow versionをvmlinuzファイルのバージョン接尾辞に置き換え、Custom Secure Boot keyを以前に選択した名前に置き換えます。オプション: 署名を確認します。
pesign --show-signature \ --in vmlinuz-version.signed# pesign --show-signature \ --in vmlinuz-version.signedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 未署名イメージを署名済みイメージで上書きします。
mv vmlinuz-version.signed vmlinuz-version
# mv vmlinuz-version.signed vmlinuz-versionCopy to Clipboard Copied! Toggle word wrap Toggle overflow
64 ビット ARM アーキテクチャーの場合:
vmlinuzファイルを解凍します。zcat vmlinuz-version > vmlinux-version
# zcat vmlinuz-version > vmlinux-versionCopy to Clipboard Copied! Toggle word wrap Toggle overflow 署名済みイメージを作成します。
pesign --certificate 'Custom Secure Boot key' \ --in vmlinux-version \ --sign \ --out vmlinux-version.signed# pesign --certificate 'Custom Secure Boot key' \ --in vmlinux-version \ --sign \ --out vmlinux-version.signedCopy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: 署名を確認します。
pesign --show-signature \ --in vmlinux-version.signed# pesign --show-signature \ --in vmlinux-version.signedCopy to Clipboard Copied! Toggle word wrap Toggle overflow vmlinuxファイルを圧縮します。gzip --to-stdout vmlinux-version.signed > vmlinuz-version
# gzip --to-stdout vmlinux-version.signed > vmlinuz-versionCopy to Clipboard Copied! Toggle word wrap Toggle overflow 圧縮されていない
vmlinuxファイルを削除します。rm vmlinux-version*
# rm vmlinux-version*Copy to Clipboard Copied! Toggle word wrap Toggle overflow
21.10. 秘密鍵で GRUB ビルドに署名する リンクのコピーリンクがクリップボードにコピーされました!
UEFI セキュアブート機能が有効になっているシステムでは、カスタムの既存の秘密鍵で GRUB ビルドに署名できます。カスタム GRUB ビルドを使用している場合、またはシステムから Microsoft トラストアンカーを削除した場合は、これを行う必要があります。
前提条件
- 公開鍵と秘密鍵のペアを生成し、公開鍵の有効期限を知っています。詳細は、公開鍵と秘密鍵のペアの生成 を参照してください。
- ターゲットシステムに公開鍵を登録しています。詳細は、公開鍵を MOK リストに追加して、ターゲットシステムに公開鍵を登録する を参照してください。
- 署名に使用できる GRUB EFI バイナリーがあります。
手順
x64 アーキテクチャーの場合:
署名済み GRUB EFI バイナリーを作成します。
pesign --in /boot/efi/EFI/redhat/grubx64.efi \ --out /boot/efi/EFI/redhat/grubx64.efi.signed \ --certificate 'Custom Secure Boot key' \ --sign# pesign --in /boot/efi/EFI/redhat/grubx64.efi \ --out /boot/efi/EFI/redhat/grubx64.efi.signed \ --certificate 'Custom Secure Boot key' \ --signCopy to Clipboard Copied! Toggle word wrap Toggle overflow Custom Secure Boot keyを以前に選択した名前に置き換えます。オプション: 署名を確認します。
pesign --in /boot/efi/EFI/redhat/grubx64.efi.signed \ --show-signature# pesign --in /boot/efi/EFI/redhat/grubx64.efi.signed \ --show-signatureCopy to Clipboard Copied! Toggle word wrap Toggle overflow 署名されていないバイナリーを署名済みバイナリーで上書きします。
mv /boot/efi/EFI/redhat/grubx64.efi.signed \ /boot/efi/EFI/redhat/grubx64.efi# mv /boot/efi/EFI/redhat/grubx64.efi.signed \ /boot/efi/EFI/redhat/grubx64.efiCopy to Clipboard Copied! Toggle word wrap Toggle overflow
64 ビット ARM アーキテクチャーの場合:
署名済み GRUB EFI バイナリーを作成します。
pesign --in /boot/efi/EFI/redhat/grubaa64.efi \ --out /boot/efi/EFI/redhat/grubaa64.efi.signed \ --certificate 'Custom Secure Boot key' \ --sign# pesign --in /boot/efi/EFI/redhat/grubaa64.efi \ --out /boot/efi/EFI/redhat/grubaa64.efi.signed \ --certificate 'Custom Secure Boot key' \ --signCopy to Clipboard Copied! Toggle word wrap Toggle overflow Custom Secure Boot keyを以前に選択した名前に置き換えます。オプション: 署名を確認します。
pesign --in /boot/efi/EFI/redhat/grubaa64.efi.signed \ --show-signature# pesign --in /boot/efi/EFI/redhat/grubaa64.efi.signed \ --show-signatureCopy to Clipboard Copied! Toggle word wrap Toggle overflow 署名されていないバイナリーを署名済みバイナリーで上書きします。
mv /boot/efi/EFI/redhat/grubaa64.efi.signed \ /boot/efi/EFI/redhat/grubaa64.efi# mv /boot/efi/EFI/redhat/grubaa64.efi.signed \ /boot/efi/EFI/redhat/grubaa64.efiCopy to Clipboard Copied! Toggle word wrap Toggle overflow
21.11. 秘密鍵を使用したカーネルモジュールの署名 リンクのコピーリンクがクリップボードにコピーされました!
UEFI セキュアブートメカニズムが有効になっている場合は、署名済みカーネルモジュールをロードすることでシステムのセキュリティーを強化できます。
署名済みカーネルモジュールは、UEFI セキュアブートが無効になっているシステムまたは非 UEFI システムでもロードできます。そのため、カーネルモジュールの署名済みバージョンと未署名バージョンの両方を提供する必要はありません。
前提条件
- 公開鍵と秘密鍵のペアを生成し、公開鍵の有効期限を知っています。詳細は、公開鍵と秘密鍵のペアの生成 を参照してください。
- ターゲットシステムに公開鍵を登録しています。詳細は、公開鍵を MOK リストに追加して、ターゲットシステムに公開鍵を登録する を参照してください。
- ELF イメージ形式で署名できるカーネルモジュールがある。
手順
公開鍵を
sb_cert.cerファイルにエクスポートします。certutil -d /etc/pki/pesign \ -n 'Custom Secure Boot key' \ -Lr \ > sb_cert.cer# certutil -d /etc/pki/pesign \ -n 'Custom Secure Boot key' \ -Lr \ > sb_cert.cerCopy to Clipboard Copied! Toggle word wrap Toggle overflow NSS データベースからキーを PKCS #12 ファイルとして抽出します。
pk12util -o sb_cert.p12 \ -n 'Custom Secure Boot key' \ -d /etc/pki/pesign# pk12util -o sb_cert.p12 \ -n 'Custom Secure Boot key' \ -d /etc/pki/pesignCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 前のコマンドのプロンプトが表示されたら、秘密鍵を暗号化する新しいパスワードを入力します。
暗号化されていない秘密鍵をエクスポートします。
openssl pkcs12 \ -in sb_cert.p12 \ -out sb_cert.priv \ -nocerts \ -noenc# openssl pkcs12 \ -in sb_cert.p12 \ -out sb_cert.priv \ -nocerts \ -noencCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要暗号化されていない秘密鍵を安全に保管してください。
カーネルモジュールに署名します。次のコマンドは、カーネルモジュールファイル内の ELF イメージに署名を直接追加します。
/usr/src/kernels/$(uname -r)/scripts/sign-file \ sha256 \ sb_cert.priv \ sb_cert.cer \ my_module.ko# /usr/src/kernels/$(uname -r)/scripts/sign-file \ sha256 \ sb_cert.priv \ sb_cert.cer \ my_module.koCopy to Clipboard Copied! Toggle word wrap Toggle overflow
これでカーネルモジュールの読み込み準備が完了しました。
RHEL 9 では、鍵のペアの有効期限は重要です。鍵に有効期限はありませんが、カーネルモジュールはその署名鍵の有効期間内に署名する必要があります。sign-file ユーティリティーでは、これに関する警告は表示されません。たとえば、2021 年にのみ有効な鍵を使用して、その鍵で 2021 年に署名されたカーネルモジュールを認証できます。ただし、ユーザーはこの鍵を使用して 2022 年にカーネルモジュールに署名することはできません。
検証
カーネルモジュールの署名に関する情報を表示します。
modinfo my_module.ko | grep signer signer: Your Name Key
# modinfo my_module.ko | grep signer signer: Your Name KeyCopy to Clipboard Copied! Toggle word wrap Toggle overflow 生成時に入力した名前が署名に記載されていることを確認します。
注記この追加された署名は ELF イメージセクションには含まれず、また ELF イメージの正式な一部ではありません。したがって、
readelfなどのユーティリティーは、カーネルモジュールの署名を表示できません。モジュールをロードします。
insmod my_module.ko
# insmod my_module.koCopy to Clipboard Copied! Toggle word wrap Toggle overflow モジュールを削除 (アンロード) します。
modprobe -r my_module.ko
# modprobe -r my_module.koCopy to Clipboard Copied! Toggle word wrap Toggle overflow
21.12. 署名済みカーネルモジュールの読み込み リンクのコピーリンクがクリップボードにコピーされました!
公開鍵をシステムキーリング (.builtin_trusted_keys) と MOK リストに登録し、秘密鍵でカーネルモジュールに署名したら、modprobe コマンドを使用してそれらをロードできます。
前提条件
- 公開鍵と秘密鍵のペアを生成した。詳細は、公開鍵と秘密鍵のペアの生成 を参照してください。
- 公開鍵をシステムのキーリングに登録している。詳細は、公開鍵を MOK リストに追加して、ターゲットシステムに公開鍵を登録する を参照してください。
- 秘密鍵でカーネルモジュールに署名している。詳細は、秘密鍵を使用したカーネルモジュールの署名 を参照してください。
/lib/modules/$(uname -r)/extra/ディレクトリーを作成するkernel-modules-extraパッケージをインストールします。dnf -y install kernel-modules-extra
# dnf -y install kernel-modules-extraCopy to Clipboard Copied! Toggle word wrap Toggle overflow
手順
公開鍵がシステムキーリング上にあることを確認します。
keyctl list %:.platform
# keyctl list %:.platformCopy to Clipboard Copied! Toggle word wrap Toggle overflow カーネルモジュールを必要なカーネルの
extra/ディレクトリーにコピーします。cp my_module.ko /lib/modules/$(uname -r)/extra/
# cp my_module.ko /lib/modules/$(uname -r)/extra/Copy to Clipboard Copied! Toggle word wrap Toggle overflow モジュールの依存関係のリストを更新します。
depmod -a
# depmod -aCopy to Clipboard Copied! Toggle word wrap Toggle overflow カーネルモジュールを読み込みます。
modprobe -v my_module
# modprobe -v my_moduleCopy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: 起動時にモジュールをロードするには、
/etc/modules-loaded.d/my_module.confファイルに追加します。echo "my_module" > /etc/modules-load.d/my_module.conf
# echo "my_module" > /etc/modules-load.d/my_module.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
モジュールが正常にロードされたことを確認します。
lsmod | grep my_module
# lsmod | grep my_moduleCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第22章 セキュアブート失効リストの更新 リンクのコピーリンクがクリップボードにコピーされました!
システム上の UEFI セキュアブート失効リストを更新すると、セキュアブートが既知のセキュリティー問題のあるソフトウェアを識別し、ブートプロセスが侵害されるのを防ぐことができます。
22.1. セキュアブート失効リスト リンクのコピーリンクがクリップボードにコピーされました!
UEFI セキュアブート失効リスト、またはセキュアブート禁止署名データベース (dbx) は、セキュアブートで実行が許可されなくなったソフトウェアを識別するリストです。
GRUB ブートローダーなど、セキュアブートと連携するソフトウェアでセキュリティー上の問題や安定性上の問題が見つかった場合、失効リストにそのハッシュ署名が保存されます。このような認識された署名を持つソフトウェアは起動時に実行できず、システムの侵害を防ぐためにシステムの起動が失敗します。
たとえば、GRUB の特定のバージョンには、攻撃者がセキュアブートメカニズムをバイパスできるセキュリティー上の問題が含まれていたとします。問題が見つかると、失効リストに、問題があるすべての GRUB バージョンのハッシュ署名が追加されます。その結果、セキュアな GRUB バージョンのみがシステムで起動できるようになります。
失効リストは、新たに見つかった問題を認識するために定期的に更新する必要があります。失効リストを更新するときは、現在インストールされているシステムが起動しなくならないように、安全な更新方法を使用してください。
22.2. 失効リストのオンライン更新の適用 リンクのコピーリンクがクリップボードにコピーされました!
システム上のセキュアブート失効リストを更新することにより、セキュアブートで既知のセキュリティー問題を防止できます。この手順は安全であり、更新によってシステムの起動が妨げられることはありません。
前提条件
- システムでセキュアブートが有効になっている。
- システムが更新のためにインターネットにアクセスできる。
手順
失効リストの現在のバージョンを確認します。
fwupdmgr get-devices
# fwupdmgr get-devicesCopy to Clipboard Copied! Toggle word wrap Toggle overflow UEFI dbxの下のCurrent versionフィールドを確認します。LVFS 失効リストリポジトリーを有効にします。
fwupdmgr enable-remote lvfs
# fwupdmgr enable-remote lvfsCopy to Clipboard Copied! Toggle word wrap Toggle overflow リポジトリーのメタデータを更新します。
fwupdmgr refresh
# fwupdmgr refreshCopy to Clipboard Copied! Toggle word wrap Toggle overflow 失効リストの更新を適用します。
コマンドラインの場合:
fwupdmgr update
# fwupdmgr updateCopy to Clipboard Copied! Toggle word wrap Toggle overflow グラフィカルインターフェイスの場合:
- Software アプリケーションを開きます。
- Updates タブに移動します。
- Secure Boot dbx Configuration Update エントリーを見つけます。
- をクリックします。
-
更新の最後に、
fwupdmgrまたは ソフトウェア がシステムの再起動を要求します。再起動を確認します。
検証
再起動後、失効リストの現在のバージョンを再度確認します。
fwupdmgr get-devices
# fwupdmgr get-devicesCopy to Clipboard Copied! Toggle word wrap Toggle overflow
22.3. 失効リストのオフライン更新の適用 リンクのコピーリンクがクリップボードにコピーされました!
インターネットに接続されていないシステムでは、RHEL からセキュアブート失効リストを更新することにより、セキュアブートで既知のセキュリティー問題を防止できます。この手順は安全であり、更新によってシステムの起動が妨げられることはありません。
手順
失効リストの現在のバージョンを確認します。
fwupdmgr get-devices
# fwupdmgr get-devicesCopy to Clipboard Copied! Toggle word wrap Toggle overflow UEFI dbxの下のCurrent versionフィールドを確認します。RHEL から入手可能な更新をリストします。
ls /usr/share/dbxtool/
# ls /usr/share/dbxtool/Copy to Clipboard Copied! Toggle word wrap Toggle overflow アーキテクチャーの最新の更新ファイルを選択します。ファイル名には次の形式が使用されます。
DBXUpdate-date-architecture.cab
DBXUpdate-date-architecture.cabCopy to Clipboard Copied! Toggle word wrap Toggle overflow 選択した更新ファイルをインストールします。
fwupdmgr install /usr/share/dbxtool/DBXUpdate-date-architecture.cab
# fwupdmgr install /usr/share/dbxtool/DBXUpdate-date-architecture.cabCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
更新の最後に、
fwupdmgrがシステムの再起動を要求します。再起動を確認します。
検証
再起動後、失効リストの現在のバージョンを再度確認します。
fwupdmgr get-devices
# fwupdmgr get-devicesCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第23章 カーネル整合性サブシステムによるセキュリティーの強化 リンクのコピーリンクがクリップボードにコピーされました!
カーネル整合性サブシステムのコンポーネントを使用することで、システムのセキュリティーを強化できます。関連するコンポーネントとその設定の詳細をご覧ください。
23.1. カーネル整合性サブシステム リンクのコピーリンクがクリップボードにコピーされました!
整合性サブシステムは、ファイルの改ざんを検出し、読み込まれたポリシーに従ってアクセスを拒否することで、システムの整合性を保護します。また、アクセスログも収集するため、リモート側でリモートアテステーションを通じてシステムの整合性を検証することもできます。カーネル整合性サブシステムには、Integrity Measurement Architecture (IMA) と Extended Verification Module (EVM) が含まれています。
IMA と EVM の概要
Integrity Measurement Architecture (IMA)は、ファイルの内容の整合性を維持します。次の 3 つの機能を備えています。これらは IMA ポリシーを通じて有効にできます。
ima-Measurement- ファイルの内容ハッシュまたは署名を収集し、カーネルに測定を保存します。TPM が利用可能な場合、各測定値によって TPM PCR が拡張されます。これにより、アテステーションクォートを使用したリモートアテステーションが可能になります。
IMA-Appraisal- 計算されたファイルハッシュと既知の適切な参照値を比較するか、security.ima 属性に保存されている署名を検証することで、ファイルの整合性を検証します。検証に失敗した場合、システムはアクセスを拒否します。
IMA-Audit- 計算されたファイルの内容ハッシュまたは署名をシステム監査ログに保存します。
Extended Verification Module (EVM)は、security.ima や security.selinux などのシステムセキュリティーに関連する拡張属性を含むファイルメタデータを保護します。EVM は、これらのセキュリティー属性の参照ハッシュまたは HMAC を security.evm に保存し、それを使用してファイルメタデータが悪意を持って変更されたかどうかを検出します。
Secure Boot インテグレーション
Secure Boot は、ファームウェアからブートローダーへの信頼チェーンを確立してからカーネルに信頼します。信頼できるカーネルの整合性サブシステムにより、信頼できるユーザー空間コードのみが実行されるようにすることで、信頼のチェーンがユーザー空間に拡張されるようになりました。整合性サブシステムは単独で使用できますが、整合性サブシステムのいくつかの動作は、たとえば、セキュアブートに関連付けられています。
- 一部の IMA ポリシールールは、セキュアブートが有効になっていると自動的にアクティベートされます。たとえば、IMA-Measurement は、UEFI システムの kexec のカーネルおよびカーネルモジュールに対して有効になり、IMA-Appraisal は PowerPC 上の kexec のカーネルに対して有効になります。
- 現在、Red Hat Enterprise Linux 10 では、セキュアブートが有効になっているときに、信頼できる鍵によって署名された IMA ポリシーのみをロードできます。
23.2. IMA 署名ベースの評価によるカーネルの実行時整合性監視の有効化 リンクのコピーリンクがクリップボードにコピーされました!
RHEL 9 以降、パッケージファイルはすべてファイルごとに署名されており、ユーザーは署名ベースの IMA 評価を有効にすることで、許可されたパッケージファイルにのみアクセスできます。
署名ベースの IMA 評価を有効にします。
ima-setup --policy=/usr/share/ima/policies/01-appraise-executable-and-lib-signatures
ima-setup --policy=/usr/share/ima/policies/01-appraise-executable-and-lib-signatures
このコマンドの詳細は次のとおりです。
-
インストールされているすべてのパッケージのパッケージファイル署名を
security.imaに保存します。 -
dracutの整合性モジュールを含めることで、IMA のコード署名鍵をカーネルに読み込みます。 -
ポリシーを
/etc/ima/ima-policyにコピーして、systemd が起動時にそのポリシーを読み込めるようにします。
検証
-
ipコマンドを正常に実行できます。 ipが/tmpにコピーされると、デフォルトでsecurity.imaが失われ、ipコマンドは実行されません。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
サンプルポリシー 01-appraise-executable-and-lib-signatures が要件に合わない場合は、カスタムポリシーを作成して使用できます。
23.3. IMA 測定によるリモートアテステーションの有効化 リンクのコピーリンクがクリップボードにコピーされました!
IMA 測定によるリモートアテステーションを有効にすると、システムの整合性を検証できます。Keylime などのツールでリモートアテステーションを使用するには、IMA 測定を有効にする必要があります。署名済みの測定ポリシーが /usr/share/ima/policies/02-keylime-remote-attestation にあります。要件に合ったサンプルポリシーをデプロイして実行してください。
前提条件
-
署名済みの測定ポリシーが
/usr/share/ima/policies/02-keylime-remote-attestationにある。
手順
ポリシーをデプロイします。
cp --preserve=xattr /usr/share/ima/policies/02-keylime-remote-attestation /etc/ima/ima-policy
# cp --preserve=xattr /usr/share/ima/policies/02-keylime-remote-attestation /etc/ima/ima-policyCopy to Clipboard Copied! Toggle word wrap Toggle overflow ポリシーを読み込みます。
echo /etc/ima/ima-policy > /sys/kernel/security/integrity/ima/policy
# echo /etc/ima/ima-policy > /sys/kernel/security/integrity/ima/policyCopy to Clipboard Copied! Toggle word wrap Toggle overflow
サンプルポリシーが要件に合わない場合、またはセキュリティー上の理由から署名済み IMA ポリシーだけを読み込ませる必要がある場合は、UEFI システム用のカスタム署名付き IMA ポリシーのデプロイ を参照してください。
検証
ポリシーが読み込まれていることを確認します。
cat /sys/kernel/security/integrity/ima/policy
# cat /sys/kernel/security/integrity/ima/policyCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第24章 カーネル整合性サブシステムの拡張、カスタマイズ、およびトラブルシューティング リンクのコピーリンクがクリップボードにコピーされました!
さまざまなセキュリティー要件と実稼働環境に対応するために、カーネル整合性サブシステムを拡張、カスタマイズ、トラブルシューティングします。
24.1. IMA 評価用の適切な参照値の生成 リンクのコピーリンクがクリップボードにコピーされました!
IMA 評価ルールを含む IMA ポリシーをデプロイする前に、そのルールによって管理されるすべてのファイルに、security.ima 拡張属性に格納された有効な参照値があることを確認してください。これらの参照値が欠落している場合、IMA によってシステムの正常な起動が妨げられたり、ファイルへのアクセスが拒否されたりする可能性があります。
ima-appraise-file </path/to/file>
# ima-appraise-file </path/to/file>
24.1.1. イミュータブルなファイルの適切な参照として IMA 署名を追加する リンクのコピーリンクがクリップボードにコピーされました!
整合性検証をサポートするために、イミュータブルなファイルの信頼できる参照値として IMA 署名を使用します。この方法を使用すると、有効な署名を持つファイルだけがアクセスされるようになるため、システムのセキュリティーとコンプライアンスが強化されます。
前提条件
- IMA 評価ルールを含む IMA ポリシーを作成した。
手順
rpm-plugin-imaをインストールします。sudo dnf install rpm-plugin-ima -yq
$ sudo dnf install rpm-plugin-ima -yqCopy to Clipboard Copied! Toggle word wrap Toggle overflow これにより、パッケージのインストール、再インストール、またはアップグレード時に、パッケージファイルの IMA 署名が
security.xattrに自動的に保存されます。すべてのパッケージを再インストールします。
sudo dnf reinstall "*" -y
$ sudo dnf reinstall "*" -yCopy to Clipboard Copied! Toggle word wrap Toggle overflow これにより、すべてのパッケージの
security.xattr拡張属性が確実に更新されます。dracut の整合性モジュールを有効にすると、起動時に
/etc/keys/ima内の正式な IMA コード署名鍵が自動的に読み込まれます。sudo dracut -f
$ sudo dracut -fCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
署名が
security.ima拡張属性に正しく保存されていることを確認します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
24.1.2. ミュータブルなファイルの適切な参照値を生成する リンクのコピーリンクがクリップボードにコピーされました!
時間の経過とともに変化する可能性のあるファイルの整合性を維持するには、必要に応じて参照値を生成し、更新します。これにより、システムがミュータブルなファイルの信頼性を正確に検証し、不正な変更を防止できるようになります。
前提条件
- システムの root 権限がある。
- IMA 評価ルールを含む IMA ポリシーを作成した。
- IMA 評価用の適切な参照値を生成した。
- セキュアブートが無効になっている。
手順
オプション: 選択した IMA 評価ポリシーを有効にします。カスタムポリシーのみを使用する場合は、この手順をスキップしてください。組み込みの
ima_policy=appraise_tcbを例として使用します。grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="ima_policy=appraise_tcb"
# grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="ima_policy=appraise_tcb"Copy to Clipboard Copied! Toggle word wrap Toggle overflow s390xシステムの場合は、さらに以下を実行します。zipl
# ziplCopy to Clipboard Copied! Toggle word wrap Toggle overflow
ima_appraise=fixカーネルコマンドラインパラメーターを追加して、IMA 評価の修正モードを有効にします。grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="ima_appraise=fix"
# grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="ima_appraise=fix"Copy to Clipboard Copied! Toggle word wrap Toggle overflow s390xシステムの場合は、さらに以下を実行します。zipl
# ziplCopy to Clipboard Copied! Toggle word wrap Toggle overflow
システムを再起動します。
reboot
# rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: カスタム IMA ポリシーを読み込みます。
echo <path_to_your_custom_ima_policy> > /sys/kernel/security/ima/policy
# echo <path_to_your_custom_ima_policy> > /sys/kernel/security/ima/policyCopy to Clipboard Copied! Toggle word wrap Toggle overflow システム全体のラベルを付け直します。
find / -fstype xfs -type f -uid 0 -exec head -c 0 '{}' \;# find / -fstype xfs -type f -uid 0 -exec head -c 0 '{}' \;Copy to Clipboard Copied! Toggle word wrap Toggle overflow ima_appraise=fixカーネルコマンドラインパラメーターを削除して、IMA 評価の修正モードをオフにします。grubby --update-kernel=/boot/vmlinuz-$(uname -r) --remove-args="ima_appraise=fix"
# grubby --update-kernel=/boot/vmlinuz-$(uname -r) --remove-args="ima_appraise=fix"Copy to Clipboard Copied! Toggle word wrap Toggle overflow s390xシステムの場合は、さらに以下を実行します。zipl
# ziplCopy to Clipboard Copied! Toggle word wrap Toggle overflow
- セキュアブートが無効になっている場合は有効にします。
24.2. カスタム IMA ポリシーの作成 リンクのコピーリンクがクリップボードにコピーされました!
カーネルコマンドラインパラメーター (ima_policy=tcb や ima_policy=critical_data など) を使用して有効にする組み込みの IMA ポリシー、または /usr/share/ima/policies/ 内のサンプルポリシーが要件に合わない場合は、カスタムの IMA ポリシールールを作成できます。systemd が /etc/ima/ima-policy からポリシーを読み込むと、組み込みの IMA ポリシーが置き換えられます。
IMA ポリシーを定義した後、ポリシーに IMA 評価ルールが含まれている場合は、適切な参照値を生成してからポリシーをデプロイしてください。ポリシーに IMA 評価ルールが含まれていない場合は、echo /PATH-TO-YOUR-DRAFT-IMA-POLICY > /sys/kernel/security/integrity/ima/policy を実行してポリシーを検証できます。この方法はシステムの起動失敗を防ぐのに役立ちます。
IMA ポリシールールでは、action [condition …] という形式を使用して、特定の条件下でトリガーされるアクションを指定します。たとえば、/usr/share/ima/policies/01-appraise-executable-and-lib-signatures のサンプルポリシーには、次のルールが含まれています。
最初のルール dont_appraise fsmagic=0x9fa0 は、PROC_SUPER_MAGIC ファイルシステム内のファイルの評価をスキップするように IMA に指示します。最後のルール appraise func=BPRM_CHECK appraise_type=imasig は、ファイルの実行時に署名の検証を強制します。
24.3. OpenSSL を使用したカスタム IMA 鍵の作成 リンクのコピーリンクがクリップボードにコピーされました!
OpenSSL を使用して、デジタル証明書の CSR を生成し、コードを保護できます。
カーネルは、.ima キーリングでコード署名鍵を検索し、IMA 署名を検証します。コード署名鍵を .ima キーリングに追加する前に、IMA CA キーが .builtin_trusted_keys または .secondary_trusted_keys キーリング内のこの鍵に署名していることを確認する必要があります。
前提条件
カスタム IMA CA キーに次の拡張がある。
- CA ブール値がアサートされた基本制約の拡張。
-
keyCertSignビットがアサートされているが、digitalSignatureが アサートされていないKeyUsage拡張。
カスタム IMA コード署名鍵が次の基準に該当する。
- IMA CA キーがこのカスタム IMA コード署名鍵に署名している。
-
カスタムキーに
subjectKeyIdentifier拡張が含まれている。
-
x86_64またはaarch64システムの場合は UEFI セキュアブート、ppc64leシステムの場合は PowerVM セキュアブートが有効になっている。
手順
カスタム IMA CA キーペアを生成するには、次のコマンドを実行します。
openssl req -new -x509 -utf8 -sha256 -days 3650 -batch -config ima_ca.conf -outform DER -out custom_ima_ca.der -keyout custom_ima_ca.priv
# openssl req -new -x509 -utf8 -sha256 -days 3650 -batch -config ima_ca.conf -outform DER -out custom_ima_ca.der -keyout custom_ima_ca.privCopy to Clipboard Copied! Toggle word wrap Toggle overflow オプション:
ima_ca.confファイルの内容を確認するには、次を実行します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 秘密鍵と IMA コード署名鍵の証明書署名要求 (CSR) を生成するには、次のコマンドを実行します。
openssl req -new -utf8 -sha256 -days 365 -batch -config ima.conf -out custom_ima.csr -keyout custom_ima.priv
# openssl req -new -utf8 -sha256 -days 365 -batch -config ima.conf -out custom_ima.csr -keyout custom_ima.privCopy to Clipboard Copied! Toggle word wrap Toggle overflow オプション:
ima.confファイルの内容を確認するには、次のコマンドを実行します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow IMA CA 秘密鍵を使用して CSR に署名し、IMA コード署名証明書を作成します。
openssl x509 -req -in custom_ima.csr -days 365 -extfile ima.conf -extensions code_signing -CA custom_ima_ca.der -CAkey custom_ima_ca.priv -CAcreateserial -outform DER -out ima.der
# openssl x509 -req -in custom_ima.csr -days 365 -extfile ima.conf -extensions code_signing -CA custom_ima_ca.der -CAkey custom_ima_ca.priv -CAcreateserial -outform DER -out ima.derCopy to Clipboard Copied! Toggle word wrap Toggle overflow
24.4. カスタム IMA 鍵で署名された IMA ポリシーの読み込み リンクのコピーリンクがクリップボードにコピーされました!
システムの整合性を維持し、組織のセキュリティー要件を満たすために、独自のカスタム IMA 鍵で署名された IMA ポリシーを読み込むことができます。この方法を採用すると、システムの起動時または実行時に、信頼できる認証済みのポリシーだけが確実に適用されます。
この手順は、UEFI セキュアブートが有効な x86_64 および aarch64 システム、および PowerVM セキュアブートを実行している ppc64le システムにのみ適用されます。
前提条件
- システムの root 特権がある。
-
Red Hat Enterprise Linux で UEFI セキュアブートが有効になっている。またはカーネルが
ima_policy=secure_bootパラメーター付きで起動されており、署名された IMA ポリシーだけが読み込まれるようになっている。 - カスタムの IMA CA 鍵が MOK リストに追加されている。詳細は、公開鍵を MOK リストに追加してターゲットシステムに公開鍵を登録する を参照してください。
- カーネルバージョンが 5.14 以降である。
- IMA ポリシー用に適切な参照値が生成されている。詳細は、IMA 評価用の適切な参照値の生成 を参照してください。
手順
カスタム IMA コード署名鍵を
.imaキーリングに追加します。keyctl padd asymmetric <KEY_SUBJECT> %:.ima < <PATH_TO_YOUR_CUSTOM_IMA_KEY>
# keyctl padd asymmetric <KEY_SUBJECT> %:.ima < <PATH_TO_YOUR_CUSTOM_IMA_KEY>Copy to Clipboard Copied! Toggle word wrap Toggle overflow IMA ポリシーを準備し、カスタム IMA コード署名鍵で署名します。
evmctl ima_sign <PATH_TO_YOUR_CUSTOM_IMA_POLICY> -k <PATH_TO_YOUR_CUSTOM_IMA_KEY>
# evmctl ima_sign <PATH_TO_YOUR_CUSTOM_IMA_POLICY> -k <PATH_TO_YOUR_CUSTOM_IMA_KEY>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 署名した IMA ポリシーを読み込みます。
echo <PATH_TO_YOUR_CUSTOM_SIGNED_IMA_POLICY> > /sys/kernel/security/ima/policy echo $? 0
# echo <PATH_TO_YOUR_CUSTOM_SIGNED_IMA_POLICY> > /sys/kernel/security/ima/policy # echo $? 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 0IMA ポリシーが正常に読み込まれたことを示します。コマンドがゼロ以外の値を返した場合、IMA ポリシーは正常に読み込まれていません。
警告この手順をスキップしないでください。スキップすると、システムが起動しなくなり、システムの回復が必要になる場合があります。
IMA ポリシーの読み込みに失敗した場合は、ステップ 2 と 3 を繰り返して問題を修正します。
署名した IMA ポリシーを
/etc/ima/ima-policyにコピーして、起動時に systemd が自動的にそのポリシーを読み込めるようにします。cp --preserve=xattr <PATH_TO_YOUR_CUSTOM_IMA_POLICY> /etc/ima/ima-policy
# cp --preserve=xattr <PATH_TO_YOUR_CUSTOM_IMA_POLICY> /etc/ima/ima-policyCopy to Clipboard Copied! Toggle word wrap Toggle overflow dracutの整合性モジュールを使用して、起動時にカスタム IMA コード署名鍵を.imaキーリングに自動的に追加します。cp <PATH_TO_YOUR_CUSTOM_IMA_KEY> /etc/keys/ima/ cp --preserve=xattr /usr/share/ima/dracut-98-integrity.conf /etc/dracut.conf.d/98-integrity.conf dracut -f
# cp <PATH_TO_YOUR_CUSTOM_IMA_KEY> /etc/keys/ima/ # cp --preserve=xattr /usr/share/ima/dracut-98-integrity.conf /etc/dracut.conf.d/98-integrity.conf # dracut -fCopy to Clipboard Copied! Toggle word wrap Toggle overflow s390xシステムの場合は、さらに以下を実行します。zipl
# ziplCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
IMA ポリシーが正常に読み込まれたことを確認します。
cat /sys/kernel/security/ima/policy
# cat /sys/kernel/security/ima/policyCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力にカスタム IMA ポリシーのルールが含まれているはずです。
24.5. systemd が IMA ポリシーの読み込みに失敗する場合のトラブルシューティング リンクのコピーリンクがクリップボードにコピーされました!
systemd が /etc/ima/ima-policy を読み込まない場合、システムがハングし、systemd[1]: Freezing execution というエラーが表示されます。
[ 5.829882] ima: policy update failed [ 5.830094] ima: signed policy file (specified as an absolute pathname) required [!!!!!!] Failed to load IMA policy. … [ 5.859994] systemd[1]: Freezing execution.
[ 5.829882] ima: policy update failed
[ 5.830094] ima: signed policy file (specified as an absolute pathname) required
[!!!!!!] Failed to load IMA policy.
…
[ 5.859994] systemd[1]: Freezing execution.
システムを回復するには 3 つの方法があります。
24.5.1. セキュアブートをオフにする リンクのコピーリンクがクリップボードにコピーされました!
ポリシーが署名されていないために読み込めない場合は、次の例のようなエラーが表示されることがあります。
回避策として、セキュアブートを一時的にオフにして、UEFI システム用のカスタム署名付き IMA ポリシーのデプロイ の手順を実行すると、問題を解決できます。
24.5.2. init=/bin/bash カーネルパラメーターを使用してシステムを起動する リンクのコピーリンクがクリップボードにコピーされました!
init=/bin/bash カーネルパラメーターを使用してシステムを起動するには、次の手順に従います。
-
ブートローダーのエントリーを変更し、
init=/bin/bashカーネルパラメーターを追加します。 シェルにアクセスしたら、書き込み権限付きでシステムを再マウントします。
mount -o remount,rw /
# mount -o remount,rw /Copy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/ima/ima-policyの名前を/etc/ima/ima-policy.bakに変更します。mv /etc/ima/ima-policy /etc/ima/ima-policy.bak
# mv /etc/ima/ima-policy /etc/ima/ima-policy.bakCopy to Clipboard Copied! Toggle word wrap Toggle overflow システムを再起動します。
echo 1 > /proc/sys/kernel/sysrq printf "s\nb" > /proc/sysrq-trigger
# echo 1 > /proc/sys/kernel/sysrq # printf "s\nb" > /proc/sysrq-triggerCopy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/ima/ima-policy.bak内の問題を解決し、ポリシーを読み込めることを確認します。echo /etc/ima/ima-policy.bak >> /sys/kernel/security/integrity/ima/policy
# echo /etc/ima/ima-policy.bak >> /sys/kernel/security/integrity/ima/policyCopy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/ima/ima-policy.bakの名前を/etc/ima/ima-policyに変更します。mv /etc/ima/ima-policy.bak /etc/ima/ima-policy
# mv /etc/ima/ima-policy.bak /etc/ima/ima-policyCopy to Clipboard Copied! Toggle word wrap Toggle overflow
24.5.3. initcall_blacklist=init_ima カーネルパラメーターを使用してシステムを起動する リンクのコピーリンクがクリップボードにコピーされました!
システムが systemd[1]: Freezing execution というエラーでハングした場合は、initcall_blacklist=init_ima カーネルパラメーターを使用してシステムを起動し、IMA ポリシーを無効にできます。
-
ブートローダーエントリーを変更し、
initcall_blacklist=init_imaカーネルパラメーターを追加します。 /etc/ima/ima-policyの名前を/etc/ima/ima-policy.bakに変更します。mv /etc/ima/ima-policy /etc/ima/ima-policy.bak
# mv /etc/ima/ima-policy /etc/ima/ima-policy.bakCopy to Clipboard Copied! Toggle word wrap Toggle overflow システムを再起動します。
systemctl reboot
# systemctl rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/ima/ima-policy.bak内の問題を解決し、ポリシーを読み込めることを確認します。echo /etc/ima/ima-policy.bak >> /sys/kernel/security/integrity/ima/policy
# echo /etc/ima/ima-policy.bak >> /sys/kernel/security/integrity/ima/policyCopy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/ima/ima-policy.bakの名前を/etc/ima/ima-policyに変更します。mv /etc/ima/ima-policy.bak /etc/ima/ima-policy
# mv /etc/ima/ima-policy.bak /etc/ima/ima-policyCopy to Clipboard Copied! Toggle word wrap Toggle overflow
24.6. カスタムビルドパッケージの署名 リンクのコピーリンクがクリップボードにコピーされました!
システムの整合性を維持するには、カスタムビルドパッケージに署名してからデプロイすることが重要です。rpm-sign ツールと IMA コード署名鍵を使用すると、カスタムビルドパッケージに署名できます。
前提条件
- システムの root 特権がある。
- 署名する必要があるカスタムビルドパッケージがある。
- IMA コード署名鍵がある。
-
rpm-signツールがインストールされている。 - カスタム IMA 鍵が作成されている。OpenSSL を使用したカスタム IMA 鍵の作成 を参照してください。
手順
rpmsign –signfilesを使用してパッケージファイルに署名します。rpmsign --define "gpg_name _<GPG_KEY_NAME>" --addsign --signfiles --fskpass --fskpath=<PATH_TO_YOUR_PRIVATE_IMA_CODE_SIGNING_KEY> <PATH_TO_YOUR_RPM>
# rpmsign --define "gpg_name _<GPG_KEY_NAME>" --addsign --signfiles --fskpass --fskpath=<PATH_TO_YOUR_PRIVATE_IMA_CODE_SIGNING_KEY> <PATH_TO_YOUR_RPM>Copy to Clipboard Copied! Toggle word wrap Toggle overflow --define "gpg_name _<GPG_KEY_NAME>"- GPG 鍵はパッケージに署名し、IMA コード署名鍵はパッケージ内の各ファイルに署名します。
--addsign- パッケージに署名を追加します。
--signfiles- パッケージ内の各ファイルに署名します。
--fskpass- IMA コード署名鍵のパスワードを繰り返し入力することを回避します。
--fskpath- IMA コード署名鍵へのパスを指定します。
検証
パッケージが署名されていることを確認するには、次のコマンドを使用できます。
rpm -q --queryformat "[%{FILENAMES} %{FILESIGNATURES}\n] <PATH_TO_YOUR_RPM>" /usr/bin/YOUR_BIN 030204... /usr/lib/YOUR_LIB.so 030204... ...# rpm -q --queryformat "[%{FILENAMES} %{FILESIGNATURES}\n] <PATH_TO_YOUR_RPM>" /usr/bin/YOUR_BIN 030204... /usr/lib/YOUR_LIB.so 030204... ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow
24.7. IMA と fapolicyd の選択 リンクのコピーリンクがクリップボードにコピーされました!
IMA と fapolicyd は、ファイルの整合性を確保するための 2 つの異なるツールです。IMA は、起動時にファイルの整合性を検証することでファイルの整合性を確保するカーネルモジュールです。fapolicyd は、実行時にファイルの整合性を検証することでファイルの整合性を確保するデーモンです。
次のリストは、どちらのツールが要件に合っているかを判断するのに役立ちます。
-
IMA はデジタル署名を検証して整合性を確保します。一方、
fapolicydは現在ハッシュベースの検証のみをサポートしています。 -
IMA はカーネル空間で動作します。
fapolicydはユーザー空間で動作します。 -
fapolicydは、ファイルサイズのチェックによる基本的な整合性検証をサポートしています。security.imaに保存されている参照ハッシュ値を検証することもできます。 -
IMA と
fapolicydは異なるポリシー構文を使用します。たとえば、fapolicydはパスベースのポリシーをサポートしていますが、IMA はサポートしていません。
第25章 systemd を使用したアプリケーションが使用するリソースの管理 リンクのコピーリンクがクリップボードにコピーされました!
RHEL 9 では、cgroup 階層のシステムを systemd ユニットツリーにバインドすることにより、リソース管理設定をプロセスレベルからアプリケーションレベルに移行します。したがって、システムリソースは、systemctl コマンドを使用するか、systemd ユニットファイルを変更して管理できます。
これを実現するために、systemd はユニットファイルから、または systemctl コマンドを介して直接さまざまな設定オプションを取得します。次に、systemd は、Linux カーネルシステムコールと cgroups や namespaces などの機能を使用して、これらのオプションを特定のプロセスグループに適用します。
次のマニュアルページで、systemd の設定オプションの完全なセットを確認できます。
-
systemd.resource-control(5) -
systemd.exec(5)
25.1. リソース管理における systemd のロール リンクのコピーリンクがクリップボードにコピーされました!
systemd のコア機能は、サービスの管理と監視です。systemd システムとサービスマネージャーは以下のことを行います。
- ブートプロセス中に、適切なタイミングで正しい順序で管理対象サービスを起動します。
- 管理対象サービスをスムーズに実行し、サービスが基盤となるハードウェアプラットフォームを最適に使用できるようにします。
- リソース管理ポリシーを定義する機能を提供します。
- サービスのパフォーマンスを向上できる、さまざまなオプションを調整する機能を提供します。
一般に、Red Hat では、システムリソースの使用を制御するために systemd を使用することを推奨します。特別な場合にのみ、cgroups 仮想ファイルシステムを手動で設定する必要があります。たとえば、cgroup-v2 階層に同等のものがない cgroup-v1 コントローラーを使用する必要がある場合です。
25.2. システムソースの配分モデル リンクのコピーリンクがクリップボードにコピーされました!
システムリソースの配分を変更するには、以下の配分モデルの 1 つまたは複数を適用できます。
- 重み
全サブグループの重みを合計し、各サブグループに、合計に対する重み比率に応じたリソースを配分します。
たとえば、10 個の cgroup があり、それぞれの重みが 100 の場合、合計は 1000 になります。各 cgroup は、リソースの 10 分の 1 を受け取ります。
重みは通常、ステートレスリソースの配分に使用されます。たとえば、CPUWeight= オプションは、このリソース配分モデルの実装です。
- 制限
cgroup は、設定された量のリソースを消費できます。サブグループ制限の合計は、親 cgroup の制限を超える可能性があります。したがって、このモデルではリソースをオーバーコミットする可能性があります。
たとえば、MemoryMax= オプションは、このリソース配分モデルの実装です。
- 保護
cgroup のリソースの保護された量を設定できます。リソース使用量が保護量の境界を下回っている場合、カーネルは、この cgroup にペナルティーを課さないように努め、同じリソースを巡って競合している他の cgroup を優先します。オーバーコミットも可能です。
たとえば、MemoryLow= オプションは、このリソース配分モデルの実装です。
- 割り当て
- リソースに上限がある場合に、絶対量を特別に割り当てます。オーバーコミットはできません。Linux でこのリソースのタイプとして、リアルタイムの予算などが例として挙げられます。
- ユニットファイルオプション
リソース制御設定の設定。
たとえば、CPUAccounting= や CPUQuota= などのオプションを使用して CPU リソースを設定できます。同様に、AllowedMemoryNodes= や IOAccounting= などのオプションを使用して、メモリーまたは I/O リソースを設定できます。
25.3. systemd を使用したシステムリソースの割り当て リンクのコピーリンクがクリップボードにコピーされました!
systemd を使用してシステムリソースを割り当てるには、systemd サービスとユニットの作成と管理が必要です。この割り当ては、特定の時間に、または特定のシステムイベントに応じて開始、停止、または再開するように設定できます。
手順
サービスのユニットファイルオプションの必要な値を変更するには、ユニットファイルの値を調整するか、systemctl コマンドを使用します。
選択したサービスに割り当てられた値を確認してください。
systemctl show --property <unit file option> <service name>
# systemctl show --property <unit file option> <service name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow CPU 時間割り当てポリシーのオプションで必要な値を設定します。
systemctl set-property <service name> <unit file option>=<value>
# systemctl set-property <service name> <unit file option>=<value>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
選択したサービスに新しく割り当てられた値を確認してください。
systemctl show --property <unit file option> <service name>
# systemctl show --property <unit file option> <service name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
25.4. cgroups の systemd 階層の概要 リンクのコピーリンクがクリップボードにコピーされました!
バックエンドでは、systemd システムおよびサービスマネージャーが slice、scope、および service ユニットを使用して、コントロールグループ内のプロセスを整理および構造化します。カスタムユニットファイルを作成するか、systemctl コマンドを使用して、この階層をさらに変更できます。また、systemd は、重要なカーネルリソースコントローラーの階層を /sys/fs/cgroup/ ディレクトリーに自動的にマウントします。
リソース制御には、次の 3 つの systemd ユニットタイプを使用できます。
- サービス
ユニット設定ファイルに従って
systemdが起動したプロセスまたはプロセスのグループ。サービスは、指定したプロセスをカプセル化して、1 つのセットとして起動および停止できるようにします。サービスの名前は以下の方法で指定されます。
<name>.service
<name>.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow - スコープ
外部で作成されたプロセスのグループ。スコープは、
fork()関数を介して任意のプロセスによって起動および停止され、実行時にsystemdによって登録されるプロセス群をカプセル化します。たとえば、ユーザーセッション、コンテナー、および仮想マシンはスコープとして処理されます。スコープの名前は以下のように指定されます。<name>.scope
<name>.scopeCopy to Clipboard Copied! Toggle word wrap Toggle overflow - スライス
階層的に編成されたユニットのグループ。スライスは、スコープおよびサービスを配置する階層を編成します。
実際のプロセスはスコープまたはサービスに含まれます。スライスユニットの名前はすべて、階層内の場所へのパスに対応します。
ハイフン (
-) 文字は、-.sliceルートスライスからスライスへのパスコンポーネントの区切り文字として機能します。以下の例では、下記の点を前提としています。<parent-name>.slice
<parent-name>.sliceCopy to Clipboard Copied! Toggle word wrap Toggle overflow parent-name.sliceはparent.sliceのサブスライスで、これは-.sliceroot スライスのサブスライスです。parent-name.sliceには、parent-name-name2.sliceという名前の独自のサブスライスを指定できます。
サービス、スコープ、スライス ユニットは、コントロールグループ階層のオブジェクトに直接マッピングされます。これらのユニットがアクティブになると、ユニット名から構築されるグループパスを制御するように直接マッピングされます。
以下は、コントロールグループ階層の省略形の例です。
上記の例では、サービスおよびスコープにプロセスが含まれており、独自のプロセスを含まないスライスに置かれていることを示しています。
25.5. Systemd ユニットのリスト表示 リンクのコピーリンクがクリップボードにコピーされました!
systemd システムおよびサービスマネージャーを使用して、そのユニットをリスト表示します。
手順
systemctlユーティリティーを使用して、システム上のすべてのアクティブなユニットをリスト表示します。ターミナルは、次の例のような出力を返します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow UNIT- コントロールグループ階層内のユニットの位置も反映するユニットの名前です。リソース制御に関連するユニットは、スライス、スコープ および サービス です。
LOAD- ユニット設定ファイルが正しく読み込まれたかどうかを示します。ユニットファイルのロードに失敗した場合、フィールドには loaded ではなく error 状態が表示されます。ユニットの読み込みの状態は他に stub, merged, and masked などがあります。
ACTIVE-
ユニットのアクティベーションの状態 (概要レベル)。こちらは
SUBを一般化したものです。 SUB- ユニットのアクティベーションの状態 (詳細レベル)。許容値の範囲は、ユニットタイプによって異なります。
DESCRIPTION- ユニットのコンテンツおよび機能の説明。
すべてのアクティブなユニットと非アクティブなユニットをリスト表示します。
systemctl --all
# systemctl --allCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力の情報量を限定します。
systemctl --type service,masked
# systemctl --type service,maskedCopy to Clipboard Copied! Toggle word wrap Toggle overflow --typeオプションでは、サービス および スライス などのユニットタイプのコンマ区切りのリスト、または 読み込み済み、マスク済み などのユニットの読み込み状態が必要です。
25.6. systemd cgroups 階層の表示 リンクのコピーリンクがクリップボードにコピーされました!
コントロールグループ (cgroups) の階層と、特定の cgroups で実行しているプロセスを表示します。
手順
systemd-cglsコマンドを使用して、システム上のcgroups階層全体を表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow この出力例では
cgroups階層全体を返します。この階層は、slices で形成される最も高いレベルです。systemd-cgls <resource_controller>コマンドを使用して、リソースコントローラーによってフィルター処理されたcgroups階層を表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow この出力例では、選択したコントローラーと対話するサービスのリストを表示します。
systemctl status <system_unit>コマンドを使用して、特定のユニットとcgroups階層のその部分に関する詳細情報を表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
25.7. プロセスの cgroup の表示 リンクのコピーリンクがクリップボードにコピーされました!
プロセスがどの コントロールグループ (cgroup) に属しているかを知ることができます。続いて cgroup をチェックして、使用するコントローラーとコントローラー固有の設定を確認できます。
手順
プロセスが属する
cgroupを表示するには、# cat proc/<PID>/cgroupコマンドを実行します。cat /proc/2467/cgroup 0::/system.slice/example.service
# cat /proc/2467/cgroup 0::/system.slice/example.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow この出力例は、対象のプロセスに関するものです。今回の例では、
example.serviceユニットに属するPID 2467で識別されるプロセスです。systemdユニットファイルの仕様で定義されているように、適切なコントロールグループにプロセスが置かれているかどうかを判断できます。cgroupが使用するコントローラーとそれぞれの設定ファイルを表示するには、cgroupディレクトリーを確認します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
cgroups のバージョン 1 階層は、コントローラーごとのモデルを使用します。したがって、/proc/PID/cgroup ファイルからの出力には、PID が属する各コントローラーの下の cgroups が表示されます。それぞれの cgroups は、/sys/fs/cgroup/<controller_name>/ のコントローラーディレクトリーにあります。
25.8. リソース消費の監視 リンクのコピーリンクがクリップボードにコピーされました!
現在実行中のコントロールグループ (cgroups) とそのリソース消費のリストをリアルタイムで表示します。
手順
systemd-cgtopコマンドを使用して、現在実行中のcgroupsの動的アカウントを表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow この出力例では、現在実行中の
cgroupsが、リソースの使用状況 (CPU、メモリー、ディスク I/O 負荷) 別に表示されています。デフォルトでは 1 秒ごとにリストが更新されます。そのため、コントロールグループごとに、実際のリソースの使用状況に関する動的な見解が得られるようになります。
25.9. systemd ユニットファイルを使用してアプリケーションの制限を設定する リンクのコピーリンクがクリップボードにコピーされました!
systemd サービスマネージャーは、既存または実行中の各ユニットを監視し、それらのコントロールグループを作成します。ユニットの設定ファイルは /usr/lib/systemd/system/ ディレクトリーにあります。
ユニットファイルを手動で変更し、以下を行うことができます。
- 制限を設定する。
- 優先度を設定する。
- プロセスのグループのハードウェアリソースへのアクセスを制御する。
前提条件
-
root権限があります。
手順
/usr/lib/systemd/system/example.serviceファイルを編集して、サービスのメモリー使用量を制限します。… [Service] MemoryMax=1500K …
… [Service] MemoryMax=1500K …Copy to Clipboard Copied! Toggle word wrap Toggle overflow この設定により、コントロールグループ内のプロセスが超えることのできない最大メモリーの制限が設定されます。
example.serviceサービスは、このようなコントロールグループの一部であり、制限を課せられています。測定単位のキロバイト、メガバイト、ギガバイト、またはテラバイトを指定するには、接尾辞 K、M、G、または T を使用できます。すべてのユニット設定ファイルを再読み込みします。
systemctl daemon-reload
# systemctl daemon-reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow サービスを再起動します。
systemctl restart example.service
# systemctl restart example.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
変更が有効になったことを確認します。
cat /sys/fs/cgroup/system.slice/example.service/memory.max 1536000
# cat /sys/fs/cgroup/system.slice/example.service/memory.max 1536000Copy to Clipboard Copied! Toggle word wrap Toggle overflow この出力例では、メモリー消費量が約 1,500 KB に制限されていることを示しています。
25.10. systemctl コマンドを使用してアプリケーションに制限を設定する リンクのコピーリンクがクリップボードにコピーされました!
CPU アフィニティーの設定は、特定のプロセスにアクセスできる CPU を一部だけに制限する場合に役立ちます。実際には、CPU スケジューラーでは、プロセスのアフィニティーマスク上にない CPU で実行するプロセスはスケジューリングされません。
デフォルトの CPU アフィニティーマスクは、systemd が管理するすべてのサービスに適用されます。
特定の systemd サービスの CPU アフィニティーマスクを設定するために、systemd は CPUAffinity= を以下のものとして提供します。
- ユニットファイルオプション
-
/etc/systemd/system.confファイルの [Manager] セクションの設定オプション
CPUAffinity= ユニットファイルオプションでは、マージしてアフィニティーマスクとして使用する CPU または CPU 範囲のリストを設定します。
手順
CPUAffinity ユニットファイルオプションを使用して、特定の systemd サービスの CPU アフィニティーマスクを設定するには、次の手順を実行します。
選択したサービスで
CPUAffinityユニットファイルオプションの値を確認します。systemctl show --property <CPU affinity configuration option> <service name>
$ systemctl show --property <CPU affinity configuration option> <service name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow root ユーザーに切り替え、アフィニティーマスクとして使用する CPU 範囲に応じて、
CPUAffinityユニットファイルオプションの必要な値を設定します。systemctl set-property <service name> CPUAffinity=<value>
# systemctl set-property <service name> CPUAffinity=<value>Copy to Clipboard Copied! Toggle word wrap Toggle overflow サービスを再起動して変更を適用します。
systemctl restart <service name>
# systemctl restart <service name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
25.11. マネージャー設定によるグローバルなデフォルトの CPU アフィニティーの設定 リンクのコピーリンクがクリップボードにコピーされました!
/etc/systemd/system.conf ファイルの CPUAffinity オプションは、プロセス ID 番号 (PID) 1 と、PID1 からフォークされたすべてのプロセスのアフィニティーマスクを定義します。これにより、各サービスで CPUAffinity を上書きできます。
/etc/systemd/system.conf ファイルを使用して、すべての systemd サービスのデフォルトの CPU アフィニティーマスクを設定するには、次の手順を実行します。
-
/etc/systemd/system.confファイルの [Manager] セクションのCPUAffinity=オプションに CPU 番号を設定します。 編集したファイルを保存し、
systemdサービスをリロードします。systemctl daemon-reload
# systemctl daemon-reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow - サーバーを再起動して、変更を適用します。
25.12. systemd を使用した NUMA ポリシーの設定 リンクのコピーリンクがクリップボードにコピーされました!
Non-Uniform Memory Access (NUMA) は、コンピューターメモリーのサブシステム設計で、この設計ではメモリーのアクセス時間は、プロセッサーからの物理メモリーの場所により異なります。
CPU に近いメモリーは、別の CPU のローカルにあるメモリーや、一連の CPU 間で共有されているメモリーと比べ、レイテンシーが低くなっています (外部メモリー)。
Linux カーネルでは、NUMA ポリシーを使用して、カーネルがプロセス用に物理メモリーを割り当てる場所 (例: NUMA ノード) を制御します。
systemd は、サービスのメモリー割り当てポリシーを制御するためのユニットファイルオプション NUMAPolicy および NUMAMask を提供します。
手順
NUMAPolicy ユニットファイルオプションで NUMA メモリーポリシーを設定するには以下を実行します。
選択したサービスで
NUMAPolicyユニットファイルオプションの値を確認します。systemctl show --property <NUMA policy configuration option> <service name>
$ systemctl show --property <NUMA policy configuration option> <service name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow root として、
NUMAPolicyユニットファイルオプションに必要なポリシータイプを設定します。systemctl set-property <service name> NUMAPolicy=<value>
# systemctl set-property <service name> NUMAPolicy=<value>Copy to Clipboard Copied! Toggle word wrap Toggle overflow サービスを再起動して変更を適用します。
systemctl restart <service name>
# systemctl restart <service name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
[Manager] 設定オプションを使用してグローバルな NUMAPolicy を設定するには、以下を実行します。
-
/etc/systemd/system.confファイルで [Manager] セクションにあるNUMAPolicyオプションを検索します。 - ポリシータイプを編集してファイルを保存します。
systemd設定をリロードします。systemd daemon-reload
# systemd daemon-reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow - サーバーを再起動します。
bind などの厳密な NUMA ポリシーを設定する場合は、CPUAffinity= ユニットファイルオプションも適切に設定されていることを確認してください。
25.13. systemd の NUMA ポリシー設定オプション リンクのコピーリンクがクリップボードにコピーされました!
Systemd で以下のオプションを指定して、NUMA ポリシーを設定します。
NUMAPolicy実行したプロセスの NUMA メモリーポリシーを制御します。次のポリシータイプを使用できます。
- default
- preferred
- bind
- interleave
- local
NUMAMask選択した NUMA ポリシーに関連付けられた NUMA ノードリストを制御します。
次のポリシーには
NUMAMaskオプションを指定する必要がないことに注意してください。- default
- local
優先ポリシーの場合、このリストで指定できるのは単一の NUMA ノードのみです。
25.14. systemd-run コマンドを使用した一時的な cgroup の作成 リンクのコピーリンクがクリップボードにコピーされました!
一時的な cgroups は、実行時にユニット (サービスまたはスコープ) によって消費されるリソースに制限を設定します。
手順
一時的なコントロールグループを作成するには、以下の形式で
systemd-runコマンドを使用します。systemd-run --unit=<name> --slice=<name>.slice <command>
# systemd-run --unit=<name> --slice=<name>.slice <command>Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは、一時的なサービスまたはスコープユニットを作成し、開始し、そのユニットでカスタムコマンドを実行します。
-
--unit=<name>オプションは、ユニットに名前を指定します。--unitが指定されていないと、名前は自動的に生成されます。 -
--slice=<name>.sliceオプションは、サービスまたはスコープユニットを指定のスライスのメンバーにします。<name>.sliceは、既存のスライスの名前 (systemctl -t sliceの出力に表示) に置き換えるか、一意の名前を指定して新規スライスを作成します。デフォルトでは、サービスおよびスコープはsystem.sliceのメンバーとして作成されます。 <command>は、サービスまたはスコープユニットに入力するコマンドに置き換えます。以下のような、サービスまたはスコープが正常に作成され開始したことを確認するメッセージが表示されます。
Running as unit <name>.service
# Running as unit <name>.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
-
オプション: ランタイム情報を収集するため、プロセスが終了した後もユニットを実行したままにします。
systemd-run --unit=<name> --slice=<name>.slice --remain-after-exit <command>
# systemd-run --unit=<name> --slice=<name>.slice --remain-after-exit <command>Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは、一時的なサービスユニットを作成して起動し、そのユニットでカスタムコマンドを実行します。
--remain-after-exitオプションを使用すると、プロセスの終了後もサービスが実行し続けます。
25.15. 一時的なコントロールグループの削除 リンクのコピーリンクがクリップボードにコピーされました!
systemd システムおよびサービスマネージャーを使用して、プロセスのグループのハードウェアリソースへのアクセスを制限して優先順位を付け、制御する必要がなくなった場合に、一時的なコントロールグループ (cgroup) を削除できます。
一時的な cgroups は、サービスまたはスコープユニットに含まれる全プロセスが完了すると、自動的に解放されます。
手順
サービスユニットの全プロセスを停止するには、以下を実行します。
systemctl stop <name>.service
# systemctl stop <name>.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow ユニットプロセスを 1 つ以上終了するには、以下を実行します。
systemctl kill <name>.service --kill-who=PID,… --signal=<signal>
# systemctl kill <name>.service --kill-who=PID,… --signal=<signal>Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは
--kill-whoオプションを使用して、コントロールグループから終了するプロセスを選択します。複数のプロセスを同時に強制終了するには、PID のコンマ区切りのリストを指定します。--signalオプションは、指定されたプロセスに送信する POSIX シグナルのタイプを決定します。デフォルトのシグナルは SIGTERM です。
第26章 コントロールグループについて リンクのコピーリンクがクリップボードにコピーされました!
コントロールグループ (cgroups) カーネル機能を使用すると、アプリケーションのリソース使用状況を制御して、より効率的に使用できます。
cgroups は、以下のタスクで使用できます。
- システムリソース割り当ての制限を設定します。
- 特定のプロセスへのハードウェアリソースの割り当てにおける優先順位を設定する。
- 特定のプロセスをハードウェアリソースの取得から分離する。
26.1. コントロールグループの概要 リンクのコピーリンクがクリップボードにコピーされました!
コントロールグループ の Linux カーネル機能を使用して、プロセスを階層的に順序付けされたグループ (cgroups) に編成できます。階層 (コントロールグループツリー) は、デフォルトで /sys/fs/cgroup/ ディレクトリーにマウントされている cgroups 仮想ファイルシステムに構造を提供して定義します。
systemd サービスマネージャーは、cgroups を使用して、管理するすべてのユニットとサービスを整理します。/sys/fs/cgroup/ ディレクトリーのサブディレクトリーを作成および削除することで、cgroups の階層を手動で管理できます。
続いて、カーネルのリソースコントローラーは、cgroups 内のプロセスのシステムリソースを制限、優先順位付け、または割り当てることで、これらのプロセスの動作を変更します。これらのリソースには以下が含まれます。
- CPU 時間
- メモリー
- ネットワーク帯域幅
- これらのリソースの組み合わせ
cgroups の主なユースケースは、システムプロセスを集約し、アプリケーションとユーザー間でハードウェアリソースを分割することです。これにより、環境の効率、安定性、およびセキュリティーを強化できます。
- コントロールグループ 1
コントロールグループバージョン 1 (
cgroups-v1) はリソースごとのコントローラー階層を提供します。CPU、メモリー、I/O などのリソースごとに、独自のコントロールグループ階層があります。異なるコントロールグループ階層を組み合わせることで、1 つのコントローラーが別のコントローラーと連携してそれぞれのリソースを管理できるようになります。ただし、2 つのコントローラーが異なるプロセス階層に属している場合、連携が制限されます。cgroups-v1コントローラーは長期間にわたって開発されたため、コントロールファイルの動作と命名に一貫性がありません。- コントロールグループ 2
Control groups version 2 (
cgroups-v2) は、すべてのリソースコントローラーがマウントされる単一のコントロールグループ階層を提供します。コントロールファイルの動作と命名は、さまざまなコントローラーにおいて一貫性があります。
cgroups-v1 および cgroups-v2 の詳細は、kernel-doc RPM パッケージをインストールします。インストール後、ドキュメントはローカルシステムの /usr/share/doc/kernel-doc- <version> /Documentation ディレクトリーにあります。cgroups-v1 ドキュメントファイルは Documentation/admin-guide/cgroup-v1/ ディレクトリーにあり ます。このディレクトリーには、コントローラーごとに異なる複数のファイルがあります。cgroups-v2 ドキュメントは、Documentation/admin-guide/cgroup-v2.rst ファイルにあります。
RHEL 9 では、デフォルトで cgroups-v2 をマウントして使用します。
26.2. カーネルリソースコントローラーの概要 リンクのコピーリンクがクリップボードにコピーされました!
カーネルリソースコントローラーは、コントロールグループの機能を有効化します。RHEL 9 は、コントロールグループバージョン 1 (cgroups-v1) および コントロールグループバージョン 2 (cgroups-v2) のさまざまなコントローラーをサポートします。
コントロールグループサブシステムとも呼ばれるリソースコントローラーは、1 つのリソース (CPU 時間、メモリー、ネットワーク帯域幅、ディスク I/O など) を表すカーネルサブシステムです。Linux カーネルは、systemd サービスマネージャーによって自動的にマウントされるリソースコントローラーの範囲を提供します。現在マウントされているリソースコントローラーの一覧は、/proc/cgroups ファイルで確認できます。
cgroups-v1 で利用可能なコントローラー
blkio- ブロックデバイスへの入出力アクセスを制限します。
cpu-
コントロールグループのタスク用の Completely Fair Scheduler (CFS) パラメーターを調整します。
cpuコントローラーは、同じマウント上のcpuacctコントローラーとともにマウントされます。 cpuacct-
コントロールグループ内のタスクが使用する CPU リソースに関する自動レポートを作成します。
cpuacctコントローラーは、同じマウント上のcpuコントローラーとともにマウントされます。 cpuset- コントロールグループタスクが、指定された CPU のサブセットでのみ実行されるように制限し、指定されたメモリーノードでのみメモリーを使用するようにタスクに指示します。
devices- コントロールグループ内のタスクのデバイスへのアクセスを制御します。
freezer- コントロールグループ内のタスクを一時停止または再開します。
memory- コントロールグループ内のタスクによるメモリー使用の制限を設定し、それらのタスクが使用したメモリーリソースに関する自動レポートを生成します。
net_cls-
特定のコントロールグループタスクから発信されたパケットを識別するために Linux トラフィックコントローラー (
tcコマンド) を有効化するクラス識別子 (classid) でネットワークパケットをタグ付けします。net_clsのサブシステムnet_filter(iptables) でも、このタグを使用して、そのようなパケットに対するアクションを実行することができます。net_filterは、ファイアウォール識別子 (fwid) でネットワークソケットをタグ付けします。これにより、Linux ファイアウォールは、(iptablesコマンドを使用して) 特定のコントロールグループタスクから発信されたパケットを識別できるようになります。 net_prio- ネットワークトラフィックの優先度を設定します。
pids- コントロールグループ内の複数のプロセスとその子プロセスに制限を設定します。
perf_event-
perfパフォーマンス監視およびレポートユーティリティーにより、監視するタスクをグループ化します。 rdma- コントロールグループ内の Remote Direct Memory Access/InfiniBand 固有リソースに制限を設定します。
hugetlb- コントロールグループ内のタスクによる大容量の仮想メモリーページの使用を制限します。
cgroups-v2 で利用可能なコントローラー
io- ブロックデバイスへの入出力アクセスを制限します。
memory- コントロールグループ内のタスクによるメモリー使用の制限を設定し、それらのタスクが使用したメモリーリソースに関する自動レポートを生成します。
pids- コントロールグループ内の複数のプロセスとその子プロセスに制限を設定します。
rdma- コントロールグループ内の Remote Direct Memory Access/InfiniBand 固有リソースに制限を設定します。
cpu- コントロールグループのタスクの Completely Fair Scheduler (CFS) パラメーターを調整し、コントロールグループのタスクで使用される CPU リソースに関する自動レポートを作成します。
cpuset-
コントロールグループタスクが、指定された CPU のサブセットでのみ実行されるように制限し、指定されたメモリーノードでのみメモリーを使用するようにタスクに指示します。新しいパーティション機能により、コア機能 (
cpus{,.effective},mems{,.effective}) のみがサポートされます。 perf_event-
perfパフォーマンス監視およびレポートユーティリティーにより、監視するタスクをグループ化します。perf_eventは v2 階層で自動的に有効になります。
リソースコントローラーは、cgroups-v1 階層または cgroups-v 2 階層のいずれかで使用できますが、両方を同時に使用することはできません。
26.3. 名前空間の概要 リンクのコピーリンクがクリップボードにコピーされました!
名前空間は、ソフトウェアオブジェクトを整理および識別するための個別の空間を作成するものです。これにより、オブジェクトが相互に影響を及ぼすことがなくなります。その結果、各ソフトウェアオブジェクトが同じシステムを共有しているにもかかわらず、独自のリソースセット (マウントポイント、ネットワークデバイス、ホスト名など) が各オブジェクトに格納されます。
名前空間を使用する最も一般的なテクノロジーの 1 つとしてコンテナーが挙げられます。
特定のグローバルリソースへの変更は、その名前空間のプロセスにのみ表示され、残りのシステムまたは他の名前空間には影響しません。
プロセスがどの名前空間に所属するかを確認するには、/proc/<PID>/ns/ ディレクトリーのシンボリックリンクを確認します。
| 名前空間 | 分離 |
|---|---|
| Mount | マウントポイント |
| UTS | ホスト名および NIS ドメイン名 |
| IPC | System V IPC、POSIX メッセージキュー |
| PID | プロセス ID |
| Network | ネットワークデバイス、スタック、ポートなど。 |
| User | ユーザーおよびグループ ID |
| Control groups | コントロールグループの root ディレクトリー |
第27章 cgroupfs を使用して cgroup を手動で管理する リンクのコピーリンクがクリップボードにコピーされました!
cgroupfs 仮想ファイルシステムにディレクトリーを作成することにより、システム上の cgroup 階層を管理できます。ファイルシステムはデフォルトで /sys/fs/cgroup/ ディレクトリーにマウントされ、専用の制御ファイルで必要な設定を指定できます。
一般に、Red Hat では、システムリソースの使用を制御するために systemd を使用することを推奨します。特別な場合にのみ、cgroups 仮想ファイルシステムを手動で設定する必要があります。たとえば、cgroup-v2 階層に同等のものがない cgroup-v1 コントローラーを使用する必要がある場合です。
27.1. cgroups-v2 ファイルシステムでの cgroup の作成とコントローラーの有効化 リンクのコピーリンクがクリップボードにコピーされました!
ディレクトリーを作成または削除したり、cgroups 仮想ファイルシステム内のファイルに書き込んだりすることで、control groups (cgroups) を管理できます。ファイルシステムは、デフォルトで /sys/fs/cgroup/ ディレクトリーにマウントされます。cgroups コントローラーの設定を使用するには、子 cgroups に対して目的のコントローラーを有効にする必要もあります。ルート cgroup は、デフォルトで、その子 cgroups の memory および pids コントローラーを有効にしました。したがって、Red Hat は、/sys/fs/cgroup/ ルート cgroup 内に少なくとも 2 つのレベルの子 cgroups を作成することを推奨します。このようにして、オプションで子 cgroups から memory と pids コントローラーを削除し、cgroup ファイルの組織の明確さを維持します。
前提条件
- root 権限がある。
手順
/sys/fs/cgroup/Example/ディレクトリーを作成します。mkdir /sys/fs/cgroup/Example/
# mkdir /sys/fs/cgroup/Example/Copy to Clipboard Copied! Toggle word wrap Toggle overflow /sys/fs/cgroup/Example/ディレクトリーはサブグループを定義します。/sys/fs/cgroup/Example/ディレクトリーを作成すると、一部のcgroups-v2インターフェイスファイルがディレクトリーに自動的に作成されます。/sys/fs/cgroup/Example/ディレクトリーには、memoryおよびpidsコントローラー用のコントローラー固有のファイルも含まれます。オプション: 新しく作成された子コントロールグループを確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例は、
cgroup.procsやcgroup.controllersなどの一般的なcgroup制御インターフェイスファイルを示しています。これらのファイルは、有効なコントローラーに関係なく、すべてのコントロールグループに共通です。memory.highおよびpids.maxなどのファイルは、memoryおよびpidsコントローラーに関連し、ルートコントロールグループ (/sys/fs/cgroup/) にあり、systemdによってデフォルトで有効になります。デフォルトでは、新しく作成された子グループは、親
cgroupからすべての設定を継承します。この場合、ルートcgroupからの制限はありません。目的のコントローラーが
/sys/fs/cgroup/cgroup.controllersファイルで使用可能であることを確認します。cat /sys/fs/cgroup/cgroup.controllers cpuset cpu io memory hugetlb pids rdma
# cat /sys/fs/cgroup/cgroup.controllers cpuset cpu io memory hugetlb pids rdmaCopy to Clipboard Copied! Toggle word wrap Toggle overflow 目的のコントローラーを有効にします。この例では、
cpuおよびcpusetコントローラーです。echo "+cpu" >> /sys/fs/cgroup/cgroup.subtree_control echo "+cpuset" >> /sys/fs/cgroup/cgroup.subtree_control
# echo "+cpu" >> /sys/fs/cgroup/cgroup.subtree_control # echo "+cpuset" >> /sys/fs/cgroup/cgroup.subtree_controlCopy to Clipboard Copied! Toggle word wrap Toggle overflow これらのコマンドにより、
/sys/fs/cgroup/ルートコントロールグループ直下のサブグループに対してcpuおよびcpusetコントローラーが有効になります。新しく作成されたExampleコントロールグループを含みます。サブグループ で指定した各プロセスに対して、基準に基づいてコントロールチェックを適用できます。ユーザーは任意のレベルの
cgroup.subtree_controlファイルの内容を読み取り、直下のサブグループで有効にするコントローラーを把握することができます。注記デフォルトでは、ルートコントロールグループの
/sys/fs/cgroup/cgroup.subtree_controlファイルにはmemoryとpidsコントローラーが含まれます。Exampleコントロールグループの子cgroupsに必要なコントローラーを有効にします。echo "+cpu +cpuset" >> /sys/fs/cgroup/Example/cgroup.subtree_control
# echo "+cpu +cpuset" >> /sys/fs/cgroup/Example/cgroup.subtree_controlCopy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドにより、直下のサブコントロールグループに、(
memoryまたはpidsコントローラーではなく) CPU 時間の配分の調整に関係するコントローラー だけ が設定されるようになります。/sys/fs/cgroup/Example/tasks/ディレクトリーを作成します。mkdir /sys/fs/cgroup/Example/tasks/
# mkdir /sys/fs/cgroup/Example/tasks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow /sys/fs/cgroup/Example/tasks/ディレクトリーは、cpuおよびcpusetコントローラーにのみ関連するファイルを持つサブグループを定義します。これで、このコントロールグループにプロセスを割り当て、プロセスにcpuおよびcpusetコントローラーオプションを利用できます。オプション: 子コントロールグループを確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
cpu コントローラーは、該当のサブコントロールグループに、同じ CPU の CPU 時間を取り合うプロセスが 2 つ以上ある場合にのみ、有効になります。
検証
オプション: 目的のコントローラーのみがアクティブな状態で新しい
cgroupを作成したことを確認します。cat /sys/fs/cgroup/Example/tasks/cgroup.controllers cpuset cpu
# cat /sys/fs/cgroup/Example/tasks/cgroup.controllers cpuset cpuCopy to Clipboard Copied! Toggle word wrap Toggle overflow
27.2. CPU の重みの調整によるアプリケーションへの CPU 時間配分の制御 リンクのコピーリンクがクリップボードにコピーされました!
特定の cgroup ツリーの下にあるアプリケーションへの CPU 時間の配分を調整するには、cpu コントローラーの関連ファイルに値を割り当てる必要があります。
前提条件
- root 権限がある。
- CPU 時間の配分を制御するアプリケーションがある。
次の例のように、
/sys/fs/cgroup/root control group 内に、child control groups グループの 2 階層を作成しました。Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
cgroups-v2 ファイルシステムでの cgroup の作成とコントローラーの有効化 で説明したのと同様に、親コントロールグループと子コントロールグループで
cpuコントローラーを有効にしました。
手順
コントロールグループ内のリソース制限を実現するために、希望する CPU の重みを設定します。
echo "150" > /sys/fs/cgroup/Example/g1/cpu.weight echo "100" > /sys/fs/cgroup/Example/g2/cpu.weight echo "50" > /sys/fs/cgroup/Example/g3/cpu.weight
# echo "150" > /sys/fs/cgroup/Example/g1/cpu.weight # echo "100" > /sys/fs/cgroup/Example/g2/cpu.weight # echo "50" > /sys/fs/cgroup/Example/g3/cpu.weightCopy to Clipboard Copied! Toggle word wrap Toggle overflow アプリケーションの PID を
g1、g2、およびg3サブグループに追加します。echo "33373" > /sys/fs/cgroup/Example/g1/cgroup.procs echo "33374" > /sys/fs/cgroup/Example/g2/cgroup.procs echo "33377" > /sys/fs/cgroup/Example/g3/cgroup.procs
# echo "33373" > /sys/fs/cgroup/Example/g1/cgroup.procs # echo "33374" > /sys/fs/cgroup/Example/g2/cgroup.procs # echo "33377" > /sys/fs/cgroup/Example/g3/cgroup.procsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 上記のコマンドの例は、目的のアプリケーションが
Example/g*/子 cgroup のメンバーになり、それらの cgroup の設定に従って CPU 時間を分散させることを保証します。実行中のプロセスを持つサブ cgroups(
g1、g2、g3) の重みは、親 cgroup のレベルで合算されます (例)。その後、CPU リソースはそれぞれの重みに基づいて相対的に配分されます。その結果、すべてのプロセスが同時に実行されると、カーネルはそれぞれの cgroup の
cpu.weightファイルに基づいて、それぞれのプロセスに比例配分の CPU 時間を割り当てます。Expand サブ cgroup cpu.weightファイルCPU 時間の割り当て g1
150
約 50% (150/300)
g2
100
約 33% (100/300)
g3
50
約 16% (50/300)
cpu.weightコントローラーファイルの値はパーセンテージではありません。1 つのプロセスが実行を停止し、cgroup
g2が実行中のプロセスのない状態になると、計算では cgroupg2が省略され、cgroupsg1およびg3の重みだけが考慮されます。Expand サブ cgroup cpu.weightファイルCPU 時間の割り当て g1
150
約 75% (150/200)
g3
50
約 25% (50/200)
重要子 cgroup に複数の実行中のプロセスがある場合、cgroup に割り当てられた CPU 時間が、そのメンバープロセス間で均等に分配されます。
検証
アプリケーションが指定のコントロールグループで実行されていることを確認します。
cat /proc/33373/cgroup /proc/33374/cgroup /proc/33377/cgroup 0::/Example/g1 0::/Example/g2 0::/Example/g3
# cat /proc/33373/cgroup /proc/33374/cgroup /proc/33377/cgroup 0::/Example/g1 0::/Example/g2 0::/Example/g3Copy to Clipboard Copied! Toggle word wrap Toggle overflow コマンド出力は、
Example/g*/サブ cgroups で実行される指定されたアプリケーションのプロセスを示しています。スロットリングされたアプリケーションの現在の CPU 使用率を確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記わかりやすくするために、すべてのプロセスを単一の CPU 上で実行しています。CPU の重みは、複数の CPU で使用される場合にも、同じ原則を適用します。
PID 33373、PID 33374、およびPID 33377の CPU リソースが、それぞれの子 cgroups に割り当てた 150、100、および 50 の重みに基づいて割り当てられていることに注意してください。重みは、各アプリケーションの CPU 時間の約 50%、33%、および 16% の配分に対応します。
27.3. cgroups-v1 のマウント リンクのコピーリンクがクリップボードにコピーされました!
RHEL 9 は、システムの起動プロセス中に、デフォルトで cgroup-v2 仮想ファイルシステムをマウントします。cgroup-v1 機能を使用してアプリケーションのリソースを制限するには、システムを手動で設定します。
cgroup-v1 と cgroup-v2 の両方がカーネルで完全に有効になっている。カーネルから見た場合、デフォルトのコントロールグループバージョンはありません。また、システムの起動時にマウントするかどうかは、systemd により決定します。
前提条件
- root 権限がある。
手順
systemdシステムおよびサービスマネージャーによるシステムブート中に、デフォルトでcgroups-v1をマウントするようにシステムを設定します。grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="systemd.unified_cgroup_hierarchy=0 systemd.legacy_systemd_cgroup_controller"
# grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="systemd.unified_cgroup_hierarchy=0 systemd.legacy_systemd_cgroup_controller"Copy to Clipboard Copied! Toggle word wrap Toggle overflow これにより、必要なカーネルコマンドラインパラメーターが現在のブートエントリーに追加されます。
すべてのカーネルブートエントリーに同じパラメーターを追加するには:
grubby --update-kernel=ALL --args="systemd.unified_cgroup_hierarchy=0 systemd.legacy_systemd_cgroup_controller"
# grubby --update-kernel=ALL --args="systemd.unified_cgroup_hierarchy=0 systemd.legacy_systemd_cgroup_controller"Copy to Clipboard Copied! Toggle word wrap Toggle overflow - システムを再起動して、変更を有効にします。
検証
cgroups-v1ファイルシステムがマウントされたことを確認します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow さまざまな
cgroup-v1コントローラーに対応するcgroups-v1ファイルシステムが、/sys/fs/cgroup/ディレクトリーに正常にマウントされました。/sys/fs/cgroup/ディレクトリーの内容を確認します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow /sys/fs/cgroup/ディレクトリーは、デフォルトでは root control group とも呼ばれ、cpusetなどのコントローラー固有のディレクトリーが含まれています。さらに、systemdに関連するディレクトリーがいくつかあります。
27.4. cgroups-v1 を使用したアプリケーションへの CPU 制限の設定 リンクのコピーリンクがクリップボードにコピーされました!
コントロールグループバージョン 1 (cgroups-v1) を使用してアプリケーションに対する CPU 制限を設定するには、/sys/fs/ 仮想ファイルシステムを使用します。
前提条件
- root 権限がある。
- CPU 消費制限の対象とするアプリケーションがシステムにインストールされている。
systemdシステムおよびサービスマネージャーによるシステムの起動時に、デフォルトでcgroups-v1をマウントするようにシステムを設定している。grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="systemd.unified_cgroup_hierarchy=0 systemd.legacy_systemd_cgroup_controller"
# grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="systemd.unified_cgroup_hierarchy=0 systemd.legacy_systemd_cgroup_controller"Copy to Clipboard Copied! Toggle word wrap Toggle overflow これにより、必要なカーネルコマンドラインパラメーターが現在のブートエントリーに追加されます。
手順
CPU 消費を制限するアプリケーションのプロセス ID (PID) を特定します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow PID 6955を持つsha1sumサンプルアプリケーションが、大量の CPU リソースを消費しています。cpuリソースコントローラーディレクトリーにサブディレクトリーを作成します。mkdir /sys/fs/cgroup/cpu/Example/
# mkdir /sys/fs/cgroup/cpu/Example/Copy to Clipboard Copied! Toggle word wrap Toggle overflow このディレクトリーはコントロールグループを表します。ここに特定のプロセスを配置して、そのプロセスに特定の CPU 制限を適用できます。同時に、いくつかの
cgroups-v1インターフェイスファイルとcpuコントローラー固有のファイルがディレクトリーに作成されます。オプション: 新しく作成されたコントロールグループを確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cpuacct.usage、cpu.cfs._period_usなどのファイルは、Exampleコントロールグループ内のプロセスに設定できる特定の設定や制限を表しています。ファイル名の先頭に、それが属するコントロールグループコントローラーの名前が付いていることに注意してください。デフォルトでは、新しく作成されたコントロールグループは、システムの CPU リソース全体へのアクセスを制限なしで継承します。
コントロールグループの CPU 制限を設定します。
echo "1000000" > /sys/fs/cgroup/cpu/Example/cpu.cfs_period_us echo "200000" > /sys/fs/cgroup/cpu/Example/cpu.cfs_quota_us
# echo "1000000" > /sys/fs/cgroup/cpu/Example/cpu.cfs_period_us # echo "200000" > /sys/fs/cgroup/cpu/Example/cpu.cfs_quota_usCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
cpu.cfs_period_usファイルは、コントロールグループの CPU リソースへのアクセスを再割り当てする必要がある頻度を表します。期間はマイクロ秒 (µs、"us") 単位です。上限は 1,000,000 マイクロ秒、下限は 1,000 マイクロ秒です。 cpu.cfs_quota_usファイルは、コントロールグループ内のすべてのプロセスが 1 つの期間 (cpu.cfs_period_usで定義) 中にまとめて実行できる合計時間をマイクロ秒単位で表します。コントロールグループ内のプロセスが 1 つの期間中にクォータで指定された時間をすべて使い果たすと、そのプロセスは残り期間にわたってスロットリングされ、次の期間まで実行できなくなります。下限は 1000 マイクロ秒です。上記のコマンド例は、CPU 時間制限を設定して、
Exampleコントロールグループでまとめられているすべてのプロセスは、1 秒ごと (cpu.cfs_period_usに定義されている) に、0.2 秒間だけ (cpu.cfs_quota_usに定義されている) 実行できるようにしています。
-
オプション: 制限を確認します。
cat /sys/fs/cgroup/cpu/Example/cpu.cfs_period_us /sys/fs/cgroup/cpu/Example/cpu.cfs_quota_us 1000000 200000
# cat /sys/fs/cgroup/cpu/Example/cpu.cfs_period_us /sys/fs/cgroup/cpu/Example/cpu.cfs_quota_us 1000000 200000Copy to Clipboard Copied! Toggle word wrap Toggle overflow アプリケーションの PID を
Exampleコントロールグループに追加します。echo "6955" > /sys/fs/cgroup/cpu/Example/cgroup.procs
# echo "6955" > /sys/fs/cgroup/cpu/Example/cgroup.procsCopy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドによって、特定のアプリケーションが
Exampleコントロールグループのメンバーとなり、Exampleコントロールグループに設定された CPU 制限を超えないようになります。PID はシステム内の既存のプロセスを表す必要があります。このPID 6955は、プロセスsha1sum /dev/zero &に割り当てられており、cpuコントローラーの使用例を示すために使用されています。
検証
アプリケーションが指定のコントロールグループで実行されていることを確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow アプリケーションのプロセスは、アプリケーションのプロセスに CPU 制限を適用する
Exampleコントロールグループで実行されます。スロットルしたアプリケーションの現在の CPU 使用率を特定します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow PID 6955の CPU 消費が 99% から 20% に減少していることに注意してください。
cpu.cfs_period_us および cpu.cfs_quota_us に対応する cgroups-v2 は、cpu.max ファイルです。cpu.max ファイルは、cpu コントローラーから入手できます。
第28章 BPF Compiler Collection を使用したシステムパフォーマンスの分析 リンクのコピーリンクがクリップボードにコピーされました!
BPF Compiler Collection (BCC) は、Berkeley Packet Filter (BPF) の機能を組み合わせてシステムパフォーマンスを分析します。BPF を使用すると、カーネル内でカスタムプログラムを安全に実行して、パフォーマンス監視、トレース、およびデバッグ用のシステムイベントとデータにアクセスできます。BCC は、ユーザーがシステムから重要な詳細情報を抽出するための BPF プログラムの開発とデプロイを、ツールとライブラリーを使用して簡素化します。
28.1. bcc-tools パッケージのインストール リンクのコピーリンクがクリップボードにコピーされました!
bcc-tools パッケージをインストールします。これにより、依存関係として BPF Compiler Collection (BCC) ライブラリーもインストールされます。
手順
bcc-toolsをインストールします。dnf install bcc-tools
# dnf install bcc-toolsCopy to Clipboard Copied! Toggle word wrap Toggle overflow BCC ツールは、
/usr/share/bcc/tools/ディレクトリーにインストールされます。
検証
インストールされたツールを検査します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow リスト内の
docディレクトリーには、各ツールのドキュメントがあります。
28.2. bcc-tools でパフォーマンスの分析 リンクのコピーリンクがクリップボードにコピーされました!
BPF Compiler Collection (BCC) ライブラリーから事前に作成された特定のプログラムを使用して、システムパフォーマンスをイベントごとに効率的かつセキュアに分析します。BCC ライブラリーで事前作成されたプログラムセットは、追加プログラム作成の例として使用できます。
前提条件
- bcc-tools パッケージがインストールされている
- root 権限がある。
手順
execsnoopを使用してシステムプロセスを調べる-
1 つのターミナルで
execsnoopプログラムを実行します。
/usr/share/bcc/tools/execsnoop
# /usr/share/bcc/tools/execsnoopCopy to Clipboard Copied! Toggle word wrap Toggle overflow lsコマンドの短期的なプロセスを作成するために、別のターミナルで次のように入力します。ls /usr/share/bcc/tools/doc/
$ ls /usr/share/bcc/tools/doc/Copy to Clipboard Copied! Toggle word wrap Toggle overflow execsnoopを実行している端末に、次のような出力が表示されます。PCOMM PID PPID RET ARGS ls 8382 8287 0 /usr/bin/ls --color=auto /usr/share/bcc/tools/doc/ ...
PCOMM PID PPID RET ARGS ls 8382 8287 0 /usr/bin/ls --color=auto /usr/share/bcc/tools/doc/ ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow execsnoopプログラムは、システムリソースを消費する新しいプロセスごとに 1 つの行を出力します。また、lsなどの非常に短期間に実行されるプログラムのプロセスを検出します。なお、ほとんどの監視ツールはそれらを登録しません。execsnoop出力には以下のフィールドが表示されます。
-
1 つのターミナルで
- PCOMM
-
親プロセス名。(
ls) - PID
-
プロセス ID。(
8382) - PPID
-
親プロセス ID。(
8287) - RET
-
exec()システムコールの戻り値 (0)。プログラムコードを新規プロセスに読み込みます。 - ARGS
- 引数を使用して起動したプログラムの場所。
execsnoop の詳細、例、オプションについては、/usr/share/bcc/tools/doc/execsnoop_example.txt ファイルを参照してください。
exec() の詳細は、exec(3) man ページを参照してください。
opensnoopを使用して、コマンドにより開かれるファイルを追跡する-
1 つのターミナルで
opensnoopプログラムを実行し、unameコマンドのプロセスによってのみ開かれたファイルを出力します。
/usr/share/bcc/tools/opensnoop -n uname
# /usr/share/bcc/tools/opensnoop -n unameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 別のターミナルで、特定のファイルを開くコマンドを入力します。
uname
$ unameCopy to Clipboard Copied! Toggle word wrap Toggle overflow opensnoopを実行している端末は、以下のような出力を表示します。PID COMM FD ERR PATH 8596 uname 3 0 /etc/ld.so.cache 8596 uname 3 0 /lib64/libc.so.6 8596 uname 3 0 /usr/lib/locale/locale-archive ...
PID COMM FD ERR PATH 8596 uname 3 0 /etc/ld.so.cache 8596 uname 3 0 /lib64/libc.so.6 8596 uname 3 0 /usr/lib/locale/locale-archive ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow opensnoopプログラムは、システム全体でopen()システム呼び出しを監視し、unameが開こうとしたファイルごとに出力行を出力します。opensnoop出力には、以下のフィールドが表示されます。- PID
-
プロセス ID。(
8596) - COMM
-
プロセス名。(
uname) - FD
-
ファイルの記述子。開いたファイルを参照するために
open()が返す値です。(3) - ERR
- すべてのエラー。
- PATH
-
open()で開こうとしたファイルの場所。
コマンドが、存在しないファイルを読み込もうとすると、
FDコラムは-1を返し、ERRコラムは関連するエラーに対応する値を出力します。その結果、opensnoopは、適切に動作しないアプリケーションの特定に役立ちます。
-
1 つのターミナルで
opensnoop の詳細、例、オプションについては、/usr/share/bcc/tools/doc/opensnoop_example.txt ファイルを参照してください。
open() の詳細は、open(2) man ページを参照してください。
biotopを使用して、ディスク上で I/O 操作を実行している上位のプロセスを監視する-
1 つのターミナルで
biotopプログラムを引数30を指定して実行し、30 秒間のサマリーを生成します。
/usr/share/bcc/tools/biotop 30
# /usr/share/bcc/tools/biotop 30Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記引数を指定しないと、デフォルトでは 1 秒ごとに出力画面が更新されます。
別のターミナルで、次のコマンドを入力して、ローカルハードディスクデバイスからコンテンツを読み取り、出力を
/dev/zeroファイルに書き込みます。dd if=/dev/vda of=/dev/zero
# dd if=/dev/vda of=/dev/zeroCopy to Clipboard Copied! Toggle word wrap Toggle overflow この手順では、
biotopを示す特定の I/O トラフィックを生成します。biotopを実行している端末は、以下のような出力を表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow biotop出力には、以下のフィールドが表示されます。
-
1 つのターミナルで
- PID
-
プロセス ID。(
9568) - COMM
-
プロセス名。(
dd) - DISK
-
読み取り操作を実行するディスク。(
vda) - I/O
- 実行された読み取り操作の数。(16294)
- Kbytes
- 読み取り操作によって読み取られたキロバイト数。(14,440,636)
- AVGms
- 読み取り操作の平均 I/O 時間。(3.69)
biotop の詳細、例、およびオプションについては、/usr/share/bcc/tools/doc/biotop_example.txt ファイルを参照してください。
dd の詳細は、dd(1) man ページを参照してください。
xfsslower を使用して、予想以上に遅いファイルシステム操作を明らかにする
xfsslower は、XFS ファイルシステムによる読み取り操作、書き込み操作、開く操作、または同期操作 (fsync) の実行に費やされた時間を測定します。1 引数を指定すると、1 ms よりも遅い操作のみが表示されます。
1 つのターミナルで
xfsslowerプログラムを実行します。/usr/share/bcc/tools/xfsslower 1
# /usr/share/bcc/tools/xfsslower 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記引数を指定しないと、
xfsslowerはデフォルトで 10 ms よりも低速な操作を表示します。別のターミナルで、
vimエディターでテキストファイルを作成するコマンドを入力して、XFS ファイルシステムとのやり取りを開始します。vim text
$ vim textCopy to Clipboard Copied! Toggle word wrap Toggle overflow 前の手順でファイルを保存すると、
xfsslowerを実行しているターミナルに次のような内容が表示されます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 各行は、特定のしきい値よりも時間がかかったファイルシステム内の操作を表しています。
xfsslowerは、操作に想定以上に時間がかかるなど、ファイルシステムで発生し得る問題を検出します。xfsslower出力には、以下のフィールドが表示されます。- COMM
-
プロセス名。(
b’bash') - T
操作の種類。(
R)- Read
- Write
- Sync
- OFF_KB
- ファイルオフセット (KB)。(0)
- FILENAME
- 読み取り、書き込み、または同期されるファイル。
xfsslower の詳細、例、およびオプションについては、/usr/share/bcc/tools/doc/xfsslower_example.txt ファイルを参照してください。
fsync の詳細は、fsync(2) man ページを参照してください。