轉(zhuǎn)載自:http://linuxtoy.org/archives/kvm-issue.html
筆者在部署 KVM 虛擬機(jī)時(shí)曾遇到一個(gè)奇怪的問題,幾經(jīng)探索之后終于解決,現(xiàn)在寫出來跟大家分享一下。
筆者在單位部署了一臺(tái)服務(wù)器,上面運(yùn)行著幾部 KVM 虛擬機(jī),分別執(zhí)行不同的任務(wù)。系統(tǒng)上線之后,需要再增加幾部虛擬機(jī)。因?yàn)楫?dāng)初部署服務(wù)器時(shí)做了虛擬機(jī)備份,所以就復(fù)制了一個(gè)備份的虛擬機(jī)。可是新虛擬機(jī)啟動(dòng)之后無法在本地網(wǎng)絡(luò)上找到新虛擬機(jī)的 IP 地址(本地網(wǎng)絡(luò)采用 DHCP 分配 IP 地址)!因?yàn)榉?wù)器是遠(yuǎn)程控制的,當(dāng)然新虛擬機(jī)也就無法使用了。
為了查找原因,筆者把虛擬機(jī)復(fù)制到本地主機(jī)上,用正常方法開啟。啟動(dòng)過程及登錄都很正常,于是檢查網(wǎng)卡狀況:
$ ifconfig
可是卻只有顯示 lo 信息! 怪了,eth0 呢?只有 lo 當(dāng)然是沒有辦法同網(wǎng)絡(luò)通訊的。于是查找一下啟動(dòng)信息:
$ dmesg | grep eth
發(fā)現(xiàn)如下信息:
udev: renamed network interface eth0 to eth1
原來 eth0 已經(jīng)沒有了,被命名為 eth1, 再看網(wǎng)卡配置
$ cat /etc/network/interfaces auto eth0 iface eth0 inet dhcp
至此事情水落石出,原來 KVM 是在啟動(dòng)時(shí)傳遞 mac 參數(shù)的,如筆者是用下面命令啟動(dòng) KVM 虛擬機(jī):
$ sudo kvm -m 256 -hda /data/kvm/mail.img -net nic,vlan=0,macaddr=52-54-00-12-30-05 -net tap,vlan=0,ifname=tap5,script=no -boot c -smp 2 -daemonize -nographic &
注意上面的 macaddr=52-54-00-12-30-05,這就是虛擬機(jī)啟動(dòng)后的網(wǎng)卡 mac,因?yàn)榫W(wǎng)絡(luò)內(nèi)不可以有相同的 mac,所以啟動(dòng)每個(gè)虛擬機(jī)的 mac 都要改。可是當(dāng)換了新的 mac 后,虛擬機(jī)里的系統(tǒng)就認(rèn)為換了新網(wǎng)卡,所以系統(tǒng)改變 eth0 為 eth1,而在網(wǎng)卡設(shè)置里面卻只設(shè)置了 eth0, 所以虛擬機(jī)啟動(dòng)之后并沒有啟動(dòng)新的 eth1 網(wǎng)卡,當(dāng)然就連不上網(wǎng)絡(luò)了。原因找到了之后問題的解決也就非常簡單:
$ vi /etc/network/interfaces
增加以下內(nèi)容:
auto eth1 iface eth1 inet dhcp
再重新啟動(dòng)網(wǎng)絡(luò):
$ /etc/init.d/networking restart
至此問題應(yīng)該就完全解決了。不過有個(gè)問題還要注意,如果有多次用不同的 mac 啟動(dòng)虛擬機(jī),可能你的虛擬機(jī)里已經(jīng)有了 eth2, eth3 甚至是 10 都是有可能的,因?yàn)槟忝坑靡粋€(gè)新的 mac 去啟動(dòng)虛擬機(jī),系統(tǒng)就會(huì)增加一個(gè)網(wǎng)卡。可以修改下面這個(gè)文件:
$ vi /etc/udev/rules.d/70-persistent-net.rules
刪除所有的的 ethX 行,重啟虛擬機(jī)即可。
{ Thanks 逸飛. }