Hoe Kernel-runtimeparameters te wijzigen op een persistente en niet-persistente manier

In Deel 13 van deze LFCS (Linux Foundation Certified Sysadmin) serie hebben we uitgelegd hoe je GRUB kunt gebruiken om het gedrag van het systeem aan te passen door opties naar de kernel door te geven voor het lopende opstartproces.

Vergelijkbaar, kun je de commandoregel gebruiken in een draaiend Linux-systeem om bepaalde runtime-kernelparameters te wijzigen als een eenmalige aanpassing, of permanent door een configuratiebestand te bewerken.

Zo ben je in staat om kernelparameters in een handomdraai in of uit te schakelen wanneer dat nodig is vanwege een vereiste wijziging in de manier waarop van het systeem wordt verwacht dat het functioneert.

Introductie van het /proc-bestandssysteem

De nieuwste specificatie van de Filesystem Hierarchy Standard geeft aan dat /proc de standaardmethode vertegenwoordigt voor het verwerken van proces- en systeeminformatie, evenals andere kernel- en geheugeninformatie. Met name /proc/sys is waar je alle informatie kunt vinden over apparaten, stuurprogramma’s en sommige kernelkenmerken.

De daadwerkelijke interne structuur van /proc/sys is sterk afhankelijk van de gebruikte kernel, maar je zult waarschijnlijk de volgende mappen binnenin vinden. Op hun beurt zullen ze elk andere submappen bevatten waarin de waarden voor elke parametercategorie worden onderhouden:

  1. dev: parameters voor specifieke apparaten die zijn verbonden met de machine.
  2. fs: bestandssysteemconfiguratie (quota’s en inodes, bijvoorbeeld).
  3. kernel: kernel-specifieke configuratie.
  4. net: netwerkconfiguratie.
  5. vm: gebruik van het virtuele geheugen van de kernel.

Om de runtimeparameters van de kernel te wijzigen, zullen we de sysctl-opdracht gebruiken. Het exacte aantal parameters dat kan worden gewijzigd, kan worden bekeken met:

# sysctl -a | wc -l

Als u de volledige lijst met kernelparameters wilt bekijken, voert u gewoon uit:

# sysctl -a 

Omdat de uitvoer van de bovenstaande opdracht VEEL regels zal bevatten, kunnen we een pijplijn gebruiken gevolgd door less om deze nauwkeuriger te inspecteren:

# sysctl -a | less

Laten we eens kijken naar de eerste paar regels. Let op dat de eerste tekens in elke regel overeenkomen met de namen van de mappen binnen /proc/sys:

Understand Linux /proc Filesystem

Bijvoorbeeld, de gemarkeerde regel:

dev.cdrom.info = drive name:        	sr0

geeft aan dat sr0 een alias is voor de optische drive. Met andere woorden, zo “ziet” de kernel die drive en gebruikt die naam om ernaar te verwijzen.

In het volgende gedeelte zullen we uitleggen hoe andere “belangrijkere” runtimeparameters van de kernel in Linux kunnen worden gewijzigd.

Hoe Linux Kernel-runtimeparameters wijzigen of aanpassen

Op basis van wat we tot nu toe hebben uitgelegd, is het gemakkelijk te zien dat de naam van een parameter overeenkomt met de mappenstructuur binnen /proc/sys waarin deze kan worden gevonden.

Bijvoorbeeld:

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

Controleer Linux Kernel Parameters

Dat gezegd hebbende, kunnen we de waarde van een bepaalde Linux-kernelparameter bekijken met behulp van sysctl, gevolgd door de naam van de parameter of door het bijbehorende bestand te lezen:

# sysctl dev.cdrom.autoclose
# cat /proc/sys/dev/cdrom/autoclose
# sysctl net.ipv4.ip_forward
# cat /proc/sys/net/ipv4/ip_forward
Check Linux Kernel Parameters

Instellen of wijzigen van Linux Kernelparameters

Om de waarde voor een kernelparameter in te stellen, kunnen we ook sysctl gebruiken, maar met de -w-optie en gevolgd door de naam van de parameter, het isgelijksymbool en de gewenste waarde.

Een andere methode bestaat uit het gebruik van echo om het bestand dat met de parameter is geassocieerd, te overschrijven. Met andere woorden, de volgende methoden zijn equivalent om de functionaliteit voor het doorsturen van pakketten in ons systeem uit te schakelen (wat overigens de standaardwaarde zou moeten zijn wanneer een box niet bedoeld is om verkeer tussen netwerken door te geven):

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

Het is belangrijk op te merken dat kernelparameters die zijn ingesteld met sysctl alleen tijdens de huidige sessie worden afgedwongen en verdwijnen wanneer het systeem opnieuw wordt opgestart.

Om deze waarden permanent in te stellen, bewerk /etc/sysctl.conf met de gewenste waarden. Bijvoorbeeld, om pakketdoorsturing uit te schakelen in /etc/sysctl.conf, zorg ervoor dat deze regel in het bestand voorkomt:

net.ipv4.ip_forward=0

Voer vervolgens het volgende commando uit om de wijzigingen toe te passen op de lopende configuratie.

# sysctl -p

Andere voorbeelden van belangrijke kernelruntimeparameters zijn:

fs.file-max specificeert het maximale aantal bestandshandles dat de kernel kan toewijzen voor het systeem. Afhankelijk van het beoogde gebruik van uw systeem (web / database / file server, om maar een paar voorbeelden te noemen), wilt u deze waarde mogelijk wijzigen om aan de behoeften van het systeem te voldoen.

Anders krijg je het foutmelding “Te veel open bestanden” op best, en kan het besturingssysteem bij worst geen opstarten meer voorkomen.

Als door een onschuldige fout je zich in deze laatste situatie bevind, start je op in enkele gebruiker modus (zoals uitgelegd in Hoofdstuk 13 – Configureer en probleem oplossen bij Linux Grub Boot Loader) en bewerkt je /etc/sysctl.conf zoals eerder gegeven werd aanwijzingen. Om dezelfde beperking op per-gebruiker basis in te stellen, ga naar Hoofdstuk 14 – Monitor en instellingen voor Linux Proces Limiet Gebruik van deze reeks.

kernel.sysrq wordt gebruikt om de SysRq toets op uw toetsenbord in te schakelen (ook bekend als de print screen toets) zodat bepaalde toetsenbord knoppen combinaties worden aangeroepen bij dringende acties als het systeem niet reageert.

De standaard waarde (16) geeft aan dat het systeem de Alt+SysRq+toets combinatie zal aanvaarden en de acties uit de sysrq.c documentatie uitvoeren die te vinden zijn op kernel.org (waar toets een letter is in de b-z reeks). Bijvoorbeeld, Alt+SysRq+b zal het systeem opnieuw opstarten (gebruik dit als laatste optie als uw server niet reageert).

Waarschuwing! probeer dit toetsenbordcombinatie niet op een virtuele machine in te drukken, want het kan ertoe leiden dat uw hostsysteem opnieuw opstart!

Wanneer ingesteld op 1, zal net.ipv4.icmp_echo_ignore_all pingverzoeken negeren en ze op kernelniveau verwerpen. Dit is te zien in de onderstaande afbeelding – noteer hoe pingverzoeken verloren zijn nadat dit kernelparameter is ingesteld:

Block Ping Requests in Linux

A better and easier way to set individual runtime parameters is using .conf files inside /etc/sysctl.d, grouping them by categories.

Bijvoorbeeld, in plaats van net.ipv4.ip_forward=0 en net.ipv4.icmp_echo_ignore_all=1 te instellen in /etc/sysctl.conf, kunnen we een nieuw bestand aanmaken genaamd net.conf binnen /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

Als u kiest voor deze aanpak, vergeet niet dezelfde regels uit /etc/sysctl.conf te verwijderen.

Samenvatting

In dit artikel hebben we uitgelegd hoe kernel runtime parameters aan te passen, zowel persistent als niet persistent, met behulp van sysctl, /etc/sysctl.conf, en bestanden binnen /etc/sysctl.d.

In de sysctl documenten vindt u meer informatie over de betekenis van meer variabelen. Die bestanden zijn de meest complete bronnen van documentatie over de parameters die via sysctl kunnen worden ingesteld.

Vond u dit artikel nuttig? We hopen het zeker wel. Twijfel niet om ons te laten weten als u vragen of suggesties om te verbeteren heeft.

Source:
https://www.tecmint.com/change-modify-linux-kernel-runtime-parameters/