Работа с ядром
Понятие ядра Linux
Ядро системы обеспечивает взаимодействие с аппаратными компонентами устройства
Для этого взаимодействия ядру нужны драйвера (модули в терминологии Linux)
У ядра есть различные способы обращения к этим драйверам:
initramfs (initial ram drive) - загружается вместе с системой, в него собираются драйверы перед установкой в систему
systemd-udevd - используется для взаимодействия с аппаратными компонентами, подключаемыми напрямую (например, USB Flash Drive), подгружая на лету драйвера устройства
modprobe - ручная загрузка драйвера
К ядру обращение происходит из шелла в пользовательском пространстве через syscall
Модули ядра
Модули ядра есть драйверы для взаимодействия с устройством
Большая часть модулей загружается с initramfs или systemd-udevd
modprobe используется для ручной загрузки модулей
modprobe -r - для выгрузки модулей
lsmod используется для отображения списка модулей
[root@centos8 ~]# lsmod
Module Size Used by
binfmt_misc 20480 1
veth 28672 0
nft_masq_ipv4 16384 1
nft_masq_ipv6 16384 1
nft_masq 16384 2 nft_masq_ipv6,nft_masq_ipv4
nf_conntrack_netlink 49152 0
xt_addrtype 16384 1
br_netfilter 24576 0
overlay 126976 0
fuse 131072 3
rfcomm 86016 6
xt_CHECKSUM 16384 1
ipt_MASQUERADE 16384 1
xt_conntrack 16384 1
ipt_REJECT 16384 1
nft_counter 16384 31
nf_nat_tftp 16384 0
nft_objref 16384 1
nf_conntrack_tftp 16384 3 nf_nat_tftp
Modprobe
Является наследником классической утилиты insmolt
insmolt не учитывал зависимости модулей, в отличии от modprobe
modinfo отображает параметры модуля
[root@centos8 ~]# modeinfo nvme
bash: modeinfo: command not found...
[root@centos8 ~]# modinfo nvme
filename: /lib/modules/4.18.0-151.el8.x86_64/kernel/drivers/nvme/host/nvme.ko.xz
version: 1.0
license: GPL
author: Matthew Wilcox <willy@linux.intel.com>
rhelversion: 8.2
<....>
depends: nvme-core
intree: Y
name: nvme
vermagic: 4.18.0-151.el8.x86_64 SMP mod_unload modversions
sig_id: PKCS#7
signer: CentOS Linux kernel signing key
sig_key: 70:97:5E:C5:DC:19:13:9B:78:9D:5D:F8:75:EA:BB:44:25:A3:1F:93
sig_hashalgo: sha256
<....>
parm: use_threaded_interrupts:int
parm: use_cmb_sqes:use controller's memory buffer for I/O SQes (bool)
parm: max_host_mem_size_mb:Maximum Host Memory Buffer (HMB) size per controller (in MiB) (uint)
parm: sgl_threshold:Use SGLs when average request segment size is larger or equal to this size. Use 0 to disable SGLs. (uint)
parm: io_queue_depth:set io queue depth, should >= 2
parm: write_queues:Number of queues to use for writes. If not set, reads and writes will share a queue set. (int)
parm: poll_queues:Number of queues to use for polled IO. (int)
Для изменения конфигурации модулей используется /etc/modprobe.conf или файлы в /etc/modprobe.d
[root@centos8 ~]# ls -l /etc/modprobe.d/
total 32
-rw-r--r--. 1 root root 158 Nov 8 19:48 firewalld-sysctls.conf
-rw-r--r--. 1 root root 358 Feb 5 00:41 kvm.conf
-rw-r--r--. 1 root root 747 Nov 8 23:56 lockd.conf
-rw-r--r--. 1 root root 1004 Jun 3 2019 mlx4.conf
-rw-r--r--. 1 root root 101 May 11 2019 nvdimm-security.conf
-rw-r--r--. 1 root root 92 Nov 21 20:47 truescale.conf
-rw-r--r--. 1 root root 674 Jun 27 2019 tuned.conf
-rw-r--r--. 1 root root 111 Feb 5 00:41 vhost.conf
Использование proc
/proc является файловой системой, которая предоставляет доступ к информации в ядре
PID директории (информация о процессах)
Статусы файлов (состояния системы)
Настройки в /proc/sys
Через echo можно записать параметр в любой файл в /proc/sys для изменения настроек ядра
Для изменения настроек с сохранением после перезагрузки необходимо править /etc/sysctl.conf (последний способ - не рекомендуется)
sysctl -a покажет все текущие настройки
[root@centos8 ~]# sysctl -a | grep forward
net.ipv4.conf.all.bc_forwarding = 0
net.ipv4.conf.all.forwarding = 1
net.ipv4.conf.all.mc_forwarding = 0
net.ipv4.conf.default.bc_forwarding = 0
net.ipv4.conf.default.forwarding = 1
net.ipv4.conf.default.mc_forwarding = 0
net.ipv4.conf.docker0.bc_forwarding = 0
net.ipv4.conf.docker0.forwarding = 1
net.ipv4.conf.docker0.mc_forwarding = 0
net.ipv4.conf.ens160.bc_forwarding = 0
net.ipv4.conf.ens160.forwarding = 1
net.ipv4.conf.ens160.mc_forwarding = 0
net.ipv4.conf.lo.bc_forwarding = 0
net.ipv4.conf.lo.forwarding = 1
Обновление ядра
Фактически обновление ядра проходит заменой старого на новое, инкрементальное обновление не допускается
Это же позволяет загрузить прежнее ядро в случае отказа нового
yum update kernel используется для обновления ядра
yum install kernel как альтернативный вариант
Last updated
Was this helpful?