LPIC201/202 あずき本 ch2 Linuxカーネル (2/3)

LPIC201勉強メモ資格勉強

出典: 

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らしい