最近在虛擬機上安裝了CentOS 6.2。爲了之後使用方便, 對虛擬機進行克隆。當使用克隆後的虛擬機時,發現原來在操做系統中的網卡eth0到了新系統卻沒有了,使用 ifconfig -a會發現只有eth1。由於源系統不少網絡配置都是基於eth0的,eth1沒有網絡相關的配置。若是每次對虛擬機進行克隆後都要修改網卡配置,顯示是很是不方便的。 並且還發現一個規律,基於此克隆虛擬機繼續克隆新的虛擬機,網卡的標識會自動加1(即第二次克隆後會變成eth2)。但使用dmesg命令卻顯示內核只識別到網卡eth0。
原來不少Linux distribution使用udev來動態管理設備文件,並根據設備的信息對其進行持久化命名。例如在Debian eth中,udev會在系統引導的過程當中識別網卡,將mac地址和網卡名稱對應起來,並記錄在udev的規則腳本中。而VMware會自動生成虛擬機的 mac地址。這樣,源系統已經記錄了該虛擬機的網卡mac地址對應於網卡eth0,當克隆出的新的虛擬機後,因爲mac地址發生改變,udev會自動將該mac對應於網卡eth1,以此類推。udev會記錄全部已經識別的mac與網卡名的關係,而且每次克隆網卡名稱會自動加1,但實際上kernel 僅僅只識別到一張網卡。 shell
udev一般會將mac與網卡名稱的對應關係保存在形如/etc/udev/rules.d/70-persistent-net.rules的文件中,例如在/etc/udev/rules.d/70-persistent-net.rules中有相似以下的片斷: 網絡
# Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE] (rule written by anaconda) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:ad:06:2a", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"
咱們只須要把"eth1"修改成"eth0"便可;或者把/etc/udev/rules.d/z25_persistent-net.rules裏面的內容所有刪除,而後從新啓動計算機,系統會從新產生該文件的內容。
PS: 若是你修改了虛擬機的網卡物理地址,系統也會在/etc/udev/rules.d/70-persistent-net.rules追加一條eth1的記錄。 spa