web-dev-qa-db-ja.com

CentOS 7-再起動せずにネットワークインターフェイスの名前を変更する

/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)で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

ifconfigip aはどちらも古いインターフェース名を示しています。

24
udondan

Ipコマンドを使用してデバイスの名前を変更できます。

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

編集

完全性と後世性のために(そして情報提供のために)以下を残しますが、 swill's commentMarco Macuzzo's answer が名前とデバイスを変更するだけであることを確認しましたインターフェース/ etc/sysconfig/network-scripts/ifcfg-eth0の(およびファイルの名前を変更する)と、hwaddr =フィールドが構成に含まれている限り、デバイスに正しい名前が付けられますファイル。参照されている更新の後で、この方法を使用することをお勧めします。

また、udevルールを設定して、次回の再起動時にも機能するようにすることもできます。 CentOS 7でudevのパスが/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"

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

30
James Shewey

実際、私が信じる最良の答えは、すでに投稿された2つの答えの組み合わせです。ネットワークサービスを再起動せずにデバイス名を変更するには、James Sheweyが提案する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変数が設定されており、正しいことを確認してください。 devルールを変更する必要はありません60-net.rulesは実際に/etc/sysconfig/network-scriptsのifcfg構成ファイルを読み取るためにそこにあるためです。

9
Marco Mazzucco
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
5
TJ Zimmerman

古い命名規則を復元するには、/etc/default/grubファイルを編集して、以下を追加する必要があります

net.ifnames=0 biosdevname=0 

GRUB_CMDLINE_LINUX変数の最後

3
Mark

@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"

もちろん、リロードするドライバーはインターフェースに依存します。

2
udondan

上記をVagrant/VirtualBoxとansibleで試しましたが、私の開発環境ではどういうわけかこれはまったく機能しませんでした。

古いインターフェース名は、完全に再起動するまで私がしたことは何でも維持されていました。

/etc/udev/rules.d/60-persistent-net.rulesに次のルールを追加しました(ベース: https://access.redhat.com/solutions/11264

私の目標は、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 
0
Sander Visser