Конфигурация на ядрото на Linux

Ядрото на Linux е много гъвкаво нещо, което ви позволява да конфигурирате много параметри. Параметри като поддържаните устройства и функции се конфигурират, когато ядрото е изградено. Но компилирането на ядрото на Linux няма да бъде обсъждано днес. Ще говорим за настройване на параметрите на ядрото в движение, точно докато работи.

Да, не можем да активираме добавянето на неподдържани модули и драйвери на устройства, но можем да променим параметрите на ядрото на Linux като CPU, памет, пространство на виртуална памет, планировщик на ядрото, мрежов стек и др. Всички тези настройки са достъпни чрез файловата система proc. Разгледахме го подробно в предишната статия, но сега ще се съсредоточим само върху директорията/proc/sys, с която ще конфигурираме ядрото.

Как се прави настройката?

Тук всичко е изключително просто. Тази директория и нейните поддиректории съдържат файлове, това са параметрите и трябва да променим стойностите във файловете. За да направите това, можете да използвате най-простата конструкция от командата echo и оператора за пренасочване на изхода:

ехо "1">/proc/sys/net/ipv4/ip_forward

Стойността 1 ще бъде записана в ipv4_forward. Но променените по този начин параметри не се записват след рестартиране. Преди да помислите как да запазите параметрите на ядрото на Linux от proc, помислете за друг начин да ги модифицирате.

Можете да зададете стойността на параметъра с тази команда:

Но и тази промяна няма да бъде запазена, за да запазите настройката след рестартиране, трябва да добавите опцията -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

Можете също така ръчно да добавяте променливи и техните стойности към тези файлове. Ако искате да върнете стойностите на променливите в състоянието, запазено във файлове и да премахнете промените, изпълнете:

* Прилагане /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-битова система. По подразбиране можете да го изключите и след това да опитате да стартирате, например, скайп.

debug.exception-trace

Когато възникне грешка в ядрото, отпечатайте стойностите на регистрите на процесора и стека на повикванията на процедурата. Активирано по подразбиране.

dev.cdrom.autoclose

Вашият CDROM ще бъде автоматично затворен, когато се опитате да го монтирате, деактивиран по подразбиране.

dev.cdrom.autoeject

CDROM ще бъде отворен след демонтиране на съдържащия се там диск с помощта на командата umount.

dev.hpet.max-user-freq

Максималната честота на генериране на прекъсвания от системния таймер за високи прецизни събития (HPET), който замества RTC на таймера в реално време. По подразбиране 64.

Броят на асинхронните I/O операции на вашата файлова система.

Максималният брой файлови дескриптори, които ядрото може да създаде и обработи. Ако често получавате съобщения за грешка поради невъзможността да създадете дескриптор на файл, увеличете това ограничение. По подразбиране е зададена на 10% от вашата RAM.

fs.inotify.max_queued_events

Подсистемата за инотифициране на ядрото проследява промените във файловата система. Този параметър задава максималния брой събития, които могат да бъдат в опашката, преди да бъдат обработени от програмата.

fs.inotify.max_user_instance

Максимален брой инотифициращи обекти, които един потребител може да създаде.

fs.inotify.max_user_watches

Максималният брой файлове и директории, които може да гледа един обект за известяване.

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

kernel.ctrl-alt-del

Ако стойността на параметъра е 0, системата изпраща сигнал към процеса Init или този, който сте задали в предишната променлива, за да извърши правилно рестартиране. Ако стойността е по-голяма от нула, ще се извърши незабавно рестартиране.

kernel.domainname

Позволява ви да зададете името на домейна на NIS (мрежови интернет услуги) и YP (жълти страници). Но не бъркайте това име на домейн с DNS, те са съвсем различни неща.

kernel.hostname

Името на вашия компютър. Това е най-лесният начин да промените името на компютъра в момента, без да рестартирате.

kernel.modules_disabled

Позволява да се деактивира зареждането на модулите на ядрото.

kernel.panic

Задава броя секунди след паника на ядрото преди рестартиране.

kernel.pid_max

Максималната стойност на PID на процеса. Когато PID достигне тази стойност, ядрото скача обратно до минимум. Стойностите вече не са маркирани.

kernel.random.boot_id

Този файл е само за четене и съдържа уникален идентификатор за произволно изтегляне. Генерирано за всяко изтегляне.

kernel.random.uuid

Генерира произволен UUID при всяка заявка. Също така само за четене.

kernel.randomize_va_space

kernel.sysrq

Позволява ви да активирате или деактивирате управлението на ядрото чрез SysRQ. Налични са следните опции:

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

kernel.threads-макс

Максимално работещи нишки за процеси.

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

Подобен параметър. Само този път той показва колко обща RAM трябва да се използва, така че процесът, който записва данни на диска, да инициира запис на кешираните данни директно на твърдия диск.

vm.laptop_mode

Функцията за режим на лаптоп позволява не веднага да записвате данни на твърдия диск след заявка, а да ги съхранява за определено време в RAM. Може да е полезно, ако пестите енергия от батерията и не искате твърдият диск винаги да се върти.

vm.размах

Задава процента на свободната памет, след което данните започват да се прехвърлят към суап дяла; за системи с голям обем памет препоръчителната стойност е 10.