I Part 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 Linux-system som kjører for å endre visse kjøretidskjerneparametere som en engangsendring, 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 til Filesystem Hierarchy Standard indikerer det /proc representerer standardmetoden for håndtering av prosess- og systeminformasjon samt annen kjerne- og minneinformasjon. Særlig, /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 vil vi bruke 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 inni /proc/sys:

Forstå Linux /proc filsystem

For eksempel den uthevede linjen:

dev.cdrom.info = drive name:        	sr0

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

I den følgende delen vil vi forklare hvordan du endrer andre more important kjerne kjøretidsparametere 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 hvor 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 ved å bruke 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
Sjekk Linux-kjerneparametere
Sjekk Linux-kjerneparametere

Angi eller endre Linux-kjerneparametere

For å angi verdien for en kjerneparameter kan vi også bruke sysctlmen ved å bruke -w 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 vha sysctl vil bare bli håndhevet under gjeldende økt og vil forsvinne når systemet startes på nytt.

For å angi disse verdiene permanent, rediger /etc/sysctl.conf de ønskede verdiene. For eksempel for å deaktivere pakkevideresending inn /etc/sysctl.conf 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 (web / database / filserver, for å nevne noen eksempler), kan det være lurt å endre denne verdien for å møte systemets behov.

Ellers vil du motta en Too many open files feilmelding i beste fall, og 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 på tastaturet (også kjent som utskriftsskjermtasten) for å tillate visse tastekombinasjoner å påkalle nødhandlinger når systemet ikke reagerer.

Standardverdien (16) indikerer at systemet vil respektere Alt+SysRq+key og utføre handlingene som er oppført i sysrq.c dokumentasjon funnet i kernel.org (hvor nøkkel er én bokstav i bz-området). For eksempel, Alt+SysRq+b vil 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, net.ipv4.icmp_echo_ignore_all vil 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:

Blokker Ping-forespørsler i Linux
Blokker Ping-forespørsler i Linux

En bedre og enklere måte å angi individuelle kjøretidsparametere er å bruke .confs inne /etc/sysctl.dgrupperer dem etter kategorier.

For eksempel i stedet for å stille inn net.ipv4.ip_forward=0 og net.ipv4.icmp_echo_ignore_all=1 i /etc/sysctl.confkan vi lage en ny fil med navnet net.conf innsiden /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.confog filer inni /etc/sysctl.d.

I sysctl docs 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 forbedring.