Zoeken op website

Hoe u Kernel Runtime-parameters op een persistente en niet-persistente manier kunt wijzigen


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 te wijzigen door opties door te geven aan de kernel voor het lopende opstartproces.

Op dezelfde manier kunt u de opdrachtregel in een draaiend Linux-systeem gebruiken om bepaalde runtime-kernelparameters te wijzigen als een eenmalige wijziging, of permanent door een configuratiebestand te bewerken.

Het is je dus toegestaan kernelparameters zonder veel moeite on-the-fly in of uit te schakelen wanneer dit nodig is vanwege een vereiste verandering in de manier waarop het systeem naar verwachting zal werken.

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. In het bijzonder kun je in /proc/sys alle informatie vinden over apparaten, stuurprogramma's en enkele kernelfuncties.

De werkelijke interne structuur van /proc/sys hangt sterk af van de kernel die wordt gebruikt, maar de kans is groot dat je daarin de volgende mappen aantreft. Elk van hen zal op zijn beurt andere submappen bevatten waarin de waarden voor elke parametercategorie worden bijgehouden:

  1. dev: parameters voor specifieke apparaten die op de machine zijn aangesloten.
  2. fs: bestandssysteemconfiguratie (bijvoorbeeld quota's en inodes).
  3. kernel: kernelspecifieke configuratie.
  4. net: netwerkconfiguratie.
  5. vm: gebruik van het virtuele geheugen van de kernel.

Om de runtime-parameters van de kernel te wijzigen, gebruiken we het sysctl-commando. Het exacte aantal parameters dat kan worden gewijzigd, kunt u bekijken met:

sysctl -a | wc -l

Als u de volledige lijst met kernelparameters wilt bekijken, doet u het volgende:

sysctl -a 

Omdat de uitvoer van het bovenstaande commando uit VEEL regels zal bestaan, kunnen we een pijplijn gebruiken, gevolgd door minder, om deze zorgvuldiger te inspecteren:

sysctl -a | less

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

De gemarkeerde regel bijvoorbeeld:

dev.cdrom.info = drive name:        	sr0

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

In de volgende sectie zullen we uitleggen hoe je andere “belangrijkere” kernelruntimeparameters in Linux kunt wijzigen.

Hoe u Linux Kernel Runtime-parameters kunt wijzigen of aanpassen

Gebaseerd op wat we tot nu toe hebben uitgelegd, is het gemakkelijk in te zien dat de naam van een parameter overeenkomt met de mapstructuur binnen /proc/sys waar deze kan worden gevonden.

Bijvoorbeeld:

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

Controleer de Linux-kernelparameters

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

Linux-kernelparameters instellen of wijzigen

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

Een andere methode bestaat uit het gebruik van echo om het bestand dat aan de parameter is gekoppeld te overschrijven. Met andere woorden, de volgende methoden zijn gelijkwaardig aan het uitschakelen van de functionaliteit voor het doorsturen van pakketten in ons systeem (wat overigens de standaardwaarde zou moeten zijn wanneer een box geen verkeer tussen netwerken mag doorgeven):

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 behulp van sysctl alleen tijdens de huidige sessie worden afgedwongen en verdwijnen wanneer het systeem opnieuw wordt opgestart.

Om deze waarden permanent in te stellen, bewerkt u /etc/sysctl.conf met de gewenste waarden. Als u bijvoorbeeld het doorsturen van pakketten in /etc/sysctl.conf wilt uitschakelen, zorg er dan voor dat deze regel in het bestand verschijnt:

net.ipv4.ip_forward=0

Voer vervolgens de volgende opdracht uit om de wijzigingen toe te passen op de actieve configuratie.

sysctl -p

Andere voorbeelden van belangrijke kernelruntimeparameters zijn:

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

Anders ontvangt u in het beste geval de foutmelding 'Te veel geopende bestanden', waardoor het besturingssysteem in het slechtste geval mogelijk niet meer opstart.

Als je door een onschuldige fout in deze laatste situatie terechtkomt, start dan op in de modus voor één gebruiker (zoals uitgelegd in Deel 13 – Linux Grub Boot Loader configureren en problemen oplossen) en bewerk /etc/sysctl.conf als eerder geïnstrueerd. Om dezelfde beperking per gebruiker in te stellen, raadpleegt u Deel 14 – Monitor en stel het gebruik van Linux-proceslimieten in deze serie in.

kernel.sysrq wordt gebruikt om de SysRq-toets op uw toetsenbord in te schakelen (ook bekend als de printscreen-toets), zodat bepaalde toetscombinaties noodacties kunnen uitvoeren wanneer het systeem is niet meer reagerend.

De standaardwaarde (16) geeft aan dat het systeem de combinatie Alt+SysRq+key zal respecteren en de acties zal uitvoeren die worden vermeld in sysrq.c documentatie gevonden in kernel.org (waar sleutel één letter is in het b-z-bereik). Alt+SysRq+b zal het systeem bijvoorbeeld krachtig opnieuw opstarten (gebruik dit als laatste redmiddel als uw server niet reageert).

Waarschuwing! Probeer niet op deze toetsencombinatie op een virtuele machine te drukken, omdat dit uw hostsysteem ertoe kan dwingen opnieuw op te starten!

Wanneer ingesteld op 1, zal net.ipv4.icmp_echo_ignore_all ping-verzoeken negeren en deze op kernelniveau neerzetten. Dit wordt weergegeven in de onderstaande afbeelding – merk op hoe ping-verzoeken verloren gaan na het instellen van deze kernelparameter:

Een betere en eenvoudigere manier om individuele runtimeparameters in te stellen is het gebruik van .conf-bestanden in /etc/sysctl.d, waarbij ze worden gegroepeerd op categorie.

In plaats van bijvoorbeeld net.ipv4.ip_forward=0 en net.ipv4.icmp_echo_ignore_all=1 in te stellen in /etc/sysctl.conf, we kunnen een nieuw bestand maken met de naam net.conf in /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 ervoor kiest deze aanpak te gebruiken, vergeet dan niet dezelfde regels uit /etc/sysctl.conf te verwijderen.

Samenvatting

In dit artikel hebben we uitgelegd hoe u kernelruntimeparameters kunt wijzigen, zowel persistent als niet-persistent, met behulp van sysctl, /etc/sysctl.conf en bestanden in / etc/sysctl.d.

In de sysctl-documenten kunt u meer informatie vinden over de betekenis van meer variabelen. Deze bestanden vertegenwoordigen de meest complete documentatiebron over de parameters die via sysctl kunnen worden ingesteld.

Vond u dit artikel nuttig? Wij hopen zeker dat u dat gedaan heeft. Aarzel niet om ons te laten weten als u vragen of suggesties voor verbetering heeft.