Sådan ændres kerneens kørselstidsparametre på en vedvarende og ikke-vedvarende måde


I del 13 af dette, hvordan man bruger GRUB til at ændre systemets opførsel ved at videregive indstillinger til kernen til den igangværende opstartsproces.

På samme måde kan du bruge kommandolinjen i et kørende Linux-system til at ændre bestemte runtime-kerneparametre som en engangsændring eller permanent ved at redigere en konfigurationsfil.

Således har du lov til at aktivere eller deaktivere kerneparametre on-the-fly uden store vanskeligheder, når det er nødvendigt på grund af en påkrævet ændring i den måde, systemet forventes at fungere på.

Introduktion til/proc filsystemet

Den seneste specifikation af filsystemhierarkistandarden indikerer, at /proc repræsenterer standardmetoden til håndtering af proces- og systeminformation samt anden kerne- og hukommelsesinformation. Især /proc/sys er hvor du kan finde alle oplysninger om enheder, drivere og nogle kernefunktioner.

Den egentlige interne struktur for /proc/sys afhænger meget af kernen, der bruges, men det er sandsynligt, at du finder følgende kataloger inde. Til gengæld vil hver af dem indeholde andre underkataloger, hvor værdierne for hver parameterkategori opretholdes:

  1. dev : parametre for bestemte enheder, der er tilsluttet maskinen.
  2. fs : filsystemkonfiguration (for eksempel kvoter og inoder).
  3. kerne: kernespecifik konfiguration.
  4. net : netværkskonfiguration.
  5. vm : brug af kernens virtuelle hukommelse.

For at ændre kerne-runtime-parametre bruger vi kommandoen sysctl . Det nøjagtige antal parametre, der kan ændres, kan ses med:

# sysctl -a | wc -l

Hvis du vil se den komplette liste over kerneparametre, skal du bare gøre:

# sysctl -a 

Da output fra ovenstående kommando vil bestå af MYE linjer, kan vi bruge en rørledning efterfulgt af mindre for at inspicere den mere omhyggeligt:

# sysctl -a | less

Lad os se på de første par linjer. Bemærk, at de første tegn i hver linje matcher navnene på telefonbøgerne inden for /proc/sys :

For eksempel den fremhævede linje:

dev.cdrom.info = drive name:        	sr0

angiver, at sr0 er et alias for det optiske drev. Med andre ord, det er sådan kernen “ser” det drev og bruger dette navn til at henvise til det.

I det følgende afsnit forklarer vi, hvordan du ændrer andre "vigtigere" kerne-runtime-parametre i Linux.

Sådan ændres eller ændres Linux Kernel Runtime-parametre

Baseret på det, vi hidtil har forklaret, er det let at se, at navnet på en parameter svarer til bibliotekstrukturen inde i /proc/sys , hvor den kan findes.

For eksempel:

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

Når det er sagt, kan vi se værdien af en bestemt Linux-kerneparameter ved hjælp af enten sysctl efterfulgt af navnet på parameteren eller læsning af den tilknyttede fil:

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

For at indstille værdien for en kerneparameter kan vi også bruge sysctl , men ved hjælp af indstillingen -w og efterfulgt af parameterens navn, lighedstegnet og den ønskede værdi.

En anden metode består i at bruge echo til at overskrive den fil, der er knyttet til parameteren. Med andre ord svarer følgende metoder til at deaktivere pakkevideresendingsfunktionaliteten i vores system (som forresten skal være standardværdien, når en boks ikke formodes at passere trafik mellem netværk):

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

Det er vigtigt at bemærke, at kerneparametre, der er indstillet ved hjælp af sysctl , kun håndhæves under den aktuelle session og forsvinder, når systemet genstartes.

For at indstille disse værdier permanent skal du redigere /etc/sysctl.conf med de ønskede værdier. For eksempel, for at deaktivere videresendelse af pakke i /etc/sysctl.conf skal du sørge for, at denne linje vises i filen:

net.ipv4.ip_forward=0

Kør derefter følgende kommando for at anvende ændringerne i den kørende konfiguration.

# sysctl -p

Andre eksempler på vigtige kernel runtime-parametre er:

fs.file-max angiver det maksimale antal filhåndtag, som kernen kan allokere til systemet. Afhængig af den påtænkte anvendelse af dit system (web/database/filserver, for at nævne nogle få eksempler), kan du ændre denne værdi for at imødekomme systemets behov.

Ellers vil du i bedste fald modtage en fejlmeddelelse "For mange åbne filer" og muligvis forhindre operativsystemet i værste fald.

Hvis du på grund af en uskyldig fejl befinder dig i denne sidste situation, skal du starte i enkeltbruger-tilstand (som forklaret i del 14 - Overvåg og indstil Linux-procesbegrænsning af denne serie.

kernel.sysrq bruges til at aktivere SysRq-tasten på dit tastatur (også kendt som udskrivningsskærmtasten) for at tillade visse tastekombinationer at påkalde nødhandlinger, når systemet ikke reagerer.

Standardværdien (16) angiver, at systemet vil respektere Alt + SysRq + -tasten og udføre de handlinger, der er anført i sysrq.c-dokumentationen, der findes i kernel.org (hvor nøglen er et bogstav i bz rækkevidde). For eksempel vil Alt + SysRq + b genstarte systemet med kraft (brug dette som en sidste udvej, hvis din server ikke reagerer).

Advarsel! Forsøg ikke at trykke på denne tastekombination på en virtuel maskine, da det kan tvinge dit værtssystem til at genstarte!

Når den er indstillet til 1, vil net.ipv4.icmp_echo_ignore_all ignorere pinganmodninger og slippe dem på kerneniveau. Dette vises i nedenstående billede - bemærk, hvordan pinganmodninger går tabt efter indstilling af denne kerneparameter:

En bedre og nemmere måde at indstille individuelle runtime-parametre på er at bruge .conf-filer inde i /etc/sysctl.d og gruppere dem efter kategorier.

For eksempel i stedet for at indstille net.ipv4.ip_forward = 0 og net.ipv4.icmp_echo_ignore_all = 1 i /etc/sysctl.conf, kan vi oprette en ny fil med navnet net.conf inde i/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

Hvis du vælger at bruge denne tilgang, skal du ikke glemme at fjerne de samme linjer fra /etc/sysctl.conf .

Resumé

I denne artikel har vi forklaret, hvordan man ændrer kerne-runtime-parametre, både vedvarende og ikke-vedvarende, ved hjælp af sysctl, /etc/sysctl.conf og filer inde i /etc/sysctl.d.

I sysctl docs kan du finde flere oplysninger om betydningen af flere variabler. Disse filer repræsenterer den mest komplette dokumentationskilde om de parametre, der kan indstilles via sysctl.

Fandt du denne artikel nyttig? Vi håber bestemt du gjorde det. Tøv ikke med at fortælle os, hvis du har spørgsmål eller forslag til forbedring.