Налаштування ядра linux, Losst
Ядро Linux - дуже гнучка річ, що дозволяє налаштувати багато параметрів. Такі параметри, як підтримувані пристрої та функції, налаштовуються при складанні ядра. Але сьогодні не розглядатиметься компіляція ядра Linux. Ми поговоримо про більш тонке налаштування параметрів ядра на льоту прямо під час його роботи.
Так, ми не можемо включати додавати непідтримувані модулі та драйвера пристроїв, але ми можемо налаштувати такі параметри ядра Linux, як особливості роботи процесора, пам'яті, віртуального простору пам'яті, планувальника ядра, мережевий стек та багато іншого. Всі ці налаштування доступні через файлову систему proc. Ми розглядали докладно її в попередній статті, тепер зупинимося тільки на директорії /proc/sys, за допомогою якої ми і налаштовуватимемо ядро.
Як налаштувати?
Тут усе дуже просто. У цьому каталозі та його підкаталогах лежать файли, і є параметри, а значення у файлах нам потрібно змінювати. Для цього можна використовувати найпростішу конструкцію з команди echo та оператора перенаправлення висновку:
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
Ви також можете вручну додавати змінні та їх значення до цих файлів. Якщо ви хочете повернути значення змінних до стану збереженого у файлах та видалити свої зміни, виконайте:
* 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
Тепер ви знаєте як працювати зі змінними, далі ми розглянемо значення деяких найважливіших змінних, за допомогою яких може бути виконано налаштування ядра 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.
Кількість асинхронних операцій введення та виведення у вашій файловій системі.
Максимальна кількість дескрипторів файлів, які можуть створити та обробляти ядро. Якщо ви часто отримуєте повідомлення про помилку через неможливість створити дескриптор файлу, збільште цей ліміт. За замовчуванням встановлено значення 10% вашої оперативної пам'яті.
fs.inotify.max_queued_events
Підсистема ядра inotify дозволяє стежити за змінами у файловій системі. Цей параметр встановлює максимальну кількість подій, які можуть перебувати у черзі, перш ніж їх обробить програма.
fs.inotify.max_user_instances
Максимальна кількість inotify об'єктів, які може створити один користувач.
fs.inotify.max_user_watches
Максимальна кількість файлів і директорій, за якими може спостерігати один об'єкт інотіф.
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.