CentOS 7 - Zmień nazwę interfejsu sieciowego bez ponownego uruchamiania


24

Zmieniam nazwy interfejsów sieciowych, modyfikując pliki w /etc/sysconfig/network-scripts.

  • eth0 -> nic0
  • eth1 -> nic1

Zawartość skryptów sieciowych wygląda następująco po modyfikacji:

# 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

Ponowne uruchomienie aktywuje nową konfigurację. Ale jak aktywować tę konfigurację bez ponownego uruchamiania?

A systemctl restart networknie załatwia sprawy.

Mogę zamknąć jeden interfejs za pomocą jego starej nazwy ( ifdown eth0), ale ifuppowoduje wyświetlenie poniższego komunikatu bez względu na to, czy podano starą czy nową nazwę:

BŁĄD: [/ etc / sysconfig / network-scripts / ifup-eth] Urządzenie nic0 wydaje się nie być obecne, opóźniając inicjalizację.

/etc/init.d/network status pokazuje ten wynik:

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

Zarówno ifconfigi ip apokaż stare nazwy interfejsów.


1
Możesz spróbować usunąć i ponownie załadować sterowniki urządzeń sieciowych, jeśli są one skompilowane jako moduły jądra.
Tom Hunt

Odpowiedzi:


29

Możesz zmienić nazwę urządzenia za pomocą polecenia ip:

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

Edytuj :

Wyjeżdżam poniżej w trosce o kompletność i potomnych (oraz w celach informacyjnych), ale potwierdziły komentarz pomyje za i odpowiedzi Marco Macuzzo za to po prostu zmiana nazwy i urządzenie interfejsu / etc / sysconfig / network-scripts / ifcfg- eth0 (i zmiana nazwy pliku) spowoduje, że nazwa urządzenia będzie poprawnie nazwana, o ile pole hwaddr = znajduje się w pliku konfiguracyjnym. Zalecam użycie tej metody zamiast aktualizacji po aktualizacji.

Możesz także upewnić się, że skonfigurowałeś regułę udev, aby działała również przy następnym restarcie. Ścieżka udev została przeniesiona w CentOS 7 do /usr/lib/udev/rules.d/60-net.rules, ale nadal możesz nią zarządzać w ten sam sposób. Jeśli dodałeś „net.ifnames = 0 biosdevname = 0” do łańcucha rozruchowego jądra, aby powrócić do starego schematu nazewnictwa dla twojej karty sieciowej , możesz usunąć

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

I zamień na

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

Potrzebujesz jednego wpisu na nic. Użyj poprawnego adresu MAC i zaktualizuj pole NAZWA. Jeśli nie użyłeś „net.ifnames = 0 biosdevname = 0”, zachowaj ostrożność, ponieważ mogą wystąpić niezamierzone konsekwencje.


2
Tylko uwaga na ten temat. Jeśli używasz CentOS 7.3, to nie działa. Wynika to z tego problemu ( access.redhat.com/solutions/2592561 ). Będziesz musiał zastąpić plik o, /etc/udev/rules.d/90-eno-fix.rulesponieważ zastępuje on wszystkie wcześniej działające rozwiązania w celu zmiany nazw urządzeń sieciowych.
swill

Patrząc na wskazany poradnik, zauważa: „Problemu tego można uniknąć, aktualizując repozytoria instalacji w celu włączenia pakietu systemd-219-30.el7_3.6 lub nowszego. W tej nowszej wersji systemowej dotknięte interfejsy są identyfikowane podczas instalacji pakietu i reguła udev jest generowana automatycznie, więc całkowicie można uniknąć zmiany nazwy ”.
James Shewey,

To inny problem zmiany nazwy, do którego się odnoszą. Mówią o skróceniu nazwy, ponieważ jest ona za długa (tak myślę). Wspomniana reguła udev koduje nazwę interfejsu na eno########wartość, która zastępuje wszystkie próby zmiany nazwy na coś podobnego eth0. Czy to ma sens? Będę musiał zweryfikować na moim komputerze, której wersji używam, ale wczoraj uaktualniłem do najnowszego CentOS 7.3, więc myślę, że będę miał wspomnianą wersję.
swill

Ta metoda była dla mnie przydatna do rozwiązania innego, ale pokrewnego problemu - pojemnik rozbił się podczas uruchamiania z powodu niezwiązanego błędu konfiguracji i pozostawił nazwę interfejsu zmienioną z nazwy systemowej ensXfY na nazwę kontenera eth1. Ponowna próba uruchomienia kontenera była niemożliwa, ponieważ nie można było znaleźć interfejsu, dopóki nie zostanie zmieniona jego nazwa
Michael Firth

9

Właściwie najlepszą odpowiedzią, jaką uważam, jest kombinacja dwóch już opublikowanych odpowiedzi. Aby zmienić nazwę urządzenia bez ponownego uruchamiania usług sieciowych, użyj ip linkpoleceń sugerowanych przez Jamesa Shewey ( ip link set <old_device_name> name <new_device_name>).

Aby zmiany przetrwały po ponownym uruchomieniu w systemie Red Hat Linux, zmodyfikuj odpowiedni plik w /etc/sysconfig/network-scripts/. Zmień nazwę pliku ifcfg_<old_device_name>na ifcfg_<new_device_name>i zmień DEVICEzmienną wewnątrz na <new_device_name>. Upewnij się również, że HWADDRzmienna jest ustawiona i jest poprawna. Nie ma potrzeby dotykania reguł udev , ponieważ 60-net.rulestak naprawdę można tam czytać pliki konfiguracyjne ifcfg /etc/sysconfig/network-scripts.


3

Aby przywrócić starą konwencję nazewnictwa, musisz edytować /etc/default/grubplik i dodać następujące

net.ifnames=0 biosdevname=0 

na końcu GRUB_CMDLINE_LINUXzmiennej


Lub po prostu usuwając biosdevnamepakiet, jeśli jest zainstalowany
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
niezła sztuczka zmiany nazwy :) dzięki za udostępnienie
166_MMX

2

Odpowiedź udzielona przez Jamesa Sheweya wydaje się być dobrym sposobem na to.

Jeśli chcesz po prostu pracować z plikami konfiguracyjnymi, /etc/sysconfig/network-scriptsa następnie uruchomić ponowne ładowanie, działa również rozładowanie i załadowanie modułu jądra, jak wspomniano w @Tom Hunt w komentarzach:

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

Jeśli uzyskujesz dostęp do urządzenia zdalnie, upewnij się, że uruchomiłeś wszystkie polecenia w trybie nohup, w przeciwnym razie się zablokujesz:

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

Sterownik do przeładowania oczywiście zależy od twojego interfejsu.


0

Próbowałem powyższego z Vagrant / VirtualBox i ansible, ale jakoś to nie działało w moim środowisku programistycznym.

Stare nazwy interfejsów zostały zachowane bez względu na to, co zrobiłem, aż do pełnego ponownego uruchomienia.

Dodałem następujące reguły /etc/udev/rules.d/60-persistent-net.rules(na podstawie: https://access.redhat.com/solutions/112643 )

Moim celem było nadanie interfejsowi określonej nazwy na podstawie adresu PCI.

Przykład:

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

Po dodaniu tych reguł wykonałem następujące polecenia:

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

Komunikat o błędzie był Cannot find device "int0"w ip link set * uppoleceniu. I /var/log/messageszauważyłem następujące wiadomości

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.

Ale następujące działało, uzyskując dostęp do maszyny wirtualnej za pośrednictwem VirtualBox i uruchom następujące polecenia, aby usunąć i ponownie dodać moduł jądra.

rmmod e1000 
modprobe e1000

Znalazłem to w następującym wątku: https://www.centos.org/forums/viewtopic.php?t=54695

Dziwną rzeczą, którą zauważyłem, to to, co lsmoddaje mi (zwróć uwagę na Used by)

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

Daj nam znać, co nie działało z zaakceptowaną odpowiedzią, z dokładnymi komunikatami o błędach. W ten sposób odpowiedź może być poprawiona.
Ned64

@ Ned64 Dodałem komunikat o błędzie i trochę więcej informacji
Sander Visser

Mam na myśli: co się dzieje, gdy piszesz jako root ip link set eth0 down; ip link set eth0 name int0; ip link set int0 up:? Bez udev...polecenia!
Ned64
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.