[问题]
当RAID损坏,出现数据丢失的情况下,能否通过重建RAID结构来恢复raid数据?
磁盘阵列环境出现的数据灾难中RAID信息丢失的情况占很大比例,很多工程师都有过这样的经历:按原来的RAID结构重建一下RAID,数据就恢复出来了。这种方式可行吗?
回答
RAID的重建大致有几种方式:只创建RAID信息(RAID元信息)、创建RAID时只重新生成校验(只做同步)、创建RAID时填充初始化。
如果重建的结构与原先的结构不相同(涉及控制器固件、RAID级别、块大小、校验方式、盘序),重建好的RAID LOGICAL DRIVER一定和原先是不一样的,这样贸然加载文件系统,会破坏文件系统结构,导致数据丢失。
以下假设重建的结构与原先的结构是相同的:
如果控制器的重建方法是只创建RAID信息,那要看之前的RAID结构是正常的还是降级的,如果是降过级的(已有硬盘下过线),重建好后,因数据是由新数据与部分旧数据组合而成的,文件系统会破坏,且不可逆向恢复。如果之前的RAID结构是完好的,重建RAID不会影响数据,可以将原来的数据完全原样的恢复出来。
如果控制器的重建方法是创建RAID重新生成校验(即使是后台的),和上面的情况相同,如果硬盘之前就有离线的,这样的重建会破坏数据的一致性。如果之前的RAID状态是ONLINE(GOOD)的,那么这样的重建不会影响数据。
如果控制器的重建方法是填充数据重建(通常是清0),那无论如何都会破坏数据。
这样看来,当RAID损坏后重建RAID可以恢复数据的前提是:控制器的设计是不破坏数据的,而且之前的RAID状态是良好的,同时重建的结构和原先的要完全一致。除此之外的重建都有数据风险。
实际上,多数RAID损坏并不是从良好 一下子到瘫痪的,大多数会通过降级这一步,所以实际上强行重建文件系统无论如何都不是很好的做法,只是降级到瘫痪这段时间内如果数据写入不多,可能重建后修复文件系统只影星降级到瘫痪这段时间内做的改动。
早期很多基于SCSI的磁盘阵列都会在重建时至少清0前面部分扇区(比如1M,10M等)。目前基于LSI的SAS控制器市场占有率很高,其控制器在重建时往往不会清除数据,但会在后台重新同步数据,也是有风险的。
北亚数据恢复中心张宇,http://www.datahf.net