引言: 由于中心機(jī)房的UPS故障,導(dǎo)致服務(wù)器突然掉電。電力恢復(fù)供應(yīng)后,開啟VMware ESXi 5.5主機(jī),用vSphere Client登錄該主機(jī)后,發(fā)現(xiàn)里面的虛擬服務(wù)器一臺(tái)都不見了。經(jīng)過一天的排查,終于找到虛擬機(jī)不見的原因,并成功解決了問題。
由于中心機(jī)房的UPS故障,導(dǎo)致服務(wù)器突然掉電。電力恢復(fù)供應(yīng)后,開啟VMware ESXi 5.5主機(jī),用vSphere Client登錄該主機(jī)后,發(fā)現(xiàn)里面的虛擬服務(wù)器一臺(tái)都不見了,著實(shí)驚出了冷汗。單位主要的一些服務(wù)以及數(shù)據(jù)都部署在了虛擬機(jī)上,虛擬機(jī)找不回來,不但意味著無法提供正常的網(wǎng)絡(luò)服務(wù),連數(shù)據(jù)都可能丟了。經(jīng)過一天的排查以及資料查閱,終于找到虛擬機(jī)不見的原因,并成功解決了問題。
為了進(jìn)行資源整合減少服務(wù)器數(shù)量,前一段時(shí)間對(duì)中心機(jī)房的服務(wù)器進(jìn)行了虛擬化,在一臺(tái)DELL PowerEdge R720(128G內(nèi)存)服務(wù)器上部署了VMware ESXi 5.5,兩 臺(tái)DELL MD3600F光纖通道存儲(chǔ)陣列通過光纖連接服務(wù)器,在ESXi上兩臺(tái)存儲(chǔ)陣列分別為一個(gè)數(shù)據(jù)存儲(chǔ)盤,并建立了7臺(tái)虛擬機(jī)為單位提供各種網(wǎng)絡(luò)服務(wù),虛擬機(jī)的數(shù)據(jù)都是存放在磁盤陣列上。
圖1 存儲(chǔ)標(biāo)識(shí)中沒有storage1、storage2、data
圖2 磁盤陣列列表,每個(gè)設(shè)備名稱對(duì)應(yīng)一個(gè)邏輯盤
最近,一次UPS故障引起斷電后,重新開啟服務(wù)器和存儲(chǔ)陣列,用vSphere Client登錄ESXi主機(jī)后,發(fā)現(xiàn)該主機(jī)下的虛擬機(jī)列表都變成灰色了,無法開機(jī),選中任何一臺(tái)虛擬機(jī)都無法進(jìn)行任何操作。
在vSphere Client中選擇當(dāng)前主機(jī)進(jìn)入配置——存儲(chǔ)器,這里有兩個(gè)標(biāo)簽“數(shù)據(jù)存儲(chǔ)”和“設(shè)備”,發(fā)現(xiàn)“數(shù)據(jù)存儲(chǔ)”下只有本機(jī)存儲(chǔ)標(biāo)識(shí)database1,沒有兩個(gè)磁盤陣列的存儲(chǔ)標(biāo)識(shí)storage1和 storage2(如圖1)。但是在“設(shè)備”里有兩個(gè)磁盤陣列的列表(如圖2),其中設(shè)備名稱尾號(hào)為“79”的應(yīng)該是磁盤陣列1的邏輯盤,標(biāo)識(shí)應(yīng)該是storage1,名稱尾號(hào)為“3d”的應(yīng)該是磁盤陣列2的邏輯盤,標(biāo)識(shí)應(yīng)該是storage2,名稱尾號(hào)為“49”的是磁盤陣列1上分出來的一個(gè)邏輯盤,用來做測試,無有用數(shù)據(jù),標(biāo)識(shí)為data。正常情況下每個(gè)設(shè)備都對(duì)應(yīng)著一個(gè)數(shù)據(jù)存儲(chǔ)的標(biāo)識(shí),供ESXi存儲(chǔ)數(shù)據(jù)。
根據(jù)上述現(xiàn)象,可以判斷出,兩個(gè)磁盤陣列的設(shè)備是存在的,但是ESXi無法認(rèn)出該設(shè)備的分區(qū),沒法把它當(dāng)做一個(gè)現(xiàn)有的存儲(chǔ)來使用,而虛擬機(jī)的文件都存放在磁盤陣列上,因此現(xiàn)在主機(jī)里的虛擬機(jī)都找不到它們對(duì)應(yīng)的虛擬機(jī)文件,才會(huì)顯示灰色,無法操作。在對(duì)磁盤陣列、光纖、光纖接口等硬件設(shè)備進(jìn)行排查后,發(fā)現(xiàn)都沒有問題。最后我們注意到,有數(shù)據(jù)存儲(chǔ)標(biāo)識(shí)的服務(wù)器本機(jī)存儲(chǔ)在設(shè)備標(biāo)簽下有分區(qū)信息顯示(如圖3),而名稱尾號(hào)為“49”的設(shè)備則沒有主分區(qū)信息顯示。
由此推斷,ESXi無法認(rèn)出磁盤陣列提供的邏輯盤,是由于停電導(dǎo)致分區(qū)表丟失,ESXi用作數(shù)據(jù)存儲(chǔ)的分區(qū)一般是VMFS分區(qū),即VMFS分區(qū)表丟失導(dǎo)致磁盤無法被ESXi認(rèn)出,無法讀取虛擬機(jī)文件,引起虛擬機(jī)的丟失。
首要任務(wù)就是修復(fù)邏輯盤的VMFS分區(qū)表,以便ESXi能夠讀取邏輯盤,找到虛擬機(jī)文件。
圖3 服務(wù)器本機(jī)存儲(chǔ)的分區(qū)信息
一般情況下,存儲(chǔ)標(biāo)識(shí)沒有顯示的話,通過vSphere Client登錄主機(jī)后,選擇主機(jī)→配置→存儲(chǔ)器,在“數(shù)據(jù)存儲(chǔ)”標(biāo)簽下,用“全部重新掃描”和“添加存儲(chǔ)器”來找回沒有顯示標(biāo)識(shí)的設(shè)備和加載新的存儲(chǔ)器。但是在VMFS分區(qū)表丟失的情況下,進(jìn)行重新掃描沒有任何作用,而用“添加存儲(chǔ)器”確實(shí)可以發(fā)現(xiàn)兩個(gè)磁盤陣列的邏輯盤,但是下一步系統(tǒng)會(huì)提示這是全新的存儲(chǔ)器,要進(jìn)行格式化等操作。這可萬萬不行,虛擬機(jī)的文件都在里面,只能另想方法了。
經(jīng)過查閱資料和研究,決定使用partedutil命令來對(duì)VMFS分區(qū)表進(jìn)行修復(fù)。首先用vSphere Client登錄VMware ESXi 5.5主 機(jī),進(jìn)入配置→存儲(chǔ)器,查看系統(tǒng)的數(shù)據(jù)存儲(chǔ)和設(shè)備,設(shè)備名稱是待一會(huì)要用到的。用SSH2登錄VMware ESXi 5.5主機(jī),使用命令對(duì)磁盤進(jìn)行操作,SSH服務(wù)可以在vSphere Client中的配置→安全配置文件里進(jìn)行開啟,在此不累述。在以下我們以修復(fù)設(shè)備圖2中的邏輯盤naa.6b083fe000e6b8a6 0000038a5712bf49的分區(qū)表信息并使之顯示正常的數(shù)據(jù)儲(chǔ)存標(biāo)識(shí)為例,來講述VMFS分區(qū)表丟失后的修復(fù)過程。
以下操作在用SSH2登錄主機(jī)后操作。
ls /vmfs/devices/disks/
該命令主要是查看現(xiàn)有磁盤的分區(qū)信息(如圖4),我們只要看前面一列的磁盤名稱即可,后面有冒號(hào)1,說明這是該磁盤的第一個(gè)分區(qū),依次類推??梢钥闯鰜韓aa.6b083fe000e6b8a60000038a5 712bf49磁盤下沒有分區(qū),其他磁盤下都有一個(gè)或多個(gè)分區(qū),接下來就要修復(fù)該磁盤的分區(qū)表,當(dāng)然我們得事先知道在壞掉以前它是幾個(gè)分區(qū)的,此處我們的邏輯磁盤在分區(qū)表壞掉前都是一個(gè)分區(qū)的(在進(jìn)行截圖時(shí),名稱尾號(hào)為“79”和“3d”的邏輯盤的分區(qū)表已經(jīng)用此文中的方法修復(fù),因此它們下面都有分區(qū)信息)。
確認(rèn)具體某個(gè)邏輯盤具體的分區(qū)表的體信息,命令:
partedutil getptbl"/vmfs/devices/disks/naa.6b083fe000e6b53c0000025b 54a8d579"
除了邏輯盤的名稱naa.6b083fe000e6b53c0000025b 54a8d579,其他都是固定格式,此命令可以分別查看有分區(qū)信息的邏輯盤和分區(qū)表丟失的邏輯盤,如圖4中:
gpt代表分區(qū)格式。
4348570表示磁盤的柱面數(shù)。
255表示磁頭數(shù)。
63表示每磁道扇區(qū)數(shù)。
69859790554總扇區(qū)數(shù)。
“1 2048 69859790520 AA31E02A400F11DB95900 00C2911D1B8 vmfs 0”代表了一條分區(qū)表信息,“1”表示第一個(gè)分區(qū),“2048”表示起始扇區(qū),“69859790520”表示結(jié)束扇區(qū),“AA31E02A40 0F11DB9590000C2911D1B8 vmfs 0”表示這是VMware的數(shù)據(jù)存儲(chǔ)分區(qū),VMFS分區(qū),“0”是分區(qū)屬性(一般都是0),這些是固定格式。
圖4 查看所有磁盤的分區(qū)信息以及具體某個(gè)盤的分區(qū)表
從圖4可以看出,naa.6 b083fe000e6b8a60000038a57 12bf49這個(gè)邏輯盤沒有分區(qū)表了,下面就來修復(fù)它的分區(qū)表。
partedutilget Usable Sectors /vmfs/devices/disks/naa.6b083fe 000e6b8a60000038a5712bf49
因?yàn)橐粋€(gè)磁盤在ESXi中是從2048扇區(qū)開始使用的,還要去掉VMFS分區(qū)占用的頭部34個(gè)分區(qū),所以還是用這條命令獲取一下可用的扇區(qū)數(shù)比較合理。注意,這條命令中的參數(shù)getUsableSectors嚴(yán)格區(qū)分大小寫。此命令執(zhí)行后得到數(shù)據(jù)“3420971486”,代表該磁盤可用的扇區(qū)到“20971486”,這個(gè)數(shù)據(jù)稍后的命令參數(shù)中要用到。
得到了磁盤名稱,磁盤可用的扇區(qū)數(shù),就可以用命令partedutil來重建VMFS分區(qū)表了。本例中,磁盤名稱為naa.6b083fe000e6b8 a60000038a5712bf49,最大可用扇區(qū)“20971486”,整個(gè)邏輯盤只有1個(gè)分區(qū),其他參數(shù)都是固定的。
命令為:
執(zhí)行后出現(xiàn)提示:
表示在這個(gè)邏輯盤上的VMFS分區(qū)建立好了。
至此,磁盤丟失的分區(qū)表已經(jīng)修復(fù)。回到vSphere Client,在圖1界面進(jìn)行“全部重新掃描”應(yīng)該會(huì)出現(xiàn)修復(fù)回來的數(shù)據(jù)儲(chǔ)存標(biāo)識(shí),只要再把該存儲(chǔ)標(biāo)識(shí)進(jìn)行“掛載”即可正常使用了。進(jìn)行“瀏覽數(shù)據(jù)存儲(chǔ)”,看到數(shù)據(jù)文件都在。利用同樣的方法,修復(fù)了其他兩個(gè)邏輯盤,每個(gè)設(shè)備對(duì)應(yīng)的數(shù)據(jù)存儲(chǔ)標(biāo)識(shí)都正常顯示了(如圖5),丟失的虛擬機(jī)又回來了,正常開機(jī),數(shù)據(jù)完好。
分區(qū)雖然修復(fù)了,虛擬機(jī)也找回來了,但還是心有余悸,有兩點(diǎn)體會(huì)特別深刻。
1.中心機(jī)房的設(shè)備與環(huán)境同樣重要。不能光顧著更新服務(wù)器、交換機(jī)等設(shè)備,而忽略UPS、空調(diào)等環(huán)境設(shè)備,突然的斷電,對(duì)服務(wù)器、磁盤陣列損傷極大,輕者分區(qū)丟失,重者直接硬件損壞。
圖5 修復(fù)后每個(gè)設(shè)備對(duì)應(yīng)數(shù)據(jù)存儲(chǔ)標(biāo)識(shí)都正常顯示了
2.不斷學(xué)習(xí),不斷進(jìn)步。對(duì)服務(wù)器虛擬化可以提升資源利用率、減少能耗、減少物理服務(wù)器的數(shù)量,但是它有時(shí)又不像實(shí)際服務(wù)器那樣看得見摸得到,作為使用者我們應(yīng)該對(duì)虛擬機(jī)系統(tǒng)有更深的了解,以便出現(xiàn)問題時(shí)能及時(shí)找到解決方案。以下是partedutil命令的官方說明,對(duì)該命令想進(jìn)一步了解可以參考。