■福州大學(xué)至誠(chéng)學(xué)院 李昂
筆者在為某客戶單位部署一款信息平臺(tái)時(shí),該信息平臺(tái)需要18臺(tái)服務(wù)器。因該單位已使用VMware vSphere進(jìn)行了服務(wù)器虛擬化,為減少部署時(shí)間,降低部署工作量,筆者先部署了一臺(tái)操作系統(tǒng)為RedHat Enterprise Linux 7.1的虛擬機(jī),然后將該虛擬機(jī)轉(zhuǎn)換成虛擬機(jī)模板,通過(guò)此虛擬機(jī)模板創(chuàng)建了信息平臺(tái)所需的18臺(tái)虛擬機(jī)。當(dāng)使用這些虛擬機(jī)部署信息平臺(tái)時(shí),發(fā)現(xiàn)它們的網(wǎng)卡都無(wú)法正常工作。
用“ifconfig eth0 172.16.5.178 netmask 255.255.255.0 broadcat 172.16.5.255”命令為虛擬機(jī)配置IP地址,顯示“eth0:unknown interface:No such device”等錯(cuò)誤提示,如圖1所示。
圖1 錯(cuò)誤提示
圖2 顯示名為“l(fā)o”的網(wǎng)卡
用“ifup eth0”命令啟動(dòng)網(wǎng)卡,顯示“Device eth0 does not seem to be present,delaying initialization”錯(cuò)誤,表示不存在這樣的設(shè)備。
用命令“ifconfig”查看當(dāng)前有哪些網(wǎng)絡(luò)設(shè)備,結(jié)果虛擬機(jī)沒(méi)有“eth0”網(wǎng)卡,只有一塊名為“l(fā)o”的網(wǎng)卡,如圖2所示?!發(fā)o”是操作系統(tǒng)虛擬出來(lái)的一塊回環(huán)網(wǎng)卡,它不與任何實(shí)際設(shè)備連接,只是用來(lái)初始化設(shè)備以及初始化數(shù)據(jù)包格式。
是不是安裝的虛擬機(jī)操作系統(tǒng)出了問(wèn)題?于是筆者重新安裝了一臺(tái)虛擬機(jī),用同樣的命令配置網(wǎng)卡,網(wǎng)卡能正常工作,沒(méi)有出現(xiàn)故障。由此可見,通過(guò)虛擬機(jī)模板部署的虛擬機(jī)是導(dǎo)致上述故障的主要原因。
筆者用命令“cd/etc/sysconfig/networkscripts”,進(jìn)入“networkscripts”文件夾,發(fā)現(xiàn)該文件夾中有“ifcfg-eth0”和“ifcfg-lo”兩塊網(wǎng)卡的配置文件,如圖3所示。
用命令“vi ifcfg-eth0”打開eth0網(wǎng)絡(luò)配置文件,該配置文件中名為“HUADDR”一行記錄的是網(wǎng)卡的物理地址,如圖4所示。
筆者懷疑這不是當(dāng)前網(wǎng)卡的物理地址。通過(guò)查看虛擬機(jī)網(wǎng)卡設(shè)置,發(fā)現(xiàn)eth0網(wǎng)絡(luò)配置文件中網(wǎng)卡物理地址和實(shí)際網(wǎng)卡的物理地址不一致。很明顯,雖然筆者是通過(guò)模板部署的方式創(chuàng)建的虛擬機(jī),其實(shí)和虛擬機(jī)克隆差不多,創(chuàng)建虛擬機(jī)時(shí)VMware都會(huì)為其產(chǎn)生一個(gè)與原始虛擬機(jī)網(wǎng)卡物理地址完全不同的網(wǎng)卡。
前面用命令“ifconfig”無(wú)法配置網(wǎng)絡(luò),無(wú)法啟動(dòng)eth0網(wǎng)卡,用命令“ifconfig”查看網(wǎng)絡(luò)設(shè)備時(shí),只有一塊“l(fā)o”網(wǎng)卡,這些故障出現(xiàn)的原因就是因?yàn)橛锰摂M機(jī)模板部署的虛擬機(jī),用虛擬機(jī)模板部署虛擬機(jī)實(shí)際上和虛擬機(jī)克隆一樣,VMware都將為其重新配置了一塊新網(wǎng)卡。
圖3 出現(xiàn)兩塊網(wǎng)卡的配置文件
圖4 記錄的網(wǎng)卡物理地址
實(shí)際上,對(duì)RedHat之類的Linux系統(tǒng)而言,會(huì)把運(yùn)行時(shí)的網(wǎng)卡物理地址記入“/etc/udev/rules.d/70-persistent-net.rules”文件中,只要將該文件刪除,重新啟動(dòng)虛擬機(jī)。在系統(tǒng)重新啟動(dòng)過(guò)程中,會(huì)通過(guò)掃描硬件,把這塊新網(wǎng)卡當(dāng)作是eth1,并且會(huì)把該網(wǎng)卡的物理地址記入“/etc/udev/rules.d/70-persistentnet.rules”文件中,如果沒(méi)有“/etc/udev/rules.d/70-persistent-net.rules”文件,操作系統(tǒng)會(huì)自動(dòng)產(chǎn)生這個(gè)文件。172.16.5.178 netmask 255.255.255.0 broadcast 255.255.255.0”命令配置IP地址,此時(shí)的網(wǎng)卡應(yīng)該是“eth1”而不是“eth0”,前面配置網(wǎng)卡出現(xiàn)錯(cuò)誤就是因?yàn)榫W(wǎng)卡名稱發(fā)生了變化。
使用命令“route add default gw 172.16.5.254”配置網(wǎng)關(guān)。
配置好虛擬機(jī)網(wǎng)絡(luò)后,分別ping本地地址和外網(wǎng)地址,經(jīng)測(cè)試,虛擬機(jī)網(wǎng)絡(luò)配置成功。
用命令“rm/etc/udev/rules.d/70-persistent-net.rules”刪除“70-persistent-net.rules”文件后,重啟虛擬機(jī)。
在重啟虛擬機(jī)后,使用“ifconfig eth1
注意:用ifconfig命令配置的網(wǎng)絡(luò)只在當(dāng)前狀態(tài)有效,虛擬機(jī)重啟后,網(wǎng)絡(luò)配置也就不存在了。如果要將網(wǎng)絡(luò)配置信息永久保存起來(lái),則需要修改網(wǎng)絡(luò)配置文件。目前該電腦只有網(wǎng)卡eth0的配置文件“ifcfg-eth0”,可以用命令“mv/etc/sysconfig/networkscripts/ifcfg-eth0/etc/sysconfig/network-scripts/ifcfg-eth1”將網(wǎng)卡eth0的配置文件更改為網(wǎng)卡eth1的配置文件“ifcfg-eth1”。
在上面的解決方案中,網(wǎng)卡名稱是“eth1”,不是默認(rèn)的“eth0”。其他運(yùn)維工程師在維護(hù)這些虛擬機(jī)時(shí),可能會(huì)誤認(rèn)為網(wǎng)卡名稱是“eth0”,給運(yùn)維帶來(lái)不必要的麻煩。
有沒(méi)有辦法將重新生成的網(wǎng)卡名稱改回eth0呢?答案是肯定的,下面是將網(wǎng)卡名稱改回“eth0”的具體過(guò)程。
首先用命令“vi/etc/udev/rules.d/70-persistent-net.rules”編輯文件“70-persistentnet.rules”。
打開“70-persistentnet.rules”文件后,可以看到這個(gè)文件里面有兩塊網(wǎng)卡,其中名為“eth0”的網(wǎng)卡是原虛擬機(jī)網(wǎng)卡,名為“eth1”的網(wǎng)卡才是當(dāng)前網(wǎng)卡如圖5所示。
刪除名為“eth0”的網(wǎng)卡信息,將名為“eth1”網(wǎng)卡名稱更改為“eth0”。
用命令“vi/etc/sysconfig/networkscripts/ifcfg-eth0”編輯網(wǎng)絡(luò)配置文件“ifcfgeth0”。
圖5 “eth1”的網(wǎng)卡才是當(dāng)前網(wǎng)卡
此時(shí)該配置文件的信息仍是原網(wǎng)卡的配置信息,網(wǎng)卡的物理地址仍是原網(wǎng)卡的物理地址。
此時(shí),就可以按“70-persistent-net.rules”文件中當(dāng)前網(wǎng)卡的物理地址來(lái)修改網(wǎng)絡(luò)配置文件“ifcfgeth0”中的物理地址,其他信息則根據(jù)實(shí)際情況配置即可。
修改好網(wǎng)絡(luò)配置文件“ifcfg-eth0”后,用命令“/etc/init.d/network restart”重啟網(wǎng)絡(luò)。
重啟網(wǎng)絡(luò)后,用“ping”命令分別ping內(nèi)網(wǎng)地址和外網(wǎng)地址,測(cè)試網(wǎng)絡(luò)配置是否有效。
測(cè)試證明,當(dāng)前網(wǎng)卡已經(jīng)變成了默認(rèn)的網(wǎng)卡“eth0”,所對(duì)應(yīng)的網(wǎng)絡(luò)配置文件仍是“ifcfg-eth0”,并且工作正常。
看上去這個(gè)問(wèn)題很簡(jiǎn)單,網(wǎng)上也有不少相關(guān)資料,可能是某些環(huán)節(jié)給漏掉了,筆者嘗試了一個(gè)多小時(shí)才解決這個(gè)問(wèn)題,為了少走彎路,筆者梳理出上述解決方案,愿與大家一起分享。
在上述解決方案中,有幾處需要特別說(shuō)明:
一是ifconfig命令是用于配置和顯示Linux內(nèi)核中網(wǎng)絡(luò)接口的網(wǎng)絡(luò)參數(shù),ifconfig命令做出的網(wǎng)絡(luò)配置是臨時(shí)性,重啟電腦后無(wú)效,這對(duì)Linux操作不夠熟練的運(yùn)維管理人員而言,是容易犯的錯(cuò)誤。
二是修改網(wǎng)絡(luò)配置文件“ifcfg-eth0”后,很多運(yùn)維管理人員會(huì)重啟操作系統(tǒng),理所當(dāng)然地認(rèn)為重啟系統(tǒng)就會(huì)使設(shè)置生效。但事實(shí)上,有不少Linux操作系統(tǒng)在重啟后,并未按網(wǎng)絡(luò)配置文件內(nèi)容啟動(dòng)網(wǎng)絡(luò)。因此,使用命令“/etc/init.d/network restart”來(lái)重啟網(wǎng)絡(luò)是比較關(guān)鍵的一步操作,筆者也正是因?yàn)檫@個(gè)原因才走了不少?gòu)澛贰?/p>