sysctlコマンドが次の方法でカーネルパラメータを変更できることを知っています。
# sysctl -w kernel.domainname="example.com"
または、ディレクトリ内のファイルを直接編集してください/proc/sys
。継続的な変更の場合は、パラメータを/etc/sysctl.d/<moduleName>.conf
次のようにファイルに書き込む必要があります。
# echo kernel.domainname="example.com" > /etc/sysctl.d/domainname.conf
ただし、modprobeコマンドを使用してカーネルパラメータを変更することもできます。
# modprobe kernel domainname="example.com"
/etc/modprobe.d
次に、複数の場所に存在するディレクトリにmodprobe.confファイルがあり/etc/modprobe.d
ます/usr/lib/modprobe.d
。これには複数の.conf
ファイルが含まれており、モジュールの対応するconfファイルに次のようにオプションを指定できます。
options kernel domainname="example.com"
それでは、これらの方法の違いは何ですか?どのような状況でどのような方法を使用する必要がありますか?
ベストアンサー1
私が知っている限り、modprobe
関連する機能がモジュールにコンパイルされている場合にのみチューニングパラメータを使用でき、そのモジュールを最初にロードする必要があります。モジュールパラメータを継続的に設定するには、この/etc/modprobe.d
ディレクトリが必要です。 (通常は/usr/lib/modprobe.d
ディストリビューションのデフォルト設定をそのままにしておく必要があります。パッケージの更新により、ディストリビューション内のすべてのファイルを上書きできます。)
問題のモジュールがメインカーネルに組み込まれている場合、〜しなければならない<module_name>.<parameter_name>=<value>
通常、起動オプションとして構文を使用します。関連パラメータをsysctl
設定として使用できる場合は、このsysctl -w
コマンドを使用して調整することもできます。
利用可能なすべてのsysctlパラメータは次のとおりです/proc/sys
。例:kernel.domainname
at /proc/sys/kernel/domainname
。すべてのモジュールパラメータをsysctlsとして使用できるわけではありませんが、一部は使用できます。
ロード可能なモジュールがすでにロードされており、必要に応じて変化アンロードせずにすぐにパラメータを変更すると、新しい値を書き込むことができます/sys/module/<module_name>/parameters/<parameter_name>
。モジュールがパラメーターの動的再構成を許可できない場合、ファイルは読み取り専用になります。
少なくとも私のシステムでは、kernel.domainname
これはデフォルトのカーネルのsysctlパラメータであり、それを変更しようとしてもmodprobe
機能しません。
# sysctl kernel.domainname
kernel.domainname = (none)
# modprobe kernel domainname="example.com"
modprobe: FATAL: Module kernel not found in directory /lib/modules/<kernel_version>
# sysctl kernel.domainname
kernel.domainname = (none)
簡単に言えば、わからない場合は、まず/proc/sys
次の出力を見てくださいsysctl -a
。探しているパラメータが存在しない場合、これはsysctlパラメータではなく、モジュールパラメータ(またはsysctlを提供するモジュール)である可能性があります。 )が現在ロードされていない場合は、この場合は値をモジュールパラメータに設定することをお勧めします。現在ロードされていないモジュールに属するsysctlを設定しようとすると、エラーのみが生成されます。
次に、このパラメータがどのモジュールに属するかを調べます。モジュールがカーネルに組み込まれている場合は、ブートオプションを使用する必要があります。モジュールをロードできる場合modprobe
(つまり、ファイルがディレクトリツリーのどこかに<module>.ko
存在する場合)、および/またはを使用できます。/lib/modules/<kernel version>/
modprobe
/etc/modprobe.d/