Поиск по сайту:

Как изменить параметры времени выполнения ядра постоянным и непостоянным способом


В Части 13 этой серии статей о LFCS (Сертифицированный системный администратор Linux Foundation) мы объяснили, как использовать GRUB для изменения поведения системы путем передачи параметров ядру для текущего процесса загрузки.

Аналогичным образом вы можете использовать командную строку в работающей системе Linux, чтобы изменить определенные параметры ядра во время выполнения как однократное изменение, так и навсегда, отредактировав файл конфигурации.

Таким образом, вы можете без особых затруднений включать или отключать параметры ядра на лету, когда это необходимо из-за необходимого изменения в способе работы системы.

Знакомство с файловой системой /proc

Последняя спецификация стандарта иерархии файловой системы указывает, что /proc представляет собой метод по умолчанию для обработки информации о процессе и системе, а также другой информации о ядре и памяти. В частности, в /proc/sys можно найти всю информацию об устройствах, драйверах и некоторых функциях ядра.

Фактическая внутренняя структура /proc/sys сильно зависит от используемого ядра, но вы, скорее всего, найдете внутри следующие каталоги. В свою очередь, каждый из них будет содержать другие подкаталоги, в которых хранятся значения для каждой категории параметров:

  1. dev: параметры для конкретных устройств, подключенных к машине.
  2. fs: конфигурация файловой системы (например, квоты и индексные дескрипторы).
  3. ядро: конфигурация, специфичная для ядра.
  4. net: конфигурация сети.
  5. vm: использование виртуальной памяти ядра.

Чтобы изменить параметры времени выполнения ядра, мы будем использовать команду sysctl. Точное количество параметров, которые можно изменить, можно просмотреть с помощью:

sysctl -a | wc -l

Если вы хотите просмотреть полный список параметров ядра, просто выполните:

sysctl -a 

Поскольку выходные данные приведенной выше команды будут состоять из МНОГО строк, мы можем использовать конвейер, за которым следует less, чтобы проверить его более тщательно:

sysctl -a | less

Давайте посмотрим на первые несколько строк. Обратите внимание, что первые символы в каждой строке соответствуют именам каталогов внутри /proc/sys:

Например, выделенная строка:

dev.cdrom.info = drive name:        	sr0

указывает, что sr0 — это псевдоним оптического привода. Другими словами, именно так ядро «видит» этот диск и использует это имя для обращения к нему.

В следующем разделе мы объясним, как изменить другие «более важные» параметры времени выполнения ядра в Linux.

Как изменить или модифицировать параметры времени выполнения ядра Linux

Основываясь на том, что мы объяснили до сих пор, легко увидеть, что имя параметра соответствует структуре каталогов внутри /proc/sys, где его можно найти.

Например:

dev.cdrom.autoclose → /proc/sys/dev/cdrom/autoclose
net.ipv4.ip_forward → /proc/sys/net/ipv4/ip_forward

Проверьте параметры ядра Linux

Тем не менее, мы можем просмотреть значение определенного параметра ядра Linux, используя либо sysctl, за которым следует имя параметра, либо прочитав связанный файл:

sysctl dev.cdrom.autoclose
cat /proc/sys/dev/cdrom/autoclose
sysctl net.ipv4.ip_forward
cat /proc/sys/net/ipv4/ip_forward

Установите или измените параметры ядра Linux

Чтобы установить значение параметра ядра, мы также можем использовать sysctl, но с опцией -w, за которой следует имя параметра, знак равенства и желаемое значение.

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

echo 0 > /proc/sys/net/ipv4/ip_forward
sysctl -w net.ipv4.ip_forward=0

Важно отметить, что параметры ядра, заданные с помощью sysctl, будут применяться только во время текущего сеанса и исчезнут при перезагрузке системы.

Чтобы установить эти значения навсегда, отредактируйте /etc/sysctl.conf, указав нужные значения. Например, чтобы отключить пересылку пакетов в /etc/sysctl.conf, убедитесь, что в файле присутствует эта строка:

net.ipv4.ip_forward=0

Затем выполните следующую команду, чтобы применить изменения к текущей конфигурации.

sysctl -p

Другие примеры важных параметров времени выполнения ядра:

fs.file-max определяет максимальное количество дескрипторов файлов, которые ядро может выделить для системы. В зависимости от предполагаемого использования вашей системы (веб/база данных/файловый сервер, например), вы можете изменить это значение в соответствии с потребностями системы.

В противном случае вы получите в лучшем случае сообщение об ошибке «Слишком много открытых файлов», а в худшем – может помешать загрузке операционной системы.

Если из-за невинной ошибки вы оказались в последней ситуации, загрузитесь в однопользовательском режиме (как описано в Части 13 — Настройка и устранение неполадок загрузчика Linux Grub) и отредактируйте /etc/sysctl.conf как проинструктировал ранее. Чтобы установить такое же ограничение для каждого пользователя, обратитесь к Части 14 — Мониторинг и установка лимита использования процессов Linux этой серии.

kernel.sysrq используется для включения клавиши SysRq на вашей клавиатуре (также известной как клавиша экрана печати), чтобы позволить определенным комбинациям клавиш вызывать экстренные действия, когда система стал неотзывчивым.

Значение по умолчанию (16) указывает, что система будет учитывать комбинацию Alt+SysRq+key и выполнять действия, перечисленные в файле sysrq.c. документация находится на сайте kernel.org (где ключ — это одна буква в диапазоне b-z). Например, Alt+SysRq+b принудительно перезагрузит систему (используйте это в крайнем случае, если ваш сервер не отвечает).

Внимание! Не пытайтесь нажать эту комбинацию клавиш на виртуальной машине, поскольку это может привести к перезагрузке вашей хост-системы!

Если установлено значение 1, net.ipv4.icmp_echo_ignore_all будет игнорировать запросы ping и отбрасывать их на уровне ядра. Это показано на изображении ниже — обратите внимание, как запросы ping теряются после установки этого параметра ядра:

Лучший и простой способ установить отдельные параметры времени выполнения — использовать файлы .conf внутри /etc/sysctl.d, группируя их по категориям.

Например, вместо установки net.ipv4.ip_forward=0 и net.ipv4.icmp_echo_ignore_all=1 в /etc/sysctl.conf, мы можем создать новый файл с именем net.conf внутри /etc/sysctl.d:

echo "net.ipv4.ip_forward=0" > /etc/sysctl.d/net.conf
echo "net.ipv4.icmp_echo_ignore_all=1" >> /etc/sysctl.d/net.conf

Если вы решите использовать этот подход, не забудьте удалить те же строки из /etc/sysctl.conf.

Краткое содержание

В этой статье мы объяснили, как изменять параметры времени выполнения ядра, как постоянные, так и непостоянные, с помощью sysctl, /etc/sysctl.conf и файлов внутри /. и т.д./sysctl.d.

В документации sysctl вы можете найти дополнительную информацию о значении других переменных. Эти файлы представляют собой наиболее полный источник документации о параметрах, которые можно установить с помощью sysctl.

Вам помогла данная статья? Мы очень надеемся, что вы это сделали. Не стесняйтесь сообщать нам, если у вас есть какие-либо вопросы или предложения по улучшению.