Hyper-V下的Linux虛擬機器網卡丟失問題原因及解決辦法
虛擬化大勢所趨
公司推行了虛擬化,全部用的是Microsoft Windows 2008 R2 Enterprise with Hyper-V做叢集跑Hyper-V虛擬機器。這是個好東西,節約資源,集中管理,省電,部署超快,關鍵是可以即時移轉。
我們使用Dell MD3000i盤櫃做叢集的共用磁碟,它是基於iSCSI的千兆乙太網路網路儲存,一坨Dell PowerEdge R610伺服器做了一個Windows Cluster,交換裝置是juniper EX22000-48t-4G全千兆交換器,並開啟了巨幀支援。
眾所周知,微軟的Hyper-V對於自家的windows虛擬機器支援很好的,而且還有專門的驅動程式。即使這樣linux我們也跑了好多台虛擬機器,主要是因為windows的Hyper-V便宜,比ESX實惠。
下面來說一說Linux虛擬機器與Hyper-V的一些尷尬事兒
1. 網卡要選老的,驅動剛剛發布
在Hyper-V上開Linux虛擬機器最致命的一點就是網卡驅動,我們建立一個新的linux虛擬機器的時候,轉好了linux系統之後發現網卡不能用,因為不管是RHEL還是Ubuntu還是大便的Linux系統都不支援Hyper-V的網卡驅動。這需要我們在Hyper-V Manager把掛載給Linux虛擬機器的network Adapter網卡刪除,然後添加一塊Legacy Network Adapter,這種網卡可以類比成經典的老式網卡,Linux一般都整合這種網卡的驅動,裝好了網路就可以用了。
好訊息是微軟8月剛發布了可以支援RHEL和Ubuntu的Hyper-V下的虛擬機器驅動,需要的朋友可以網上google一下,只有幾百K,很小的。
2. 神呐~我的網卡呢?
做了叢集,那麼遷移就是不可不免得,有時候我們某一台伺服器需要重啟維護一下,需要把跑在它身上的虛擬機器即時移轉到其他伺服器上面去,遷移很順利,但是發現Linux系統遷移後,網卡找不到了,ifconfig只能看到一個lo的本地迴環網卡,eth0跑哪兒去了?
趕緊查看網路設定,sudo vi /etc/network/interfaces,發現配置都在,那是為啥eth0沒了呢?
使用ifconfig -a 來查看所有網卡,發現eth0沒了,卻多出來了eth1。靈機一動,改了一下interfaces檔案
sudo vi /etc/network/interfaces
把eth0替換成eth1,然後重啟網路服務
sudo /etc/init.d/networking restart
哈哈,網卡好啦~~
3. 又悲劇了
再後來,有一台ubuntu 9.10 64位版本遷移後,這招不好使了,因為eth1也沒找到,後來手動刪除了ubuntu的網路設定檔後重啟,就好了。
sudo rm /etc/udev/rules.d/70-persistent-net.rules
之後總結了一下,linux之所以網卡會丟失是因為Hyper-V建立一個虛擬機器預設分配的網卡MAC地址是動態,每次宿主的遷移會導致重新分配新的MAC給ubuntu,然後丫就找不到eth0了,有時候會自動產生一個eth1。如果你能記得以前的MAC地址,在Hyper-V Manager上手動把MAC指定成遷移之前的老MAC也能解決問題,但問題是誰他媽會記MAC地址啊~~~?
所以啊~~清空ubuntu的網路設定快取檔案才是王道,或者在Hyper-V Manager上把分配給Linux的MAC地址設為靜態。
Hyper-V下安裝Linux虛擬機器注意事項
1. 建立虛擬機器時先別急著裝系統,把網卡替換成Legacy Network Adapter
2. 網卡MAC地址別用動態,指定成靜態
3. 微軟剛出了新的Hyper-V下的linux驅動,趕緊安裝
4. 網卡丟失後ifconfig -a看看是不是eth0沒了,多出來了eth1,然後改interfaces配置
5. 終極大法就是刪除linux網路設定緩衝sudo rm /etc/udev/rules.d/70-persistent-net.rules