カーネルランタイムパラメータを永続的および非永続的に変更する方法

第13部では、このLFCS(Linux Foundation Certified Sysadmin)シリーズの一環として、システムの動作を変更するためにGRUBを使用して、カーネルにオプションを渡す方法を説明しました。

同様に、実行中のLinuxシステムでコマンドラインを使用して、一時的な変更として特定のランタイムカーネルパラメータを変更するか、構成ファイルを編集して永続的に変更することができます。

したがって、システムの動作が変更される必要がある場合に、必要に応じてカーネルパラメータを簡単にオンザフライで有効または無効にできます。

/procファイルシステムの紹介

最新のファイルシステム階層標準の仕様によると、/procはプロセスやシステム情報、およびその他のカーネルやメモリ情報を処理するためのデフォルトメソッドを表します。特に、/proc/sysにはデバイス、ドライバ、および一部のカーネル機能に関するすべての情報が含まれています。

/proc/sysの実際の内部構造は使用されているカーネルに大きく依存しますが、おそらく以下のディレクトリが含まれており、それぞれが各パラメータカテゴリの値を維持する他のサブディレクトリが含まれています。

  1. dev: マシンに接続された特定のデバイスのパラメータ。
  2. fs: ファイルシステムの構成(クォータやinodeなど)。
  3. kernel: カーネル固有の構成。
  4. net: ネットワークの構成。
  5. vm: カーネルの仮想メモリの使用。

カーネルのランタイムパラメータを変更するには、sysctlコマンドを使用します。変更できるパラメータの正確な数は、次のコマンドで表示できます:

# sysctl -a | wc -l

カーネルパラメータの完全なリストを表示したい場合は、次のようにします:

# sysctl -a 

上記のコマンドの出力は非常に多くの行で構成されているため、パイプラインに続いてlessを使用して注意深く検査できます:

# sysctl -a | less

最初の数行を見てみましょう。各行の最初の文字が/proc/sys内のディレクトリの名前と一致することに注意してください:

Understand Linux /proc Filesystem

例えば、ハイライトされた行:

dev.cdrom.info = drive name:        	sr0

は、sr0が光学ドライブのエイリアスであることを示しています。言い換えると、それがカーネルがそのドライブを「見る」方法であり、その名前を参照するためにその名前を使用します。

次のセクションでは、Linuxで他の「より重要な」カーネルランタイムパラメータを変更する方法について説明します。

Linuxカーネルランタイムパラメータの変更方法

これまで説明したことに基づいて、パラメータの名前が/proc/sys内のディレクトリ構造と一致することがわかりやすいです。

例えば:

dev.cdrom.autoclose → /proc/sys/dev/cdrom/autoclose
net.ipv4.ip_forward → /proc/sys/net/ipv4/ip_forward

Linuxカーネルパラメータの確認

それに、特定のLinuxカーネルパラメータの値を表示するには、パラメータの名前に続いてsysctlを使用するか、関連するファイルを読み取ることができます。

# sysctl dev.cdrom.autoclose
# cat /proc/sys/dev/cdrom/autoclose
# sysctl net.ipv4.ip_forward
# cat /proc/sys/net/ipv4/ip_forward
Check Linux Kernel Parameters

Linuxカーネルパラメータの設定または変更

カーネルパラメータの値を設定するには、sysctlを使用することもできますが、-wオプションを使用し、パラメータの名前、等号、および必要な値を続けます。

別の方法は、パラメータに関連付けられたファイルを上書きするためにechoを使用することです。言い換えれば、次の方法は、システム内でパケット転送機能を無効にするための等価です(ところで、ボックスがネットワーク間のトラフィックを通過させるべきでない場合、これはデフォルト値であるべきです)。

# echo 0 > /proc/sys/net/ipv4/ip_forward
# sysctl -w net.ipv4.ip_forward=0

sysctlを使用して設定されたカーネルパラメータは、現在のセッション中のみ適用され、システムが再起動されると消えますことに注意することが重要です。

これらの値を永続的に設定するには、/etc/sysctl.confを編集して必要な値を設定します。たとえば、/etc/sysctl.confでパケット転送を無効にするには、ファイルにこの行が表示されていることを確認してください。

net.ipv4.ip_forward=0

次に、実行中の構成に変更を適用するために次のコマンドを実行します。

# sysctl -p

重要なカーネルランタイムパラメータの他の例は次のとおりです:

fs.file-maxは、カーネルがシステムに割り当てるファイルハンドルの最大数を指定します。システムの意図された使用に応じて(Web /データベース/ファイルサーバーなど)、この値を変更してシステムのニーズに合わせることができます。

ファイルが多すぎます

無実の過ちにより最後の状況に陥った場合は、第13部 – Linux Grubブートローダーの設定とトラブルシューティングで説明されているように、シングルユーザーモードで起動し、前述の指示に従って/etc/sysctl.confを編集してください。ユーザーごとに同じ制限を設定するには、このシリーズの第14部 – Linuxプロセス制限使用の監視と設定を参照してください。

kernel.sysrqは、キーボードのSysRqキー(プリントスクリーンキーとしても知られています)を有効にするために使用され、システムが応答しなくなったときに特定のキーコンビネーションを使用して緊急アクションを起動できるようにします。

デフォルト値(16)は、システムがAlt+SysRq+keyの組み合わせを認識し、sysrq.cドキュメントに記載されているアクションを実行します(ここでkeyはb-zの範囲内の1文字です)。たとえば、Alt+SysRq+bはシステムを強制的に再起動します(サーバーが応答しない場合の最終手段として使用してください)。

警告! 仮想マシンでこのキーの組み合わせを押すことはしないでください。ホストシステムが再起動される可能性があります!

1に設定された場合、net.ipv4.icmp_echo_ignore_allはpingリクエストを無視し、カーネルレベルでドロップします。以下の画像に示されているように、このカーネルパラメータを設定した後、pingリクエストが失われることに注意してください:

Block Ping Requests in Linux

A better and easier way to set individual runtime parameters is using .conf files inside /etc/sysctl.d, grouping them by categories.

たとえば、/etc/sysctl.confnet.ipv4.ip_forward=0net.ipv4.icmp_echo_ignore_all=1を設定する代わりに、/etc/sysctl.d内にnet.confという名前の新しいファイルを作成できます:

# echo "net.ipv4.ip_forward=0" > /etc/sysctl.d/net.conf
# echo "net.ipv4.icmp_echo_ignore_all=1" >> /etc/sysctl.d/net.conf

この方法を選択する場合、/etc/sysctl.confから同じ行を削除することを忘れないでください。

概要

この記事では、sysctl/etc/sysctl.conf、および/etc/sysctl.d内のファイルを使用して、カーネルランタイムパラメータを変更する方法について説明しました。

sysctlのドキュメントには、より多くの変数の意味に関する情報があります。これらのファイルは、sysctlを介して設定できるパラメータに関する最も完全なドキュメントソースを表しています。

この記事が役立つことを見つけましたか?お役に立てれば幸いです。質問や改善の提案がある場合は、お気軽にお知らせください。

Source:
https://www.tecmint.com/change-modify-linux-kernel-runtime-parameters/