【常见故障】
一、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存储库的差不多所有结构信息,所有的损坏几乎都是基于上述信息的不完整导致。
上述信息的不同损坏组合,衍生出不同的解决方案。
【解决方案】
一、当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文件。