在所有正式内容开始之前先问一个问题,什么是raid?raid的概念描述在互联网上比比皆是,都未免太过专业了。我想用最简单的原理描述,就是在定义存储方式时允许在一部分数据缺失的情况下不影响全部数据,类似于通讯领域的纠错码。不同的冗余模式形成了不同的RAID类别。我们需要先描述仅具备一个磁盘冗余的RAID模型(思想同RAID3,RAID4,RAID5)。假设现在有3页空白的纸,用来记录一些数字,为了更清晰地记录,我们先将每页白纸划出相同大小的一些表格。再假设有一个可能:这3页纸,特定情况下会有其中某一页丢失。为了在上述设定情况保证这些数字能完整安全的记录下来,我们要设计一些互相牵连的冗余关系。如我们要记录的数字序列是:3、14、28、4、98、88 。我们可以依次在第1页和第2页写要记录的数字,在第3页写上他们的和。这样不管这3页中的哪一页丢失,都可以通过另两页计算另一页的数据来。很显然,即使是超过3页的情况,按上述方式设计记录模式,也可以支持任意一页记录的丢失。这就是raid的数据存储原理了。
好了,下面我们进入正题,如果一个raid阵列同时有3块硬盘掉线了,我们应该怎么处理才能避免数据丢失呢?下面是北亚数据恢复中心服务器数据恢复工程师恢复的一个raid6阵列数据恢复的真实案例:
出现故障需要进行数据恢复的是一组6块750G磁盘的 RAID6磁盘阵列,服务器在正常的运行过程中先后有两块磁盘离线,但维护人员在此情况下依然没有更换磁盘,所以在第三块硬盘离线后raid阵列就理所当然的崩溃了,服务器瘫痪了,业务也因此停滞。想要更换硬盘重新组建阵列是没有问题,但是这组阵列中的所有数据将全部丢失,有由此带来的损失将是巨大的。
服务器管理员对数据进行了分析和恢复后找回了一部分的数据,但是仍有大部分数据丢失无法恢复,于是客户联系到了北京北亚数据恢复中心进行数据恢复操作。客户的服务器是一台web服务器,挂载了6块硬盘,当时3块硬盘处于离线状态。运行了MySQL数据库和一些比较杂乱的其他类型文件。服务器数据恢复工程师首先将服务器内的包括正常硬盘在内的所有硬盘进行了完整镜像,然后将客户服务器归还,剩下的工作就是分析镜像并恢复数据了。
对于服务器出现多块硬盘掉线的情况来说,掉线的硬盘必定有先有后,毕竟同时有3块硬盘掉线的几率是可以忽略不计的。所以针对服务器阵列有多块硬盘掉线的数据恢复原理就是分析硬盘离线的先后顺序,修复最后离线的硬盘故障,然后提取最后离线的硬盘数据,根据raid的存储结构分析出一些基础参数后重组raid即可。在本次数据恢复案例中出现的raid模式是raid阵列,raid6磁盘阵列使用的是双校验模式,第一个校验是普通的oxr也就是异或运算,第二个校验是reed-solmon算法。通常数据恢复时采用第一种校验方法即可回复,但经过服务器数据恢复工程师的分析发现阵列中前两块硬盘很早就已经掉线了,不具备数据恢复的条件,所以第一种校验方式显然已经没有用了。第二种校验方式又比较复杂,市面上也没有成熟的软件或者工具可以使用,所以客户的管理员恢复的数据缺失程度很大,且数据库无法使用。
不过还好北亚数据恢复中心掌握一些reed-solomon算法的核心技术,也有过相应的数据恢复经验,经过多名服务器数据恢复工程师的共同分析终于获得了客户raid阵列中的必要参数并提取出完整的镜像数据。经过客户管理员验证,所有数据成功恢复,数据库可以使用,本次数据恢复圆满成功。
重要数据要做好数据备份工作,做好病毒防护工作,发现数据丢失后一定要保护好故障硬盘。寻找数据恢复公司最好是找一些专业数据恢复公司,可以最大程度保障数据恢复的成功率。
原文地址:https://blog.51cto.com/sun510/2435394