So ändern Sie Kernel-Laufzeitparameter auf eine persistente und nicht persistente Weise

In Teil 13 dieser LFCS (Linux Foundation Certified Sysadmin) Serie haben wir erklärt, wie man GRUB verwendet, um das Verhalten des Systems zu ändern, indem man Optionen an den Kernel für den laufenden Bootvorgang übergibt.

Ebenso können Sie die Befehlszeile in einem laufenden Linux-System verwenden, um bestimmte Laufzeit-Kernelparameter als einmalige Änderung oder dauerhaft durch Bearbeiten einer Konfigurationsdatei zu ändern.

Daher können Sie Kernelparameter bei Bedarf ohne großen Aufwand dynamisch aktivieren oder deaktivieren, wenn eine Änderung erforderlich ist, wie das System erwartet wird zu funktionieren.

Einführung des /proc-Dateisystems

Die neueste Spezifikation des Dateisystem-Hierarchie-Standards zeigt, dass /proc die Standardmethode zur Verarbeitung von Prozess- und Systeminformationen sowie anderen Kernel- und Speicherinformationen darstellt. Insbesondere befindet sich /proc/sys dort, wo Sie alle Informationen zu Geräten, Treibern und einigen Kernelfunktionen finden können.

Die tatsächliche interne Struktur von /proc/sys hängt stark vom verwendeten Kernel ab, aber Sie werden wahrscheinlich die folgenden Verzeichnisse darin finden. Jedes von ihnen wird wiederum andere Unterverzeichnisse enthalten, in denen die Werte für jede Parameterkategorie gepflegt werden:

  1. dev: Parameter für spezifische Geräte, die mit der Maschine verbunden sind.
  2. fs: Dateisystemkonfiguration (Quoten und Inodes, zum Beispiel).
  3. Kernel: Kernel-spezifische Konfiguration.
  4. net: Netzwerkkonfiguration.
  5. vm: Verwendung des virtuellen Speichers des Kernels.

Um die Laufzeitparameter des Kernels zu ändern, verwenden wir den Befehl sysctl. Die genaue Anzahl der änderbaren Parameter kann mit angesehen werden:

# sysctl -a | wc -l

Wenn Sie die vollständige Liste der Kernelparameter anzeigen möchten, tun Sie einfach:

# sysctl -a 

Da die Ausgabe des obigen Befehls VIELE Zeilen umfassen wird, können wir eine Pipeline gefolgt von less verwenden, um sie genauer zu inspizieren:

# sysctl -a | less

Werfen wir einen Blick auf die ersten Zeilen. Bitte beachten Sie, dass die ersten Zeichen in jeder Zeile mit den Namen der Verzeichnisse innerhalb von /proc/sys übereinstimmen:

Understand Linux /proc Filesystem

Zum Beispiel zeigt die hervorgehobene Zeile:

dev.cdrom.info = drive name:        	sr0

an, dass sr0 ein Alias für das optische Laufwerk ist. Mit anderen Worten, so „sieht“ der Kernel dieses Laufwerk und verwendet diesen Namen, um darauf zu verweisen.

Im folgenden Abschnitt werden wir erklären, wie man andere „wichtigere“ Laufzeitparameter des Kernels in Linux ändert.

Wie man Linux Kernel Laufzeitparameter ändert oder modifiziert

Ausgehend von dem, was wir bisher erklärt haben, ist leicht zu erkennen, dass der Name eines Parameters der Verzeichnisstruktur innerhalb von /proc/sys entspricht, wo er gefunden werden kann.

Zum Beispiel:

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

Überprüfen Sie Linux Kernel Parameter

Das gesagt, können wir den Wert eines bestimmten Linux-Kernel-Parameters entweder mit sysctl gefolgt vom Namen des Parameters anzeigen oder die zugehörige Datei lesen:

# 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

Einstellen oder Ändern von Linux-Kernel-Parametern

Um den Wert für einen Kernelparameter festzulegen, können wir auch sysctl verwenden, jedoch mit der Option -w und gefolgt vom Namen des Parameters, dem Gleichheitszeichen und dem gewünschten Wert.

Eine andere Methode besteht darin, echo zu verwenden, um die Datei zu überschreiben, die mit dem Parameter verbunden ist. Mit anderen Worten, die folgenden Methoden sind äquivalent dazu, die Paketweiterleitungsfunktion in unserem System zu deaktivieren (was übrigens der Standardwert sein sollte, wenn ein Rechner den Verkehr zwischen Netzwerken nicht weiterleiten soll):

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

Es ist wichtig zu beachten, dass Kernelparameter, die mit sysctl festgelegt werden, nur während der aktuellen Sitzung durchgesetzt werden und beim Neustart des Systems verschwinden.

Um diese Werte dauerhaft festzulegen, bearbeiten Sie /etc/sysctl.conf mit den gewünschten Werten. Zum Beispiel, um die Paketweiterleitung in /etc/sysctl.conf zu deaktivieren, stellen Sie sicher, dass diese Zeile in der Datei erscheint:

net.ipv4.ip_forward=0

Führen Sie dann folgenden Befehl aus, um die Änderungen an der laufenden Konfiguration anzuwenden.

# sysctl -p

Weitere Beispiele für wichtige Kernel-Laufzeitparameter sind:

fs.file-max gibt die maximale Anzahl von Dateigriffen an, die der Kernel für das System zuweisen kann. Je nach beabsichtigter Verwendung Ihres Systems (Web-/Datenbank-/Dateiserver, um nur einige Beispiele zu nennen) möchten Sie möglicherweise diesen Wert ändern, um den Anforderungen des Systems gerecht zu werden.

Andernfalls erhalten Sie möglicherweise eine „Zu viele geöffnete Dateien“ Fehlermeldung, im schlimmsten Fall könnte dies das Betriebssystem daran hindern, zu booten.

Wenn Sie sich aufgrund eines unschuldigen Fehlers in dieser letzten Situation befinden, booten Sie im Einzelbenutzermodus (wie im Teil 13 – Konfigurieren und Fehlerbehebung des Linux Grub Boot Loaders erläutert) und bearbeiten Sie /etc/sysctl.conf wie zuvor angegeben. Um die gleiche Beschränkung auf Benutzerebene festzulegen, verweisen Sie auf Teil 14 – Überwachen und Festlegen der Prozessbegrenzungsnutzung von Linux dieser Serie.

kernel.sysrq wird verwendet, um die SysRq Taste auf Ihrer Tastatur (auch bekannt als Drucktaste) zu aktivieren, sodass bestimmte Tastenkombinationen Notfallmaßnahmen auslösen können, wenn das System nicht reagiert.

Der Standardwert (16) zeigt an, dass das System die Alt+SysRq+Taste Kombination beachten und die in der sysrq.c Dokumentation auf kernel.org aufgeführten Aktionen ausführen wird (wobei die Taste ein Buchstabe im Bereich von b-z ist). Zum Beispiel wird Alt+SysRq+b das System zwangsweise neu starten (verwenden Sie dies als letzten Ausweg, wenn Ihr Server nicht reagiert).

Warnung! Versuchen Sie nicht, diese Tastenkombination auf einer virtuellen Maschine zu drücken, da dies dazu führen kann, dass Ihr Hostsystem neu startet!

Wenn auf 1 gesetzt, ignoriert net.ipv4.icmp_echo_ignore_all Ping-Anfragen und verwirft sie auf Kernel-Ebene. Dies wird im folgenden Bild gezeigt – beachten Sie, wie Ping-Anfragen nach Einstellung dieses Kernel-Parameters verloren gehen:

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.

Zum Beispiel können wir anstelle von net.ipv4.ip_forward=0 und net.ipv4.icmp_echo_ignore_all=1 in /etc/sysctl.conf eine neue Datei mit dem Namen net.conf innerhalb von /etc/sysctl.d erstellen:

# echo "net.ipv4.ip_forward=0" > /etc/sysctl.d/net.conf
# echo "net.ipv4.icmp_echo_ignore_all=1" >> /etc/sysctl.d/net.conf

Wenn Sie sich für diesen Ansatz entscheiden, vergessen Sie nicht, diese Zeilen aus /etc/sysctl.conf zu entfernen.

Zusammenfassung

In diesem Artikel haben wir erklärt, wie man Kernel-Laufzeitparameter sowohl dauerhaft als auch nicht dauerhaft mit sysctl, /etc/sysctl.conf und Dateien innerhalb von /etc/sysctl.d ändert.

In der sysctl-Dokumentation finden Sie weitere Informationen zur Bedeutung weiterer Variablen. Diese Dateien stellen die umfassendste Dokumentationsquelle zu den Parametern dar, die über sysctl gesetzt werden können.

Haben Sie diesen Artikel nützlich gefunden? Wir hoffen, dass dem so ist. Zögern Sie nicht, uns zu informieren, wenn Sie Fragen oder Verbesserungsvorschläge haben.

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