CentOS 7 - Đổi tên giao diện mạng mà không cần khởi động lại


24

Tôi đang đổi tên giao diện mạng bằng cách sửa đổi các tệp trong /etc/sysconfig/network-scripts .

  • eth0 -> nic0
  • eth1 -> nic1

Nội dung của các tập lệnh mạng trông như thế này, sau khi sửa đổi:

# 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

Khởi động lại kích hoạt cấu hình mới. Nhưng làm cách nào để kích hoạt cấu hình này mà không cần khởi động lại?

Một systemctl restart network không làm trò bịp.

Tôi có thể tắt một giao diện bằng tên cũ ( ifdown eth0) nhưng ifupkết quả là thông báo bên dưới cho dù tên cũ hay mới được cung cấp:

LRI: [/ etc / sysconfig / network-scripts / ifup-eth] Thiết bị nic0 dường như không xuất hiện, trì hoãn khởi tạo.

/etc/init.d/network status hiển thị đầu ra này:

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

Cả hai, ifconfigip ahiển thị tên giao diện cũ.


1
Bạn có thể thử gỡ bỏ và tải lại trình điều khiển thiết bị mạng, nếu chúng được biên dịch dưới dạng các mô-đun hạt nhân.
Tom Hunt

Câu trả lời:


29

Bạn có thể đổi tên thiết bị bằng lệnh ip:

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

Chỉnh sửa :

Tôi rời khỏi đây vì lợi ích của sự hoàn chỉnh và hậu thế (và cho mục đích thông tin,) nhưng tôi đã khẳng định bình luận rửa củacâu trả lời Marco Macuzzo của mà chỉ đơn giản thay đổi tên và thiết bị của giao diện / etc / sysconfig / network-scripts / ifcfg- eth0 (và đổi tên tệp) sẽ khiến thiết bị được đặt tên chính xác miễn là trường hwaddr = được bao gồm trong tệp cấu hình. Tôi khuyên bạn nên sử dụng phương pháp này thay vì sau khi cập nhật được tham chiếu.

Bạn cũng có thể muốn đảm bảo rằng bạn định cấu hình quy tắc udev, để điều này cũng hoạt động trong lần khởi động lại tiếp theo. Đường dẫn cho udev đã chuyển trong CentOS 7 sang /usr/lib/udev/rules.d/60-net.rules nhưng bạn vẫn có thể quản lý theo cùng một cách. Nếu bạn đã thêm "net.ifnames = 0 biosdevname = 0" vào chuỗi khởi động hạt nhân của bạn để trở về sơ đồ đặt tên cũ cho các ảnh của bạn, bạn có thể xóa

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

Và thay thế nó bằng

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

Bạn cần một mục nhập cho mỗi nic. Đảm bảo sử dụng đúng địa chỉ MAC và cập nhật trường NAME. Nếu bạn không sử dụng "net.ifnames = 0 biosdevname = 0", hãy cẩn thận vì có thể có những hậu quả không lường trước được.


2
Chỉ cần một lưu ý về điều này. Nếu bạn đang sử dụng CentOS 7.3, thì nó không hoạt động. Điều này là do vấn đề này ( access.redhat.com/solutions/2592561 ). Bạn sẽ phải ghi đè tệp tại /etc/udev/rules.d/90-eno-fix.rulesvì nó ghi đè tất cả các giải pháp hoạt động trước đó để đổi tên các thiết bị mạng.
rửa

Nhìn vào lời khuyên mà bạn đã tham khảo, nó ghi chú "Vấn đề này có thể tránh được bằng cách cập nhật các kho lưu trữ cài đặt để bao gồm gói systemd-219-30.el7_3.6 trở lên. Với bản phát hành systemd mới hơn này, các giao diện bị ảnh hưởng được xác định khi cài đặt gói và một quy tắc udev được tạo tự động để tránh hoàn toàn vấn đề đổi tên. "
James Shewey

Đó là một vấn đề đổi tên khác nhau mà họ đang đề cập. Họ đang nói về cái tên được rút ngắn vì nó quá dài (tôi nghĩ vậy). Quy tắc udev được đề cập mã cứng tên giao diện thành một eno########giá trị ghi đè tất cả những nỗ lực này để đổi tên nó thành một cái gì đó như eth0. Điều đó có ý nghĩa? Tôi sẽ phải xác minh trên máy của mình phiên bản nào tôi đang sử dụng, nhưng tôi đã nâng cấp lên phiên bản CentOS 7.3 mới nhất ngày hôm qua, vì vậy tôi nghĩ rằng tôi sẽ có phiên bản được đề cập.
rửa

Phương pháp này hữu ích cho tôi để giải quyết một vấn đề khác nhưng có liên quan - một container bị hỏng trong khi bắt đầu do lỗi cấu hình không liên quan và để giao diện được đổi tên từ tên hệ thống oblXfY thành tên container của eth1. Sau đó, không thể thử khởi động lại container vì nó không thể tìm thấy giao diện cho đến khi nó được đổi tên trở lại
Michael Firth

9

Trên thực tế, câu trả lời tốt nhất tôi tin là sự kết hợp của hai câu trả lời đã được đăng. Để thay đổi tên thiết bị mà không cần khởi động lại dịch vụ mạng, hãy sử dụng các ip linklệnh được đề xuất bởi James Shewey ( ip link set <old_device_name> name <new_device_name>).

Để thực hiện các thay đổi tồn tại khi khởi động lại trong Red Hat Linux, hãy sửa đổi tệp có liên quan /etc/sysconfig/network-scripts/. Đổi tên tệp ifcfg_<old_device_name>thành ifcfg_<new_device_name>và thay đổi DEVICEbiến bên trong thành <new_device_name>. Ngoài ra, hãy chắc chắn rằng HWADDRbiến được đặt và đúng. Không cần phải chạm vào các quy tắc udev , vì 60-net.rulesthực sự ở đó để đọc các tệp cấu hình ifcfg trong /etc/sysconfig/network-scripts.


3

Để khôi phục quy ước đặt tên cũ, bạn cần chỉnh sửa /etc/default/grubtệp và thêm vào như sau

net.ifnames=0 biosdevname=0 

ở cuối GRUB_CMDLINE_LINUXbiến


Hoặc chỉ cần gỡ bỏ biosdevnamegói nếu nó được cài đặt
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
mẹo đổi tên đẹp :) cảm ơn vì đã chia sẻ
166_MMX

2

Câu trả lời được đưa ra bởi @James Shewey dường như là cách đúng đắn để làm điều đó.

Nếu bạn muốn chỉ làm việc với các tệp cấu hình /etc/sysconfig/network-scriptsvà sau đó kích hoạt tải lại, dỡ và tải mô-đun hạt nhân như được đề cập bởi @Tom Hunt trong các nhận xét cũng hoạt động:

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

Nếu bạn truy cập máy từ xa, hãy đảm bảo bạn chạy tất cả các lệnh trong một tiếng ồn hoặc bạn sẽ tự khóa:

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

Trình điều khiển để tải lại tất nhiên phụ thuộc vào giao diện của bạn.


0

Tôi đã thử ở trên với Vagrant / VirtualBox và ansible, nhưng bằng cách nào đó, điều này hoàn toàn không hoạt động trên môi trường phát triển của tôi.

Tên giao diện cũ được duy trì bất cứ điều gì tôi làm cho đến khi khởi động lại đầy đủ.

Tôi đã thêm các quy tắc sau vào /etc/udev/rules.d/60-persistent-net.rules(dựa trên: https://access.redhat.com/solutions/112643 )

Mục tiêu của tôi là cung cấp cho giao diện một tên được chỉ định dựa trên địa chỉ PCI.

Thí dụ:

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

Sau khi thêm các quy tắc đó, tôi đã thực hiện các lệnh sau:

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

Thông báo lỗi là Cannot find device "int0"trên ip link set * uplệnh. Và trong /var/log/messagestôi nhận thấy những tin nhắn sau

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.

Nhưng sau đây đã hoạt động bằng cách truy cập VM thông qua VirtualBox và thực hiện các lệnh sau để loại bỏ và thêm lại mô-đun hạt nhân.

rmmod e1000 
modprobe e1000

Tôi tìm thấy điều này trong chuỗi sau: https://www.centos.org/forums/viewtopic.php?t=54695

Điều kỳ lạ tôi nhận thấy là nó lsmodmang lại cho tôi (lưu ý Used by)

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

Vui lòng cho chúng tôi biết những gì không hoạt động với câu trả lời được chấp nhận, với các thông báo lỗi chính xác. Bằng cách đó có lẽ câu trả lời có thể được cải thiện.
Ned64

@ Ned64 Tôi đã thêm thông báo lỗi và thêm một chút thông tin
Sander Visser

Ý tôi là: Điều gì xảy ra khi bạn gõ, là root : ip link set eth0 down; ip link set eth0 name int0; ip link set int0 up? Không có udev...lệnh!
Ned64
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.