经常有用户问到如何从xenserver的角度恢复误删除的虚拟机,citrix 技术支持并不提供这种数据恢复服务,但是并不是无法恢复,过程比较繁琐,我在这里整理下如何恢复误删的虚拟机数据。
注意:此教程不能完全保证恢复丢失的数据,且具备以下条件才可以进行,首先服务器的存储在丢失数据后,没有写入过任何数据,其次删除的数据距离恢复操作的时间不要太长,以免系统自动写入数据,导致数据被覆盖。
以下是恢复过程:
第一种方法:
前提是客户备份了VG,可以通过VG来还原数据。
这里我新建一个测试存储和测试vm
上图中我们看到SR对应的uuid为4ec639db-6c87-b775-73d1-b54e21b3a31a
打开xenserver命令行输入“pvscan”找到该存储对应的VG和PV信息
默认VG的信息保存在目录:/etc/lvm/backup
cd /etc/lvm/backup
ls
这里为了测试,我先备份原来的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,并输出到/tmp/1.txt文档中,可以下载下来,用任何文本编辑软件打开,例如:Notepas++,方便一会数据查找
dd if=/dev/sdj count=10000 |strings > /tmp/1.txt
在以上输出中我们能看到被删除的VHD的信息
注意:如果这里你的存储上有相当多的VHD的话就必须一个个的对了,DD出来的信息和现有VG信息对比,找出被删除VHD。
我这里上面的VHD很少,所以很容易发现,记录一下DD出来的信息。
打开/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,挂咋磁盘,即可以完成最终数据恢复!