經常有用戶問到如何從xenserver的角度恢復被客戶誤刪除的虛擬機,citrix 技術支持并不提供這種數據恢復服務,但是并不是無法恢復,過程比較繁瑣,我在這里整理下如何恢復誤刪的虛擬機數據。

這里我新建一個測試存儲和測試vm

QQ圖片20140727192038    
上圖中我們看到SR對應的uuid為4ec639db-6c87-b775-73d1-b54e21b3a31a    
打開xenserver命令行輸入pvsan找到該存儲對應的VG和PV信息

QQ截圖20140727192141    
默認VG的信息保存在/etc/lvm/backup    
#dir

image    
這里為了測試,我先備份原來的VG信息,這里備份到/root目錄下    
#cp VG_XenStorage-4ec639db-6c87-b775-73d1-b54e21b3a31a /root    
這個時候我們嘗試去刪除虛擬機并且刪除磁盤文件    
刪除之后我們看到存儲上已經沒有對應起數據,因為我們之前已經備份過VG,所以我們直接通過命令來恢復VG信息    
#vgcfgrestore VG_XenStorage-4ec639db-6c87-b775-73d1-b54e21b3a31a -f /root/ VG_XenStorage-4ec639db-6c87-b775-73d1-b54e21b3a31a    
恢復完成后我們通過lvscan去檢查是否恢復    
#lvscan |grep 4ec6

image    
我們看到這里的VHD-306128a9-7138-4611-a2c6-b79823e1e58b已經恢復,但是這里看到該邏輯卷是inactive的,我們需要先激活    
#lvchange –ay /dev/ VG_XenStorage-4ec639db-6c87-b775-73d1-b54e21b3a31a/VHD-306128a9-7138-4611-a2c6-b79823e1e58b    
激活以后這個時候還要注意的是這個vhd的屬性是hidden,如果這個時候你執行sr-scan以后會發現這個邏輯卷又不見了,關于vhd的屬性我們可以通過命令來查看    
#vhd-util read –n /dev/ VG_XenStorage-4ec639db-6c87-b775-73d1-b54e21b3a31a/VHD-306128a9-7138-4611-a2c6-b79823e1e58b –p

image    
既然這樣,我們必須將此屬性改默認不隱藏,通過以下命令來完成    
#vhd-util set -n /dev/ VG_XenStorage-4ec639db-6c87-b775-73d1-b54e21b3a31a/VHD-306128a9-7138-4611-a2c6-b79823e1e58b –f hidden –v 0    
這個時候新建vm,將對應的磁盤掛載上去即可以恢復。    
但是問題的重點在這里,因為客戶不可能是手動去備份VG的信息,客戶在刪除vm的同時xenserver上/etc/lvm/backup目錄下的VG信息也對應跟著更新,所以這種情況下恢復就比較困難,但是也不是沒有辦法。    
先找到該VG對應的pv的信息    
#pvscan

image    
這里我們看到此VG對應的pv的信息為/dev/sdj    
#dd if=/dev/sdj count=100 |strings

image    
在以上輸出中我們能看到被刪除的VHD的信息(請注意,如果這里你的存儲上有相當多的vhd的話就必須一個個的對了,我這里上面的vhd很少,所以很容易發現),記錄下以上信息    
打開/etc/lvm/backup目錄下對應的vg的備份信息    
#cat VG_XenStorage-4ec639db-6c87-b775-73d1-b54e21b3a31a |more    
我們看到正常VHD的信息在VG的備份信息中的為以下格式:

image    
根據我們從PV中查到的vhd的信息,按照上述的格式插入到對應的VG信息中并保存退出    
#vi VG_XenStorage-4ec639db-6c87-b775-73d1-b54e21b3a31a    
插入一下內容:

image    
繼續執行vgcfgrestore    
#vgcfgrestore VG_XenStorage-4ec639db-6c87-b775-73d1-b54e21b3a31a –f VG_XenStorage-4ec639db-6c87-b775-73d1-b54e21b3a31a    
這個時候即可以恢復,剩下的就激活邏輯卷,更改vhd屬性hidden為0,新建VM,掛磁盤,即可以完成最終數據恢復!