I Part 13 i denne LFCS (Linux Foundation Certified Sysadmin)-serie forklarede vi, hvordan man bruger GRUB til at ændre systemets adfærd ved at videregive muligheder til kernen for den igangværende opstartsproces.

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

Således har du lov til at aktivere eller deaktivere kerneparametre på farten uden større besvær, 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 Filesystem Hierarchy Standard indikerer det /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 faktiske interne struktur af /proc/sys afhænger meget af den kerne, der bruges, men du vil sandsynligvis finde følgende mapper inde. Til gengæld vil hver af dem indeholde andre undermapper, hvor værdierne for hver parameterkategori opretholdes:

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

For at ændre kerne-runtime-parametrene vil vi bruge 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 blot gøre:

# sysctl -a 

Da outputtet af ovenstående kommando vil bestå af MANGE linjer, kan vi bruge en pipeline efterfulgt af mindre for at inspicere det mere omhyggeligt:

# sysctl -a | less

Lad os tage et kig på de første par linjer. Bemærk venligst, at de første tegn i hver linje matcher navnene på mapperne indeni /proc/sys:

Forstå Linux /proc filsystem

For eksempel den fremhævede linje:

dev.cdrom.info = drive name:        	sr0

indikerer det sr0 er et alias for det optiske drev. Med andre ord, det er sådan kernen sees det drev og bruger det navn til at henvise til det.

I det følgende afsnit vil vi forklare, hvordan du ændrer andre more important kerne-runtime-parametre i Linux.

Sådan ændres eller ændres Linux Kernel Runtime Parameters

Baseret på det, vi har forklaret indtil nu, er det let at se, at navnet på en parameter matcher mappestrukturen inde /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

Tjek Linux-kerneparametre

Når det er sagt, kan vi se værdien af ​​en bestemt Linux-kerneparameter ved at bruge enten sysctl ved 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
Tjek Linux-kerneparametre
Tjek Linux-kerneparametre

Indstil eller rediger Linux-kerneparametre

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

En anden metode består i at bruge echo for at overskrive den fil, der er knyttet til parameteren. Med andre ord svarer følgende metoder til at deaktivere pakkevideresendelsesfunktionaliteten i vores system (som i øvrigt burde være standardværdien, når en boks ikke skal sende 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 vha sysctl vil kun blive håndhævet under den aktuelle session og forsvinder, når systemet genstartes.

Rediger for at indstille disse værdier permanent /etc/sysctl.conf de ønskede værdier. For eksempel for at deaktivere pakkevideresendelse ind /etc/sysctl.conf sørg for, at denne linje vises i filen:

net.ipv4.ip_forward=0

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

# sysctl -p

Andre eksempler på vigtige kerne-runtime-parametre er:

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

Ellers modtager du en Too many open files fejlmeddelelse i bedste fald, og kan forhindre operativsystemet i at starte i værste fald.

Hvis du på grund af en uskyldig fejl befinder dig i denne sidste situation, skal du starte i enkeltbrugertilstand (som forklaret i del 13 – Konfigurer og fejlfind Linux Grub Boot Loader) og rediger /etc/sysctl.conf som tidligere anvist. For at indstille den samme begrænsning pr. bruger, se Del 14 – Overvåg og indstil Linux-procesgrænseforbrug i denne serie.

kernel.sysrq bruges til at aktivere SysRq på dit tastatur (også kendt som print screen-tasten) 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+key og udfør de handlinger, der er angivet i sysrq.c dokumentation fundet i kernel.org (hvor nøgle er ét bogstav i bz-området). For eksempel, Alt+SysRq+b genstarter systemet kraftigt (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 indstillet til 1, net.ipv4.icmp_echo_ignore_all vil ignorere ping-anmodninger og droppe dem på kerneniveau. Dette er vist i billedet nedenfor – bemærk, hvordan ping-anmodninger går tabt efter indstilling af denne kerneparameter:

Bloker Ping-anmodninger i Linux
Bloker Ping-anmodninger i Linux

En bedre og nemmere måde at indstille individuelle runtime-parametre er at bruge .confs inde /etc/sysctl.dgruppering 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.confkan vi oprette en ny fil med navnet net.conf inde /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, så glem ikke 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, vha. sysctl, /etc/sysctl.confog filer indeni /etc/sysctl.d.

I den sysctl docs kan du finde mere information om betydningen af ​​flere variabler. Disse filer repræsenterer den mest komplette kilde til dokumentation om de parametre, der kan indstilles via sysctl.

Fandt du denne artikel nyttig? Det håber vi bestemt, du gjorde. Tøv ikke med at give os besked, hvis du har spørgsmål eller forslag til forbedring.