您的位置:首页 > 其它

XenServer存储库SR损坏的数据恢复方案

2016-05-20 17:19 204 查看
原文地址:http://mp.weixin.qq.com/s?__biz=MjM5NTczODkyOA==&mid=401006019&idx=1&sn=172ed6708e3fbb49338db8f11397bab0&scene=4#wechat_redirect

声明:本文档为北亚数据恢复中心张宇老师的博客文章,

链接地址:http://zhangyu.blog.51cto.com/197148/1184910。

【常见故障】

一、SR无法识别,所有虚拟磁盘(vdi)丢失

二、SR中的虚拟磁盘(vdi)访问时报错

三、虚拟磁盘(vdi)删除或丢失

四、快照(snapshot)删除或丢失

五、SR初始化

六、SR所在的LVM结构损坏

七、SR所属的PV分区表损坏

八、其他故障

【故障分析】

上述常见故障是用户界面层的表现,探究其解决方案其实万变不离其宗,仅需明白xen server SR层的结构组成,上述故障即可有清晰的解决思路。

xen server SR存储库的结构组成多数基于linux lvm,SR中的每个vdi相当于lvm中的一个lv,而构建lvm则可以基于传统MBR的分区表或GPT的分区表进行管理。举个例子说,如果有一块1TB的单硬盘,假设为/dev/sdb,想要初始化为SR,通常是1T的PV先进行分区(MBR或GPT,当然也可以不分),分好区后,再将/dev/sdb1(假设要处理第一个分区)创建成LVM卷,里面再创建LV,这些LV就是VDI。

xen server同时会备份这些LVM信息,存放在/etc/lvm下,名称形如VG_XenStorage-151befd1-2224-5e06-914e-f15243f649d7_00103.vg,内容是标准的LVM
XML信息格式描述。

上述就是SR存储库的差不多所有结构信息,所有的损坏几乎都是基于上述信息的不完整导致。

上述信息的不同损坏组合,衍生出不同的解决方案。

PR|z -T

【解决方案】

一、当PV分区表损坏时(适用于常见故障的1、7):

PV分区表损坏其实与SR没关系,只是直接表现影响到SR的访问,其修复过程与普通的分区表修复相同,修正MBR分区表或GPT分区表。

二、当LVM结构损坏时(适用于常见故障的1、6):

LVM结构损坏多数就是LVM XML信息区的损坏,可考虑通过xen
server的LVM信息备份进行恢复。当然,有可能这个备份信息也损坏了。

三、当LVM结构损坏,同时备份信息也损坏了(适用于常见故障的1、6):

这是真正的技术难题,当LVM结构及其备份信息损坏后,所有的LV的片断索引信息全部丢失,所要做的工作就是找回每个VDI的LV
EXTENTS信息。

XEN的VDI是基于Connectix和微软联合开发的VHD格式,通常采用精简增长模式(如同ESX
VMDK的精简模式),也就是说vdi随着使用的增长而增长,并不是分配多少占用多少。这样的好处是可以节约空间,但坏处就是分配不可能太连续,总会有同时几个vdi交互申请空间。要想恢复这些片断(碎片信息),从上层可参考的信息是非常有限的,多数情况下,只能通过VHD格式内部的相关性,从VDI的头部开始,通过一些可前后匹配的信息,按LV
PE的偏移,对extent碎片结构进行不断纠正。这个过程通常人工操作很吃力,为此,北亚数据恢复中心也是特意开发对vhd格式进行从前向后偏移校验的程序来进行匹配的,详细算法暂不公开,但可参考本文与本人所写<storage
layout系列之VHD结构详解>进行算法设计与开发。

得到每个VDI的碎片信息后,即可通过碎片信息修正LVM信息或直接导出成VHD文件。

四、vdi内部结构损坏(适用于所有可能的故障):

vdi内部结构的损坏,等同于vhd格式磁盘的修复。对于一个vhd虚拟磁盘而言,每一个转化后的物理块都有索引表和块内容组成,如果这两部分信息都可以找到,则这个位置的块即可修复。所有可修复的块加上无法修复的块,组成的一个VHD,就像处理一块坏道盘,就要看内部文件系统的结构破坏情况了,接下来的事情,可参考其他方案,已经脱离xen
server SR层和vdi vhd层了。

小结:

上述4种解决方案的不同组合,即是对所有xen
server SR故障的解决方案。比如,vdi的删除就是要先看是否有LVM备份,如果有,按备份恢复;如果没有,按vdi内部结构进行复杂组合。

#>‑Z.sf

【数据回迁方案】

多数情况的恢复,是对vdi(vhd)的恢复。这样,数据恢复后,就有几种回迁方案:

一、修正LVM信息后的数据加工:

修正LVM信息后,如果xen
server配置信息还存在,重新获取SR后,则可以完整恢复所有数据;如果xen
server 也损坏或重装了,则大致需要按如下过程进行SR的激活(由互联网上资料修改,但已通过验证):

1,列出卷所有:

命令:pvscan
,得到pv的uuid

如得到的输出是 PV /dev/sda3 VGVG_XenStorage-9ae1044f-d335-8143-d630-a6f546e57db7
lvm2 [66.52 G / 56.52 GBfree]

记录下uuid“9ae1044f-d335-8143-d630-a6f546e57db7”

2,创建出这个UUID的存储

命令:xe SR-introduce uuid=9ae1044f-d335-8143-d630-a6f546e57db7
type=lvmname-label=“Local storage” content-type=user

3,找到SR的数据存储设备或分区的SCSI
ID

命令:ls -l /dev/disk/by-id/

total 0

lrwxrwxrwx 1 root root 9 Aug 1815:43 scsi-SATA_ST380811AS_9PS04Q4A -< ../../sda

lrwxrwxrwx 1 root root 10 Aug 1815:43 scsi-SATA_ST380811AS_9PS04Q4A-part1 -< ../../sda1

lrwxrwxrwx 1 root root 10 Aug 1815:43 scsi-SATA_ST380811AS_9PS04Q4A-part2 -< ../../sda2

lrwxrwxrwx 1 root root 10 Aug 1815:43 scsi-SATA_ST380811AS_9PS04Q4A-part3 -< ../../sda3

4、列出服务器UUID

命令:xe host-list

5,通过设置的scsi ID,host
ID,SR uuid检测出pdb
uuid

命令:xe pbd-create
SR-uuid=9ae1044f-d335-8143-d630-a6f546e57db7device-config:device=/dev/disk/by-id/scsi-SATA_ST380811AS_9PS04Q4A-part3host-uuid=4ca6582a-364b-4da2-a206-618438ae4dee

得到pbd uuid:0d65a15e-75a0-dc81-8bb5-79df3e6d96db

6,把这个存储还原

命令:xe pbd-pluguuid=0d65a15e-75a0-dc81-8bb5-79df3e6d96db

7、创建vps,挂载所有找回的vdi

}iI

二、导出成vhd后的数据加工

如果将恢复后的VDI导出成vhd格式,有几种办法可以处理vhd

D

1、直接在windows 7,windows
server 2008上进行vhd挂载,但此方案不适合拥有快照的VHD

2、构建nfs,导入vhd进行SR还原,可直接在xen
server上进行操作

3、直接使用winhex进行vhd数据解释,读出其中数据,但此方案也不适合拥有快照的VHD

4、参考本人(北亚数据恢复中心张宇)所写<vhd
转换为img源码>,转换VHD或快照,进行数据解释。

B.FP

5、使用VPC、VBOX等虚拟机直接挂载 vhd格式的虚拟磁盘,解释数据。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: