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"
では、これらの各方法の違いは何ですか?どの特定の状況でどの方法を使用する必要がありますか?
私の知る限り、modprobe
を使用してパラメーターを調整できるのは、問題の機能がモジュールとしてコンパイルされており、最初にモジュールをロードしている場合のみです。モジュールパラメータを永続的に設定するために、/etc/modprobe.d
ディレクトリがあります。 (通常、ディストリビューションのデフォルト設定は/usr/lib/modprobe.d
のままにしておく必要があります。そこにあるファイルはパッケージの更新によって上書きされる可能性があります。)
問題のモジュールがメインカーネルに組み込まれている場合は、mustは、通常はブートオプションとして<module_name>.<parameter_name>=<value>
構文を使用する必要があります。問題のパラメーターがsysctl
設定として使用できる場合は、sysctl -w
コマンドを使用して調整することもできます。
使用可能なすべてのsysctlパラメーターは/proc/sys
の下に表示されます。たとえば、kernel.domainname
は/proc/sys/kernel/domainname
にあります。すべてのモジュールパラメータがsysctlとして利用できるわけではありませんが、一部は利用できる場合があります。
ロード可能なモジュールがすでにロードされていて、アンロードせずにそのパラメーターをすぐに変更したい場合は、新しい値を/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/
を使用できます。