Ubuntu Server 8.04のイメージをコピーするとネットワークがつながらなくなる

これは、udevというサービスによるものです。
udevはLinuxカーネル2.6以降で実装されたもので、デバイスファイルを動的に生成することであらかじめデバイスファイルをすべて用意しておかなくても、リムーバブルメディアなどの周辺機器を簡単に使えるようになります。


で、当然NICについての設定ファイルもudevは持っています。それが/etc/udev/rules.d/70-persistent-net.rulesです。

$ cat /etc/udev/rules.d/70-persistent-net.rules
# This file was automatically generated by the /lib/udev/write_net_rules
# program run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single line.

# PCI device 0x1022:0x2000 (pcnet32)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:**:**:**:**", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

ここにMACアドレスが書かれています。


んが、VMware(確認したのはServer 1系)はイメージをコピーするとMACアドレスを振り直すんです。そのとき、udevの方の設定は変えてくれません。
なのでデバイス名が変わっちゃうんですね。dmesgを見てみましょう。

$ dmesg | grep eth
(snip)
[13.907766] udev: renamed network interface eth0 to eth2

eth0がeth2にリネームされてます。ここでifconfig。

$ ifconfig eth2
eth2      Link encap:Ethernet  HWaddr 00:0c:**:**:**:**
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
          Interrupt:16 Base address:0x1400

あるある。


/etc/udev/rules.d/70-persistent-net.rules内のMACアドレスをこのMACアドレスに修正すれば、問題解決です。
最初は分からなくて/etc/network/interfacesのデバイス名を変更してました。


参考:VMware とかで Debian イメージをコピったら NIC が見えなくなる件