■福州大學至誠學院 李昂
筆者在為某客戶單位部署一款信息平臺時,該信息平臺需要18臺服務器。因該單位已使用VMware vSphere進行了服務器虛擬化,為減少部署時間,降低部署工作量,筆者先部署了一臺操作系統為RedHat Enterprise Linux 7.1的虛擬機,然后將該虛擬機轉換成虛擬機模板,通過此虛擬機模板創建了信息平臺所需的18臺虛擬機。當使用這些虛擬機部署信息平臺時,發現它們的網卡都無法正常工作。
用“ifconfig eth0 172.16.5.178 netmask 255.255.255.0 broadcat 172.16.5.255”命令為虛擬機配置IP地址,顯示“eth0:unknown interface:No such device”等錯誤提示,如圖1所示。

圖1 錯誤提示

圖2 顯示名為“lo”的網卡
用“ifup eth0”命令啟動網卡,顯示“Device eth0 does not seem to be present,delaying initialization”錯誤,表示不存在這樣的設備。
用命令“ifconfig”查看當前有哪些網絡設備,結果虛擬機沒有“eth0”網卡,只有一塊名為“lo”的網卡,如圖2所示。“lo”是操作系統虛擬出來的一塊回環網卡,它不與任何實際設備連接,只是用來初始化設備以及初始化數據包格式。
是不是安裝的虛擬機操作系統出了問題?于是筆者重新安裝了一臺虛擬機,用同樣的命令配置網卡,網卡能正常工作,沒有出現故障。由此可見,通過虛擬機模板部署的虛擬機是導致上述故障的主要原因。
筆者用命令“cd/etc/sysconfig/networkscripts”,進入“networkscripts”文件夾,發現該文件夾中有“ifcfg-eth0”和“ifcfg-lo”兩塊網卡的配置文件,如圖3所示。
用命令“vi ifcfg-eth0”打開eth0網絡配置文件,該配置文件中名為“HUADDR”一行記錄的是網卡的物理地址,如圖4所示。
筆者懷疑這不是當前網卡的物理地址。通過查看虛擬機網卡設置,發現eth0網絡配置文件中網卡物理地址和實際網卡的物理地址不一致。很明顯,雖然筆者是通過模板部署的方式創建的虛擬機,其實和虛擬機克隆差不多,創建虛擬機時VMware都會為其產生一個與原始虛擬機網卡物理地址完全不同的網卡。
前面用命令“ifconfig”無法配置網絡,無法啟動eth0網卡,用命令“ifconfig”查看網絡設備時,只有一塊“lo”網卡,這些故障出現的原因就是因為用虛擬機模板部署的虛擬機,用虛擬機模板部署虛擬機實際上和虛擬機克隆一樣,VMware都將為其重新配置了一塊新網卡。

圖3 出現兩塊網卡的配置文件

圖4 記錄的網卡物理地址
實際上,對RedHat之類的Linux系統而言,會把運行時的網卡物理地址記入“/etc/udev/rules.d/70-persistent-net.rules”文件中,只要將該文件刪除,重新啟動虛擬機。在系統重新啟動過程中,會通過掃描硬件,把這塊新網卡當作是eth1,并且會把該網卡的物理地址記入“/etc/udev/rules.d/70-persistentnet.rules”文件中,如果沒有“/etc/udev/rules.d/70-persistent-net.rules”文件,操作系統會自動產生這個文件。172.16.5.178 netmask 255.255.255.0 broadcast 255.255.255.0”命令配置IP地址,此時的網卡應該是“eth1”而不是“eth0”,前面配置網卡出現錯誤就是因為網卡名稱發生了變化。
使用命令“route add default gw 172.16.5.254”配置網關。
配置好虛擬機網絡后,分別ping本地地址和外網地址,經測試,虛擬機網絡配置成功。
用命令“rm/etc/udev/rules.d/70-persistent-net.rules”刪除“70-persistent-net.rules”文件后,重啟虛擬機。
在重啟虛擬機后,使用“ifconfig eth1
注意:用ifconfig命令配置的網絡只在當前狀態有效,虛擬機重啟后,網絡配置也就不存在了。如果要將網絡配置信息永久保存起來,則需要修改網絡配置文件。目前該電腦只有網卡eth0的配置文件“ifcfg-eth0”,可以用命令“mv/etc/sysconfig/networkscripts/ifcfg-eth0/etc/sysconfig/network-scripts/ifcfg-eth1”將網卡eth0的配置文件更改為網卡eth1的配置文件“ifcfg-eth1”。
在上面的解決方案中,網卡名稱是“eth1”,不是默認的“eth0”。其他運維工程師在維護這些虛擬機時,可能會誤認為網卡名稱是“eth0”,給運維帶來不必要的麻煩。
有沒有辦法將重新生成的網卡名稱改回eth0呢?答案是肯定的,下面是將網卡名稱改回“eth0”的具體過程。
首先用命令“vi/etc/udev/rules.d/70-persistent-net.rules”編輯文件“70-persistentnet.rules”。
打開“70-persistentnet.rules”文件后,可以看到這個文件里面有兩塊網卡,其中名為“eth0”的網卡是原虛擬機網卡,名為“eth1”的網卡才是當前網卡如圖5所示。
刪除名為“eth0”的網卡信息,將名為“eth1”網卡名稱更改為“eth0”。
用命令“vi/etc/sysconfig/networkscripts/ifcfg-eth0”編輯網絡配置文件“ifcfgeth0”。

圖5 “eth1”的網卡才是當前網卡
此時該配置文件的信息仍是原網卡的配置信息,網卡的物理地址仍是原網卡的物理地址。
此時,就可以按“70-persistent-net.rules”文件中當前網卡的物理地址來修改網絡配置文件“ifcfgeth0”中的物理地址,其他信息則根據實際情況配置即可。
修改好網絡配置文件“ifcfg-eth0”后,用命令“/etc/init.d/network restart”重啟網絡。
重啟網絡后,用“ping”命令分別ping內網地址和外網地址,測試網絡配置是否有效。
測試證明,當前網卡已經變成了默認的網卡“eth0”,所對應的網絡配置文件仍是“ifcfg-eth0”,并且工作正常。
看上去這個問題很簡單,網上也有不少相關資料,可能是某些環節給漏掉了,筆者嘗試了一個多小時才解決這個問題,為了少走彎路,筆者梳理出上述解決方案,愿與大家一起分享。
在上述解決方案中,有幾處需要特別說明:
一是ifconfig命令是用于配置和顯示Linux內核中網絡接口的網絡參數,ifconfig命令做出的網絡配置是臨時性,重啟電腦后無效,這對Linux操作不夠熟練的運維管理人員而言,是容易犯的錯誤。
二是修改網絡配置文件“ifcfg-eth0”后,很多運維管理人員會重啟操作系統,理所當然地認為重啟系統就會使設置生效。但事實上,有不少Linux操作系統在重啟后,并未按網絡配置文件內容啟動網絡。因此,使用命令“/etc/init.d/network restart”來重啟網絡是比較關鍵的一步操作,筆者也正是因為這個原因才走了不少彎路。