Cum să modificați parametrii de rulare a kernelului într-un mod persistent și nepersistent


În Partea 13 a acestei serii LFCS (Linux Foundation Certified Sysadmin) am explicat cum să utilizați GRUB pentru a modifica comportamentul sistemului prin transmiterea opțiunilor nucleului pentru procesul de pornire în curs.

În mod similar, puteți utiliza linia de comandă într-un sistem Linux care rulează pentru a modifica anumiți parametri ai nucleului de rulare ca modificare unică sau permanent prin editarea unui fișier de configurare.

Astfel, vi se permite să activați sau să dezactivați parametrii kernel-ului din mers, fără prea multe dificultăți, atunci când este necesar din cauza unei modificări necesare în modul în care este așteptat să funcționeze sistemul.

Prezentarea sistemului de fișiere /proc

Cea mai recentă specificație a standardului de ierarhie a sistemului de fișiere indică faptul că /proc reprezintă metoda implicită pentru manipularea informațiilor despre proces și sistem, precum și alte informații despre kernel și memorie. În special, /proc/sys este locul unde puteți găsi toate informațiile despre dispozitive, drivere și unele caracteristici ale nucleului.

Structura internă reală a /proc/sys depinde în mare măsură de nucleul utilizat, dar este posibil să găsiți următoarele directoare în interior. La rândul lor, fiecare dintre ele va conține alte subdirectoare în care sunt menținute valorile pentru fiecare categorie de parametri:

  1. dev: parametri pentru anumite dispozitive conectate la mașină.
  2. fs: configurația sistemului de fișiere (cote și inoduri, de exemplu).
  3. nucleu: configurație specifică nucleului.
  4. net: configurația rețelei.
  5. vm: utilizarea memoriei virtuale a nucleului.

Pentru a modifica parametrii de rulare a nucleului vom folosi comanda sysctl. Numărul exact de parametri care pot fi modificați poate fi vizualizat cu:

sysctl -a | wc -l

Dacă doriți să vizualizați lista completă a parametrilor Kernel, faceți:

sysctl -a 

Deoarece rezultatul comenzii de mai sus va consta din MULTE linii, putem folosi o conductă urmată de mai puțin pentru a o inspecta mai atent:

sysctl -a | less

Să aruncăm o privire la primele rânduri. Vă rugăm să rețineți că primele caractere din fiecare rând se potrivesc cu numele directoarelor din /proc/sys:

De exemplu, linia evidențiată:

dev.cdrom.info = drive name:        	sr0

indică faptul că sr0 este un alias pentru unitatea optică. Cu alte cuvinte, așa este „vede nucleul care conduce și folosește acel nume pentru a se referi la el.

În secțiunea următoare vom explica cum să schimbați alți parametrii de rulare a nucleului „mai importanți” în Linux.

Cum să modificați sau să modificați parametrii de rulare a kernelului Linux

Pe baza a ceea ce am explicat până acum, este ușor de observat că numele unui parametru se potrivește cu structura directorului din /proc/sys unde poate fi găsit.

De exemplu:

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

Verificați parametrii kernelului Linux

Acestea fiind spuse, putem vizualiza valoarea unui anumit parametru de kernel Linux folosind fie sysctl urmat de numele parametrului sau citind fișierul asociat:

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

Setați sau modificați parametrii kernelului Linux

Pentru a seta valoarea unui parametru de nucleu putem folosi și sysctl, dar folosind opțiunea -w și urmată de numele parametrului, semnul egal și valoarea dorită.

O altă metodă constă în utilizarea echo pentru a suprascrie fișierul asociat parametrului. Cu alte cuvinte, următoarele metode sunt echivalente pentru a dezactiva funcționalitatea de redirecționare a pachetelor din sistemul nostru (care, apropo, ar trebui să fie valoarea implicită atunci când o casetă nu trebuie să treacă traficul între rețele):

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

Este important să rețineți că parametrii kernelului care sunt setați folosind sysctl vor fi aplicați numai în timpul sesiunii curente și vor dispărea când sistemul este repornit.

Pentru a seta aceste valori permanent, editați /etc/sysctl.conf cu valorile dorite. De exemplu, pentru a dezactiva redirecționarea pachetelor în /etc/sysctl.conf asigurați-vă că această linie apare în fișier:

net.ipv4.ip_forward=0

Apoi rulați următoarea comandă pentru a aplica modificările la configurația de rulare.

sysctl -p

Alte exemple de parametri importanți de rulare a nucleului sunt:

fs.file-max specifică numărul maxim de handle de fișiere pe care nucleul le poate aloca pentru sistem. În funcție de utilizarea prevăzută a sistemului dvs. (web/bază de date/server de fișiere, pentru a numi câteva exemple), este posibil să doriți să modificați această valoare pentru a satisface nevoile sistemului.

În caz contrar, veți primi un mesaj de eroare „Prea multe fișiere deschise ” în cel mai bun caz și poate împiedica sistemul de operare să pornească în cel mai rău caz.

Dacă, din cauza unei greșeli nevinovate, vă aflați în această ultimă situație, porniți în modul utilizator unic (după cum este explicat în Partea 13 – Configurați și depanați încărcătorul de pornire Linux Grub) și editați /etc/sysctl.conf ca instruit mai devreme. Pentru a seta aceeași restricție pe bază de utilizator, consultați Partea 14 – Monitorizați și setați utilizarea limitei procesului Linux din această serie.

kernel.sysrq este folosit pentru a activa tasta SysRq de pe tastatură (cunoscută și ca tasta de imprimare a ecranului), astfel încât să permită anumitor combinații de taste să invoce acțiuni de urgență atunci când sistemul a devenit insensibil.

Valoarea implicită (16) indică faptul că sistemul va onora combinația Alt+SysRq+key și va efectua acțiunile enumerate în sysrq.c documentația găsită în kernel.org (unde cheia este o literă în intervalul b-z). De exemplu, Alt+SysRq+b va reporni sistemul cu forță (folosește aceasta ca ultimă soluție dacă serverul tău nu răspunde).

Avertisment! Nu încercați să apăsați această combinație de taste pe o mașină virtuală, deoarece poate forța sistemul dvs. gazdă să repornească!

Când este setat la 1, net.ipv4.icmp_echo_ignore_all va ignora solicitările ping și le va plasa la nivel de kernel. Acest lucru este arătat în imaginea de mai jos - rețineți cum se pierd cererile ping după setarea acestui parametru de kernel:

O modalitate mai bună și mai ușoară de a seta parametri individuali de rulare este utilizarea fișierelor .conf în cadrul /etc/sysctl.d, grupându-le pe categorii.

De exemplu, în loc să setați net.ipv4.ip_forward=0 și net.ipv4.icmp_echo_ignore_all=1 în /etc/sysctl.conf, putem crea un fișier nou numit net.conf în /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

Dacă alegeți să utilizați această abordare, nu uitați să eliminați aceleași linii din /etc/sysctl.conf.

rezumat

În acest articol am explicat cum să modificați parametrii de rulare a nucleului, atât persistenti, cât și nepersistent, folosind sysctl, /etc/sysctl.conf și fișierele din / etc/sysctl.d.

În documentele sysctl puteți găsi mai multe informații despre semnificația mai multor variabile. Aceste fișiere reprezintă cea mai completă sursă de documentație despre parametrii care pot fi setați prin sysctl.

Ți s-a părut util acest articol? Cu siguranță sperăm că ai făcut-o. Nu ezitați să ne anunțați dacă aveți întrebări sau sugestii de îmbunătățit.