30.2. カーネルパラメータの変更

/proc ファイルシステムから参照可能なカーネルパラメータの値は基本的に読み込み専用ですが、/proc/sys 以下に存在する仮想ファイルの多くは、カーネルのリコンパイルやシステムの再起動をすることなく運用中であってもダイナミックに値の変更が可能です。カーネルの動作を変更したり、チューニングにこれらのカーネルパラメータの値を利用することができます。

注意

カーネルパラメータの変更はシステムの動作に大きく影響しますので注意してください。

カーネルパラメータの値を一時的に変更したいのであれば、root でログインし、以下のように echo コマンドで行うことができます。変更可能なパラメータかどうかは、単にファイルの書き込み権限があるかどうかで判断することができます。

# echo 1 > /proc/sys/net/ipv4/ip_forward

また、/proc/sys 以下のカーネルパラメータの値は、sysctl コマンドで変更することも可能です。値を変更するには、sysctl コマンドに -w オプションを指定して以下のように実行します。

# sysctl -w net.ipv4.ip_forward=1

このように sysctl で仮想ファイルを指定する際は、/proc/sys 以下の仮想ファイルのパス名を / (スラッシュ)ではなく、.(ピリオド)で区切って指定します。なお、sysctl に -a オプションを指定すれば、/proc/sys 以下の値をすべて表示することもできます。

#  sysctl -a
abi.fake_utsname = 0
abi.trace = 0
abi.defhandler_libcso = 68157441
abi.defhandler_lcall7 = 68157441
abi.defhandler_elf = 0
abi.defhandler_coff = 117440515
dev.raid.speed_limit_max = 200000
dev.raid.speed_limit_min = 1000
dev.rtc.max-user-freq = 64
net.unix.max_dgram_qlen = 10
net.token-ring.rif_timeout = 600000
net.ipv4.conf.eth1.force_igmp_version = 0
net.ipv4.conf.eth1.disable_policy = 0
net.ipv4.conf.eth1.disable_xfrm = 0
net.ipv4.conf.eth1.arp_ignore = 0
net.ipv4.conf.eth1.arp_announce = 0
net.ipv4.conf.eth1.arp_filter = 0
net.ipv4.conf.eth1.tag = 0
net.ipv4.conf.eth1.log_martians = 0
net.ipv4.conf.eth1.bootp_relay = 0
net.ipv4.conf.eth1.medium_id = 0
net.ipv4.conf.eth1.proxy_arp = 0

省略...

kernel.shmmax = 134217728
fs.mqueue.msgsize_max = 8192
fs.mqueue.msg_max = 10
fs.mqueue.queues_max = 256
fs.aio-max-nr = 65536
fs.file-max = 25280

しかし、このように echo コマンドや sysyctl コマンドで変更したカーネルパラメータの値は、システムを再起動するとすべて失われてしまいます。システムの再起動後にも値を保持するには、以下で解説する /etc/sysctl.conf や /etc/init.d/kparam を利用します。

/etc/sysctl.conf

/etc/sysctl.conf ファイルに変更するカーネルパラメータの値を記述しておくことにより、システム再起動後にも値を保持することができます。/etc/sysctl.conf ファイルには、sysctl コマンドの書式と同様に、/proc/sys 以下の仮想ファイルのパス名を以下のように .(ピリオド)で区切って指定します。# ではじまる行はコメントと見なされます。

# Disables packet forwarding
net.ipv4.ip_forward = 0
# Enables source route verification
net.ipv4.conf.all.rp_filter = 1
# Disables the magic-sysrq key
kernel.sysrq = 0

/etc/sysctl.conf で指定したカーネルパラメータの値は、システム起動時に /etc/rc.sysinit スクリプト内で実行される sysctl コマンドにより有効になります。

/etc/init.d/kparam

kparam は Turbolinux 独自のカーネルパラメータ設定ツールです。kparam の最も大きな特徴は、複数のカーネルパラメータをまとめて変更できることと、kparam は実行前の値を保持しますので、容易に元の値に戻せることです。複数のカーネルパラメータを一時的に変更したい場合などに非常に便利なツールです。

kparam の設定ファイルは /etc/sysconfig/kparam です。このファイルに変更したいカーネルパラメータを書き込みます。以下は、/etc/sysconfig/kparam ファイルのサンプルです。

/proc/sys/kernel/shmmax 134217728
/proc/sys/kernel/sysrq 0
/proc/sys/kernel/panic 10
/proc/sys/kernel/sem 250 32000 100 128

kparam は、システム起動時に実行されるように、インストーラで設定されていますので、編集後は以下のコマンドを実行して、kparam を再起動します。

# /etc/init.d/kparam restart

実行すると、/etc/sysconfig/kparam の設定がカーネルパラメータに反映されます。kparam を実行する前の値は保存されていますので、kparam を停止すれば元の値に戻すことができます。

# /etc/init.d/kparam stop