Centos Linux下”Device eth0 does not seem to be present,delaying initialization.”問題解決方法.
前幾天從一個VW上用Export->Export VOF Template…克隆一個CentOS鏡像文件到另一個VM上Deploy後,網絡無法訪問,於是就試著重啟網卡服務:
# service network restart
系統報出如下錯誤:
Device eth0 does not seem to be present,delaying initialization.
使用 ifconfig 看不到 eth0 的任何信息.
我的做法是:
打開ifcfg-eth0文件
#vi /etc/sysconfig/network-scripts/ifcfg-eth0
將HWADDR的地址修改成VM上顯示的mac地址,並把文件改名為ifcfg-eth1,
然後重啟網卡服務
# service network restart
一切正正常了。
另外網上搜到的方法說不用修改HWADDR的地址,直接將其註釋掉,改名為ifcfg-eth1,然後重啟網卡服務,也是可以。
經過各種google,最終要是找到了問題的原因使用克隆後的虛擬機時發現原來在基本系統中的網卡eth0到了新系統卻沒有了,使用ifconfig -a會發現只有lo。因為基本系統的網絡相關配置都是基於eth0的,如果基於此克隆虛擬機繼續克隆或複制新的虛擬機,網卡的標識每一次都會自動加1變成eth1(第二次克隆會變成eth2) 。由於很多Linux distribution使用udev動態管理設備文件,並根據設備的信息對其進行持久化命名。例如在centos中,udev會在系統引導的過程中識別網卡,將mac地址和網卡名稱對應起來記錄在udev的規則腳本中。而VMware會自動生成虛擬機的mac地址。由於基本系統的虛擬機已經記錄了該虛擬機的網卡mac地址對應於網卡eth0,在克隆出的虛擬機中由於mac地址發生改變,udev會自動將該mac對應於網卡eth1。以此類推,udev會記錄所有已經識別的mac與網卡名的關係,所以每次克隆網卡名稱會自動加1,而其實kernel僅僅只識別到一張網卡,跟網卡名相關的網絡配置也未發生任何變化。
鑑於此另外一種解決方法: udev將mac與網卡名稱的對應關係保存在/etc/udev/rules.d/70-persistent-net.rules中, 打開此文件
#vi /etc/udev/rules.d /70-persistent-net.rules 可以看到文件內容形式顯示如下,不同機器具體內容顯示有所不同,
# PCI device 0×1022:0×2000 (pcnet32) SUBSYSTEM==”net”, ACTION==” add”, DRIVERS==”?*”, ATTR{address}==”00:0c:29:8f:89:97″, ATTR{type}==”1″, KERNEL==”eth*”, NAME =”eth0″
# PCI device 0×1022:0×2000 (pcnet32) SUBSYSTEM==”net”, ACTION==”add”, DRIVERS==”?*”, ATTR{address}==”00:0c: 29:50:bd:17″, ATTR{type}==”1″, KERNEL==”eth*”, NAME=”eth1″
在克隆出的虛擬機中只要刪除跟NAME=”eth0″相關的行,並且把eth1的改為eth0,並重啟系統即可。