北京 井超
在筆者單位VMware 服務(wù)器虛擬化的測試環(huán)境vSphere webclient 上,管理員執(zhí)行了重啟虛擬機后,系統(tǒng)提示虛擬機啟動不了,找不到vmdk 虛擬磁盤文件,無法打開vmdk 文件的報錯。
后續(xù)進行問題排查,選擇該出現(xiàn)問題的虛擬機后右鍵選擇“編輯設(shè)置”,發(fā)現(xiàn)硬盤1 的大小變?yōu)?Mb。
瀏覽這臺出現(xiàn)問題的虛擬機所在數(shù)據(jù)存儲,進入該虛擬機所在的文件夾,查看這臺虛擬服務(wù)器的摘要信息,對比datastore 上其他正??捎玫奶摂M機,發(fā)現(xiàn)出現(xiàn)問題的虛擬機上確實缺少一個vmdk 磁盤文件,但是可以看見一個50G 的xxxflat.vmdk 文件;而正常可用的服務(wù)器只有xxx.vmdk 文件,沒有flat.vmdk,關(guān)機之后兩個文件都存在,但是真實的磁盤容量從vmdk 轉(zhuǎn)移到了flat.vmdk。
圖1 虛擬機硬盤1 的大小變?yōu)?Mb
虛擬主機在運行的時候?qū)嶋H在使用的是xxx-flat.vmdk,然而xxx.vmdk 是可以同時被刪除的,才導(dǎo)致了該問題。
這里需要說明,虛擬機的每個磁盤驅(qū)動器都包含了一對.vmdk 文件。一個是文本文件,包含了關(guān)于虛擬硬盤的描述數(shù)據(jù);另外一個是磁盤的實際內(nèi)容。例如,一個名為examplevm 的虛擬機連接有一個硬盤。這個磁盤由如下兩個文件構(gòu)成:一個小于1KB的examplevm.vmdk 描述文件和一個10GB 大小的examplevm-flat.vmdk 平面(數(shù)據(jù))文件,該文件包含虛擬機的實際數(shù)據(jù),而這些數(shù)據(jù)又是以二進制的形式存放在物理磁盤上,examplevm.vmdk 描述文件就是描述這種映射關(guān)系的。
(1)用ssh 登錄該出問題的ESXi 物理主機,找到xxx-flat.vmdk 這個文件所在的位置和目錄,記錄文件的大小。
注意,ESXi 宿主機默認沒有開啟ssh,需要通過vsphere client 登錄服務(wù)器,在“配置”選項卡中找到“安全配置文件”進入“服務(wù)”后選擇“屬性”,進行手動放開。
(2)重命名xxx-flat.vmdk 文件
(3)虛擬機目錄下使用vmkfstools 工具手工創(chuàng)建xxx.vmdk 和對應(yīng)的flat.vmdk 文件,這個flat.vmdk文件的大小和之前重命名的文件一樣大。這樣做的目的是在生成flat.vmdk 文件的同時生成與其大小對應(yīng)的vmdk 文件。
(4)最后將原來的(tmp_)xxx-flat.vmdk 覆蓋剛創(chuàng)建的同樣大小的xxxflat.vmdk,這樣該flat.vmdk 文件就可重新和剛生成對應(yīng)的vmdk 文件匹配成功。
重命名操作很快完成,啟動虛擬機即可恢復(fù)。(改完名后新建虛擬機-flat.vmdk文件就不見了)
xxx.vmdk 本身是一個不到1k 的文本文件,它的內(nèi)容與大小和對應(yīng)的flat.vmdk 文件相關(guān),通過vi 編輯查看可知真正存放數(shù)據(jù)的是flat.vmdk 磁盤文件,所以只要該文件還存在,就可以恢復(fù)。使用手工創(chuàng)建指定大小的flat.vmdk 文件就會新生成對應(yīng)的vmdk 文件,然后將原有的(tmp_)xxx-flat.vmdk 文件覆蓋過來就可完成vmdk 文件的重新生成。