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

再起動すると、新しい構成がアクティブになります。しかし、再起動せずにこの構成をアクティブにするにはどうすればよいですか?

A systemctl restart networkはトリックを行いません。

古い名前(ifdown eth0)で1つのインターフェイスをシャットダウンできますが、古い名前とifup新しい名前のどちらが指定されていても、次のメッセージが表示されます。

エラー:[/ etc / sysconfig / network-scripts / 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

編集

完全性と後世のために(および情報提供の目的で)以下を残していますが、swillのコメントMarco Macuzzoの答えを確認しました。 eth0(およびファイルの名前変更)を使用すると、hwaddr =フィールドが構成ファイルに含まれている限り、デバイスに正しい名前が付けられます。参照された更新後、代わりにこの方法を使用することをお勧めします。

また、次の再起動でも機能するように、udevルールを設定する必要があります。CentOS 7では、udevのパスは/usr/lib/udev/rules.d/60-net.rulesに移動しましたが、同じ方法で管理できます。あなたがいる場合、カーネルのブート文字列に「net.ifnames = 0 biosdevname = 0」を追加しましたあなたのNICの古い命名体系に戻るには、削除することができます

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"

nicごとに1つのエントリが必要です。正しいMACアドレスを使用し、NAMEフィールドを更新してください。「net.ifnames = 0 biosdevname = 0」を使用しなかった場合、意図しない結果が生じる可能性があるため注意してください。


2
これに関するメモ。CentOS 7.3を使用している場合、これは機能しません。これは、この問題のためです(access.redhat.com/solutions/2592561)。/etc/udev/rules.d/90-eno-fix.rulesネットワークデバイスの名前を変更するために以前に機能していたすべてのソリューションを上書きするため、ファイルを上書きする必要があります。
-swill

参照したアドバイザリを見ると、「この問題はsystemd-219-30.el7_3.6以降のパッケージを含むようにインストールリポジトリを更新することで回避できます。この新しいsystemdリリースでは、パッケージのインストール時に影響を受けるインターフェイスが特定されます。名前変更の問題が完全に回避されるように、udevルールが自動的に生成されます。」
ジェームズシェウィ

これは、彼らが言及している別の名前変更の問題です。彼らは名前が長すぎるので短縮されていると話している(私は思う)。言及されているudevルールは、インターフェイス名をeno########値にハードコードし、これらの値をのような名前に変更しようとするこれらすべての試みを無効にしますeth0。それは理にかなっていますか?使用しているバージョンをマシンで確認する必要がありますが、昨日最新のCentOS 7.3にアップグレードしたため、記載されているバージョンがあると思います。
-swill

この方法は、別の関連する問題を解決するのに役立ちました-無関係な構成エラーのために起動中にコンテナがクラッシュし、インターフェースの名前がシステム名ensXfYからコンテナ名eth1に変更されたままになりました。その後、コンテナの名前を変更するまでインターフェースが見つからなかったため、コンテナを再起動することはできませんでした
マイケルファース

9

実際、私が信じる最良の答えは、すでに投稿された2つの答えの組み合わせです。ネットワークサービスを再起動せずにデバイス名を変更するにip linkは、James Shewey(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変数が設定され、正しいことを確認してください。.devのifcfg構成ファイルを読み込むために実際にあるので、udevルールに触れる必要はありません60-net.rules/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ですべてのコマンドを実行するようにしてください。実行しないとロックアウトされます。

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.

ただし、VirtualBoxを介してVMにアクセスし、次のコマンドを実行してカーネルモジュールを削除および再追加することで、次のように機能しました。

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.