eth0 デバイスを有効にできない場合の対処 [Linux]

Pocket

【この記事を読むのに必要な時間は約 7 分です】

以下のコマンド実行時に、「デバイス eth0 は存在しないようですので、初期化を遅らせます。」とエラーメッセージが表示される場合の対処について説明します。

# ifup eth0

原因1:eth1 が有効になっている

以下のコマンドを実行した結果のように、eth0 でなく eth1 が表示されるのであれば、NIC が eth0 ではなく eth1 として認識されていることが原因です。

# ifconfig -a

eth1 Link encap:Ethernet HWaddr 00:0C:XX:XX:XX:XX
inet addr:172.18.XX.XXX Bcast:172.18.255.255 Mask:255.255.0.0
inet6 addr: fe80::20c:XXXX:XXXX:XXXX/XX Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:56415 errors:0 dropped:0 overruns:0 frame:0
TX packets:9431 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:6700126 (6.3 MiB) TX bytes:9940028 (9.4 MiB)

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:328143 errors:0 dropped:0 overruns:0 frame:0
TX packets:328143 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:80200763 (76.4 MiB) TX bytes:80200763 (76.4 MiB)

Mac アドレスが変わった場合 udev は NIC の MAC アドレスを認識して新しい情報を eth1 として自動登録し、eth1 の方を有効化するためにこのような事象が発生することがあります。その他のケースとして、VM Ware などで仮想環境のイメージをコピーした場合にもこの事象が発生します。
以下のコマンドから、eth0 から eth1 に置き換えられたことが確認できます。

# dmesg | grep eth

udev: renamed network interface eth0 to eth1

70-persistent-net.rules の編集

/etc/udev/rules.d/70-persistent-net.rules を参照し、以下のように NAME=”eth0″ と NAME=”eth1″ の両方の定義が存在していれば、NAME=”eth0″ の行をコメントアウトし、NAME=”eth1″ の行を NAME=”eth0″ に変更します。

変更前:

# PCI device 0x8086:0x100f (e1000)
SUBSYSTEM==”net”, ACTION==”add”, DRIVERS==”?*”, ATTR{address}==”00:0C:XX:XX:XX:XX”, ATTR{type}==”1″, KERNEL==”eth*”, NAME=”eth0″
# PCI device 0x8086:0x100f (e1000)
SUBSYSTEM==”net”, ACTION==”add”, DRIVERS==”?*”, ATTR{address}==”00:0C:XX:XX:XX:XX”, ATTR{type}==”1″, KERNEL==”eth*”, NAME=”eth1″

変更後:

# PCI device 0x8086:0x100f (e1000)
#SUBSYSTEM==”net”, ACTION==”add”, DRIVERS==”?*”, ATTR{address}==”00:0C:XX:XX:XX:XX”, ATTR{type}==”1″, KERNEL==”eth*”, NAME=”eth0″
# PCI device 0x8086:0x100f (e1000)
SUBSYSTEM==”net”, ACTION==”add”, DRIVERS==”?*”, ATTR{address}==”00:0C:XX:XX:XX:XX”, ATTR{type}==”1″, KERNEL==”eth*”, NAME=”eth0″

70-persistent-net.rules を保存し、OSを再起動します。

再起動後、ifconfig -a を実行し、以下のように eth0 が表示されていれば正常に動作しています。

eth0 Link encap:Ethernet HWaddr 00:0C:XX:XX:XX:XX
inet addr:172.18.XX.XXX Bcast:172.18.255.255 Mask:255.255.0.0
inet6 addr: fe80::20c:XXXX:XXXX:XXXX/XX Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:56415 errors:0 dropped:0 overruns:0 frame:0
TX packets:9431 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:6700126 (6.3 MiB) TX bytes:9940028 (9.4 MiB)

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:328143 errors:0 dropped:0 overruns:0 frame:0
TX packets:328143 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:80200763 (76.4 MiB) TX bytes:80200763 (76.4 MiB)

原因2:MAC アドレスが間違っている

MAC アドレスの確認

以下のコマンドを実行し、MAC アドレスを確認します。

# dmesg | grep eth0

この結果、「eth0: … h/w address XX:XX:XX:XX:XX:XX 」と表示されている部分が MAC アドレスになります。

ifcfg-eth0 / 70-persistent-net.rules の修正

  1. /etc/sysconfig/network-scripts/ifcfg-eth0 の HWADDR 部分がMAC アドレスになります。dmesg コマンドで確認した MAC アドレスに書き換え、保存します。
  2. /etc/udev/rules.d/70-persistent-net.rules の ATTR{address} 部分も同様に書き換えます。
  3. OSを再起動します。
タグ:

コメントを残す

メールアドレスが公開されることはありません。