標籤:
Windows環境下,在更換硬體伺服器主板和網卡等硬體、恢複作業系統或者網路虛擬化失敗後,可能會出現網卡方面的問題。例如,裝置管理員中多了不應該存在的網卡;因命名衝突無法重新命名當前網路連接;IP地址衝突卻找不到那個與之衝突的網卡;網路虛擬化失敗後出現無法刪除的虛擬網卡等等。下面我們就來總結一下如何刪除這些可見或不可見的Ghost一樣的網卡。
一、識別各類網路裝置和網路連接
由於網路虛擬化會在物理機上新增許多虛擬網路裝置(包括虛擬網卡),情況會變得複雜,因而首先我們需要分清他們。當然如果沒有進行網路虛擬化,那麼就可以跳過這部分。網路虛擬化環境中,通過裝置管理員應該可見:以Intel開始的物理網卡(根據物理網卡廠商而不同);Hyper-V Virtual Ethernet Adapter 虛擬網卡;Microsoft Network Adapter Multiplexor 網卡組(Windows Server 2012開始支援網卡組,通過命令lbfoadmin可以對網卡組進行管理,網卡組在網路虛擬化環境中經常出現);在顯示隱藏裝置後,還可見Hyper-V Virtual Switch Extension Adapter 虛擬交換器等。
而在網路和共用中心中的網路連接可以簡單的認為是部分網路裝置的配置,其名稱和屬性可自訂,但其依賴的裝置基本與對應。
下面我們看看這些網路連接的具體配置。
1、物理網卡的網路連接
其主要的設定是TCP/IPv4、TCP/IPv6協議和兩個鏈路層拓撲發現協議。是名為Ethernet 04的物理網卡的網路連接屬性。
2、網卡組的網路連接
如果僅僅配置網卡組,那麼其網路連接配置和物理網卡基本相同,除了TCP/IPv4、TCP/IPv6協議和兩個鏈路層拓撲發現協議外,還配置了使用Microsoft Load Balancing/Failover Provider協議。網卡組將多個物理網卡彙總,以實現網路連接的容錯移轉和負載平衡。而那些被彙總的物理網卡的網路連接只有Microsoft Network Adapter Multiplexor Protocol協議了。左側是名為Management網卡組的網路連接屬性,右側是網卡組內名為Ethernet 01的物理網卡(被彙總的網卡之一)的網路連接屬性。
3、虛擬網卡的網路連接
虛擬網卡一般情況下是在建立虛擬交換器後建立的,另外通過SCVMM可以在物理主機上建立更多虛擬網卡。虛擬網卡的網路連接和物理網卡的網路連接配置是一樣的,因而虛擬網卡的作用和物理網卡原則上是一樣,只不過虛擬網卡是建立在物理網卡之上。是名為vEthernet(Cluster)的虛擬網卡的網路連接屬性。
4、虛擬交換器的網路連接
這裡有兩種情況:
如果虛擬交換器建立在獨立的物理網卡之上(直接在Hyper-V管理器中建立的虛擬交換器屬於這種情況),那麼被用於建立虛擬交換器的物理網卡的網路連接被配置為只使用Hyper-V Extensible Virtual Switch協議。如是在名為Ethernet 01物理網卡上建立虛擬交換器後Ethernet 01物理網卡的網路連接屬性
如果虛擬交換器建立在網卡組之上(在SCVMM中為主機配置基於網卡組的邏輯交換器後在主機中建立的虛擬交換器屬於這種情況),那麼被用於建立虛擬交換器的網卡組的網路連接被配置為只是用Hyper-V Extensible Virtual Switch協議,而被用於該網卡組的物理網卡配置如上面網卡組部分的描述。如左側是建立名為Management Logical Switch的虛擬交換器後,建立了同名的網卡組的網路連接屬性,右側是網卡組內名為Ethernet 01的物理網卡(被彙總的網卡之一)的網路連接屬性。
總結以上,建立虛擬網卡和網卡組時除了建立相應的網路裝置外,同時會相應的網路連接,但建立虛擬交換器只會建立相應的網路裝置,卻不會建立網路連接,虛擬交換器是建立在物理網卡或網卡組之上的,僅僅是對物理網卡和網卡組的網路連接進行的重新設定。
二、刪除網路裝置和網路連接
知道了各種網路裝置和網路連接之間的關係後,再來刪除目標就更加明確了,原則上應該遵循:
- 至上而下。先刪除最上層網路裝置和網路連接,再刪除其基礎。基本按照 虛擬網卡 > 虛擬交換器 > 網卡組 > 物理網卡 這樣是順序進行刪除。否則那些失去依賴的網路裝置和網路連接將會是最難對付的。如果涉及到叢集,最好將需要刪除的網路裝置對應的網路不用於叢集,可能的話解散叢集。
- 從表及裡。在GUI中刪除或在PowerShell中刪除,如果不行則在註冊表中刪除。慎用註冊表,但往往終極解決方案卻是註冊表。
- 在哪裡建立在哪裡刪除。在Hyper-V管理器中建立就在Hyper-V管理器中刪除,在SCVMM中建立就在SCVMM中刪除。當然事情往往沒那麼簡單,建立卻刪不掉才是問題。
接下來根據各種情境我們來看看為什麼要刪除和如何刪除。
1、刪除虛擬網卡及其網路連接
(1)通過GUI和PowerShell
使用SCVMM控制台或SCVMM PowerShell為主機配置邏輯交換器後建立的虛擬網卡及其網路連接,正常情況下可以在SCVMM控制台或SCVMM PowerShell中進行刪除,但有時由於主機硬體變更(主要是主板或網卡)或其他不可預料的情況,建立過程出現異常,試圖刪除配置進行恢複後,依然在主機上遺留下不應該存在的虛擬網卡或其網路連接,這時SCVMM就束手無策了,而這些虛擬網卡在主機上也無法通過GUI(通過裝置管理員或Hyper-V管理器)直接進行刪除。由於新的虛擬網卡命名時尾碼會自動遞增,因而這些多餘虛擬網卡不會有太多妨害,但與之關聯的網路連接往往也存在命名衝突的問題(由於網路連接名稱不能重複,這些遺留的虛擬網卡的網路連接會佔用名稱),無法按自己的需要命名網路連接,對於許多人是無法接受的。
在主機上可以通過PowerShell查看和刪除虛擬網卡及其網路連接。使用get-netadapter命令查看所有網卡,使用get-vmnetworkadapter –all查看所以虛擬網卡,使用get-vmnetworkadapter –managementos命令查看在主機上的虛擬網卡。使用remove-vmnetworkadapter –managementos –name 刪除主機上指定的虛擬網卡和網路連接。
如果通過PowerShell無法查看和刪除虛擬網卡及其網路連接,還可以嘗試兩個方法:其一是使用DevCon命令列工具,其二是直接操作註冊表。
(2)通過DevCon命令列工具
刪除網路裝置本質上是刪除裝置的驅動程式,微軟自己的DevCon命令列工具可以代替裝置管理員來管理電腦裝置,特別是那些隱藏的裝置,DevCon命令列工具的下載和使用可以參考這裡。將相應版本devcon.exe檔案放到windows\system32目錄中,以備命令列中調用,由於版本和相容性問題DevCon也不是萬能的。使用如下命令查詢和刪除虛擬網卡,其中為什麼是路徑root\vms_mp將在下面解釋。
(3)通過註冊表
作為最後手段,我們還可以通過註冊表進行刪除,這是件危險的事,請謹慎操作。使用regedit命令開啟註冊表。
先刪除網路連接。開啟節點HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318},其下有許多GUID命名的節點,每個節點表示現在或曾今存在的網路連接,通過其下Connection節點中的Name屬性可以知道該節點是表示哪個網路連接,刪除之前記下這個GUID名稱。刪除以下路徑中具有同樣GUID名稱的節點,在這些節點中可見網路連接的詳細配置,甚至包括IP和子網路遮罩等:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters\Adapters\
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters\Interfaces\
再刪除網路裝置。開啟節點HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\ROOT\VMS_MP\,這個位置是虛擬網卡驅動的配置路徑,通過其子節點的FriendlyName屬性,找到需要刪除的網卡子節點,這也就是DevCon命令中出現的路徑。
但是要刪除這個子節點卻不是件容易的事,由於註冊表中該路徑是系統關鍵路徑,預設情況下這些子節點及其下所有節點和項都只在System賬戶控制下,其他帳號無權操作,因而使用管理員administrator運行註冊表也無濟於事,但好在通過擷取其所有權,可以最終讓administrator獲得操作許可權。由於一次只能設定一個節點或項,這將是一件重複煩悶的工作。具體步驟如下:
在節點右鍵許可權Permissions,雖然提示沒有許可權,但是卻允許進入修改,選擇進階Advanced,如修改所有者Owner以擷取所有權。但需要注意,修改所有者後雖然無法確認對話方塊,但是選擇放棄Cancel也能最終獲得所有權。
關閉所有對話方塊,重新右鍵許可權Permissions,這時已經可以添加使用者administrator並授權了。從最深可見的節點中進行設定,直到其下所有節點和項都取得許可權,最後刪除整個子節點,重啟主機。(其實該步驟也同理可用於擷取在NTFS下受限的檔案或檔案夾的許可權)
(物理網卡也可以按上面註冊表的過程刪除。另外值得一提的是,在註冊表中與CurrentControlSet相同層級會有ControlSet001或ControlSet002等類似命名的節點,這些節點內擁有與CurrentControlSet相同的結構和資料,無需對ControlSet001或ControlSet002內的相應節點做刪除,它們只是系統配置的拷貝,系統正常重啟後它們將被CurrentControlSet中的修改覆蓋。)
2、刪除虛擬交換器
在網路虛擬化環境中,首先應通過SCVMM控制台或SCVMM PowerShell刪除主機上的邏輯交換器或虛擬交換器,以正常移除SCVMM中對主機的相關配置,但如果在主機中發現依然存在未能刪除的虛擬交換器,還可以在主機上通過Hyper-V管理器和Hyper-V Powershell進行刪除。
如果無法完成,可以如同刪除虛擬網卡一樣使用DevCon命令列工具和操作註冊表,只不過虛擬交換器驅動配置節點為HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\ROOT\VMS_VSMP,這裡不再贅述。
3、刪除網卡組
網路虛擬化環境中,如果給主機配置的邏輯交換器關聯了帶有網卡組的上行連接埠,那麼總是會在主機上建立網卡組,並在網卡組上建立虛擬交換器。如果移除邏輯交換器失敗,主機上遺留下了多於的網卡組,則可以在網卡組管理器或者PowerShell中刪除。Windows Server 2012才支援網卡組,可以通過命令lbfoadmin開啟網卡組管理器對網卡組進行管理,也可以使用remove-netlbfoteam命令。
這裡謹慎使用DevCon命令列工具和註冊表進行刪除,本人沒有測試是否會帶來嚴重後果,但是可以很容易知道網卡組的註冊表節點為HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\COMPOSITEBUS\MS_IMPLAT_MP。
網路中也有關於WMI的庫檔案損壞造成網卡組無法管理的案例,可嘗試按如下過程進行修複,更多關於WMI庫的修複,可以參考這裡:
net stop winmgmt rename the folder %windir%\system32\wbem\Repository to Repository.oldrestart the systemwinmgmt /resetrepository disable all the network adapters remove HKLM\SYSTEM\CurrentControlSet\Control\Network\Config enable all the network adapters enable nic teaming
4、刪除物理網卡
多餘的物理網卡往往是由於硬體變動或者系統復原後形成的,刪除物理網卡相對簡單些,在裝置管理員或者DevCon命令列中均可進行刪除,在註冊表中的刪除也可以參照虛擬網卡。
刪除Windows中隱藏的物理網卡和網路虛擬化失敗後的虛擬網卡