/etc/sysconfig/network-scripts
のファイルを変更して、ネットワークインターフェイスの名前を変更しています。
変更後のネットワークスクリプトの内容は次のようになります。
# 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
ifconfig
とip a
はどちらも古いインターフェース名を示しています。
Ipコマンドを使用してデバイスの名前を変更できます。
/sbin/ip link set eth1 down
/sbin/ip link set eth1 name eth123
/sbin/ip link set eth123 up
編集:
完全性と後世性のために(そして情報提供のために)以下を残しますが、 swill's comment と Marco 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」を使用しなかった場合は、意図しない結果になる可能性があるので注意してください。
実際、私が信じる最良の答えは、すでに投稿された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構成ファイルを読み取るためにそこにあるためです。
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
古い命名規則を復元するには、/etc/default/grub
ファイルを編集して、以下を追加する必要があります
net.ifnames=0 biosdevname=0
GRUB_CMDLINE_LINUX
変数の最後
@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"
もちろん、リロードするドライバーはインターフェースに依存します。
上記を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