Загрузка и выгрузка модулей в Linux

В этой статье я приведу пример ручной и автоматической загрузки/выгрузки моделей в Linux.

Сначала переключимся на root пользователя если не под ним, например в Ubuntu это можно сделать так:

sudo su

Посмотрим список загруженных модулей:

lsmod

Посмотреть загружен ли конкретный модуль можно так (где NAME — имя модуля):

lsmod | grep NAME

Для загрузки/выгрузки модуля используются команды:

modprobe NAME
modprobe -r NAME

Когда выполняется команда загрузки модуля, modprobe ищет его в директории:

/lib/modules/$(uname -r)

Можно посмотреть какие есть например так:

ls /lib/modules/$(uname -r)
ls /lib/modules/$(uname -r)/kernel/net/netfilter/

Для загрузки/выгрузки модуля из другой директории можно выполнить команды:

insmod /path/to/module/name.ko
rmmod /path/to/module/name.ko

Посмотреть информацию о модуле и возможные параметры запуска можно так:

modinfo NAME

Можно посмотреть конкретную информацию о модуле, например где он находится:

modinfo --filename NAME

Чтобы модули запускались в самом начале запуска системы, то их нужно прописать в файл /etc/modules.conf, а чтобы запускались в последнюю очередь после запуска всех служб, то в файл /etc/rc.local.
Помимо файла /etc/modules.conf есть также директория /etc/modprobe.d/, где находятся подобные файлы с расширением .conf.

Например в rc.local модули прописываются так:

/sbin/modprobe NAME

В файле modules.conf прописываются так:

nf_nat_ftp

Чтобы запретить загрузку модуля, можно прописать слово blacklist перед названием модуля:

blacklist NAME

Обновление ядра Linux на серверах Hetzner

Понадобилось однажды обновить ядро CentOS на сервере в Hetzner который проработал без перезагрузки около 2 лет.

Посмотрел различную информацию о системе, версиях установленных ядрах и запущенном ядре:

lsb_release -a
uname -r
uname -a
cat /proc/version
sudo rpm -q kernel
ls /boot | grep vmlinuz

Обновил ядро:

yum -y update

Перезагрузил сервер используя ссылку в cPanel https://example.com:2087/scripts/dialog?dialog=reboot

Можно также командой:

reboot

После ухода на перезагрузку сервер не запустился, я сразу же сделал заявку в техническую поддержку через панель https://robot.your-server.de.
Техническая поддержка отреагировала в течении двух минут, как они сообщили, сервер не отвечал на нажатия клавиш, был черный экран, после физического выключения и включения он успешно запустился.
Вот такие бывают случаи перезагрузки, нужно быть готовым ко всему.
При следующих перезагрузках зависание больше не повторялось.

Решение ошибки «nf_conntrack: table full, dropping packet»

Заметил однажды в Ubuntu Server 14.04 LTS настроенного как роутер, в файле /var/log/kern.log следующую ошибку:

Aug 14 17:32:51 router kernel: [1933791.144013] nf_conntrack: table full, dropping packet

Посмотрим текущее максимальное значение записей количества статуса соединений:

cat /proc/sys/net/netfilter/nf_conntrack_max
sysctl -a | grep conntrack_max

Посмотрим сколько использовано:

cat /proc/sys/net/netfilter/nf_conntrack_count

Увеличим командой:

echo 4194304 > /proc/sys/net/netfilter/nf_conntrack_max

Чтобы значение не сбросилось после перезапуска системы, можно добавить команду выше например в файл:

sudo nano /etc/rc.local

Либо откроем файл конфигурации ядра:

sudo nano /etc/sysctl.conf

Добавим или изменим строку:

net.netfilter.nf_conntrack_max = 4194304

И применим настройки:

sysctl -p

Смотрите также:
Мониторинг nf_conntrack в Zabbix

Решение ошибки NMI watchdog: BUG: soft lockup — CPU#0 stuck for 23s!

Заметил несколько раз зависание сервера с установленным Ubuntu Server 14.04.01, после чего помогала только жесткая перезагрузка с выключением электропитания.

Приведу часть логов в этот момент:

Jun 17 20:16:19 server-gw kernel: [3455576.132542] Code: be 00 02 00 00 e8 46 26 8c ff 5d c3 0f 1f 40 00 66 66 66 66 90 55 48 89 e5 53 48 89 f3 66 66 66 66 90 66 83 07 02 48 89 df 57 9d <66> 66 90 66 90 5b 5d c3 0f 1f 44 00 00 b8 02 00 00 00 f0 66 0f
Jun 17 20:16:47 server-gw kernel: [3455604.143698] NMI watchdog: BUG: soft lockup — CPU#0 stuck for 23s! [kworker/0:2:19206]
Jun 17 20:16:47 server-gw kernel: [3455604.146475] Modules linked in: xt_nat xt_tcpudp iptable_nat nf_conntrack_ipv4 nf_defrag_ipv4 nf_nat_ipv4 ipt_ISG(OE) iptable_filter ip_tables x_tables ipmi_ssif gpio_ich amdkfd amd_iommu_v2 intel_powerclamp coretemp radeon kvm_intel kvm crct10dif_pclmul crc32_pclmul ghash_clmulni_intel aesni_intel aes_x86_64 lrw gf128mul ttm glue_helper ablk_helper cryptd drm_kms_helper serio_raw drm lpc_ich joydev i2c_algo_bit i7core_edac hpilo edac_core shpchp ipmi_si 8250_fintek ipmi_msghandler mac_hid acpi_power_meter nf_nat_pptp nf_nat_proto_gre nf_conntrack_pptp nf_conntrack_proto_gre nf_nat nf_conntrack lp parport hid_generic usbhid hid psmouse be2net vxlan bnx2 pata_acpi ip6_udp_tunnel udp_tunnel hpsa
Jun 17 20:16:47 server-gw kernel: [3455604.146529] CPU: 0 PID: 19206 Comm: kworker/0:2 Tainted: G IOEL 3.19.0-39-generic #44~14.04.1-Ubuntu
Jun 17 20:16:47 server-gw kernel: [3455604.146531] Hardware name: HP ProLiant DL380 G7, BIOS P67 09/30/2010
Jun 17 20:16:47 server kernel: [3455604.146537] Workqueue: events inet_frag_worker

Проблемой оказался баг в версии ядра Ubuntu — 3.19.0-39-generic, и естественно решением проблемы было обновление системы командами:

sudo apt-get update
sudo apt-get upgrade

После этого ошибка исчезла.

Версию ядра можно посмотреть командой:

uname -r

Версию Ubuntu:

lsb_release -r