经常有用户问到如何从xenserver的角度恢复被客户误删除的虚拟机,citrix 技术支持并不提供这种数据恢复服务,但是并不是无法恢复,过程比较繁琐,我在这里整理下如何恢复误删的虚拟机数据。
这里我新建一个测试存储和测试vm
上图中我们看到SR对应的uuid为4ec639db-6c87-b775-73d1-b54e21b3a31a
打开xenserver命令行输入pvsan找到该存储对应的VG和PV信息
默认VG的信息保存在/etc/lvm/backup
#dir
这里为了测试,我先备份原来的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
我们看到这里的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
既然这样,我们必须将此属性改默认不隐藏,通过以下命令来完成
#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
这里我们看到此VG对应的pv的信息为/dev/sdj
#dd if=/dev/sdj count=100 |strings
在以上输出中我们能看到被删除的VHD的信息(请注意,如果这里你的存储上有相当多的vhd的话就必须一个个的对了,我这里上面的vhd很少,所以很容易发现),记录下以上信息
打开/etc/lvm/backup目录下对应的vg的备份信息
#cat VG_XenStorage-4ec639db-6c87-b775-73d1-b54e21b3a31a |more
我们看到正常VHD的信息在VG的备份信息中的为以下格式:
根据我们从PV中查到的vhd的信息,按照上述的格式插入到对应的VG信息中并保存退出
#vi VG_XenStorage-4ec639db-6c87-b775-73d1-b54e21b3a31a
插入一下内容:
继续执行vgcfgrestore
#vgcfgrestore VG_XenStorage-4ec639db-6c87-b775-73d1-b54e21b3a31a –f VG_XenStorage-4ec639db-6c87-b775-73d1-b54e21b3a31a
这个时候即可以恢复,剩下的就激活逻辑卷,更改vhd属性hidden为0,新建VM,挂咋磁盘,即可以完成最终数据恢复!