আমি একটি সেন্টোএস 5 সার্ভারে টিসিপি সেগমেন্টেশন অফলোডটি বন্ধ করতে চাই। এথ্টোল কমান্ডটি ব্যবহার করা হ'ল ethtool -K eth0 tso off
তবে, এই সেটিংটি কেবলমাত্র এই অধিবেশনটির জন্যই স্থায়ী। পুনরায় বুট করার মাধ্যমে কীভাবে আমি এটি চালিয়ে যেতে পারি?
আমি একটি সেন্টোএস 5 সার্ভারে টিসিপি সেগমেন্টেশন অফলোডটি বন্ধ করতে চাই। এথ্টোল কমান্ডটি ব্যবহার করা হ'ল ethtool -K eth0 tso off
তবে, এই সেটিংটি কেবলমাত্র এই অধিবেশনটির জন্যই স্থায়ী। পুনরায় বুট করার মাধ্যমে কীভাবে আমি এটি চালিয়ে যেতে পারি?
উত্তর:
এটা থেকে ওয়েবপৃষ্ঠা :
আপনি এথটল কমান্ডগুলিতে প্রবেশ করতে পারেন /etc/rc.local
(বা আপনার বিতরণের সমতুল্য) যেখানে বর্তমান রানলেভল সম্পূর্ণ হওয়ার পরে কমান্ডগুলি চালিত হয়, তবে এটি আদর্শ নয়। রানলেভাল চলাকালীন নেটওয়ার্ক পরিষেবা শুরু হয়ে থাকতে পারে এবং ইথিওল কমান্ডগুলি নেটওয়ার্ক ট্র্যাফিককে বাধা দেয়। ইন্টারফেসটি সামনে আসার সাথে সাথে আদেশগুলি প্রয়োগ করা আরও বেশি ভাল।
সেন্টোসের নেটওয়ার্ক পরিষেবাটিতে এটি করার ক্ষমতা রয়েছে। স্ক্রিপ্টটি /etc/sysconfig/network-scripts/ifup-post
অস্তিত্বের জন্য যাচাই করে/sbin/ifup-local
এবং এটি উপস্থিত থাকলে এটি ইন্টারফেসের নামের সাথে প্যারামিটার হিসাবে চালায় (যেমন /sbin/ifup-local eth0
:)
আমরা স্পর্শ সহ এই ফাইলটি এটির সেলইনাক্স প্রসঙ্গটি সেট /sbin/ifup-local
করে এক্সিকিউটেবল করার জন্য এটি তৈরি করতে পারি এবং তারপরে এডিটরটিতে এটি খুলতে পারি।chmod +x /sbin/ifup-local
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
এখন এথ্টোল সেটিংস ইন্টারফেসগুলিতে শুরু হওয়ার সাথে সাথে প্রয়োগ করা হয়েছে, ইন্টারফেসটি আনার সাথে সাথে নেটওয়ার্ক যোগাযোগের সমস্ত সম্ভাব্য বাধা সম্পন্ন হয় এবং আপনার সার্ভারটি পুরো নেটওয়ার্ক ক্ষমতা সহ বুট করা চালিয়ে যেতে পারে।
RHEL7 এর জন্য / etc / sysconfig / নেটওয়ার্ক-স্ক্রিপ্ট / ifcfg- * আপনার থাকতে পারে:
ETHTOOL_OPTS = "- কে $ {ডিভাইস} জিএসও বন্ধ করতে চাই তাই"
যদি আরও বিকল্প থাকে তবে ব্যবহার করুন
ETHTOOL_OPTS = "- কে $ {ডিভাইস} gso বন্ধ; -কে $ {ডিভাইস} বন্ধ;
আপনার ifcfg ফাইলে আপনার স্বাভাবিকভাবেই DEVICE সংজ্ঞায়িত করতে হবে।
কোনও rc.local বা অতিরিক্ত ifup স্ক্রিপ্টগুলির প্রয়োজন নেই। জেনেরিক স্থাপনা সিস্টেমে আপনার পক্ষে সহজ to
আপনি যদি RHEL7 (বা একইভাবে) তে থাকেন এবং আপনার ইন্টারফেসগুলি নিয়ন্ত্রণ করতে /etc/init.d/network এর পরিবর্তে নেটওয়ার্ক ম্যানেজার ব্যবহার করেন তবে / sbin / ifup-local (সেইসাথে ifdown-প্রাক-লোকাল) এবং ifdown- স্থানীয় ) কখনই কার্যকর হবে না।
পরিবর্তে আপনার স্ক্রিপ্টগুলি /etc/NetworkManager/dispatcher.d/ এ রাখুন এবং নিশ্চিত করুন যে নেটওয়ার্কম্যানেজার-প্রেরণকারী পরিষেবাটি সক্ষম হয়েছে
systemctl enable NetworkManager-dispatcher
ইঙ্গিত: প্রেরণকারী কেবল তখনই কিক করবে যখন নেটওয়ার্কম্যানেজার একটি ইন্টারফেসে পরিবর্তন করে, এটি চলমান বা কোনও কিছুর প্রয়োজন হয় না, সুতরাং যদি অবস্থাটি পড়ে
Active: inactive (dead)
পুরোপুরি ঠিক আছে!
আপনার স্ক্রিপ্টটি নিশ্চিত করুন:
এখন নেটওয়ার্কম্যানেজার প্রেরককে দুটি (2) ভেরিয়েবলগুলি পাস করবে:
$ 1 হ'ল ইন্টারফেস ( eno16777984 , eth0 , ppp0 , ইত্যাদি ...)
Holding 2 স্থিতি ধরে রাখছে (হয় উপরে বা নীচে )
এবং এটি স্ক্রিপ্টগুলিকে শৃঙ্খলাবদ্ধ করে (ঠিক যেমন / ইত্যাদি / আরসি ...) প্রেরণকারীর দ্বারা চালিত ক্রমের উপর কিছুটা নিয়ন্ত্রণ রাখতে পারে:
10-প্রথম, 20-সেকেন্ড এবং আরও ...
অর্ডারটি একটি সংযোগে আরোহণ করা হবে
যদি [$ 2 = "আপ"] এর 10-প্রথম এবং তার পরে 20-সেকেন্ড হয়
এবং একটি সংযোগ বিচ্ছিন্ন নেমে
যদি [$ 2 = "ডাউন"] আপনি 20-সেকেন্ড পরে 10-প্রথম পাবেন
ইত্যাদি।
সুতরাং ওপি আপনাকে যা খুঁজছিল তা সম্পাদন করতে এই জাতীয় কিছু রাখতে পারে:
#!/bin/bash
if [ "$1" = "eth0" && "$2" = "up" ]; then
/sbin/ethtool --offload eth0 tso off
fi
ইন / etc/ নেটওয়ার্ক ম্যানেজার / ডিসপ্যাচার.ড / 20 - ethtool
এবং এটি একটি দিন কল।
চিয়ার্স
if [ "$1" = "eth0" ] && [ "$2" = "up" ]; then
আমি বন্ডেড ইন্টারফেস ব্যবহার করছিলাম বলে গ্রহণযোগ্য উত্তরের (যা আমি তাড়াতাড়ি যোগ করতে খুব তাড়াতাড়ি পেয়েছি,) বেশ সমস্যায় পড়েছি।
কী ঘটছে তা আবিষ্কার করতে আমার কিছুটা সময় লেগেছে তবে আমি দেখতে পেয়েছি যে কোনও বন্ড আনার সময়, বা স্বতন্ত্রভাবে কোনও বন্ড দাস আনার সময়, 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
ক্যাভিয়েট: / স্ক্রিপ্টটি লেখার সময় আমি যেটি ব্যবহার করছিলাম তার সাথে রেডহ্যাট / ফেডোরা / সেন্টোসের বিভিন্ন সংস্করণের জন্য / প্রোক / নেট / বন্ডিং / বন্ডএক্সএক্সের বিষয়বস্তু আলাদা হতে পারে, সুতরাং স্লেভ ইন্টারফেসের নামগুলি সরিয়ে নেওয়ার আদেশটি কাজ নাও করতে পারে ।
অফ-টপিক, উবুন্টু ব্যবহারকারীরা যারা এখানে এসেছিলেন তাদের জন্য, আমার মতো এটিও নোট হিসাবে:
উবুন্টুতে, পাঠ্যপুস্তকটি করার উপায় হ'ল / ইত্যাদি / নেটওয়ার্ক / ইন্টারফেস ফাইল সম্পাদনা করা যা পরিবর্তে init.d / প্রাক-আপ-ইত্যাদি ইত্যাদি স্ক্রিপ্টগুলি পড়ে read সুতরাং একটি / ইত্যাদি / নেটওয়ার্ক / ইন্টারফেস ফাইলটি এর মতো দেখতে পারে:
auto eth0
iface eth0 inet static
pre-up /sbin/ethtool -s eth0 speed 10 duplex full
ডক্স এটিই বলে, তবে এটি কার্যকর হয় না । হতে পারে যে প্রাক-আপ এবং আপ স্ক্রিপ্টগুলিতে পার্সিং যুক্তিটি কিছুটা তারিখযুক্ত এবং সেগুলি ইন্টারফেস ফাইল থেকে প্রয়োজনীয় সেটিংসটিকে বিশ্লেষণ করে না। জানিনা। কমপক্ষে, এটি আমার পক্ষে কাজ করছে না।
সুতরাং হ্যাক-ইশ কিন্তু এখনের কাজের সমাধানটি এখনও একটি স্থানীয় /etc/rc.local ফাইল তৈরি করতে এবং সম্পাদনা করতে হবে এবং সেখানে কমান্ডটি প্রস্থান করার জন্য উল্লেখ করা হয়েছে (তবে লক্ষ্য রাখবেন যে ইন্টারফেসটি ইতিমধ্যে হয়ে যাওয়ার পরে এটি কয়েক সেকেন্ডের জন্য নেটওয়ার্কিংকে বাধা দিতে পারে) প্রতিপালিত). সুতরাং এটি হচ্ছে:
ethtool -s eth0 গতি 10 ডুপ্লেক্স পূর্ণ অটোনগ চালু
মধ্যে /etc/rc.local কাজ সমাধান হিসেবে উপরে অভিপ্রেত একটি ইন্টারফেস মন্দীভূত হয়।
উপর উবুন্টু 17,04 এবং উপরোক্ত
আরও সাম্প্রতিক উবুন্টাস সিস্টেমড ব্যবহার করে, এবং এভাবে আরসি.লোকাল ফাইলটি 'স্টার্ট' রানলেভেলে পৌঁছানোর পরে অগত্যা কার্যকর হয় না। "আরসি-লোকাল" পরিষেবা সক্ষম করতে হবে। যদিও এটি ডিফল্টরূপে বলে মনে হচ্ছে, পিছনের সামঞ্জস্যতার কারণে, সম্ভবত - এটির সাথে তার স্থিতি পরীক্ষা করা নিশ্চিত করুনsudo systemctl status rc-local
pre-up
নির্দেশ, ধন্যবাদ :) TSO পতাকা সেটিংয়ের জন্য লিনাক্স মিন্ট 17.3 উপর আমার জন্য কাজ
আমি দেখতে পেলাম যে এই ধরণের কনফিগারেশনটি সেট করা /etc/network/interfaces
আসলে উবুন্টুর পক্ষে কাজ করে (মঞ্জুরি দিয়েছি যে আমি এটি বন্ধ করার জন্য ব্যবহার করেছি large-receive-offload
, তবে এটি আসলে গুরুত্বপূর্ণ নয়):
অটো এথ 1 iface এথ 1 ইনট স্ট্যাটিক ঠিকানা xxx.xxx.xxx.xxx নেটমাস্ক এক্সএক্স প্রি-আপ / এসবিন / ইথিওল-কে $ আইএফএসি লোর বন্ধ
উবুন্টুর জন্য, আপনি নিম্নলিখিত লাইনটি এতে যোগ করে এটি করতে পারেন /etc/network/interfaces
:
auto eth0
iface eth0 inet static
[...]
post-up /sbin/ethtool -K eth0 tso off gso off gro off
এখানে পোস্ট-আপ নির্দিষ্ট ইন্টারফেস আনার পরে প্রদত্ত ক্রিয়াকলাপটি সম্পাদন করবে।
হ্যাঁ, এটি মুহুর্তের জন্য কনফিগারেশন ফাইলগুলি ব্যবহার করে করা যায় না। আপনি কমান্ডটি ভিতরে রাখতে পারেন /etc/init.d/rc.local
এবং এটি করা উচিত।
এই ফাইলটি বুটিং ক্রমের সর্বশেষে কার্যকর করা হয় এবং তাই ইন্টারফেসের জন্য বন্ধ করা হবে।