• База знаний
  • /
  • Блог
  • /
  • Wiki
  • /
+380 (44) 364 05 71

Что такое sysctl

Оглавление

Ядро Linux и его настройка

Ядро Linux — это основа операционной системы. В стандартных сборках Линукс, таких как Ubuntu, Debian, CentOS и т.д., нам не нужно самим собирать ядро ОС, это уже сделано разработчиками данных дистрибутивов. Однако, если у вас появилась необходимость собрать наиболее свежую версию ядра или сформировать свой собственный дистрибутив ОС Линукс, то перед вами встанет задача «как собрать ядро вручную». На этом этапе можно заложить в ядро такие базовые настройки ОС, которые именно вам будут нужны для работы.

Еще одна задача, с которой может столкнуться в своей работе начинающий системный администратор — это настройка ядра системы прямо в ходе работы, т.е. «на лету». Не все специалисты пользуются этими возможностями, некоторые предпочитают выполнить базовые настройки операционной системы, а затем настраивать уже сами приложения. Конечно же, с помощью таких изменений переменных параметров ядра «в ходе работы ОС», администратор не подключит какие-то драйвера новых устройств или новые модули, которые не поддерживаются данной системой, однако можно настроить сетевой стек, сделать оптимальные «установки под себя» параметров процессора, памяти, самого ядра ОС и т.д.

Все это можно выполнить, научившись работать с утилитой sysctl, которая применяется в FreeBSD и Linux. Если системный инженер подойдет грамотно к настройкам ядра с помощью sysctl (а не просто найдет типовые команды из мануалов на сайтах), то возможно будет достичь оптимальных результатов работы системы. Например, таким образом настраивают высоконагруженные серверные ОС или даже выстраивают грамотную защиту от DDoS атак.

В нашей статье постараемся дать понятия о принципах работы с sysctl linux, а также привести примеры наиболее часто используемых команд в настройке ядра Линукс.

Как работать с sysctl

Для начала работы нам необходимо вывести на экран все доступные опции, делается с помощью команды:

sysctl -a

Вывод параметров sysctl -a

Просмотреть все параметры sysctl может любой пользователь Linux (в нашем примере показываем на Ubuntu 20), а вот изменять параметры ядра может только пользователь с правами root.

Также можно посмотреть значение одного параметра, который вас интересует в конкретный момент, например*:

sysctl net.ipv4.ip_forward

Вывод конкретного параметра sysctl

*Примечание: данная команда разрешает или запрещает маршрутизацию пакетов.

Надо отметить, что если значение параметра равно 0, то функция запрещена, а если равно 1, то разрешена.

Для вывода списка сразу всех переменных, которые начинаются, к примеру с vm, наберите в терминале команду:

sysctl vm

Вывод параметров, начинающихся с vm

Ниже разъясним основные опции команды sysctl:

man sysctl — выводит подробную документацию по данной команде;

Команда man sysctl

sysctl -n — выведет на экран только значения переменных;

sysctl -N — покажет вам только названия переменных, без их значений;

sysctl -A — показывает все доступные настройки ядра, но в табличной форме;

sysctl -w "переменная"="значение" — используется для изменения значения переменной;

sysctl -p — выводит на экран настройки из файла /etc/sysctl.conf (или другого указанного файла настроек).

Покажем на практике, как использовать данные команды системному администратору в своей работе.

Например, попробуем разрешить маршрутизацию пакетов, выполнив команду:

sysctl -w net.ipv4.ip_forward=1

Если мы просто применим команду без опции -w, то сделанные изменения не сохранятся после перезагрузки ОС:

sysctl net.ipv4.ip_forward=1

Как правило, все показанные нами переменные параметров ядра Линукс, хранятся в конфигурационном файле /etc/sysctl.conf.

Файл /etc/sysctl.conf

Однако, некоторые переменные могут быть записаны в следующих каталогах и файлах:

/run/sysctl.d/*.conf
/etc/sysctl.d/*.conf
/usr/local/lib/sysctl.d/*.conf
/usr/lib/sysctl.d/*.conf
/lib/sysctl.d/*.conf

Для того, чтобы вернуть настройки ядра к состоянию «до сделанных вами изменений», необходимо выполнить команду:

sysctl --system

Команда sysctl --system

Для начала, можно поэкспериментировать с настройками ядра в «ручном режиме» с помощью выполнения данных команд в терминале. Если сделанные вами настройки — «рабочие» и помогают в оптимизации работы ядра вашей ОС, то можете их внести на постоянной основе в файл /etc/sysctl.conf.

Виртуальная файловая система /proc

Существует еще один интересный способ для настройки параметров ядра Linux — это работа с директорией /proc/sys. Здесь мы используем команду echo для изменения значений параметров настроек ядра Линукс, а для вывода на экран этих значений используем cat.

Ниже покажем на простых примерах, как это можно сделать на практике (по аналогии с командами sysctl). Итак, выведем на экран значение параметра net.ipv4.ip_forward данным способом (на скриншоте ниже показано, как вывести значение данного параметра двумя способами):

cat /proc/sys/net/ipv4/ip_forward

вывод команды cat

Для изменения значения данного параметра с 0 на 1, выполним команду*:

echo "1" > /proc/sys/net/ipv4/ip_forward

*Изменения, сделанные таким способом, будут работать до первой перезагрузки ОС.

На скриншоте ниже показано, как вывести на экран и другие параметры настроек ядра Ubuntu, к слову, мы предоставляем VPS хостинг под эту операционную систему:

работа с директорией /proc/sys

Примеры некоторых параметров ядра Linux

Приведем некоторые наиболее важные и часто используемые переменные ядра Линукс и расскажем, что они означают и как их настроить:

  • fs.file-max — показывает максимальное значение для дескрипторов файлов, создаваемых и обрабатываемых ядром Линукс. "По умолчанию" устанавливается число, равное 10% оперативной памяти компьютера.

    Настройка параметра fs.file-max

  • fs.aio-nr — обозначает заданное число операций ввода и вывода для файловой системы.
  • cad_pid — указывает идентификационный номер процесса (PID), который присваивается сигналу, при нажатии Ctrl+Alt+Del.
  • kernel.ctrl-alt-del — параметр, отвечающий за правильную перезагрузку по комбинации клавиш Ctrl+Alt+Del (связан с параметром cad_pid). При значении 0, ОС передает сигнал процессу, назначенному в cad_pid, если значение параметра больше 0, то ОС выполняет перезагрузку немедленно.
  • kernel.hostname — параметр позволяет произвести изменение имени вашего компьютера «на лету» (без процесса перезагрузки).
  • kernel.modules_disabled — выключает загрузку модулей ядра.
  • kernel.panic — выставлено количество секунд, оставшихся до начала процесса перезагрузки (после случая ошибки в ядре).
  • kernel.randomize_va_space — важный параметр, обеспечивающий безопасность вашей ОС, (служит против атак на переполнение буфера), включен «по умолчанию»
  • kernel.sysrq — включает все функции (значение 1) или отключает (значение 0) для управления ядром при помощи SysRQ.
  • abi.vsyscall32 — параметр, разрешающий (при его значении 1) исполнение 32-разрядных программ в 64-разрядной ОС.
  • debug.exception-trace — служит для вывода значений регистров процессора, стека вызова процедур в случае ошибки в ядре. Установлен во включенном «по умолчанию» состоянии.
  • dev.cdrom.autoclose — параметр предназначен для управления CDROM, при попытке его монтирования, может его автоматически закрыть (отключен «по умолчанию»).
  • net.ipv4.ip_forward — данная настройка применяется для роутеров, она разрешает или запрещает маршрутизацию пакетов.
  • net.ipv4.ip_local_port_range — определяет диапазон локальных портов, разрешенных для использования вашими программами.
  • net.ipv4.tcp_rmem — указывает объем памяти, которая выделена для работы TCP.
  • vm.laptop_mode — данный параметр будет полезен для работы ноутбуков, в частности, для экономии заряда батареи. Эта настройка позволяет хранить данные какое-то время в оперативной памяти компьютера (а не сразу записывать их на винчестер).
  • vm.swappiness — этот параметр служит для установки % свободной памяти, при достижении этого значения, данные будут автоматически переводиться в swap. «По умолчанию» в Ubuntu установлено значение этого параметра, равное 60. Т.е. ОС будет переносить в раздел swap такие разделы памяти, которые были не использованы в течении длительного промежутка времени.

Выше, мы привели только некоторые переменные настроек ядра Linux, для применения всех возможных параметров, рекомендуем изучать документацию на вашу ОС. Например, работая с переменными типа net. можно выставить оптимальные сетевые настройки для вашей операционной системы.

Заключение

В этой статье мы осветили достаточно актуальную тему для системного администратора, как настроить ядро ОС Linux «на лету» с помощью sysctl и виртуальной файловой системы /proc. Не каждый специалист знаком с методами гибкой настройки ядра ОС, поэтому, прежде чем применять «любые настройки из Интернета», необходимо глубоко изучить данный вопрос, посмотреть параметры конкретной ОС, поэкспериментировать с различными значениями переменных (не сохраняя их) и уже затем, получив положительный результат — применять эти методы на постоянной основе. Потому что, не всегда «настройки из мануалов в Интернете» подходят всем подряд пользователям Линукс, и любые изменения настроек ядра системы надо выполнять крайне осторожно.

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

Подписывайтесь на наш телеграмм-канал t.me/freehostua, чтоб быть в курсе новых полезных материалов. Смотрите наш Youtube канал по администрированию Linux серверов www.youtube.com/freehostua.

Дата: 19.04.2021
Автор: Евгений
Голосование

Авторам статьи важно Ваше мнение. Будем рады его обсудить с Вами:

comments powered by Disqus
Спасибо, что выбираете FREEhost.UA