遇到RAID5阵列硬盘故障该如何解决?【故障描述】华为S5300,12块FC硬盘,整个存储空间由450GB和600GFC的硬盘组成,其中1 1块硬盘组成一个RAID5的阵列,剩余1块做成热备盘使用。由于RAID5阵列中出现1块硬盘故障,热备盘成功激活,在进行同步的过程中 又一块硬盘出现故障,因此导致RAID5阵列瘫痪,上层LUN无法正常使用。【恢复过程】一、检测磁盘由于存储是因为RAID阵列中某些磁 盘掉线,从而导致整个存储不可用。因此接收到磁盘以后先对所有磁盘做物理检测,检测完后发现一块硬盘有物理故障,其他硬盘没有物理故障。二 、备份数据考虑到,数据的安全性以及可还原性,在做数据恢复之前需要对所有源数据做备份,以防万一其他原因导致数据无法再次恢复。使用dd 命令或winhex工具将所有磁盘都镜像成文件。三、故障分析1、分析故障原因由于前两个步骤并检测到磁盘有物理故障,由此推断可能是由于 某些磁盘读写不稳定和物理故障导致故障发生。因为华为S5300控制器检查磁盘的策略很严格,一旦某些磁盘性能不稳定,华为S5300控制 器就认为是坏盘,就将认为是坏盘的磁盘踢出RAID组。而一旦RAID组中掉线的盘到达到RAID级别允许掉盘的极限,那么这个RAID组 将变的不可用,上层基于RAID组的LUN也将变的不可用,之后又新建RAID,有一块硬盘在同步的过程中被损坏,目前初步了解的情况为基 于RAID组的LUN分配给linux系统使用,重要数据为Oracle数据库。2、分析RAID组结构华为S5300存储的LUN都是基 于RAID组的,因此需要先分析底层RAID组的信息,然后根据分析的信息重构原始的RAID组。分析每一块数据盘,发现一块盘的数据同其 它数据盘不太一样,初步认为可能是hotSpare盘。接着分析其他数据盘,分析Oracle数据库页在每个磁盘中分布的情况,并根据数 据分布的情况得出RAID组的条带大小,磁盘顺序及数据走向等RAID组的重要信息。3、分析RAID组被同步损坏盘根据上述分析的RAI D信息,尝试通过北亚自主开发的RAID虚拟程序将原始的RAID组虚拟出来。但由于整个RAID组中掉线两块盘并且有一块硬盘数据被同步 损坏。仔细分析每一块硬盘中的数据,发现有一块硬盘在同一个条带上的数据和其他硬盘明显不一样,因此初步判断此硬盘可能是被同步掉损坏的硬 盘,通过北亚自主开发的RAID校验程序对这个条带做校验,因此可以明确被同步损坏盘了。4、分析RAID组中的LUN信息由于LUN是基 于RAID组的,因此需要根据上述分析的信息将RAID组最新的状态虚拟出来。然后分析LUN在RAID组中的分配情况,以及LUN分配的 数据块MAP。因此只需要将LUN的数据块分布MAP提取出来。然后针对这些信息编写相应的程序,LUN的数据MAP做解析,然后根据数据 MAP并导出LUN的数据。四、解析EXT3文件系统1、解析EXT3文件系统由于是使用热备盘虚拟的RAID结构,EXT3文件系统无 法正常挂载,所以只能提取oracle数据库文件,利用自主开发的文件系统解析程序对其进行文件系统的解析,导出oracle数据库文件, 并把数据库文件移交给数据库工程师进行校验和验证五、检测Oracle数据库文件及修复1、检测数据库文件是否完整使用Oracle数据 库文件检测工具检测每个数据库文件是否完整,发现有错误。再使用北亚自主研发的Oracle数据库检测工具(检验更严格),发现有部分数据 库文件和日志文件错误,system和sysaux表空间各存在100多坏块;3个控制文件都存在坏块许多坏块,控制文件全部损坏; eschoolspace表空间的3个文件的坏块更多,达到1000个;undotbs02丢失;数据库工程师对此类文件进行修复,如下图 :2、修复Oracle数据库我们创建了控制文件,创建undo表空间,启动数据库到mount。system数据文件坏块使得数据库不能 open。各种隐含参数也不能绕过system的坏块;搭建数据库环境。使用dmp文件还原数据库。使用3月9号之后的导入,都报错,大约 只能导入10G左右的数据,如下图:六、数据验证由用户方配合,启动Oracle数据库,在本地虚拟机安装OA客户端。通过OA客户端对 数据记录进行验证,并且用户安排不同部门人员进行远程验证。七、数据恢复结论由于故障发生后又重建RAID,导致一块盘的数据被同步损坏, 对后期的数据恢复造成了困难。因为热备盘同步了一段时间写入了部分数据,所以使用热备盘里面的数据进行恢复,只能恢复部分数据,只有3月9日之前的数据。 |
|