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


このLFCS(Linux Foundation Certified Sysadmin)シリーズのパート13では、進行中のブートプロセスのオプションをカーネルに渡すことにより、GRUBを使用してシステムの動作を変更する方法を説明しました。

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

したがって、システムの動作方法を変更する必要があるため、必要なときにカーネルパラメータをオンザフライで有効または無効にすることができます。

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

Filesystem Hierarchy Standardの最新の仕様では、/proc が、プロセスとシステムの情報、およびその他のカーネルとメモリの情報を処理するためのデフォルトの方法を表していることが示されています。特に、/proc/sys は、デバイス、ドライバー、およびいくつかのカーネル機能に関するすべての情報を見つけることができる場所です。

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

  1. dev: parameters for specific devices connected to the machine.
  2. fs: filesystem configuration (quotas and inodes, for example).
  3. kernel: kernel-specific configuration.
  4. net: network configuration.
  5. vm: use of the kernel’s virtual memory.

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

# sysctl -a | wc -l

カーネルパラメータの完全なリストを表示したい場合は、次のようにしてください。

# sysctl -a 

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

# sysctl -a | less

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

たとえば、強調表示された行は次のとおりです。

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

そうは言っても、 sysctl の後にパラメーターの名前を続けるか、関連ファイルを読み取ることで、特定のLinuxカーネルパラメーターの値を表示できます。

# sysctl dev.cdrom.autoclose
# cat /proc/sys/dev/cdrom/autoclose
# sysctl net.ipv4.ip_forward
# cat /proc/sys/net/ipv4/ip_forward

カーネルパラメータの値を設定するには、 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キー(print screenキーとも呼ばれます)を有効にして、システムが応答しなくなったときに特定のキーの組み合わせが緊急アクションを呼び出すことができるようにするために使用されます。

デフォルト値(16)は、システムが Alt + SysRq + key の組み合わせを尊重し、kernel.orgにあるsysrq.cドキュメントにリストされているアクションを実行することを示します(キーは、 bz範囲)。たとえば、 Alt + SysRq + b はシステムを強制的に再起動します(サーバーが応答しない場合の最後の手段としてこれを使用してください)。

警告!ホストシステムを強制的に再起動する可能性があるため、仮想マシンでこのキーの組み合わせを押そうとしないでください。

1に設定すると、net.ipv4.icmp_echo_ignore_allはping要求を無視し、カーネルレベルでそれらをドロップします。これは次の画像に示されています–このカーネルパラメータを設定した後、ping要求がどのように失われるかに注意してください。

個々のランタイムパラメータを設定するためのより良い簡単な方法は、 /etc/sysctl.d 内の.confファイルを使用して、それらをカテゴリ別にグループ化することです。

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

# 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を介して設定できるパラメーターに関するドキュメントの最も完全なソースを表しています。

この記事は役に立ちましたか?きっとあなたがやったことを願っています。改善すべきご質問やご提案がございましたら、お気軽にお問い合わせください。