С чего начать Первые шаги трек · 15 ступеней
Linux Labs

Ядро (kernel)

4 мин Linux

Что такое ядро Linux, чем занимается и как посмотреть его версию и параметры.

Шпаргалка

7 команд Версия для печати
  • uname -r версия ядра (например, 6.8.0-45-generic)
  • uname -a версия + архитектура + дата сборки
  • cat /proc/version то же самое, из /proc
  • cat /proc/cmdline параметры, с которыми ядро загрузилось
  • dmesg | tail последние сообщения ядра
  • sysctl vm.swappiness текущее значение параметра ядра
  • ls /boot файлы ядра (vmlinuz) и initramfs

Обзор

Ядро — центральная часть операционной системы: единственная программа, которая напрямую управляет процессором, памятью, устройствами и файловыми системами. Все остальные программы (включая оболочку и systemd) обращаются к этому через системные вызовы — строго определённый интерфейс, а не напрямую к железу.

Три вещи, за которые отвечает ядро:

  • процессы — кто и когда получает время процессора (планировщик);
  • память — выделение, защита между процессами, подкачка (см. memory-swap);
  • устройства и файловые системы — драйверы (многие — как kernel-modules, подгружаемые отдельно) и доступ к дискам через файловые системы.

Ядро — это не вся операционная система: дистрибутив (Ubuntu, Debian) — это ядро плюс системные программы, менеджер пакетов и настройки поверх него.

Эта статья — про ядро как концепцию: что оно делает и как на него посмотреть. Про загрузку модулей, dmesg-диагностику драйверов и blacklist — отдельная статья kernel-modules. Про параметры времени выполнения (sysctl) — sysctl. Про этапы загрузки до старта ядра — boot-grub.

Рецепты

3

Узнать версию и происхождение

bash
uname -r                           # версия: 6.8.0-45-generic
uname -m                           # архитектура (x86_64, aarch64)
lsb_release -a                     # версия дистрибутива поверх этого ядра

Параметры, с которыми ядро загрузилось

bash
cat /proc/cmdline                  # что передал GRUB (см. boot-grub)
sysctl -a | less                   # текущие параметры времени выполнения
sysctl vm.swappiness               # один конкретный параметр

Сообщения ядра при старте и в работе

bash
dmesg -T | less                    # кольцевой буфер сообщений (время читаемо)
journalctl -k -b                   # то же самое через journald, текущая загрузка

Неполадки

4

uname -r показывает старую версию после apt upgrade

Обновление ядра ставит новые файлы, но работает всё ещё старое, пока не случится перезагрузка. uname -r покажет новую версию только после ребута.

Не понимаю разницы между ядром и дистрибутивом

Ядро — один процесс и набор драйверов; дистрибутив — ядро плюс системные утилиты, пакетный менеджер и настройки (см. uname для команды, glossary «дистрибутив» — для понятия).

Не грузится нужный драйвер

Это почти всегда про модуль ядра, а не про ядро целиком — смотри kernel-modules: lsmod, modprobe, dmesg | grep.

Хочу изменить поведение ядра без перезагрузки

Часть параметров меняется на лету через sysctl (см. sysctl), но не все: некоторые применяются только на этапе загрузки (параметры в cmdline).

Опасно

1

Удаление работающего ядра

apt remove linux-image-$(uname -r) (или пакета, который сейчас загружен) может оставить систему без загружаемого ядра при следующем ребуте. Оставляй хотя бы одну предыдущую версию ядра, пока не убедишься, что новая работает стабильно (несколько дней/перезагрузок), — GRUB покажет старые версии в меню на случай отката (см. boot-grub).

Термины

1
дистрибутив distribution
Поддерживаемый набор ядра, системных программ, пакетов и настроек, например Ubuntu. Ещё встречается в: uname, Служба (service), systemd

См. также

  • kernel-modules — Загрузка модулей ядра, просмотр сообщений ядра, параметры.
  • boot-grub — Этапы загрузки, GRUB, цели systemd, аварийный режим восстановления.
  • sysctl — Параметры ядра времени выполнения — чтение, изменение, постоянные настройки.
Загрузка…