Je voudrais désactiver le déchargement de segmentation TCP sur un serveur CentOS5. En utilisant ethtool, la commande est ethtool -K eth0 tso off
Cependant, ce paramètre persiste uniquement pour cette session. Comment puis-je le faire persister lors des redémarrages?
15
Réponses:
De cette page Web :
Vous pouvez entrer les commandes ethtool dans
/etc/rc.local
(ou l'équivalent de votre distribution) où les commandes sont exécutées une fois le niveau d'exécution actuel terminé, mais ce n'est pas idéal. Les services réseau peuvent avoir démarré pendant le niveau d'exécution et les commandes ethtool ont tendance à interrompre le trafic réseau. Il serait plus préférable d'appliquer les commandes à mesure que l'interface est lancée.Le service réseau dans CentOS a la capacité de le faire. Le script
/etc/sysconfig/network-scripts/ifup-post
vérifie l'existence de/sbin/ifup-local
, et si elle existe, fonctionne avec le nom de l' interface comme paramètre (par exemple:/sbin/ifup-local eth0
)Nous pouvons créer ce fichier avec touch, le
/sbin/ifup-local
rendre exécutable enchmod +x /sbin/ifup-local
définissant son contexte SELinux avecchcon --reference /sbin/ifup /sbin/ifup-local
, puis l'ouvrir dans un éditeur.Un script simple pour appliquer les mêmes paramètres à toutes les interfaces serait quelque chose comme
Gardez à l'esprit que cela tentera d'appliquer les paramètres à TOUTES les interfaces, même au bouclage.
Si nous avons différentes interfaces auxquelles nous voulons appliquer des paramètres différents, ou si nous voulons sauter le bouclage, nous pouvons faire une déclaration de cas
Désormais, les paramètres ethtool sont appliqués aux interfaces au démarrage, toutes les interruptions potentielles de la communication réseau sont effectuées au fur et à mesure que l'interface est lancée, et votre serveur peut continuer à démarrer avec toutes les capacités du réseau.
la source
Pour RHEL7 dans / etc / sysconfig / network-scripts / ifcfg- * vous pouvez avoir:
ETHTOOL_OPTS = "- K $ {DEVICE} gso off gro off tso off"
si plus d'options, utilisez comme
ETHTOOL_OPTS = "- K $ {DEVICE} gso off; -K $ {DEVICE} gro off; -K $ {DEVICE} tso off"
vous devez avoir naturellement DEVICE défini dans votre fichier ifcfg.
Aucun script rc.local ni ifup supplémentaire n'est nécessaire. Facile pour vous dans les systèmes de déploiement génériques.
la source
Si vous êtes sur RHEL7 (ou similaire) et utilisez Network Manager au lieu de /etc/init.d/network pour contrôler vos interfaces, la réponse proposée ne fonctionnera pas, car / sbin / ifup-local (ainsi que ifdown-pre-local et ifdown-local ) ne seront jamais exécutés.
Au lieu de cela, placez vos scripts dans /etc/NetworkManager/dispatcher.d/ et assurez-vous que le service NetworkManager-dispatcher est activé
Astuce: Le répartiteur ne démarrera qu'une fois que NetworkManager apportera des modifications à une interface, il n'a pas besoin d'être en cours d'exécution ou quoi que ce soit, donc si l'état indique
c'est tout à fait bien!
Assurez-vous également que votre script est:
Maintenant, NetworkManager passera deux (2) variables au répartiteur:
et cela permet d'enchaîner les scripts (tout comme / etc / rc ...) pour avoir un certain contrôle sur l'ordre dans lequel le répartiteur les exécutera:
La commande sera ascendante sur une connexion
et descendant sur une déconnexion
etc.
Donc, pour accomplir ce que OP recherchait, vous pourriez mettre quelque chose comme ceci:
dans /etc/NetworkManager/dispatcher.d/20-ethtool
Et appelez ça un jour.
À votre santé
la source
if [ "$1" = "eth0" ] && [ "$2" = "up" ]; then
J'ai rencontré des problèmes avec la réponse acceptée (que, je m'empresse d'ajouter, j'ai trouvé très utile) parce que j'utilisais des interfaces liées.
Il m'a fallu un certain temps pour découvrir ce qui se passait, mais j'ai constaté que lors de la création d'une liaison, ou même lors de la création d'un esclave de liaison individuellement, le
ifup-local
script n'était pas appelé pour les interfaces esclaves. Je suppose que cela est dû au fait qu'aucune adresse IP ne leur a été attribuée aux interfaces esclaves.Pour contourner cela, j'ai modifié mon
ifup-local
pour analyser le contenu de/proc/bonding/bondX
l'interface qui avait été affichée, s'il s'agissait d'un lien, pour obtenir les noms des interfaces esclaves, puis j'ai fait les choses nécessaires avec eux.À la fin, ma
ifup-local
ressemblait à ceci:Attention: le contenu de / proc / net / bonding / bondX peut être différent pour les différentes versions de RedHat / Fedora / CentOS à celui que j'utilisais lorsque j'ai écrit le script, donc la commande pour extraire les noms des interfaces esclaves peut ne pas fonctionner .
la source
Hors sujet, pour les utilisateurs d'Ubuntu qui sont venus ici, comme moi, ceci comme une note:
Sur Ubuntu, le manuel façon de le faire est d'éditer le fichier / etc / network / interfaces fichier qui à son tour est lu par le init.d / pre-up -up, etc. scripts. Un fichier / etc / network / interfaces pourrait donc ressembler à ceci:
C'est ce que disent les docs, mais cela ne fonctionne pas . Il se peut que la logique d'analyse dans les scripts de pré-montée et de montée en puissance soit un peu datée et qu'ils n'analysent pas les paramètres requis du fichier d'interface. Je ne sais pas. Au moins, cela ne fonctionnait pas pour moi.
Donc, la solution hack-ish mais qui fonctionne pour l'instant est toujours de créer / modifier un fichier local /etc/rc.local et d'indiquer la commande à y exécuter (mais notez que cela peut interrompre la mise en réseau pendant quelques secondes après que l'interface a déjà été élevé). Donc, avoir ceci:
dans /etc/rc.local est la solution de travail pour ralentir une interface comme prévu ci-dessus.
Sur Ubuntu 17.04 et supérieur
Ubuntus plus récent utilise Systemd, et donc le fichier rc.local n'est pas nécessairement exécuté lors de l'atteinte du niveau d'exécution 'start', par exemple. Le service "rc-local" doit être activé. Bien qu'il semble être par défaut, pour des raisons de compatibilité descendante, probablement - assurez-vous de vérifier son état avec
sudo systemctl status rc-local
la source
pre-up
directive a fonctionné pour moi sur Linux Mint 17.3 pour définir le drapeau TSO, merci :)J'ai trouvé que la définition de ce type de configuration
/etc/network/interfaces
fonctionne réellement pour Ubuntu (à condition que je l'utilise pour la désactivationlarge-receive-offload
, mais cela ne devrait pas vraiment avoir d'importance):la source
Pour Ubuntu, vous pouvez le faire en ajoutant la ligne suivante
/etc/network/interfaces
:post-up ici effectuera l'opération donnée après avoir lancé l'interface spécifique.
la source
Oui, cela ne peut pas être fait en utilisant des fichiers de configuration pour le moment. Vous pouvez mettre en place la commande
/etc/init.d/rc.local
et cela devrait être fait.Ce fichier est exécuté à la fin de la séquence de démarrage et donc tso serait désactivé pour l'interface.
la source