萬盛學電腦網

 萬盛學電腦網 >> 服務器教程 >> Hyper-V下的Linux虛擬機網卡丟失

Hyper-V下的Linux虛擬機網卡丟失

   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

copyright © 萬盛學電腦網 all rights reserved