Hvordan endre kjernekjøringsparametere på en vedvarende og ikke-vedvarende måte


I Del 13 av denne LFCS (Linux Foundation Certified Sysadmin)-serien forklarte vi hvordan du bruker GRUB for å endre oppførselen til systemet ved å sende alternativer til kjernen for den pågående oppstartsprosessen.

På samme måte kan du bruke kommandolinjen i et kjørende Linux-system for å endre visse kjøretidskjerneparametere som en engangsmodifikasjon, eller permanent ved å redigere en konfigurasjonsfil.

Dermed har du lov til å aktivere eller deaktivere kjerneparametere på farten uten store problemer når det er nødvendig på grunn av en nødvendig endring i måten systemet forventes å fungere på.

Vi introduserer /proc-filsystemet

Den siste spesifikasjonen av Filesystem Hierarchy Standard indikerer at /proc representerer standardmetoden for håndtering av prosess- og systeminformasjon så vel som annen kjerne- og minneinformasjon. Spesielt /proc/sys er der du kan finne all informasjon om enheter, drivere og noen kjernefunksjoner.

Den faktiske interne strukturen til /proc/sys avhenger sterkt av kjernen som brukes, men du vil sannsynligvis finne følgende kataloger inne. På sin side vil hver av dem inneholde andre underkataloger der verdiene for hver parameterkategori opprettholdes:

  1. dev: parametere for spesifikke enheter koblet til maskinen.
  2. fs: filsystemkonfigurasjon (for eksempel kvoter og inoder).
  3. kjerne: kjernespesifikk konfigurasjon.
  4. net: nettverkskonfigurasjon.
  5. vm: bruk av kjernens virtuelle minne.

For å endre kjernens kjøretidsparametere bruker vi kommandoen sysctl. Det nøyaktige antallet parametere som kan endres kan vises med:

sysctl -a | wc -l

Hvis du vil se den fullstendige listen over kjerneparametere, gjør du bare:

sysctl -a 

Siden utdataene fra kommandoen ovenfor vil bestå av MANGE linjer, kan vi bruke en rørledning etterfulgt av mindre for å inspisere den mer nøye:

sysctl -a | less

La oss ta en titt på de første linjene. Vær oppmerksom på at de første tegnene i hver linje samsvarer med navnene på katalogene i /proc/sys:

For eksempel, den uthevede linjen:

dev.cdrom.info = drive name:        	sr0

indikerer at sr0 er et alias for den optiske stasjonen. Med andre ord, det er slik kjernen «ser» den stasjonen og bruker det navnet for å referere til den.

I den følgende delen vil vi forklare hvordan du endrer andre "viktigere" kjernekjøringsparametere i Linux.

Hvordan endre eller modifisere Linux Kernel Runtime Parameters

Basert på det vi har forklart så langt, er det lett å se at navnet på en parameter samsvarer med katalogstrukturen inne i /proc/sys der den kan finnes.

For eksempel:

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

Sjekk Linux-kjerneparametere

Når det er sagt, kan vi se verdien av en bestemt Linux-kjerneparameter ved å bruke enten sysctl etterfulgt av navnet på parameteren eller lese den tilknyttede filen:

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

Angi eller endre Linux-kjerneparametere

For å angi verdien for en kjerneparameter kan vi også bruke sysctl, men ved å bruke -w-alternativet og etterfulgt av parameterens navn, likhetstegnet og ønsket verdi.

En annen metode består i å bruke echo for å overskrive filen knyttet til parameteren. Med andre ord tilsvarer følgende metoder for å deaktivere pakkevideresendingsfunksjonaliteten i systemet vårt (som forresten skal være standardverdien når en boks ikke skal sende trafikk mellom nettverk):

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

Det er viktig å merke seg at kjerneparametere som er satt ved hjelp av sysctl kun vil bli håndhevet under gjeldende økt og vil forsvinne når systemet startes på nytt.

For å sette disse verdiene permanent, rediger /etc/sysctl.conf med de ønskede verdiene. For å deaktivere pakkevideresending i /etc/sysctl.conf for eksempel, sørg for at denne linjen vises i filen:

net.ipv4.ip_forward=0

Kjør deretter følgende kommando for å bruke endringene på den kjørende konfigurasjonen.

sysctl -p

Andre eksempler på viktige kjøretidsparametere for kjernen er:

fs.file-max spesifiserer det maksimale antallet filhåndtak som kjernen kan tildele for systemet. Avhengig av tiltenkt bruk av systemet ditt (nett/database/filserver, for å nevne noen eksempler), kan det være lurt å endre denne verdien for å møte systemets behov.

Ellers vil du i beste fall motta en «For mange åpne filer»-feilmelding, og det kan i verste fall forhindre at operativsystemet starter opp.

Hvis du på grunn av en uskyldig feil befinner deg i denne siste situasjonen, start opp i enkeltbrukermodus (som forklart i del 13 – Konfigurer og feilsøk Linux Grub Boot Loader) og rediger /etc/sysctl.conf som instruert tidligere. For å angi den samme begrensningen per bruker, se Del 14 – Overvåk og still inn Linux-prosessgrense for bruk av denne serien.

kernel.sysrq brukes til å aktivere SysRq-tasten på tastaturet (også kjent som print screen-tasten) for å tillate visse tastekombinasjoner å påkalle nødhandlinger når systemet har ikke reageret.

Standardverdien (16) indikerer at systemet vil respektere kombinasjonen Alt+SysRq+tast og utføre handlingene som er oppført i sysrq.c dokumentasjon funnet i kernel.org (der nøkkel er én bokstav i b-z-området). For eksempel vil Alt+SysRq+b starte systemet kraftig på nytt (bruk dette som en siste utvei hvis serveren din ikke svarer).

Advarsel! Ikke prøv å trykke på denne tastekombinasjonen på en virtuell maskin fordi det kan tvinge vertssystemet til å starte på nytt!

Når satt til 1, vil net.ipv4.icmp_echo_ignore_all ignorere ping-forespørsler og slippe dem på kjernenivå. Dette er vist i bildet nedenfor - legg merke til hvordan ping-forespørsler går tapt etter å ha satt denne kjerneparameteren:

En bedre og enklere måte å angi individuelle kjøretidsparametere er å bruke .conf-filer inne i /etc/sysctl.d, og gruppere dem etter kategorier.

For eksempel, i stedet for å sette net.ipv4.ip_forward=0 og net.ipv4.icmp_echo_ignore_all=1 i /etc/sysctl.conf, vi kan lage en ny fil kalt net.conf inne 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 velger å bruke denne tilnærmingen, ikke glem å fjerne de samme linjene fra /etc/sysctl.conf.

Sammendrag

I denne artikkelen har vi forklart hvordan du endrer kjernekjøringsparametere, både vedvarende og ikke-vedvarende, ved å bruke sysctl, /etc/sysctl.conf og filer i / etc/sysctl.d.

I sysctl-dokumentene kan du finne mer informasjon om betydningen av flere variabler. Disse filene representerer den mest komplette kilden til dokumentasjon om parametrene som kan settes via sysctl.

Fant du denne artikkelen nyttig? Vi håper absolutt du gjorde det. Ikke nøl med å gi oss beskjed hvis du har spørsmål eller forslag til forbedringer.