ウェブサイト検索

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


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

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

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

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

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

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

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

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

sysctl -a | wc -l

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

sysctl -a 

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

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

Linux カーネルパラメータを確認する

つまり、sysctl に続けてパラメータ名を指定するか、関連ファイルを読み取ることで、特定の Linux カーネル パラメータの値を表示できます。

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

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 にリストされているアクションを実行することを示します。 kernel.org にあるドキュメント (key は b ~ z の範囲内の 1 文字)。たとえば、Alt+SysRq+b はシステムを強制的に再起動します (サーバーが応答しない場合の最後の手段としてこれを使用してください)。

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

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

個々のランタイム パラメータを設定するより適切かつ簡単な方法は、/etc/sysctl.d 内の .conf ファイルを使用し、カテゴリごとにグループ化することです。

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

この記事は役に立ちましたか?ぜひそうしていただければ幸いです。ご質問や改善のための提案がございましたら、お気軽にお知らせください。