Ich möchte das TCP-Segmentierungs-Offload auf einem CentOS5-Server deaktivieren. Mit ethtool lautet der Befehl ethtool -K eth0 tso off
. Diese Einstellung bleibt jedoch nur für diese Sitzung erhalten. Wie kann ich dafür sorgen, dass es durch Neustarts erhalten bleibt?
centos
linux-networking
ethtool
Gus E
quelle
quelle
Antworten:
Von dieser Webseite :
Sie können die ethtool-Befehle in
/etc/rc.local
(oder in das Äquivalent Ihrer Distribution) eingeben, in dem Befehle ausgeführt werden, nachdem der aktuelle Runlevel abgeschlossen ist. Dies ist jedoch nicht ideal. Netzwerkdienste wurden möglicherweise während des Runlevels gestartet, und ethtool-Befehle unterbrechen häufig den Netzwerkverkehr. Es ist vorzuziehen, die Befehle anzuwenden, wenn die Schnittstelle aufgerufen wird.Der Netzwerkdienst in CentOS kann dies tun. Das Skript
/etc/sysconfig/network-scripts/ifup-post
überprüft das Vorhandensein von/sbin/ifup-local
, und wenn es vorhanden ist , läuft es mit dem Schnittstellennamen als Parameter (zB:/sbin/ifup-local eth0
)Wir können diese Datei mit Touch erstellen
/sbin/ifup-local
ausführbar machen mitchmod +x /sbin/ifup-local
setzen Sie den SELinux Kontext mitchcon --reference /sbin/ifup /sbin/ifup-local
und es dann in einem Editor öffnen.Ein einfaches Skript, mit dem die gleichen Einstellungen auf alle Schnittstellen angewendet werden können, wäre ungefähr so
Beachten Sie, dass hiermit versucht wird, Einstellungen auf ALLE Schnittstellen anzuwenden, auch auf das Loopback.
Wenn wir unterschiedliche Schnittstellen haben, auf die wir unterschiedliche Einstellungen anwenden möchten, oder den Loopback überspringen möchten, können wir eine case-Anweisung abgeben
Jetzt werden die Einstellungen von ethtool beim Start auf die Schnittstellen angewendet, alle potenziellen Unterbrechungen der Netzwerkkommunikation werden ausgeführt, wenn die Schnittstelle aufgerufen wird, und Ihr Server kann weiterhin mit allen Netzwerkfunktionen gestartet werden.
quelle
Für RHEL7 in / etc / sysconfig / network-scripts / ifcfg- * haben Sie möglicherweise:
ETHTOOL_OPTS = "- K $ {DEVICE} gso off gro off tso off"
Wenn mehr Optionen vorhanden sind, verwenden Sie "Gefällt mir"
ETHTOOL_OPTS = "- K $ {DEVICE} ist ausgeschaltet; -K $ {DEVICE} ist ausgeschaltet; -K $ {DEVICE} ist ausgeschaltet"
Sie müssen natürlich DEVICE in Ihrer ifcfg-Datei definiert haben.
Es werden weder rc.local noch zusätzliche ifup-Skripte benötigt. Einfach für Sie in allgemeinen Bereitstellungssystemen.
quelle
Wenn Sie auf RHEL7 (oder ähnlich) arbeiten und Network Manager anstelle von /etc/init.d/network verwenden , um Ihre Schnittstellen zu steuern, funktioniert die vorgeschlagene Antwort nicht, da / sbin / ifup-local (sowie ifdown-pre-local) und ifdown-local ) werden niemals ausgeführt.
Stellen Sie stattdessen Ihre Skripte in /etc/NetworkManager/dispatcher.d/ und stellen Sie sicher, dass der NetworkManager-Dispatcher- Dienst aktiviert ist
Hinweis: Der Dispatcher wird nur dann aktiviert, wenn NetworkManager Änderungen an einer Schnittstelle vornimmt, nicht ausgeführt werden muss oder so, wenn der Status lautet
Das ist völlig in Ordnung!
Stellen Sie außerdem sicher, dass Ihr Skript:
Jetzt übergibt NetworkManager zwei (2) Variablen an den Dispatcher:
und es ermöglicht das Verketten der Skripte (genau wie / etc / rc ...), um die Reihenfolge zu steuern, in der der Dispatcher sie ausführt:
Die Reihenfolge wird bei einer Verbindung aufsteigend sein
und absteigend auf eine Trennung
und so weiter.
Um das zu erreichen, wonach OP gesucht hat, können Sie Folgendes eingeben:
in /etc/NetworkManager/dispatcher.d/20-ethtool
Und nenn es einen Tag.
Prost
quelle
if [ "$1" = "eth0" ] && [ "$2" = "up" ]; then
Ich hatte Probleme mit der akzeptierten Antwort (die ich, wie ich hinzufügen möchte, als sehr hilfreich empfand), weil ich Bonded Interfaces verwendete.
Es dauerte eine Weile, bis ich herausgefunden hatte, was passierte, aber ich stellte fest, dass das
ifup-local
Skript beim Aufrufen einer Anleihe oder sogar beim Aufrufen eines einzelnen Anleihesklaven nicht für die Slave-Schnittstellen aufgerufen wurde. Ich gehe davon aus, dass den Slave-Schnittstellen keine IP-Adressen zugewiesen wurden.Um dies
ifup-local
zu umgehen, habe ich meine modifiziert , um den Inhalt/proc/bonding/bondX
für die Schnittstelle zu analysieren, die aufgerufen wurde, wenn es sich um eine Bindung handelte, um die Namen der Slave-Schnittstelle zu erhalten, und dann die erforderlichen Dinge mit ihnen zu tun.Am Ende
ifup-local
sah mein so aus:Vorsichtsmaßnahme: Der Inhalt von / proc / net / binding / bondX kann sich für verschiedene Versionen von RedHat / Fedora / CentOS von dem unterscheiden, den ich beim Schreiben des Skripts verwendet habe. Daher funktioniert der Befehl zum Abrufen der Namen der Slave-Schnittstelle möglicherweise nicht .
quelle
Off-Topic, für Ubuntu-Benutzer, die hierher kamen, wie ich, dies als Hinweis:
Unter Ubuntu besteht die Lehrbuchmethode darin, die Datei / etc / network / interfaces zu bearbeiten, die wiederum von den Skripten init.d / pre-up -up usw. gelesen wird. Eine / etc / network / interfaces- Datei könnte also so aussehen:
Das ist, was die Dokumente sagen, aber es funktioniert nicht . Möglicherweise ist die Parsing-Logik in den Pre-Up- und Up-Skripten etwas veraltet und sie analysieren die erforderlichen Einstellungen nicht aus der Interface-Datei. Ich weiß es nicht. Zumindest hat es bei mir nicht funktioniert.
Die hackige, aber funktionierende Lösung für den Moment besteht darin , eine lokale /etc/rc.local-Datei zu erstellen / bearbeiten und den dort auszuführenden Befehl anzugeben (beachten Sie jedoch, dass dies das Netzwerk für einige Sekunden unterbrechen kann, nachdem die Schnittstelle bereits vorhanden ist zur Diskussion gebracht). Also mit diesem:
in /etc/rc.local ist die funktionierende Lösung, um eine Schnittstelle wie oben beabsichtigt zu verlangsamen.
Auf Ubuntu 17.04 und höher
Neuere Ubuntus-Versionen verwenden Systemd, weshalb die Datei rc.local beispielsweise nicht unbedingt beim Erreichen des Runlevels 'start' ausgeführt wird. Der Dienst "rc-local" muss aktiviert sein. Obwohl dies aus Gründen der Abwärtskompatibilität anscheinend die Standardeinstellung ist, prüfen Sie den Status mit
sudo systemctl status rc-local
quelle
pre-up
Direktive funktionierte für mich unter Linux Mint 17.3, um das TSO-Flag zu setzen, danke :)Ich fand, dass das Setzen dieser Art von Konfiguration in
/etc/network/interfaces
Ubuntu tatsächlich funktioniert (vorausgesetzt, ich habe sie zum Ausschalten verwendetlarge-receive-offload
, aber das sollte eigentlich keine Rolle spielen):quelle
Für Ubuntu können Sie dies tun, indem Sie folgende Zeile hinzufügen
/etc/network/interfaces
:post-up hier führt die angegebene Operation aus, nachdem die spezifische Schnittstelle aufgerufen wurde.
quelle
Ja, es kann momentan nicht mit Konfigurationsdateien gemacht werden. Sie können den Befehl in setzen
/etc/init.d/rc.local
und es sollte getan werden.Diese Datei wird zum letzten Zeitpunkt der Startsequenz ausgeführt und somit für die Schnittstelle deaktiviert.
quelle