Линукс включить все ядра

Настройка ядра Linux

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

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

Как выполняется настройка?

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

echo «1» > /proc/sys/net/ipv4/ip_forward

Значение 1 будет записано в файл ipv4_forward. Но измененные таким способом параметры не сохраняются после перезагрузки. Перед тем как рассматривать как сохранить параметры ядра linux из proc рассмотрим еще один способ их модификации.

Для работы с параметрами ядра есть утилита sysctl. Она представляет все параметры в виде переменных. Имена этих переменных соответствуют адресу файла в папке /proc/sys только слеш заменен точкой. Например:

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

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

sysctl -w net.ipv4.ip_forward=1

Вы можете также сразу посмотреть все доступные переменные с помощью опции -a:

abi.vsyscall32 = 1
debug.exception-trace = 1
dev.cdrom.autoclose = 0
dev.cdrom.autoeject = 0
dev.cdrom.check_media = 0
dev.cdrom.debug = 0
.
vm.stat_interval = 1
vm.swappiness = 60
vm.user_reserve_kbytes = 131072
vm.vfs_cache_pressure = 100
vm.zone_reclaim_mode = 0

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

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

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

* Applying /boot/sysctl.conf-4.1.21-14-default .
kernel.hung_task_timeout_secs = 0
kernel.msgmax = 65536
kernel.msgmnb = 65536
kernel.shmmax = 0xffffffffffffffff
kernel.shmall = 0x0fffffffffffff00
vm.dirty_ratio = 20

Теперь вы знаете как работать с переменными, дальше мы рассмотрим значение некоторых, самых важных переменных, с помощью которых может быть выполнена настройка ядра linux.

Настройка ядра Linux

abi.vsyscall32

Если установлено 1, разрешает выполнение 32 битных программ в 64 битной системе. По умолчанию включено, можете отключить, а затем попробовать запустить, например, skype.

debug.exception-trace

При возникновении ошибки в ядре выводить значения регистров процессора и стек вызовов процедур. По умолчанию включено.

dev.cdrom.autoclose

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

dev.cdrom.autoeject

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

dev.hpet.max-user-freq

Максимальная частота генерации прерываний от системного таймера High Precision Event Timer (HPET), который пришел на замену таймеру реального времени RTC. По умолчанию 64.

fs.aio-nr

Количество асинхронных операций ввода и вывода в вашей файловой системе.

fs.file-max

Максимальное количество дескрипторов файлов, которые может создать и обрабатывать ядро. Если вы часто получаете сообщения об ошибке из-за невозможности создать дескриптор файла увеличьте этот лимит. По умолчанию установлено значение 10 % от вашей оперативной памяти.

fs.inotify.max_queued_events

Подсистема ядра inotify позволяет следить за изменениями в файловой системе. Этот параметр устанавливает максимальное количество событий, которые могут находиться в очереди, перед тем как их обработает программа.

Читайте также:  Tv box прошивка linux

fs.inotify.max_user_instances

Максимальное количество объектов inotify, которые может создать один пользователь.

fs.inotify.max_user_watches

Максимальное количество файлов и директорий, за которыми может наблюдать один объект inotify.

cad_pid

PID процесса, который получит сигнал, если будет нажато сочетание клавиш Ctrl+Alt+Del

kernel.ctrl-alt-del

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

kernel.domainname

Позволяет установить доменное имя NIS (Network Internet Services) и YP (Yellow Pages). Но не путайте это доменное имя с DNS, это совсем разные вещи.

kernel.hostname

Имя вашего компьютера. Это самый простой способ изменить имя компьютера прямо сейчас, без перезагрузки.

kernel.modules_disabled

Позволяет отключить загрузку модулей ядра.

kernel.panic

Указывает количество секунд после ошибки в ядре (kernel panic) до перезагрузки.

kernel.pid_max

Максимальное значение PID процесса. Когда PID достигает этого значения, ядро переходит опять к минимальному. Значения больше этого не выделяются.

kernel.random.boot_id

Этот файл доступен только для чтения и содержит уникальный, случайный идентификатор загрузки. Генерируется для каждой загрузки.

kernel.random.uuid

При каждом запросе генерирует случайный UUID. Тоже доступен только для чтения.

kernel.randomize_va_space

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

kernel.sysrq

Позволяет включить или отключить управление ядром с помощью SysRQ. Доступны такие параметры:

  • 0 — отключить все функции
  • 1 — разрешить все функции
  • 2 — разрешить настройку уровня логгирования
  • 4 — разрешить управление клавиатурой
  • 8 — разрешить получение отладочных сообщений и дампов
  • 16 — разрешить команду sync
  • 32 — разрешить перемонтирование файловых систем в read-only
  • 64 — разрешить завершение процессов
  • 128 — разрешить перезагрузку, выключение
  • 256 — разрешить управление планировщиком

kernel.threads-max

Максимальное количество запущенных потоков для процессов.

net.ipv4.icmp_echo_ignore_all

Если включено, ядро будет игнорировать все icmp запросы. Рекомендуется для защиты от DDOS атак.

net.ipv4.icmp_echo_ignore_broadcasts

Так же, как и в предыдущем варианте, только игнорироваться будут только широковещательные icmp запросы.

net.ipv4.ip_default_ttl

Максимальное количество узлов, через которые может пройти отправленный пакет перед тем, как достигнет цели.

net.ipv4.ip_forward

Разрешить проходящие пакеты через этот компьютер. Обычно такая настройка параметров ядра Linux нужна для роутеров.

net.ipv4.ip_local_port_range

Диапазон локальных портов, которые могут быть использованы вашими программами.

net.ipv4.tcp_rfc1337

Установите 1 чтобы защитить компьютер от атаки TCP TimeWait.

net.ipv4.tcp_fin_timeout

Таймаут ожидания завершения соединения после отправки пакета FIN. Рекомендовано 15.

net.ipv4.tcp_keepalive_time

Поддерживать соединение активным определенное время, например, 300 секунд. По истечении этого времени TCP соединение будет разорвано.

net.core.rmem_default

Указывает размер по умолчанию буфера для сокета получения данных по сети.

net.core.rmem_max

Максимальный размер буфера сокета для получения данных по сети.

net.core.wmem_default

Размер сокета по умолчанию для отправки данных по сети.

net.core.wmem_max

Максимальный размер буфера сокета для отправки данных по сети.

net.ipv4.tcp_rmem

Количество памяти, доступной для работы TCP.

vm.dirty_background_ratio

Указывает процент от общей системной памяти, когда фоновый демон pdflush записи данных начнет переписывать кешированные данные на диск. По умолчанию установлено 10, но в быстрых системах такое частое сбрасывание не нужно, поэтому этот параметр можно увеличить.

vm.dirty_ratio

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

vm.laptop_mode

Функция laptop mode позволяет не сразу записывать данные на жесткий диск после запроса, а хранить их указанное время в оперативной памяти. Может быть полезно если вы экономите заряд батареи и не хотите, чтобы жесткий диск всегда вращался.

vm.swappiness

Устанавливает процент свободной памяти, по достижении которого данные начинают переноситься на swap раздел, для систем с большим количеством памяти рекомендовано значение 10.

Выводы

Мы рассмотрели далеко не все параметры ядра linux, здесь описаны лишь самые интересные из них. Более подробную информацию и еще больше переменных вы можете найти в официальной документации по ядру Linux. И будьте осторожны, конфигурация ядра Linux — дело серьезное. Если я упустил какой-то важный параметр, напишите в комментариях!

Читайте также:  Настройка ssh git mac os

Источник

Что такое sysctl

Оглавление

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Читайте также:  Удаленное управление linux через ssh

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

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

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

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

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

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

  • 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. Не каждый специалист знаком с методами гибкой настройки ядра ОС, поэтому, прежде чем применять «любые настройки из Интернета», необходимо глубоко изучить данный вопрос, посмотреть параметры конкретной ОС, поэкспериментировать с различными значениями переменных (не сохраняя их) и уже затем, получив положительный результат — применять эти методы на постоянной основе. Потому что, не всегда «настройки из мануалов в Интернете» подходят всем подряд пользователям Линукс, и любые изменения настроек ядра системы надо выполнять крайне осторожно.

    Источник

    Оцените статью