रिबूट के माध्यम से एथलेट सेटिंग कैसे जारी रखें


15

मैं एक CentOS5 सर्वर पर tcp विभाजन बंद करना चाहूंगा। ethtool -K eth0 tso offहालांकि इस सेटिंग को इस सत्र के लिए जारी रखा है, हालांकि एथ्टूल कमांड का उपयोग करना । मैं इसे रिबूट के माध्यम से कैसे बना सकता हूं?


2
इसे एक स्टार्ट स्क्रिप्ट में कहीं रख दें।
ज़ोर्डेचेस

जवाबों:


15

इस वेबपेज से :

आप /etc/rc.local(या आपके वितरण के समतुल्य) एथलूल कमांड दर्ज कर सकते हैं, जहाँ करंट रनवेवेल पूरा होने के बाद कमांड चलते हैं, लेकिन यह आदर्श नहीं है। रनरवेल के दौरान नेटवर्क सेवाएं शुरू हो सकती हैं और एथलूल कमांड नेटवर्क ट्रैफिक को बाधित करते हैं। इंटरफ़ेस लागू होते ही कमांड को लागू करना अधिक बेहतर होगा।

CentOS में नेटवर्क सेवा ऐसा करने की क्षमता रखती है। स्क्रिप्ट /etc/sysconfig/network-scripts/ifup-postके अस्तित्व की जाँच करता है /sbin/ifup-local, और यदि यह मौजूद है, तो इसे एक पैरामीटर के रूप में इंटरफ़ेस नाम से चलाता है (उदाहरण के लिए /sbin/ifup-local eth0)

हम इस फाइल को टच के साथ बना सकते हैं /sbin/ifup-localऔर इसे chmod +x /sbin/ifup-localइसके SELinux संदर्भ के साथ निष्पादन योग्य बना सकते हैं chcon --reference /sbin/ifup /sbin/ifup-localऔर फिर इसे एक संपादक में खोल सकते हैं।

सभी इंटरफेस के लिए एक ही सेटिंग लागू करने के लिए एक सरल स्क्रिप्ट कुछ इस तरह होगी

#!/bin/bash
if [ -n "$1" ]; then
/sbin/ethtool -G $1 rx 4096 tx 4096
/sbin/ethtool -K $1 tso on gso on
fi

ध्यान रखें कि यह सभी इंटरफेस पर सेटिंग लागू करने का प्रयास करेगा, यहां तक ​​कि लूपबैक भी।

यदि हमारे पास अलग-अलग इंटरफेस हैं, तो हम लूपबैक को अलग-अलग सेटिंग्स लागू करना चाहते हैं या छोड़ना चाहते हैं, हम एक केस स्टेटमेंट बना सकते हैं

#!/bin/bash
case "$1" in
eth0)
/sbin/ethtool -G $1 rx 16384 tx 16384
/sbin/ethtool -K $1 gso on gro on
;;
eth1)
/sbin/ethtool -G $1 rx 64 tx 64
/sbin/ethtool -K $1 tso on gso on
/sbin/ip link set $1 txqueuelen 0
;;
esac
exit 0

अब एथलेट सेटिंग्स को इंटरफेस में लागू किया जाता है क्योंकि वे शुरू करते हैं, नेटवर्क संचार के लिए सभी संभावित रुकावटें होती हैं क्योंकि इंटरफ़ेस को लाया जाता है, और आपका सर्वर पूर्ण नेटवर्क क्षमताओं के साथ बूट करना जारी रख सकता है।


भी ETHTOOL_OPTS के बारे में टिप्पणी यहाँ वर्णित access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/... किसी कारण यह मेरे मशीन अभी तक पर काम नहीं करता द्वारा हालांकि superuser.com/questions/995200/...
javapowered

13

RHEL7 in / etc / sysconfig / network-script / ifcfg- * के लिए आपके पास हो सकता है:

ETHTOOL_OPTS = "- K $ {DEVICE} ग्रॉस ऑफ ग्रॉस ऑफ ट्सू ऑफ"

यदि अधिक विकल्प हैं तो उपयोग करें

ETHTOOL_OPTS = "- K $ {DEVICE} को बंद करें? -K $ {DEVICE} को बंद करें; -K $ {DEVICE} को बंद करें"

आपको अपनी ifcfg फ़ाइल में स्वाभाविक रूप से परिभाषित DEVICE रखना होगा।

कोई rc.local और न ही अतिरिक्त ifup स्क्रिप्ट की जरूरत है। सामान्य तैनाती प्रणालियों में आपके लिए आसान है।


10

यदि आप RHEL7 (या एक जैसे) पर हैं और अपने इंटरफेस को नियंत्रित करने के लिए /etc/init.d/network के बजाय नेटवर्क मैनेजर का उपयोग करते हैं, तो प्रस्तावित जवाब काम नहीं करेगा, क्योंकि / sbin / ifup- लोकल (साथ ही ifdown-pre-local) और ifdown- स्थानीय ) कभी भी निष्पादित नहीं होगा।

इसके बजाय अपनी स्क्रिप्ट /etc/NetworkManager/dispatcher.d/ में डालें और सुनिश्चित करें कि NetworkManager-dispatcher सेवा सक्षम है

systemctl enable NetworkManager-dispatcher

संकेत: नेटवर्क प्रबंधक एक इंटरफ़ेस में परिवर्तन करने के बाद डिस्पैचर को केवल किक करेगा, इसे चलाने या कुछ भी करने की आवश्यकता नहीं है, इसलिए यदि स्थिति पढ़ती है

Active: inactive (dead)

यह पूरी तरह से ठीक है!

यह भी सुनिश्चित करें कि आपकी स्क्रिप्ट है:

  1. निष्पादन योग्य (chmod + x)
  2. रूट के स्वामित्व में (chown root: root)
  3. केवल जड़ द्वारा लिखने योग्य (chmod 755)

अब NetworkManager डिस्पैचर को दो (2) चर पास करेगा:

$ 1 इंटरफ़ेस जा रहा है ( eno16777984 , eth0 , ppp0 , आदि ...)

$ 2 स्थिति को पकड़े (या तो ऊपर या नीचे )

और यह लिपियों (जैसे / / / आरसी ...) का पीछा करने की अनुमति देता है, जिसमें डिस्पैचर उन्हें निष्पादित करेगा उस क्रम पर कुछ नियंत्रण होगा:

10-पहले, 20-सेकंड और इतने पर ...

आदेश एक कनेक्ट पर आरोही होगा

अगर [$ 2 = "ऊपर"] इसके 10-पहले 20 सेकंड के बाद

और एक डिस्कनेक्ट पर उतर रहा है

अगर [$ 2 = "डाउन"] आपको 10 सेकंड के बाद 20 सेकंड मिलता है

और इसी तरह।

इसलिए यह पूरा करने के लिए कि ओपी आपको किस चीज़ की तलाश में था:

#!/bin/bash
if [ "$1" = "eth0" && "$2" = "up" ]; then
  /sbin/ethtool --offload eth0 tso off
fi

in /etc/NetworkManager/dispatcher.d/20-ethtool

और इसे एक दिन कहते हैं।

चियर्स


कृपया ध्यान दें कि यह प्रश्न बहुत पुराना है और इसका पहले से ही एक स्वीकृत उत्तर है और आपका उत्तर वास्तव में नया नहीं जोड़ता है। कृपया बहुत पुरानी पोस्टों के उत्तर देने से बचने की कोशिश करें क्योंकि यह सामने वाले पृष्ठ को अव्यवस्थित करती है।
कैथरीन मैकइन्स

3
"Ifup-local" के लिए Google खोजें और आपको यह 6 ठी हिट के रूप में मिलता है। कुछ भी नहीं मैं "पुराने" पर विचार
करूंगा

2
यह निश्चित रूप से CentOS के संबंध में कुछ जोड़ता है। कोई अन्य समाधान मेरे लिए CentOS 7. में काम नहीं किया
JDL

3
बैश स्क्रिप्ट में एक त्रुटि है, यह होना चाहिए:if [ "$1" = "eth0" ] && [ "$2" = "up" ]; then
dreua

5

मैं स्वीकृत उत्तर के साथ समस्याओं में भाग गया (जो, मैं जोड़ने की जल्दबाजी करता हूं, मुझे बहुत मदद मिली) क्योंकि मैं बंधुआ इंटरफेस का उपयोग कर रहा था।

मुझे यह पता लगाने में थोड़ा समय लगा कि क्या हो रहा है, लेकिन मैंने पाया कि जब एक बंधन लाया जाता है, या यहां तक ​​कि जब एक बंधन दास को व्यक्तिगत रूप से लाया जाता है, तो ifup-localस्क्रिप्ट को दास इंटरफेस के लिए नहीं बुलाया जाएगा। मुझे लगता है कि यह इसलिए है क्योंकि दास इंटरफेस के पास उनके पास कोई आईपी पते नहीं हैं।

इसे प्राप्त करने के लिए मैंने अपने इंटरफ़ेस ifup-localकी सामग्री को पार्स करने के लिए संशोधित /proc/bonding/bondXकिया, जिसे लाया गया था, अगर यह एक बंधन था, दास इंटरफ़ेस नाम पाने के लिए, और फिर उनके साथ आवश्यक सामान किया।

अंत में मेरा ifup-localनिम्नलिखित की तरह लग रहा था:

#!/bin/bash

if [ -n "$1" ]
then
  IFACE="$1"

  # If interface is physical
  if [[ $IFACE =~ ^eth[0-9]+$ ]]
  then
    # Do whatever you need for a physical interface here
    # example below
    /sbin/ethtool -K $IFACE rx off    

  # Else if it's a bond
  elif [[ $IFACE =~ ^bond[0-9]+$ ]]
  then
    # Do whatever you need for the bond here
    # example below
    /sbin/ethtool -K $IFACE gso off

    # Now deal with slaves
    # Pull out slave interface names from /proc/net/bonding/bondX
    SLAVES=$(/bin/grep -oP "Slave Interface: \K(eth[0-9]+)" /proc/net/bonding/$IFACE)
    for SLAVE in $SLAVES
    do
      # Do whatever you need with the slave here
      # example below
      /sbin/ethtool -K $SLAVE tso off gso off
    done
  fi
fi

कैविएट: /हार्ट / नेट / बॉन्डिंग / बॉन्डएक्स की सामग्री रेडहैट / फेडोरा / सेंटोस के विभिन्न संस्करणों के लिए अलग हो सकती है, जिसका उपयोग मैं उस समय कर रहा था जब मैंने स्क्रिप्ट लिखी थी, इसलिए दास इंटरफ़ेस नामों को बाहर निकालने का आदेश काम नहीं कर सकता है। ।


4

उबंटू उपयोगकर्ताओं के लिए ऑफ-टॉपिक, जो यहां आए थे, मेरी तरह, यह नोट के रूप में:

उबंटू पर, ऐसा करने के लिए पाठ्यपुस्तक का तरीका / etc / नेटवर्क / इंटरफेस फ़ाइल को संपादित करना है जो बदले में init.d / pre-up -up, आदि स्क्रिप्ट द्वारा पढ़ा जाता है। तो / a / etc / network / interfaces file इस तरह दिख सकता है:

auto eth0
iface eth0 inet static
pre-up /sbin/ethtool -s eth0 speed 10 duplex full

डॉक्स का यही कहना है, लेकिन यह काम नहीं करता है । हो सकता है कि प्री-अप और अप स्क्रिप्ट में पार्सिंग तर्क थोड़ा सा दिनांकित हो और वे इंटरफेस फाइल से आवश्यक सेटिंग्स को पार्स न करें। पता नहीं। कम से कम, यह मेरे लिए काम नहीं कर रहा था।

इसलिए हैक-ईश लेकिन अब के लिए काम कर रहा समाधान अभी भी एक स्थानीय /etc/rc.local फ़ाइल बनाना / संपादित करना है और कमांड को वहां से बाहर निकलने के लिए कहा गया है (लेकिन ध्यान दें कि यह इंटरफेस के पहले से ही एक सेकंड के लिए नेटवर्किंग को बाधित कर सकता है। परवरिश)। तो यह होने:

ethtool -s eth0 स्पीड 10 डुप्लेक्स फुल ऑटोनग ऑन

in /etc/rc.local ऊपर बताए अनुसार एक इंटरफ़ेस को धीमा करने के लिए काम कर रहा समाधान है।

पर उबंटू 17.04 और इसके बाद के संस्करण

अधिक हाल ही में Ubuntus Systemd का उपयोग करते हैं, और इस प्रकार r.local फ़ाइल आवश्यक रूप से 'स्टार्ट' रनवे तक पहुंचने पर निष्पादित नहीं होती है, उदाहरण के लिए। "आरसी-स्थानीय" सेवा को सक्षम करना होगा। यद्यपि यह डिफ़ॉल्ट रूप से लगता है, पश्चगामी संगतता कारणों के लिए, शायद - इसके साथ स्थिति की जांच करना सुनिश्चित करेंsudo systemctl status rc-local


pre-upनिर्देश, धन्यवाद :) त्सो ध्वज स्थापित करने के लिए लिनक्स टकसाल 17.3 पर मेरे लिए काम किया
Joril

1

मैंने पाया कि /etc/network/interfacesवास्तव में उबंटू के लिए इस तरह का कॉन्फ़िगरेशन सेट करना (बशर्ते मैंने इसे बंद करने के लिए उपयोग किया हो large-receive-offload, लेकिन यह वास्तव में कोई बात नहीं होनी चाहिए):

ऑटो eth1
iface eth1 inet स्थैतिक
    पता xxx.xxx.xxx.xxx
    netmask xx
    प्री-अप / sbin / ethtool -K $ IFACE को बंद करना

1

उबंटू के लिए, आप निम्न पंक्ति को इसमें जोड़कर ऐसा कर सकते हैं /etc/network/interfaces:

auto eth0
iface eth0 inet static
[...]
post-up /sbin/ethtool -K eth0 tso off gso off gro off

यहाँ पोस्ट-अप विशिष्ट इंटरफ़ेस को लाने के बाद दिए गए ऑपरेशन को पूरा करेगा।


0

हाँ, यह फिलहाल विन्यास फाइल का उपयोग करके नहीं किया जा सकता है। आप इसमें कमांड डाल सकते हैं /etc/init.d/rc.localऔर इसे किया जाना चाहिए।

उस फ़ाइल को बूटिंग अनुक्रम के अंतिम भाग में निष्पादित किया जाता है और इसलिए इंटरफ़ेस के लिए tso को बंद कर दिया जाएगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.