CentOS 7 - Перейменуйте мережевий інтерфейс без перезавантаження


24

Я перейменую мережеві інтерфейси, змінивши файли в /etc/sysconfig/network-scripts.

  • eth0 -> nic0
  • eth1 -> nic1

Зміст мережевих скриптів виглядає приблизно так, після модифікації:

# 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

Перезавантаження активує новий конфігурацію. Але як активувати цю конфігурацію без перезавантаження?

А 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

Редагувати :

Я їду нижче для повноти і нащадків (і для інформаційних цілей) , але я підтвердив коментар рідини в і відповідь Марко Macuzzo в тому , що просто змінивши ім'я і пристрій інтерфейсу / і т.д. / sysconfig / мережа-скрипти / ifcfg- eth0 (і перейменування файлу) призведе до правильного іменування пристрою до тих пір, поки поле hwaddr = буде включено у файл конфігурації. Я рекомендую використовувати цей метод замість цього посилання після оновлення.

Ви також можете переконатися, що ви налаштували правило udev, і це також буде працювати при наступному перезавантаженні. Шлях для udev перемістився в CentOS 7 до /usr/lib/udev/rules.d/60-net.rules, але ви все одно можете керувати ним таким же чином. Якщо ви додали "net.ifnames = 0 biosdevname = 0" у рядок завантаження ядра, щоб повернутися до старої схеми іменування для своїх nics, ви можете видалити

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"

Вам потрібен один запис на нік. Обов’язково використовуйте правильну MAC-адресу та оновіть поле NAME. Якщо ви не використовували "net.ifnames = 0 biosdevname = 0", будьте обережні, оскільки можуть виникнути ненавмисні наслідки.


2
Просто записка з цього приводу. Якщо ви використовуєте CentOS 7.3, це не працює. Це пов’язано з цією проблемою ( access.redhat.com/solutions/2592561 ). Вам доведеться перезаписати файл, /etc/udev/rules.d/90-eno-fix.rulesоскільки він переосмислює всі раніше працюючі рішення для перейменування мережевих пристроїв.
заплив

Дивлячись на рекомендацію, на яку ви посилаєтесь, він зазначає: "Цю проблему можна уникнути, оновивши сховища інсталяції, щоб включити пакунок systemd-219-30.el7_3.6 або пізнішої версії. За допомогою цього більш нового системного випуску пошкоджені інтерфейси ідентифікуються після встановлення пакета та правило udev генерується автоматично, тому проблему перейменування повністю уникати. "
Джеймс Швей

Це інше питання перейменування, на яке вони посилаються. Вони говорять про те, щоб ім’я було скорочене, тому що воно занадто довге (я думаю). Правило udev, яке згадується, жорстко кодує ім'я інтерфейсу до eno########значення, яке перекриває всі ці спроби перейменувати його на щось подібне eth0. Чи має це сенс? Мені доведеться перевірити на своїй машині, яку версію я використовую, але я вчора оновив до останнього CentOS 7.3, тому, думаю, буде вказана версія.
заплив

Цей метод був корисним для мене для вирішення іншої, але пов'язаної з цим проблеми - контейнер вийшов з ладу під час запуску через непов’язану помилку конфігурації, і залишив інтерфейс перейменований з імені системи ensXfY на ім'я контейнера eth1. Потім не вдалося повторити спробу запуску контейнера, оскільки він не зміг знайти інтерфейс, поки його не перейменовано назад
Michael Firth

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 Hunt у коментарях, також працює:

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.

Але наступне зробило роботу, отримавши доступ до VM через VirtualBox та виконавши наступні команди для видалення та повторного додавання модуля ядра.

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 

Будь ласка, повідомте нам, що не працювало з прийнятою відповіддю, з точними повідомленнями про помилки. Таким чином, можливо, відповідь можна покращити.
Ned64

@ Ned64 Я додав повідомлення про помилку та трохи більше інформації
Sander Visser

Що я маю на увазі: Що відбувається при введенні як root ip link set eth0 down; ip link set eth0 name int0; ip link set int0 up:? Немає udev...команди!
Ned64
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.