CentOS 7 - रिबूट किए बिना नेटवर्क इंटरफ़ेस का नाम बदलें


24

मैं फ़ाइलों में संशोधन करके नेटवर्क इंटरफेस का नाम बदल रहा हूं /etc/sysconfig/network-scripts

  • eth0 -> निक0
  • eth1 -> निक 1

नेटवर्क स्क्रिप्ट की सामग्री इस तरह दिखती है, संशोधन के बाद:

# cat /etc/sysconfig/network-scripts/ifcfg-nic0
DEVICE=nic0
BOOTPROTO=static
ONBOOT=yes
HWADDR=xx:xx:xx:xx:xx:xx
USERCTL=no
IPV6INIT=no
MASTER=bond0
SLAVE=yes

एक रिबूट नए विन्यास को सक्रिय करता है। लेकिन मैं रिबूट किए बिना इस कॉन्फ़िगरेशन को कैसे सक्रिय करूं ?

A systemctl restart networkचाल नहीं करता है।

मैं एक इंटरफ़ेस को उसके पुराने नाम से बंद कर सकता हूं ( ifdown eth0लेकिन ifupपुराने या नए नाम प्रदान किए जाने पर कोई संदेश नहीं दिया जा सकता है:

त्रुटि: [/ etc / sysconfig / network-script / ifup-eth] डिवाइस nic0 मौजूद नहीं है, जिससे आरंभीकरण में देरी होती है।

/etc/init.d/network status यह आउटपुट दिखाता है:

Configured devices:
lo bond0 nic0 nic1
Currently active devices:
lo eth0 eth1 bond0

दोनों, ifconfigऔर ip aपुराने इंटरफ़ेस नाम दिखाते हैं।


1
यदि आप कर्नेल मॉड्यूल के रूप में संकलित हैं, तो आप नेटवर्क डिवाइस ड्राइवरों को हटाने और पुनः लोड करने का प्रयास कर सकते हैं।
टॉम हंट

जवाबों:


29

आप IP कमांड का उपयोग करके डिवाइस का नाम बदल सकते हैं:

/sbin/ip link set eth1 down
/sbin/ip link set eth1 name eth123
/sbin/ip link set eth123 up

संपादित करें :

मैं पूर्णता और पश्चाताप (और सूचनात्मक उद्देश्यों के लिए) के लिए नीचे जा रहा हूं, लेकिन मैंने स्वाइल की टिप्पणी और मार्को मैकुजो के जवाब की पुष्टि की है कि बस इंटरफ़ेस / आदि / sysconnig / नेटवर्क-स्क्रिप्ट / ifcfg का नाम और उपकरण बदल रहा है- eth0 (और फ़ाइल का नाम बदलना) डिवाइस को सही ढंग से नाम देने का कारण बनेगा जब तक कि कॉन्फ़िगरेशन फ़ाइल में hwaddr = फ़ील्ड शामिल है। मैं संदर्भित अद्यतन के बाद इस विधि का उपयोग करने की सलाह देता हूं।

आप यह भी सुनिश्चित करना चाहते हैं कि आप एक udv नियम कॉन्फ़िगर करें, ताकि यह अगले रिबूट पर भी काम करे। Udev के लिए पथ CentOS 7 से /usr/lib/udev/rules.d/60-net.rules में चला गया, लेकिन आप अभी भी इसे उसी तरह प्रबंधित कर पा रहे हैं। यदि आपने अपने नेटबेल बूट स्ट्रिंग में "net.ifnames = 0 biosdevname = 0" जोड़ दिया है , तो अपने नामकरण के लिए पुरानी नामकरण योजना में वापस आ सकते हैं, आप हटा सकते हैं

ACTION=="add", SUBSYSTEM=="net", DRIVERS=="?*", ATTR{type}=="1", PROGRAM="/lib/udev/rename_device", RESULT=="?*", NAME="$result"

और इसे बदल दें

ACTION=="add", SUBSYSTEM=="net", DRIVERS=="?*", ATTR{address}=="00:50:56:8e:3f:a7", NAME="eth123"

आपको प्रति प्रविष्टि एक प्रविष्टि की आवश्यकता है। सही मैक पते का उपयोग करना सुनिश्चित करें और NAME फ़ील्ड को अपडेट करें। यदि आपने "net.ifnames = 0 biosdevname = 0" का उपयोग नहीं किया है, तो सावधान रहें क्योंकि अनपेक्षित परिणाम हो सकते हैं।


2
बस इस पर ध्यान दें। यदि आप CentOS 7.3 का उपयोग कर रहे हैं, तो यह काम नहीं करता है। यह इस समस्या ( Access.redhat.com/solutions/2592561 ) के कारण है। आपको फ़ाइल को ओवरराइड करना होगा /etc/udev/rules.d/90-eno-fix.rulesक्योंकि यह नेटवर्क उपकरणों का नाम बदलने के लिए पहले से काम कर रहे सभी समाधानों को ओवरराइड करता है।
खंगालना

आपके द्वारा संदर्भित सलाहकार को देखते हुए, यह नोट करता है "सिस्टम -219-30.el7_3.6 या बाद के पैकेज को शामिल करने के लिए इंस्टॉलेशन रिपॉजिटरी को अपडेट करके इस समस्या से बचा जा सकता है। इस नए सिस्टेम रिलीज के साथ, पैकेज स्थापित और पर प्रभावित इंटरफेस की पहचान की जाती है। एक udv नियम स्वतः उत्पन्न होता है इसलिए नाम बदलने के मुद्दे को पूरी तरह से टाला जाता है। "
जेम्स शेवी

यह एक अलग नामकरण मुद्दा है जिसका वे उल्लेख कर रहे हैं। वे नाम छोटा होने की बात कर रहे हैं क्योंकि यह बहुत लंबा है (मुझे लगता है)। Udev नियम जिसे हार्ड कोड का उल्लेख किया गया है, इंटरफ़ेस नाम को एक eno########मूल्य पर रखता है, जो इन सभी प्रयासों को ओवरराइड करता है जैसे कि यह कुछ इस तरह से नाम बदल देता है eth0। क्या इसका कोई मतलब है? मुझे अपनी मशीन पर सत्यापित करना होगा कि मैं किस संस्करण का उपयोग कर रहा हूं, लेकिन मैंने कल नवीनतम CentOS 7.3 में अपग्रेड किया, इसलिए मुझे लगता है कि मेरे पास उल्लिखित संस्करण होगा।
खंगालना

यह विधि मेरे लिए एक अलग लेकिन संबंधित समस्या को हल करने के लिए उपयोगी थी - एक असंबंधित कॉन्फ़िगरेशन त्रुटि के कारण शुरू करते समय एक कंटेनर दुर्घटनाग्रस्त हो गया, और सिस्टम नाम ensXfY से नामित इंटरफ़ेस को eth1 के कंटेनर नाम पर छोड़ दिया। तब कंटेनर को फिर से शुरू करने का प्रयास करना संभव नहीं था क्योंकि यह इंटरफ़ेस का पता नहीं लगा सकता था जब तक कि इसे वापस नहीं लिया गया था
माइकल फर्थ

9

दरअसल, मेरा मानना ​​है कि पहले से पोस्ट किए गए दो उत्तरों का संयोजन सबसे अच्छा उत्तर है। नेटवर्क सेवाओं को फिर से शुरू किए बिना डिवाइस का नाम बदलने के लिए, ip linkजेम्स शेवी ( ip link set <old_device_name> name <new_device_name>) द्वारा सुझाए गए आदेशों का उपयोग करें ।

Red Hat Linux में रिबूट को बदलने के लिए, संबंधित फाइल को संशोधित करें /etc/sysconfig/network-scripts/। फ़ाइल ifcfg_<old_device_name>को नाम बदलें ifcfg_<new_device_name>और DEVICEचर को अंदर बदलें <new_device_name>। इसके अलावा, सुनिश्चित करें कि HWADDRचर सेट है और सही है। Udev नियमों को छूने की कोई आवश्यकता नहीं है , क्योंकि 60-net.rulesवास्तव में ifcfg कॉन्फ़िगरेशन फ़ाइलों को पढ़ने के लिए है /etc/sysconfig/network-scripts


3

पुराने नामकरण सम्मेलन को पुनर्स्थापित करने के लिए, आपको /etc/default/grubफ़ाइल को संपादित करने और निम्नलिखित को जोड़ने की आवश्यकता है

net.ifnames=0 biosdevname=0 

GRUB_CMDLINE_LINUXचर के अंत में


या बस biosdevnameपैकेज को हटाने अगर यह स्थापित है
GAD3R

3
ip link set ens33 down
ip link set ens33 name eth0
ip link set eth0 up

mv /etc/sysconfig/network-scripts/ifcfg-{ens33,eth0}

sed -ire "s/NAME=\"ens33\"/NAME=\"eth0\"/" /etc/sysconfig/network-scripts/ifcfg-eth0

sed -ire "s/DEVICE=\"ens33\"/NAME=\"eth0\"/" /etc/sysconfig/network-scripts/ifcfg-eth0

MAC=$(cat /sys/class/net/eth0/address)

echo -n 'HWADDR="'$MAC\" >> /etc/sysconfig/network-scripts/ifcfg-eth0

1
अच्छा नाम बदलने की ट्रिक :) शेयरिंग के लिए धन्यवाद
166_MMX

2

@James Shewey द्वारा दिया गया उत्तर इसे करने का सही तरीका लगता है।

यदि आप बस कॉन्फ़िगर फ़ाइलों के साथ काम करना चाहते हैं /etc/sysconfig/network-scriptsऔर फिर पुनः लोड करें, अनलोड करना और कर्नेल मॉड्यूल को लोड करना जैसा कि @Tom हंट द्वारा वर्णित टिप्पणियों में भी काम करता है:

service network stop
modprobe -r igb
modprobe igb
service network start

यदि आप मशीन को दूरस्थ रूप से एक्सेस करते हैं, तो सुनिश्चित करें कि आप सभी कमांड्स को नोह में चलाते हैं या आप अपने आप को बंद कर लेंगे:

nohup sh -c "service network stop && modprobe -r igb && modprobe igb ; service network start"

पाठ्यक्रम को फिर से लोड करने के लिए ड्राइवर आपके इंटरफ़ेस पर निर्भर करता है।


0

मैंने Vagrant / VirtualBox और ansible के साथ ऊपर की कोशिश की, लेकिन किसी तरह यह मेरे विकास के माहौल पर बिल्कुल भी काम नहीं किया।

पुराने इंटरफ़ेस नामों को बनाए रखा गया था जो मैंने एक पूर्ण पुनरारंभ तक किया था।

मैंने निम्नलिखित नियम /etc/udev/rules.d/60-persistent-net.rules( https://access.redhat.com/solutions/112643 पर आधारित ) जोड़े

मेरा लक्ष्य इंटरफ़ेस को PCI पते के आधार पर एक निर्दिष्ट नाम देना था।

उदाहरण:

ACTION=="add", SUBSYSTEM=="net", KERNELS=="0000:00:09.0", NAME:="int0"
ACTION=="add", SUBSYSTEM=="net", KERNELS=="0000:00:10.0", NAME:="ext0"

उन नियमों को जोड़ने के बाद मैंने निम्नलिखित आदेशों को निष्पादित किया:

ip link set eth0 down
udevadm control --reload-rules
udevadm trigger
ip link set int0 up

त्रुटि संदेश कमांड Cannot find device "int0"पर था ip link set * up। और /var/log/messagesमैंने निम्नलिखित संदेशों पर ध्यान दिया

Aug 16 17:08:41 localhost ansible-command: Invoked with creates=None executable=None _uses_shell=True strip_empty_ends=True _raw_params=ip link set eth0 down && udevadm control --reload-rules && udevadm trigger && ip link set int0 up#012 removes=None argv=None warn=True chdir=None stdin_add_newline=True stdin=None
Aug 16 17:08:41 localhost NetworkManager[6989]: <info>  [1565975321.5971] device (eth6): state change: disconnected -> unavailable (reason 'carrier-changed', sys-iface-state: 'managed')
Aug 16 17:08:41 localhost systemd-udevd: Network interface NamePolicy= disabled on kernel command line, ignoring.

लेकिन निम्नलिखित ने वर्चुअलबॉक्स के माध्यम से वीएम तक पहुंच बनाकर काम किया और कर्नेल मॉड्यूल को हटाने और फिर से जोड़ने के लिए निम्न आदेशों को निष्पादित किया।

rmmod e1000 
modprobe e1000

मुझे यह निम्नलिखित धागे में मिला: https://www.centos.org/forums/viewtopic.php?t=54695

जिस अजीब चीज पर मैंने गौर किया, lsmodवह मुझे दी (नोट Used by)

[vagrant@node-01 ~]$ lsmod
Module                  Size  Used by
e1000                 137586  0 

कृपया हमें बताएं कि सटीक त्रुटि संदेशों के साथ स्वीकृत उत्तर के साथ क्या काम नहीं किया। इस तरह शायद जवाब में सुधार किया जा सकता है।
नेड64

@ नेड64 ने मैं त्रुटि संदेश और थोड़ा और जानकारी जोड़ी
सैंडर

मेरा मतलब है: जब आप टाइप करते हैं, तो क्या होता है ip link set eth0 down; ip link set eth0 name int0; ip link set int0 up? कोई udev...आज्ञा नहीं !
नेड64
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.