存储数据恢复环境:
北京某医院的一台EMC某型号存储raid5崩溃;
存储中12块硬盘组成raid5(2块热备盘);
上层一个lun分配给sun小机,上层文件系统是ZFS。
存储故障:
故障存储中有2块硬盘出现故障,但只有1块热备盘激活成功,raid5阵列瘫痪,上层lun无法使用。
存储数据恢复过程:
1、数据恢复工程师检测故障存储中所有磁盘没有发现物理故障和坏道。
2、使用工具将故障存储中的全部磁盘镜像备份。源磁盘的扇区大小是520字节,需要把所有备份数据做520字节 to 512字节的转换。
3、由于所有硬盘不存在物理故障和坏道,可以初步判断故障是由部分磁盘读写不稳定造成的。因为EMC控制器有着非常严格的检查磁盘策略,如果磁盘出现性能不稳定的情况就会被EMC控制器判断为坏盘并踢出raid阵列。当raid中掉盘数量超过该raid所允许最大掉盘数量,raid瘫痪,导致raid的上层lun不可用。
4、EMC存储的LUN都是基于RAID的,因此需要先分析底层RAID的信息,然后根据分析获取到的信息重构原始RAID。对所有硬盘数据分析,发现8号盘和11号盘完全没有数据,8号盘和11号盘都是Hot Spare,但8号盘的Hot Spare替换了5号坏盘。因此判断8号盘(Hot Spare)虽然成功激活,但RAID阵列中还缺失一块硬盘,所以数据没有同步到8号硬盘中。继续分析其他10块硬盘的数据分布规律、RAID条带的大小和每块磁盘的顺序。
5、基于分析获取到的RAID信息,通过北亚自主开发的RAID虚拟程序将原始RAID虚拟出来。但由于故障RAID总共掉线两块盘,因此需要判断这两块硬盘的掉线顺序。仔细分析所有硬盘中的数据发现有一块硬盘在同一个条带上的数据和其他硬盘明显不一致,因此可以初步判断此盘是最先掉线的,通过北亚自主开发的RAID校验程序检测这个条带发现除掉刚才分析的那块硬盘得出的数据是最好的,因此可以确定最先掉线的硬盘。
6、由于EMC存储的LUN是基于RAID的,RAID重组出来后,数据恢复工程师开始分析LUN在RAID中的分配信息以及LUN分配的数据块MAP。上层只有一个LUN,只需要分析一份LUN信息,然后根据分析出来的信息使用raid恢复程序解释LUN的数据MAP并导出LUN的所有数据。
7、利用北亚自主开发的ZFS文件系统解释程序对生成的LUN做文件系统解释,但是在解释某些文件系统元文件的时候有报错。于是开发工程师对该ZFS文件系统解释程序做debug调试并分析程序报错原因。文件系统工程师分析ZFS文件系统是否因为版本原因导致程序不支持。经过数小时的分析与调试,结果发现存储突然崩溃导致ZFS文件系统中某些元文件损坏,从而导致解释报错。
8、通过分析确认存储瘫痪导致部分文件系统元文件损坏,只有修复好这些损坏的文件系统元文件才能正常解析ZFS文件系统。通过分析损坏的元文件发现,存储瘫痪的同时ZFS文件系统正在进行IO操作,所以导致部分文件系统元文件没有更新或者损坏。数据恢复工程师对这些损坏的元文件进行手工修复,保证ZFS文件系统能够正常解析。
9、修复好的ZFS文件系统做解析,解析所有文件节点及目录结构。由用户方工程师对数据进行验证,验证没有发现问题,数据完整可用。