2.4 カーネルパラメータの変更
/proc/ 以下のファイルを使って
- カーネル情報を取得
- カーネルの動作を変更
2.4.1 カーネルパラメータの設定
/proc/sys/ 以下のやつ
代表的なもの
kernel/ctrl-alt-del
Ctrl+Alt+Deleteキーの動作の設定
- 0: 無効
- 1: 有効
cat /proc/sys/kernel/ctrl-alt-del
0
1(有効)のとき、/proc/sys/kernel/cad_pid
で設定されたプロセスにシグナルを送信する
$ cat /proc/sys/kernel/cad_pid
cat: /proc/sys/kernel/cad_pid: Permission denied
# cat /proc/sys/kernel/cad_pid
1
initプロセスにシグナルが送信される設定だった
kernel/domainname
NIS(Network Information Service) ドメイン名
cat /proc/sys/kernel/domainname
(none)
kernel/hostname
ホスト名
cat /proc/sys/kernel/hostname
lpic2-study-1
hostname
コマンドと同じ
hostname
lpic2-study-1
echo 'banana' | sudo tee /proc/sys/kernel/hostname
hostname
banana
kernel/modprobe
modprobeの場所
cat /proc/sys/kernel/modprobe
/sbin/modprobe
which
結果と照合してみる
which modprobe
合わねえんだが?
/usr/sbin/modprobe
ls -l /sbin/modprobe
ls -l /usr/sbin/modprobe
symlinkでした
lrwxrwxrwx. 1 root root 11 Nov 10 18:06 /sbin/modprobe -> ../bin/kmod
lrwxrwxrwx. 1 root root 11 Nov 10 18:06 /usr/sbin/modprobe -> ../bin/kmod
kernel/hotplug
ホットプラグ用のブログラムのパス
cat /proc/sys/kernel/hotplug
(空)
kernel/osrelease
カーネルバージョン
cat /proc/sys/kernel/osrelease
3.10.0-1127.19.1.el7.x86_64
uname -r
と同じ
uname -r
3.10.0-1127.19.1.el7.x86_64
kernel/ostype
OSの種類
cat /proc/sys/kernel/ostype
Linux
unameと同じ
uname
Linux
kernel/sem
セマフォ数
cat /proc/sys/kernel/sem
250 32000 32 128
4つの値がタブ区切りで入っている (参考: https://thinkit.co.jp/cert/tech/23/5/2.htm)
-
SEMMSL
- セマフォ集合ごとのセマフォ数の最大値。
-
SEMMNS
- システム全体での、全てのセマフォ集合におけるセマフォ数の制限。
-
SEMOPM
- semop(2)コールに指定されるオペレーション数の最大値。
-
SEMMNI
- システム全体でのセマフォ識別子の最大値。
kernel/{shmall,shmmax,shmmni}
共有メモリの合計 in バイト
cat /proc/sys/kernel/shmall
18446744073692774399
共有メモリセグメントの最大値 in バイト
cat /proc/sys/kernel/shmmax
共有メモリセグメント最大数
18446744073692774399
cat /proc/sys/kernel/shmmni
4096
kernel/sysrq
Magic SysRq Keyの有効/無効
- システムの障害時やデバッグ等で使用する緊急用キー
- たいていPrtScキー
cat /proc/sys/kernel/sysrq
16
1: 有効
無効値はディストリ依存らしい
kernel/threads-max
スレッド(プロセス)の最大数
cat /proc/sys/kernel/threads-max
7360
kernel/version
カーネル構築の情報
cat /proc/sys/kernel/version
#1 SMP Tue Aug 25 17:23:54 UTC 2020
/proc/version
の最後の方にひっ付いてるのと同じ
cat /proc/version
Linux version 3.10.0-1127.19.1.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) ) #1 SMP Tue Aug 25 17:23:54 UTC 2020
fs/file-max
ファイルハンドルの最大数
cat /proc/sys/fs/file-max
98272
fs/file-nr
開かれているファイル数、使用されたファイルハンドル数、ファイルハンドルの最大数
cat /proc/sys/fs/file-nr
1056 0 98272
net/core/{r,w}mem_{default,max}
受信/送信ソケットバッファのデフォルト/最大サイズ
cat /proc/sys/net/core/rmem_default
212992
cat /proc/sys/net/core/rmem_max
212992
cat /proc/sys/net/core/wmem_default
212992
cat /proc/sys/net/core/wmem_max
212992
net/ipv4/ip_forward
ネットワークインタフェース間でのパケット転送の有効/無効
cat /proc/sys/net/ipv4/ip_forward
0
net/ipv4/icmp_echo_ignore_broadcasts
ブロードキャスト宛てのICMP Echo Requestを無視するかどうか
cat /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
1
net/ipv4/icmp_echo_ignore_all
すべてのICMP Echo Requestを無視するかどうか
cat /proc/sys/net/ipv4/icmp_echo_ignore_all
0
0 (無視しない)
ping 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.065 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.094 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.100 ms
C-c C-c
--- 127.0.0.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 0.065/0.086/0.100/0.017 ms
1 (無視する)を設定してみる
echo 1 | sudo tee /proc/sys/net/ipv4/icmp_echo_ignore_all
ping 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
pongが返ってこなくなる
sysctl
/proc/sys/
以下のカーネルパラメータのラッパ
/
を.
で置換して指定する (置換しなくてもいい)
sysctl kernel.hostname
sysctl kernel/hostname
kernel.hostname = lpic2-study-1
kernel.hostname = lpic2-study-1
- 書き込み
sudo sysctl -w kernel.hostname=banana
kernel.hostname = banana
sysctl kernel.hostname
kernel.hostname = banana
/etc/sysctl.conf
, /etc/sysctl.d/*.conf
/proc/sys/
にsudo tee
等でねじ込んだりsystemctl -w
で書き込んだ値は揮発性- 再起動後にも永続化するには
/etc/sysctl.conf
に設定を記述する
cat /etc/sysctl.d/60-gce-network-security.conf
# Copyright 2016 Google Inc. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Google-recommended kernel parameters
# Turn on SYN-flood protections. Starting with 2.6.26, there is no loss
# of TCP functionality/features under normal conditions. When flood
# protections kick in under high unanswered-SYN load, the system
# should remain more stable, with a trade off of some loss of TCP
# functionality/features (e.g. TCP Window scaling).
net.ipv4.tcp_syncookies=1
...
2.4.2 初期RAMディスク
-
RAMディスク
- メモリ上にファイルシステムを作成する機能
- 【補】Windowsでも32bit時代に4GB以上のメモリを有効活用するためにお世話になった…
-
ループバックマウント
- ファイルをファイルシステムとしてマウント
これらを利用して…初期RAMディスク(Initial RAM Disk: initrd)
- ファイルとして用意されているファイルシステムをRAMディスクとしてメモリ上に展開
- それを暫定的なルートファイルシステムとしてカーネルを起動
- その後本来のルートファイルシステムをマウントする
- initrd: ファイルシステムイメージを圧縮したもの
-
initramfs: cpioアーカイブを圧縮したもの
- ファイルシステムドライバ不要、メモリ効率が優れている
mkinitrd --help
usage: mkinitrd [--version] [--help] [-v] [-f] [--preload <module>]
[--image-version] [--with=<module>]
[--nocompress]
<initrd-image> <kernel-version>
(ex: mkinitrd /boot/initramfs-3.10.0-1127.19.1.el7.x86_64.img 3.10.0-1127.19.1.el7.x86_64)
mkinitramfs
が入ってない…
mkinitramfs --help
-bash: mkinitramfs: command not found
今日びのCentOSはDracutを使うらしい
yum provides mkinitrd
Failed to set locale, defaulting to C
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: ty1.mirror.newmediaexpress.com
* centos-sclo-rh: ty1.mirror.newmediaexpress.com
* centos-sclo-sclo: ty1.mirror.newmediaexpress.com
* epel: d2lzkl7pfhq30w.cloudfront.net
* extras: ty1.mirror.newmediaexpress.com
* updates: ty1.mirror.newmediaexpress.com
dracut-033-572.el7.x86_64 : Initramfs generator using udev
Repo : base
Matched from:
Filename : /usr/bin/mkinitrd
dracut-033-568.el7.x86_64 : Initramfs generator using udev
Repo : @anaconda
Matched from:
Filename : /usr/bin/mkinitrd
引数なしでdracutを実行すると /boot/
に/boot/initramfs-$(uname -r).img
ができる
dracut
/usr/bin/dracut: line 681: warning: setlocale: LC_MESSAGES: cannot change locale (C.UTF-8): No such file or directory
/usr/bin/dracut: line 682: warning: setlocale: LC_CTYPE: cannot change locale (C.UTF-8): No such file or directory
Will not override existing initramfs (/boot/initramfs-3.10.0-1127.19.1.el7.x86_64.img) without --force
展開してみる
# cp /boot/initramfs-$(uname -r).img /tmp/initramfs-$(uname -r).img.gz
# gunzip /tmp/initramfs-$(uname -r).img.gz
$ mkdir /tmp/initrd
$ cd /tmp/initrd
# cat ../initramfs-$(uname -r).img | cpio -id
cpio: dev/null: Cannot mknod: Operation not permitted
cpio: dev/kmsg: Cannot mknod: Operation not permitted
cpio: dev/console: Cannot mknod: Operation not permitted
53676 blocks
ls -F
bin@ etc/ lib@ proc/ run/ shutdown* sysroot/ usr/
dev/ init@ lib64@ root/ sbin@ sys/ tmp/ var/
一連の作業をCentOSではlsinitrd
コマンドで行える
sudo lsinitrd
Image: /boot/initramfs-3.10.0-1127.19.1.el7.x86_64.img: 14M
========================================================================
Version: dracut-033-568.el7
Arguments: -f
dracut modules:
bash
nss-softokn
i18n
drm
expand_root
plymouth
kernel-modules
qemu
rootfs-block
terminfo
udev-rules
biosdevname
systemd
usrmount
base
fs-lib
shutdown
========================================================================
drwxr-xr-x 12 root root 0 Nov 10 18:11 .
crw-r--r-- 1 root root 5, 1 Nov 10 18:11 dev/console
crw-r--r-- 1 root root 1, 11 Nov 10 18:11 dev/kmsg
crw-r--r-- 1 root root 1, 3 Nov 10 18:11 dev/null
lrwxrwxrwx 1 root root 7 Nov 10 18:11 bin -> usr/bin
drwxr-xr-x 2 root root 0 Nov 10 18:11 dev
drwxr-xr-x 10 root root 0 Nov 10 18:11 etc
...
Debian系ではlsinitramfs
らしい