轉載自:http://linuxtoy.org/archives/kvm-issue.html
筆者在部署 KVM 虛擬機時曾遇到一個奇怪的問題,幾經探索之后終于解決,現在寫出來跟大家分享一下。
筆者在單位部署了一臺服務器,上面運行著幾部 KVM 虛擬機,分別執行不同的任務。系統上線之后,需要再增加幾部虛擬機。因為當初部署服務器時做了虛擬機備份,所以就復制了一個備份的虛擬機??墒切绿摂M機啟動之后無法在本地網絡上找到新虛擬機的 IP 地址(本地網絡采用 DHCP 分配 IP 地址)!因為服務器是遠程控制的,當然新虛擬機也就無法使用了。
為了查找原因,筆者把虛擬機復制到本地主機上,用正常方法開啟。啟動過程及登錄都很正常,于是檢查網卡狀況:
$ ifconfig
可是卻只有顯示 lo 信息! 怪了,eth0 呢?只有 lo 當然是沒有辦法同網絡通訊的。于是查找一下啟動信息:
$ dmesg | grep eth
發現如下信息:
udev: renamed network interface eth0 to eth1
原來 eth0 已經沒有了,被命名為 eth1, 再看網卡配置
$ cat /etc/network/interfaces auto eth0 iface eth0 inet dhcp
至此事情水落石出,原來 KVM 是在啟動時傳遞 mac 參數的,如筆者是用下面命令啟動 KVM 虛擬機:
$ 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,這就是虛擬機啟動后的網卡 mac,因為網絡內不可以有相同的 mac,所以啟動每個虛擬機的 mac 都要改??墒钱敁Q了新的 mac 后,虛擬機里的系統就認為換了新網卡,所以系統改變 eth0 為 eth1,而在網卡設置里面卻只設置了 eth0, 所以虛擬機啟動之后并沒有啟動新的 eth1 網卡,當然就連不上網絡了。原因找到了之后問題的解決也就非常簡單:
$ vi /etc/network/interfaces
增加以下內容:
auto eth1 iface eth1 inet dhcp
再重新啟動網絡:
$ /etc/init.d/networking restart
至此問題應該就完全解決了。不過有個問題還要注意,如果有多次用不同的 mac 啟動虛擬機,可能你的虛擬機里已經有了 eth2, eth3 甚至是 10 都是有可能的,因為你每用一個新的 mac 去啟動虛擬機,系統就會增加一個網卡。可以修改下面這個文件:
$ vi /etc/udev/rules.d/70-persistent-net.rules
刪除所有的的 ethX 行,重啟虛擬機即可。
{ Thanks 逸飛. }
posted on 2013-02-20 11:41
David1228 閱讀(975)
評論(0) 編輯 收藏