Ядро SberLinux#
Ядро — это основная часть операционной системы SberLinux, которая управляет системными ресурсами и обеспечивает взаимодействие между аппаратным и программным обеспечением. Ядра упакованы в формате RPM, поэтому они легко обновляются и проверяются менеджером пакетов dnf.
RPM-пакет#
RPM-пакет - это файл, содержащий архив файлов и метаданные, используемые для установки и удаления этих файлов. RPM-пакет включает в себя:
подпись GPG - используется для проверки целостности пакета;
заголовок RPM (метаданные пакета) - используется диспетчером RPM-пакетов для определения зависимостей пакетов, места для установки файлов и др.;
cpio-архив - содержит файлы для установки в систему.
Существует два типа RPM-пакетов. Оба имеют общий формат файла и инструменты, но разное содержимое и служат разным целям:
RPM-пакеты с исходным кодом (Source RPM – SRPM) - содержат исходный код и файл спецификации, в котором описывается, как встроить исходный код в двоичный RPM. Могут также содержать исправления исходного кода;
бинарные RPM-пакеты – содержат бинарные файлы, созданные из исходников и исправлений.
Обзор kernel RPM-пакета ядра SberLinux#
Kernel RPM-пакет – это метапакет ядра, который не содержит в себе файлов, а обеспечивает правильную установку следующих необходимых подпакетов:
kernel-core– содержит бинарный образ ядра SberLinux;kernel-modules-core– содержит базовые модули ядра для обеспечения основной функциональности; включает в себя модули, необходимые для правильного функционирования часто используемого оборудования;kernel-modules– содержит остальные модули ядра, которых нет вkernel-core.
Подпакеты kernel-core и kernel-modules-core могут вместе использоваться в виртуализированных и облачных средах, чтобы обеспечить ядро SberLinux быстрой загрузкой и небольшим размером занимаемого пространства на диске. Подпакет kernel-modules в таких случаях обычно не используется.
Существуют также дополнительные пакеты ядра, например:
kernel-modules-extra– содержит модули ядра для редкого оборудования и модули, загрузка которых отключена по умолчанию;kernel-debug– содержит вариант ядра с многочисленными опциями отладки для диагностики ядра за счет снижения производительности;kernel-tools– содержит инструменты для работы с ядром SberLinux и сопроводительную документацию;kernel-abi-stablelists– содержит информацию, относящуюся к ABI ядра SberLinux, включая список символов ядра, необходимых внешним модулям ядра, иdnf-плагин для обеспечения исполнения.
Отображение содержимого пакета ядра#
Следующий сценарий описывает, как отобразить содержимое пакета ядра, список его файлов без загрузки или установки пакетов, запросив репозиторий с помощью команды.
Примечание
Обратите внимание, что kernel-пакет представляет собой метапакет и не содержит в себе файлов.
Сценарии использования#
Для отображения доступных версий пакета используйте команду:
dnf repoquery <имя_пакета>Например, для отображения доступных версий пакета
kernel-coreвведите команду:dnf repoquery kernel-coreПример результата выполнения команды:
kernel-core-0:5.14.0-162.12.1.el9_1.x86_64 kernel-core-0:5.14.0-162.18.1.el9_1.x86_64 kernel-core-0:5.14.0-162.22.2.el9_1.x86_64 kernel-core-0:5.14.0-162.23.1.el9_1.x86_64 ...Для отображения списка файлов пакета используйте команду:
dnf repoquery -l <имя_пакета>Например, для отображения списка файлов пакета
kernel-core-0:5.14.0-162.23.1.el9_1.x86_64введите команду:dnf repoquery -l kernel-core-0:5.14.0-162.23.1.el9_1.x86_64Пример результата выполнения команды:
/boot/System.map-5.14.0-162.23.1.el9_1.x86_64 /boot/config-5.14.0-162.23.1.el9_1.x86_64 /boot/initramfs-5.14.0-162.23.1.el9_1.x86_64.img /boot/symvers-5.14.0-162.23.1.el9_1.x86_64.gz /boot/vmlinuz-5.14.0-162.23.1.el9_1.x86_64 /lib/modules /lib/modules/5.14.0-162.23.1.el9_1.x86_64 /lib/modules/5.14.0-162.23.1.el9_1.x86_64/.vmlinuz.hmac /lib/modules/5.14.0-162.23.1.el9_1.x86_64/System.map ...
Установка определенных версий ядра#
Следующий сценарий описывает, как установить новые ядра с помощью dnf менеджера пакетов.
Сценарий использования#
Для установки определенной версии ядра используйте команду:
dnf install kernel-<version>
Обновление ядра#
Следующий сценарий описывает, как обновить ядро с помощью менеджера пакетов dnf.
Сценарий использования#
Для обновления ядра введите команду:
dnf update kernelЭта команда обновляет ядро вместе со всеми зависимостями до последней доступной версии.
Перезагрузите систему, чтобы изменения вступили в силу.
Настройка ядра по умолчанию#
Настройте конкретное ядро по умолчанию, используя средство командной строки grubby и GRUB.
Сценарии использования#
Для настройки ядра по умолчанию при помощи
grubbyвведите команду:grubby --set-default $kernel_pathГде
$kernel_path- это абсолютный путь файла ядра.Данная команда использует ID машины без суффикса
.confв качестве аргумента. ID машины при этом находится в каталоге/boot/loader/entries/.Для настройки ядра по умолчанию с помощью аргумента
idвыполните следующие шаги:Для получения списка загрузочных записей с использованием аргумента
idвведите команду:grubby --info ALL | grep idДля настройки ядра по умолчанию используйте команду:
grubby --set-default /boot/vmlinuz-<version>.<arh>
Примечание
Для получения списка загрузочных записей можно также использовать
titleаргумент, выполнив командуgrubby --info=ALL | grep title.Для настройки ядра по умолчанию только для следующей загрузки используйте команду:
grub2-reboot <index|title|id>Где
<index|title|id>- идентификационные данные записи в меню загрузчика GRUB2.Внимание
Настройку ядра по умолчанию только для следующей загрузки выполняйте с осторожностью - установка новых RPM-ядер, ядер собственной сборки и добавление записей вручную в каталог
/boot/loader/entries/могут изменить значения индекса.
Управление модулями ядра#
Данный раздел содержит информацию о модулях ядра, способах отображения информации о них и выполнении основных административных задач с ними.
Введение в модули ядра#
Ядро SberLinux может быть расширено дополнительными функциональными элементами, называемыми модулями ядра, без необходимости перезагрузки системы. В SberLinux модули ядра представляют собой дополнительный код ядра, встроенный в сжатые объектные файлы <name_module_kernel>.ko.xz.
Наиболее распространенные функции, предоставляемые модулями ядра:
драйвер устройства, добавляющий поддержку нового оборудования;
поддержка файловой системы, такой как GFS2 или NFS;
системные вызовы.
В современных системах модули ядра загружаются автоматически по мере необходимости. Однако в некоторых случаях необходимо загружать или выгружать модули вручную.
Как и само ядро, модули могут принимать параметры, которые при необходимости настраивают их поведение.
В параграфах ниже описывается инструментарий для проверки: какие модули запущены в данный момент, какие модули доступны для загрузки в ядро и какие параметры принимает модуль. Также представлен механизм для загрузки и выгрузки модулей ядра в работающее ядро.
Зависимости модулей ядра#
Некоторые модули ядра иногда зависят от одного или нескольких других модулей. Файл зависимостей /lib/modules/<версия_ядра>/modules.dep содержит полный список зависимостей модулей для соответствующей версии ядра.
Утилита depmod#
Файл зависимостей генерируется утилитой depmod, входящей в состав пакета kmod. Многие из предоставляемых пакетом kmod утилит учитывают зависимости модулей при выполнении операций, поэтому ручное отслеживание зависимостей требуется редко.
Важно
Код модулей ядра выполняется в пространстве ядра в неограниченном режиме, поэтому помните о том, какие модули загружаете.
Скрипт weak-modules#
В дополнение к утилите depmod SberLinux предоставляет скрипт weak-modules, также поставляемый с пакетом kmod. weak-modules определяет, какие модули kABI-совместимы с установленными ядрами. При проверке совместимости модулей с ядром weak-modules обрабатывает зависимости спецификаций модулей от более высоких до более низких версий ядра, для которых они были созданы. Каждый модуль обрабатывается независимо от версий ядра.
Список установленных модулей ядра#
Для отображения списка установленных ядер и их индексов используйте команду grubby --info=ALL.
Сценарий использования#
Для отображения списка установленных ядер введите команду:
grubby --info=ALL | grep title
Результат выполнения команды содержит в себе версии всех установленных ядер, а также путь к ним.
Список загруженных в данный момент модулей ядра#
Следующий сценарий описывает, как получить список загруженных в данный момент модулей ядра.
Предварительные условия#
Установлен пакет kmod.
Сценарий использования#
Для получения списка всех загруженных в данный момент модулей ядра введите команду lsmod.
Пример результата выполнения команды:
Module Size Used by
fuse 126976 3
uinput 20480 1
xt_CHECKSUM 16384 1
ipt_MASQUERADE 16384 1
xt_conntrack 16384 1
ipt_REJECT 16384 1
nft_counter 16384 16
nf_nat_tftp 16384 0
nf_conntrack_tftp 16384 1 nf_nat_tftp
tun 49152 1
bridge 192512 0
stp 16384 1 bridge
llc 16384 2 bridge,stp
nf_tables_set 32768 5
nft_fib_inet 16384 1
...
В приведенном выше примере:
первый столбец - имена загруженных в данный момент модулей;
второй столбец - объем памяти для каждого модуля в килобайтах;
третий столбец - количество и (необязательно) имена модулей, которые зависят от конкретного модуля.
Отображение информации о модулях ядра#
Следующий сценарий описывает использование команды modinfo для отображения дополнительной информации о модулях ядра.
Предварительные условия#
Установлен пакет kmod.
Сценарий использования#
Для отображения дополнительной информации о конкретном модуле ядра используйте команду:
modinfo <name_module_kernel>
Например, для отображения подробной информации о модуле virtio_net введите команду:
modinfo virtio_net
Пример результата выполнения команды:
filename: /lib/modules/.../kernel/drivers/net/virtio_net.ko.xz
license: GPL
description: Virtio network driver
sloversion: 9.3
srcversion: F51C55A01C77BBC38330BCF
alias: virtio:d00000001v*
depends: net_failover
retpoline Y
intree: Y
name: virtio_net
...
parm: napi_weight:int
parm: csum:bool
parm: gso:bool
parm: napi_tx:bool
При помощи команды modinfo можно запросить информацию обо всех доступных модулях, независимо от того, загружены они или нет. Записи parm в выводе команды показывают параметры, которые можно установить для модуля, и их ожидаемые значения.
Примечание
При вводе имени модуля ядра не добавляйте расширение .ko.xz в конец имени. Имена модулей ядра не имеют расширений, их имеют соответствующие файлы.
Загрузка модулей ядра во время работы системы#
Оптимальным способом расширения функциональности ядра SberLinux является загрузка дополнительных модулей ядра. Следующий сценарий описывает использование команды modprobe для поиска и загрузки конкретного модуля в работающее в данный момент ядро.
Важно
Описываемые в данном сценарии изменения не сохранятся после перезагрузки системы.
Предварительные условия#
Установлен пакет
kmod.Соответствующий модуль ядра не загружен - для проверки можно посмотреть список загруженных модулей ядра.
Сценарий использования#
Для загрузки модулей ядра во время работы системы выполните следующие шаги:
Выберите модуль ядра, который необходимо загрузить. Модули находятся в каталоге
/lib/modules/$(uname -r)/kernel/<SUBSYSTEM>/.Для загрузки соответствующего модуля ядра используйте команду:
modprobe <name_module>Примечание
При вводе имени модуля ядра не добавляйте расширение
.ko.xzв конец имени. Имена модулей ядра не имеют расширений, их имеют соответствующие файлы.Для того чтобы убедиться, что соответствующий модуль был загружен, используйте команду:
lsmod | grep <name_module>Если модуль был загружен правильно, эта команда отобразит соответствующий модуль ядра.
Например, для проверки корректности загрузки модуля
serio_rawвведите команду:lsmod | grep serio_rawПример результата выполнения команды:
serio_raw 16384 0
Выгрузка модулей ядра во время работы системы#
Следующий сценарий описывает использование команды modprobe для поиска и выгрузки модуля ядра во время работы системы из загруженного в данный момент ядра.
Внимание
Не выгружайте модули ядра, используемые работающей системой. Это может привести к нестабильности или неработоспособности системы.
Важно
После завершения этого сценария модули ядра, определенные для автоматической загрузки при запуске системы, не останутся незагруженными после перезагрузки машины.
Предварительные условия#
Установлен пакет kmod.
Сценарий использования#
Для выгрузки модулей ядра во время работы системы выполните следующие шаги:
Для отображения списка всех загруженных модулей ядра введите команду
lsmod.Выберите модуль ядра, который необходимо выгрузить.
Для выгрузки выбранного модуля ядра используйте команду:
modprobe -r <name_module>Примечание
При вводе имени модуля ядра не добавляйте расширение
.ko.xzв конец имени. Имена модулей ядра не имеют расширений, их имеют соответствующие файлы.Для того чтобы убедиться, что соответствующий модуль был выгружен, используйте команду:
lsmod | grep <name_module>Если модуль был успешно выгружен, эта команда ничего не выведет.
Выгрузка модулей ядра на ранних этапах процесса загрузки#
Иногда возникает необходимость выгрузить модуль ядра в начале процесса загрузки. Например, если модуль ядра содержит код, приводящий к отказу системы отвечать на запросы, и пользователь не может перейти к этапу окончательного отключения вредоносного модуля ядра. В этом случае можно временно заблокировать загрузку модуля ядра с помощью загрузчика.
Важно
Изменения, описанные в этом сценарии, не сохранятся после перезагрузки.
Предварительные условия#
Имеется загружаемый модуль ядра, загрузку которого необходимо предотвратить.
Сценарий использования#
Для редактирования соответствующей записи загрузчика с целью выгрузки модуля ядра до продолжения загрузки системы выполните следующие шаги:
Для вызова меню GRUB при загрузке системы нажмите клавишу Esc.
Для выделения соответствующей записи и выбора необходимого ядра используйте клавиши
↑и↓.Для редактирования выбранной записи нажмите клавишу e.
С помощью клавиш
↑,↓,←и→перейдите к строке, начинающейся сlinux ....В конце указанной строки добавьте
modprobe.blacklist=<name_module>.Для загрузки с измененной конфигурацией нажмите Ctrl+x или F10.
Для проверки того, что соответствующий модуль ядра не загружен, используйте команду:
lsmod | grep <name_module>Если модуль был успешно выгружен, эта команда ничего не выведет.
Автоматическая загрузка модулей ядра во время загрузки системы#
Следующий сценарий описывает, как настроить автоматическую загрузку модуля ядра во время загрузки системы.
Предварительные условия#
Установлен пакет kmod.
Сценарий использования#
Выберите модуль ядра, который необходимо загрузить в процессе загрузки системы.
Модули находятся в каталоге
/lib/modules/$(uname -r)/kernel/<SUBSYSTEM>/.Для создания конфигурационного файла для выбранного модуля используйте команду:
echo <name_module> > /etc/modules-load.d/<name_module>.confПримечание
При вводе имени модуля ядра не добавляйте расширение
.ko.xzв конец имени. Имена модулей ядра не имеют расширений, их имеют соответствующие файлы.Для того чтобы убедиться, что соответствующий модуль был загружен, используйте команду:
lsmod | grep <name_module>Результатом успешного выполнения команды является отображение соответствующего модуля.
Важно
Изменения, описанные в данном сценарии, сохранятся после перезагрузки системы.
Предотвращение автоматической загрузки модулей ядра во время загрузки системы#
Следующий сценарий описывает, как добавить модуль ядра в список запрещенных, чтобы он не загружался автоматически в процессе загрузки системы.
Предварительные условия#
Установлен пакет
kmod.Соответствующий модуль ядра не требуется для текущей конфигурации системы.
Сценарий использования#
Для отображения списка модулей, загруженных в действующем ядре, введите команду
lsmod.Пример результата выполнения команды:
Module Size Used by fuse 126976 3 xt_CHECKSUM 16384 1 ipt_MASQUERADE 16384 1 uinput 20480 1 xt_conntrack 16384 1 ...Выберите модуль ядра, загрузку которого необходимо предотвратить.
Для определения незагруженного модуля ядра, который необходимо предотвратить от потенциальной загрузки, отобразите содержание каталога
/lib/modules/<version_kernel>/kernel/<subsystem>/, выполнив командуlsс указанием соответствующего каталога.Для создания конфигурационного файла, выполняющего функции списка запрещенных модулей, введите команду:
touch /etc/modprobe.d/denylist.confВ текстовом редакторе скомбинируйте имена модулей, которые необходимо исключить из автоматической загрузки в ядро, с помощью команды конфигурации
blacklist.Например:
# Prevents <module-kernel-1> from being loaded blacklist <name_module_1> install <name_module_1> /bin/false # Prevents <module-kernel-2> from being loaded blacklist <name_module_2> install <name_module_2> /bin/false ...Поскольку команда
blacklistне препятствует загрузке модуля в качестве зависимости для другого модуля ядра, не находящегося в списке запрещенных, необходимо также определить строкуinstall. В этом случае система запустится с использованием параметра/bin/falseвместо установки модуля. Строки, начинающиеся с#, являются комментариями, которые используются, чтобы сделать файл более читабельным.Примечание
При вводе имени модуля ядра не добавляйте расширение
.ko.xzв конец имени. Имена модулей ядра не имеют расширений, их имеют соответствующие файлы.Для создания резервной копии текущего исходного образа RAM-диска перед пересборкой введите команду:
cp /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).bak.$(date +%m-%d-%H%M%S).imgАльтернативный вариант - создайте резервную копию исходного образа RAM-диска, соответствующего версии ядра, для которой необходимо запретить автоматическую загрузку модулей ядра, введя команду:
cp /boot/initramfs-<version>.img /boot/initramfs-<version>.img.bak.$(date +%m-%d-%H%M%S)Для того чтобы изменения вступили в силу, сгенерируйте новый исходный образ RAM-диска, выполнив команду:
dracut -f -vВ случае, если создается первоначальный образ RAM-диска для версии ядра, отличной от используемой системой в данный момент, укажите целевую версию
initramfsи версию ядра, выполнив команду:dracut -f -v /boot/initramfs-<version>.imgДля перезагрузки системы введите команду:
reboot
Важно
Изменения, описанные в этом сценарии, вступят в силу и сохранятся после перезагрузки системы. Если ключевой модуль ядра помещен в список запрещенных некорректно, то возможен перевод системы в нестабильное/неработоспособное состояние.
Компиляция пользовательских модулей ядра#
Следующий сценарий описывает, как собрать пробный модуль ядра в соответствии с требованиями различных конфигураций на аппаратном и программном уровне.
Предварительные условия#
Установлены пакеты
kernel-devel,gccиelfutils-libelf-devel.Создан каталог
/root/testmodule/, в котором компилируется пользовательский модуль ядра.
Сценарий использования#
Создайте файл
/root/testmodule/test.cсо следующим содержимым:#include <linux/module.h> #include <linux/kernel.h> int init_module(void) { printk("Hello World\n This is a test\n"); return 0; } void cleanup_module(void) { printk("Good Bye World"); } MODULE_LICENSE("GPL");Файл
test.cявляется исходным файлом, обеспечивающим основную функциональность модуля ядра. Файл был создан в специальном каталоге/root/testmodule/для организационных целей. После компиляции модуля/root/testmodule/каталог будет содержать несколько файлов.Файл
test.cвключает в себя файлы из системных библиотек:заголовочный файл
linux/kernel.h- необходим для функцииprintk()в примере кода;файл
linux/module.h- содержит определения функций и макросов, которые будут совместно использоваться несколькими исходными файлами, написанными на языке программирования C.
Для запуска и завершения работы функции ведения журнала ядра
printk(), выводящей текст, используйте функцииinit_module()иcleanup_module().Создайте файл
/root/testmodule/Makefileсо следующим содержимым:obj-m := test.oВ результате файл
Makefileсодержит инструкцию, по которой компилятор должен создать объектный файл со специальным именемtest.o. Директиваobj-mуказывает, что результирующий файлtest.koбудет скомпилирован как загружаемый модуль ядра. Альтернативная директиваobj-yпредписывает сборкуtest.koв качестве встроенного модуля ядра.Для компиляции модуля ядра введите команду:
make -C /lib/modules/$(uname -r)/build M=/root/testmodule modulesПример результата выполнения команды:
make: Entering directory '/usr/src/kernels/5.14.0-70.17.1.el9_0.x86_64' CC [M] /root/testmodule/test.o MODPOST /root/testmodule/Module.symvers CC [M] /root/testmodule/test.mod.o LD [M] /root/testmodule/test.ko BTF [M] /root/testmodule/test.ko Skipping BTF generation for /root/testmodule/test.ko due to unavailability of vmlinux make: Leaving directory '/usr/src/kernels/5.14.0-70.17.1.el9_0.x86_64'Компилятор создает объектный файл (
test.o) для каждого исходного файла (test.c) в качестве промежуточного шага перед объединением их в окончательный модуль ядра (test.ko).В результате компиляции каталог
/root/testmodule/содержит дополнительные файлы скомпилированного пользовательского модуля ядра. Сам скомпилированный модуль представлен файломtest.ko.
Для проверки результатов исполнения сценария выполните следующие шаги:
Для отображения и проверки содержимого каталога
/root/testmodule/введите команду:ls -l /root/testmodule/Пример результата выполнения команды:
total 152 -rw-r—r--. 1 root root 16 Jul 26 08:19 Makefile -rw-r—r--. 1 root root 25 Jul 26 08:20 modules.order -rw-r—r--. 1 root root 0 Jul 26 08:20 Module.symvers -rw-r—r--. 1 root root 224 Jul 26 08:18 test.c -rw-r—r--. 1 root root 62176 Jul 26 08:20 test.ko -rw-r—r--. 1 root root 25 Jul 26 08:20 test.mod -rw-r—r--. 1 root root 849 Jul 26 08:20 test.mod.c -rw-r—r--. 1 root root 50936 Jul 26 08:20 test.mod.o -rw-r—r--. 1 root root 12912 Jul 26 08:20 test.oДля копирования модуля ядра в каталог
/lib/modules/$(uname -r)/введите команду:cp /root/testmodule/test.ko /lib/modules/$(uname -r)/Для обновления списка модульных зависимостей введите команду:
depmod -aДля загрузки модуля ядра введите команду:
modprobe -v testПример результата выполнения команды:
insmod /lib/modules/5.14.0-1.el9.x86_64/test.koДля того чтобы убедиться, что модуль ядра был успешно загружен, введите команду:
lsmod | grep testПример результата выполнения команды:
test 16384 0Для вывода последних сообщений из кольцевого буфера ядра введите команду:
dmesgПример результата выполнения команды:
[74422.545004] Hello World This is a test
Настройка параметров командной строки ядра#
С помощью параметров командной строки ядра можно изменять поведение некоторых компонентов ядра SberLinux во время загрузки. Системный администратор имеет полный контроль над тем, какие параметры поведения ядра устанавливаются при загрузке; некоторые из них можно настроить только во время загрузки.
Важно
Изменение поведения системы посредством изменения параметров командной строки ядра может иметь негативные последствия для системы. Всегда тестируйте изменения перед их развертыванием в рабочей среде.
Введение в параметры командной строки ядра#
С помощью параметров командной строки ядра можно перезаписать значения по умолчанию и установить определенные аппаратные настройки.
Во время загрузки системы можно настроить:
ядро SberLinux;
начальный RAM-диск;
функции пользовательского пространства.
По умолчанию параметры командной строки ядра для систем, использующих загрузчик GRUB, определены в конфигурационном файле загрузочной записи для каждой загрузочной записи ядра.
Для изменения файлов конфигурации загрузчика можно использовать утилиту grubby. С помощью grubby возможно выполнение следующих действий:
изменение записи загрузки, установленной по умолчанию;
добавление/удаление аргументов из меню GRUB.
Загрузочные записи#
Загрузочная запись — это набор параметров, которые хранятся в файле конфигурации и привязаны к конкретной версии ядра. Количество загрузочных записей как минимум совпадает с количеством ядер, установленных в системе. Файл конфигурации загрузочной записи находится в каталоге /boot/loader/entries/.
Приведенное выше имя файла состоит из идентификатора машины, хранящегося в файле /etc/machine-id, и версии ядра.
Файл конфигурации загрузочной записи содержит информацию о версии ядра, изначальном образе RAM-диска и параметрах командной строки ядра.
Изменение параметров командной строки ядра для всех загрузочных записей#
Следующий сценарий описывает, как изменить параметры командной строки ядра для всех загрузочных записей в системе.
Важно
При установке более новой версии ядра в системах SberLinux инструмент grubby передает аргументы командной строки из предыдущей версии ядра.
Предварительные условия#
Установлена утилита grubby.
Сценарии использования#
Для добавления параметра используйте команду:
grubby --update-kernel=ALL --args="<new_parameter>"Для систем, использующих загрузчик GRUB, данная команда добавляет новый параметр ядра в каждый файл
/boot/loader/entries/<note>.conf.Для удаления параметра используйте команду:
grubby --update-kernel=ALL --remove-args="<delete_parameter>"
Изменение параметров командной строки ядра для одной загрузочной записи#
Следующий сценарий описывает, как изменить параметры командной строки ядра для одной загрузочной записи в системе.
Предварительные условия#
Установлена утилита grubby.
Сценарии использования#
Для добавления параметра используйте команду:
grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="<new_parameter>"Для удаления параметра используйте команду:
grubby --update-kernel=/boot/vmlinuz-$(uname -r) --remove-args="<delete_parameter>"
Важно
grubby изменяет и сохраняет параметры командной строки ядра для отдельной загрузочной записи в файле /boot/loader/entries/<note>.conf.
Временное изменение параметров командной строки ядра во время загрузки#
Следующий сценарий описывает, как внести временные изменения в запись меню ядра, изменив параметры на время одной загрузки.
Примечание
Данный сценарий применяется только для однократной загрузки и не вносит постоянных изменений.
Сценарий использования#
Войдите в меню загрузки GRUB2, нажав клавишу Esc при запуске системы.
Выберите ядро, которое необходимо запустить.
Нажмите клавишу e, чтобы отредактировать параметры ядра.
Найдите командную строку ядра, переместив курсор вниз. Командная строка ядра начинается с
linux....Переместите курсор в конец строки.
Примечание
Для перехода к началу строки нажмите Ctrl+a, для перехода к концу строки - Ctrl+e.
Отредактируйте необходимые параметры ядра. Например:
Для запуска системы в аварийном режиме добавьте параметр
emergencyв конец строкиlinux...Для включения системных сообщений удалите параметры
rhgbиquiet.
Для загрузки системы с выбранным ядром и измененными параметрами командной строки нажмите Ctrl+x.
Важно
Для выхода из режима редактирования командной строки и отмены всех внесенных изменений нажмите клавишу Esc.
Настройка параметров GRUB для подключения последовательного консольного соединения#
Последовательная консоль полезна, когда нужно подключиться к headless-серверу или встроенной системе при неработающей сети. Или, например, в случае необходимости обхода правил безопасности и получения доступа для входа в другую систему.
Для использования последовательного консольного соединения необходимо настроить некоторые параметры GRUB, используемые по умолчанию.
Сценарий использования#
Добавьте следующие две строки в файл
/etc/default/grub:GRUB_TERMINAL="serial" GRUB_SERIAL_COMMAND="serial --speed=9600 --unit=0 --word=8 --parity=no --stop=1"Первая строка отключает графический терминал. Ключ
GRUB_TERMINALпереопределяет значения ключейGRUB_TERMINAL_INPUTиGRUB_TERMINAL_OUTPUT.Вторая строка настраивает скорость передачи данных в бодах
--speed, контроль четности--parityи другие значения в соответствии со средой и оборудованием.Примечание
Гораздо более высокая скорость передачи данных, например
115200, предпочтительнее для таких задач, как просмотр файлов журнала.Обновите файл конфигурации GRUB.
На машинах на базе BIOS:
grub2-mkconfig -o /boot/grub2/grub.cfgНа машинах на базе UEFI:
grub2-mkconfig -o /boot/efi/EFI/sberlinux/grub.cfg
Для того чтобы изменения вступили в силу, перезагрузите систему.
Настройка параметров ядра во время выполнения#
Системный администратор может настраивать многие аспекты поведения ядра SberLinux во время выполнения. Настраивайте параметры ядра во время выполнения с помощью команды sysctl и путем изменения файлов конфигурации в каталогах /etc/sysctl.d/ и /proc/sys/.
Важно
Настройка параметров ядра в рабочей системе требует тщательного планирования. Незапланированные изменения могут привести к нестабильной работе ядра. Убедитесь, что используете допустимые параметры, прежде чем вносить изменения в настройки ядра.
Параметры ядра#
Параметры ядра — это настраиваемые значения, которые можно настроить во время работы системы. Для вступления изменений в силу нет необходимости перезагружать или перекомпилировать ядро.
К параметрам ядра можно обратиться через:
команду
sysctl;виртуальную файловую систему, скомпонованную в каталоге
/proc/sys/;файлы конфигурации в каталоге
/etc/sysctl.d/.
Настраиваемые объекты разделены подсистемой ядра на классы. SberLinux имеет следующие настраиваемые классы:
Таблица. Классы в sysctl
Настраиваемый класс |
Подсистема |
|---|---|
|
Домены исполнения и персонализации |
|
Криптографические интерфейсы |
|
Интерфейсы отладки ядра |
|
Информация о конкретном устройстве |
|
Глобальные и специальные настройки файловой системы |
|
Глобальные настройки ядра |
|
Сетевые настройки |
|
Удаленный вызов процедур Sun (NFS) |
|
Ограничения пользовательских namespace |
|
Настройка и управление памятью, буферами и кешем |
Временная настройка параметров ядра с помощью sysctl#
Следующий сценарий описывает, как использовать команду sysctl для временной установки параметров ядра во время выполнения. Команда также полезна для вывода списка и фильтрации настраиваемых параметров.
Сценарий использования#
Для перечисления всех параметров и их значений введите команду:
sysctl -aПримечание
Команда
sysctl -aотображает параметры ядра, настраиваемые во время выполнения и во время загрузки.Для временной настройки параметра используйте команду:
sysctl <custom_class>.<parameter>=<target_value>Приведенный выше пример команды изменяет значение параметра во время работы системы. Изменения вступают в силу немедленно, без перезагрузки.
Примечание
После перезагрузки системы внесенные изменения вернутся к значениям по умолчанию.
Постоянная настройка параметров ядра с помощью sysctl#
Следующий сценарий описывает, как использовать команду sysctl для постоянной установки параметров ядра.
Сценарий использования#
Для перечисления всех параметров и их значений введите команду:
sysctl -aКоманда отображает все параметры ядра, которые можно настроить во время выполнения и во время загрузки.
Для настройки параметра на постоянной основе используйте команду:
sysctl -w <custom_class>.<parameter>=<target_value> >> /etc/sysctl.confДанный пример команды изменяет настраиваемое значение и записывает его в файл
/etc/sysctl.conf, переопределяющий значения параметров ядра по умолчанию. Изменения вступают в силу немедленно и на постоянной основе, без необходимости перезагрузки.
Примечание
Для изменения параметров ядра на постоянной основе можно также вручную корректировать файлы конфигурации в каталоге /etc/sysctl.d/.
Использование файлов конфигурации в /etc/sysctl.d/ для настройки параметров ядра#
Следующий сценарий описывает, как вручную изменить файлы конфигурации в каталоге /etc/sysctl.d/ для установки постоянных параметров ядра.
Сценарий использования#
Для создания нового файла конфигурации в каталоге
/etc/sysctl.d/используйте команду:vim /etc/sysctl.d/<имя_файла.conf>Добавьте необходимые параметры ядра, по одному в строке, следующим образом:
<custom_class>.<parameter>=<target_value> ...Сохраните файл конфигурации.
Перезагрузите машину, чтобы изменения вступили в силу.
В качестве альтернативного способа применения изменений, без перезагрузки, можно использовать команду:
sysctl -p /etc/sysctl.d/<имя_файла.conf>Данная команда позволяет прочитать значения из файла конфигурации, созданного ранее.
Временная настройка параметров ядра с помощью /proc/sys/#
Следующий сценарий описывает, как временно установить параметры ядра с помощью файлов в каталоге виртуальной файловой системы /proc/sys/.
Сценарий использования#
Для определения параметра ядра, который необходимо настроить, используйте команду:
ls -l /proc/sys/<настраиваемый_класс>/Результат выполнения команды - доступные для записи файлы - можно использовать для настройки ядра. Файлы с правами только на чтение предоставляют информацию о текущих настройках.
Для присвоения целевого значения параметру ядра используйте команду:
echo <target_value> > /proc/sys/<custom_class>/<parameter>Команда вносит изменения в конфигурацию, которые исчезнут после перезапуска системы.
Опционально, для проверки значения вновь установленного параметра ядра используйте команду:
cat /proc/sys/<custom_class>/<parameter>
Начало работы с ведением журнала ядра#
Файлы журналов (log-файлы) — это файлы, содержащие сообщения о системе, включая ядро, службы и приложения, запущенные в ней. Система ведения журналов в SberLinux основана на встроенном протоколе системного журнала. Различные утилиты используют эту систему для записи событий и организации их в log-файлы. Эти файлы полезны при проверке операционной системы или устранении неполадок.
Кольцевой буфер ядра#
В процессе загрузки консоль предоставляет много важной информации о начальном этапе запуска системы. Чтобы избежать потери ранних сообщений, ядро использует так называемый кольцевой буфер. В этом буфере хранятся все сообщения, включая загрузочные, сгенерированные функцией printk() в коде ядра. Сообщения из кольцевого буфера ядра затем считываются и сохраняются в log-файлах на постоянном запоминающем устройстве (ПЗУ).
Кольцевой буфер ядра представляет собой циклическую структуру данных фиксированного размера, жестко запрограммированную в ядре. Пользователи могут отображать данные, хранящиеся в кольцевом буфере ядра, с помощью команды dmesg или файла /var/log/boot.log. Когда кольцевой буфер заполнен, новые данные перезаписывают старые.
Роль printk в ведении журнала ядра и его уровнях#
Каждое сообщение ядра связано с соответствующим уровнем журнала, определяющим важность сообщения. Кольцевой буфер ядра собирает сообщения всех уровней журнала. Параметр, определяющий, какие сообщения из буфера выводятся на консоль, - это kernel.printk.
Значения уровней журнала ядра:
0— Аварийная ситуация в ядре. Система непригодна для использования.1— Тревога. Необходимо немедленно принять меры.2— Состояние ядра считается критическим.3— Общая ошибка ядра.4— Общее предупреждение.5— Уведомление о нормальном, но требующем внимания состоянии.6— Информационное сообщение.7— Сообщение уровня отладки.
По умолчанию kernel.printk в SberLinux содержит четыре значения. Для отображения данных значений введите команду:
sysctl kernel.printk
Результат выполнения команды:
kernel.printk = 7 4 1 7
Приведенные четыре значения определяют следующее, в порядке перечисления:
Уровень журнала консоли - определяет самый низкий приоритет сообщений, выводимых на консоль.
Уровень журнала по умолчанию - для сообщений, за которыми явно не закреплен уровень журнала.
Устанавливает минимально возможную конфигурацию для уровня журнала консоли.
Устанавливает значение по умолчанию для уровня журнала консоли во время загрузки.
Каждое из данных значений определяет отдельное правило обработки сообщений об ошибках.
Важно
Значение printk по умолчанию 7 4 1 7 позволяет лучше отлаживать работу ядра. Однако в сочетании с последовательной консолью данный параметр printk может вызвать интенсивные сбои ввода-вывода, которые могут привести к временной потере работоспособности системы. Для избежания подобных ситуаций printk задаются значения 4 4 1 7 - это работает за счет потери дополнительной отладочной информации.
Также обратите внимание, что некоторые параметры командной строки ядра, такие как quiet или debug, изменяют значения kernel.printk по умолчанию.