您所在的位置 : 首页>关于我们>公司动态

Raid磁盘阵列系列问题回答

[问题]
  在断电情况下,把已经配置好的RAID中的硬盘盘位互换后,再次开机会不会影响原先存储数据的完整性,是否会导致数据灾难?
[回答]
  这个要取决于RAID控制器的固件设计,一个最重要的根本是,RAID信息(RAID元数据)记录在什么地方?可以记录RAID信息的地方只能有RAID控制器上的存储单元和硬盘上。
  如果RAID信息只记录在控制器上,那么配置好的RAID里硬盘盘位互换后,数据一定会受到影响。这种记录方式使用较少,目前只有部分低端控制器采用。
  RAID信息只记录在硬盘上的情况也不多见,如果RAID信息只记录在硬盘上,控制器便不具备记录RAID配置的能力,完全依赖于硬盘,安全性也较低。如果是这种情况,更换RAID盘位并不会导致数据灾难。
  目前大多数控制器的实现是将RAID信息同时记录在控制器与硬盘上,这样,当两者中有一出故障,可通过另一份COPY还原。同时,可对RAID信息的正确性进行校验,通过控制器上存储的RAID信息为主信息,当RAID里的信息与硬盘里的信息不相同时,需要手工进行判断处理(比如强制上线)。此类情况更换硬盘盘位后,要么自动调整过来,不影响数据,要么需要手工确认一下。只要正确操作,便不会有数据灾难。
  但必须指出的是,更换RAID盘位的操作还是相当危险的,安全级别越高的RAID控制器越敏感,更换盘位导致的一点点接口松动都有可能导致硬盘下线,从而影响整个RAID卷。更换RAID盘位操作,仅仅适用于迁移到另外的服务器或磁盘阵列控制下,但迁移之前,尽可能还是要完整备份数据,以防意外。
[数据恢复问题]
  RAID有不同的组织方案,有JBOD,RAID0,RAID1,RAID5,RAID6,RAID10,RAID01,ADG等,这些方案都适用于什么环境?
[回答]
  RAID要解决的问题主要有3个:容量合并、IO性能、存储安全
  JBOD是低端的RAID结构,有时候等同于WINDOWS的跨区卷,是将1块或几块硬盘首尾相接连起来的结构,只为解决硬盘扩容问题,安全性头差,IO性能与单盘无异,适用于安全级别与IO性能不高的容量组合环境。可以由任意多块硬盘组成。
  RAID0实现容量合并,IO性能提高的目的,尤其IO性能是RAID0的主要特点,但安全性极差,比单盘还容易损坏,且设计成本很低,适合需要快速IO、容量大、但数据并不重要的环境。比如中转性的数据服务器,流媒体点播系统、或要求不高的监控系统。可以由任意多块硬盘组成。
  RAID1安全突出存储安全,提供了所有RAID级别中最高的安全系数,当然也浪费了空间,增加了成本,同时IO性能并无明显提升,适合数据量不大,但极其重要的使用环境。通常只适合两块盘。
  RAID5是一种中和的RAID结构,可以提供大容量空间,同时如果控制器性能足够好,可以提供高于单盘的IO性能(尤其是读性能),同时提供允许一块硬盘损坏的安全保护,因多方面因素均有考虑,所以使用较广,缺点是最小需要3块硬盘组成,同时RAID5的算法复杂,需要有强劲的处理单元与高速缓冲才能更好的发挥RAID5的作用,导致成本很高。低端的RAID5实际上可能更容易出问题,性能不如单盘。适用于一般型企业的大多数存储要求。可多块硬盘构建。
  RAID10与RAID01是结合RAID0与RAID1的一种结构,通常建议做RAID10(见以一起数据灾难谈RAID0+1及RAID1+0),标准的RAID10适合4块以上的偶数块硬盘组建,安全如RAID1,速度如RAID0,但会浪费50%的磁盘空间,处理器设计也较为简单,大型企业数据存储,如空间要求不大,RAID10是首选。
  RAID6与ADG是RAID5的升级结构,支持两块硬盘同时离线,使得安全性更高,但算法过于复杂,导致IO读写命中率很低,IO性能很低,即使有高速的处理器与高速缓冲,仍然不见得是最好的组织结构,造价又很高,通常使用很少。但如果硬盘很多,数据量很大,RAID5的安全级别又不够高,RAID10又浪费太多,RAID6或ADG是最适合的了。
[数据恢复问题]
RAID5当一块硬盘离线后,处理降级状态,这时候正常的建议是马上更换硬盘做REBUILD以恢复完整的数据状态,如果有热备盘的话,就会自动做REBUILD,这样做合适吗?
[回答]
  一组RAID卷在工作很长时间以后也很少会读到物理硬盘的所有磁盘空间,同一时间更是不可能。部分情况下,硬盘会在没有读到的区域或者以前读取是良好的区域产生坏道,这类坏道因为没有读写过,所以在控制器看来是好的。产生这种坏磁道的最直接危害是在REBUILD过程中。当一块物理硬盘离线后,通常所有的技术人员及官方资料都会写尽快做REBUILD,但如果其他硬盘存在这类平常不知的坏磁道,REBUILD又都是对全盘做全面同步,就一定会读写到那些坏道,这时候REBUILD没完成,新盘无法上线,因旧盘里又发现了坏道,便会导致RAID又多出一些下线的硬盘,这样就可能会导致RAID出现故障,无法自行进行数据恢复了。
  所以,当RAID处理降级状态时,如重要数据容量不大,建议先做备份,当然这种备份应该是异机的,不可备份至当前已降级的RAID中。
  如果在REBUILD当中出现另外硬盘离线的情况导致RAID卷OFFLINE,切不可重建RAID,如确定后离线的硬盘,可通过强制上线恢复数据(有些控制器没有选项,就没办法了),也可咨询数据恢复公司进行处理。
[问题]
  当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控制器市场占有率很高,其控制器在重建时往往不会清除数据,但会在后台重新同步数据,也是有风险的。