一种磁盘容错处理方法及设备
技术领域
本发明涉及通信领域,尤其涉及一种磁盘容错处理方法及设备。
背景技术
RAID(Redundant Array of Independent Disk,独立冗余磁盘阵列)是将N块磁盘通过RAID Controller结合成虚拟单块大容量的磁盘使用,提高整体传输效率,增强容错。但是,目前广泛使用的RAID5,最多只能容忍一块磁盘损坏,当出现两块或更多磁盘损坏时,则整个RAID5失效,既不能读,也不能写。此时,用户有两种选择,要么停下业务恢复数据,要么重建RAID5,丢弃既有数据,导致磁盘无法继续使用。
发明内容
本发明提供了一种磁盘容错处理方法及设备,在出现磁盘损坏时依然能够使用磁盘存储数据。
一种磁盘容错处理方法,每一磁盘划分为数据区和日志区,在所述数据区建立RAID5,该方法包括:
当没有磁盘故障或只有一块磁盘故障时,将数据写入所述数据区;
当两块以上磁盘故障时,在所述日志区记录应当写入故障磁盘的数据、以及出错时间和/或出错地址;
插入新磁盘后,根据所述日志区记录的数据、以及数据的出错时间和/或出错地址将数据写入新磁盘的数据区。
在所述日志区记录应当写入故障磁盘的数据、以及出错时间和/或出错地址包括:
在日志区使用可用磁盘建立独立冗余磁盘阵列;
将应当写入故障磁盘的数据、以及出错时间和/或出错地址写入建立的独立冗余磁盘阵列。
所述在日志区使用可用磁盘建立独立冗余磁盘阵列包括:
当第一次出现两块以上磁盘故障时,在日志区使用可用磁盘建立独立冗余磁盘阵列;
当第二次及后续出现新的磁盘故障时,在日志区使用可用磁盘从已用条带的下一个条带开始建立新的独立冗余磁盘阵。
根据所述日志区记录的数据、以及数据的出错时间和/或出错地址将数据写入新磁盘的数据区包括:
当所述日志区的某一独立冗余磁盘阵列的数据不完整时,在日志区保留该独立冗余磁盘阵列的数据。
所述根据所述日志区记录的数据、以及数据的出错时间和/或出错地址将数据写入新磁盘的数据区之后,还包括:删除所述日志区记录的数据;
当所述日志区数据写满、且有新的数据需要写入时,根据预设策略将新写入的数据覆盖原记录的数据、或者停止向所述日志区写入数据。
所述数据区用户可见,所述日志区用户不可见,在所述日志区记录的数据不能直接读取,需要回滚写入数据区之后才能正常读取。
所述日志区占磁盘总存储空间的10%。
一种磁盘容错处理设备,将磁盘划分为数据区和日志区,在所述数据区建立RAID5,该设备包括:
第一写入单元,用于当没有磁盘故障或只有一块磁盘故障时,将数据写入所述数据区;
第二写入单元,用于当两块以上磁盘故障时,在所述日志区记录应当写入故障磁盘的数据、以及出错时间和/或出错地址;
第三写入单元,与所述第二写入单元连接,用于插入新磁盘后,根据所述日志区记录的数据、以及数据的出错时间和/或出错地址将数据写入新磁盘的数据区。
所述第二写入单元包括:
阵列建立子单元,用于在日志区使用可用磁盘建立独立冗余磁盘阵列;
写入子单元,用于将应当写入故障磁盘的数据、以及出错时间和/或出错地址写入建立的独立冗余磁盘阵列。
所述阵列建立子单元具体用于:
当第一次出现两块以上磁盘故障时,在日志区使用可用磁盘建立独立冗余磁盘阵列;
当第二次及后续出现新的磁盘故障时,在日志区使用可用磁盘从已用条带的下一个条带开始建立新的独立冗余磁盘阵列。
所述第三写入单元具体用于:
当所述日志区的某一独立冗余磁盘阵列的数据不完整时,在日志区保留该独立冗余磁盘阵列的数据。
还包括删除单元,用于在所述第三写入单元根据所述日志区记录的数据、以及数据的出错时间和/或出错地址将数据写入新磁盘的数据区之后,删除所述日志区记录的数据;
所述第三写入单元还用于:当所述日志区数据写满、且有新的数据需要写入时,根据预设策略将新写入的数据覆盖原记录的数据、或者停止向所述日志区写入数据。
所述数据区用户可见,所述日志区用户不可见,在所述日志区记录的数据不能直接读取,需要回滚写入数据区之后才能正常读取。
所述日志区占磁盘总存储空间的10%。
与现有技术相比,本发明至少具有以下优点:
当两块以上磁盘故障时,使用日志区的可用磁盘建立磁盘阵列,将需要写入故障磁盘的数据块写入日志区,使得磁盘能够继续使用。
附图说明
图1是本发明中磁盘的划分示意图;
图2是本发明中正常情况下数据的写入示意图;
图3是本发明中磁盘第一次故障情况下数据的写入示意图;
图4是本发明中出现新的磁盘故障情况下数据的写入示意图;
图5和图6是本发明中日志区数据的回复过程示意图;
图7和图8是本发明提供的磁盘容错处理设备的结构示意图。
具体实施方式
本发明中,磁盘划分为数据区和日志区,在2块以上磁盘故障时,将应当写入故障磁盘的数据写入日志区,使得磁盘能够继续使用。
为了清楚说明本发明提供的方法,下面依次说明磁盘的划分、磁盘故障后数据的写入、以及日志区数据的回复过程。
1.1磁盘的划分
磁盘的划分如图1所示,所有磁盘划分成两个区域:“数据区”和“日志区”。其中,数据区对用户可见,供用户建立RAID使用,日志区用于应对磁盘故障,对用户隐藏。日志区根据用户实际数据流量及预期容错时间设定,通常占磁盘总存储空间的10%左右。
需要说明,日志区的大小根据具体情况进行设置。当日志区数据写满后,如果没有插入新盘,则根据用户预设策略采取覆盖写方式(即将新写入的数据覆盖原记录的数据)继续在日志区写入数据、或者停止向日志区写入新的数据。
写入日志区的数据不能直接读取,需要回滚(将日志区数据写入数据区)完成后,才可正常读取。
1.2磁盘故障后数据的写入
首先介绍正常情况下数据的写入:如图2所示,数据块顺序写入第一条带的各磁盘。
当写到数据块P2时,Disk7、8损坏:
现有技术中此时磁盘不可再用。
本发明中,如图3所示,在日志区使用剩余的好盘Disk1、2、3、4、5、6实时生成RAID5,将数据块P2、14以日志的形式存入日志区,该日志形式包括写入数据块的出错时间、出错地址和数据。
同理,后续的数据块20、21、27、28也以同样的方式记入日志区的RAID5中。
当写到数据块32时,磁盘5、6又损坏:
本发明中,如图4所示,在日志区使用剩余的好盘Disk1、2、3、4,从已用条带的下一个条带开始,实时生成新的RAID5,将数据块32、33、34、35以日志的形式存入其中。同理,后续数据块39、40、41、42也以同样的方式记入日志区的RAID5中。
后续再发生磁盘损坏,采用与上述同样的方式进行处理。极限情况下,当日志区可用磁盘数只有2块时,生成RAID1,日志区可用磁盘只有1块时生成JBOD(Just a Bunch Of Disks,磁盘簇)。
1.3日志区数据的回复过程
插入新盘后,执行数据恢复流程:
根据写入日志区的数据块的出错地址、出错时间,以时间先后顺序,将数据从日志区拷贝到数据区。拷贝完成后,踢出坏盘,删除日志区的RAID,如图5和6所示。
其中,对于数据块P2、14、20、21,由于日志区的RAID本身数据不完整,无法执行恢复操作。但需要保留该部分数据,直至下一次覆盖写条带2~4时再删除,以备特殊情况下的数据恢复。
本发明中,当两块以上磁盘故障时,使用日志区的可用磁盘建立磁盘阵列,将需要写入故障磁盘的数据块写入日志区,使得磁盘能够继续使用。
基于与上述方法部分相同的技术构思,本发明提供一种磁盘容错处理设备,将磁盘划分为数据区和日志区,所述数据区供用户建立RAID5使用,所述日志区对用户隐藏,如图7所示,该设备包括:
第一写入单元11,用于当没有磁盘故障或只有一块磁盘故障时,将数据写入所述数据区;
第二写入单元12,用于当两块以上磁盘故障时,在所述日志区记录应当写入故障磁盘的数据、以及出错时间和/或出错地址;
第三写入单元13,与所述第二写入单元12连接,用于插入新磁盘后,根据所述日志区记录的数据、以及数据的出错时间和/或出错地址将数据写入新磁盘的数据区。
如图8所示,所述第二写入单元12包括:
阵列建立子单元121,用于在日志区使用可用磁盘建立独立冗余磁盘阵列;
写入子单元122,用于将应当写入故障磁盘的数据、以及出错时间和/或出错地址写入建立的独立冗余磁盘阵列。
所述阵列建立子单元121具体用于:
当第一次出现两块以上磁盘故障时,在日志区使用可用磁盘建立独立冗余磁盘阵列;
当第二次及后续出现新的磁盘故障时,在日志区使用可用磁盘从已用条带的下一个条带开始建立新的独立冗余磁盘阵列。
所述第三写入单元13具体用于:
当所述日志区的某一独立冗余磁盘阵列的数据不完整时,在日志区保留该独立冗余磁盘阵列的数据。
还包括删除单元14,用于在所述第三写入单元13根据所述日志区记录的数据、以及数据的出错时间和/或出错地址将数据写入新磁盘的数据区之后,删除所述日志区记录的数据;相应的,所述第三写入单元13还用于:当所述日志区数据写满、且有新的数据需要写入时,根据预设策略将新写入的数据覆盖原记录的数据、或者停止向所述日志区写入数据。
所述数据区用户可见,所述日志区用户不可见,在所述日志区记录的数据不能直接读取,需要回滚写入数据区之后才能正常读取。
所述日志区占磁盘总存储空间的10%。
本发明中,当两块以上磁盘故障时,使用日志区的可用磁盘建立磁盘阵列,将需要写入故障磁盘的数据块写入日志区,使得磁盘能够继续使用。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
本领域技术人员可以理解附图只是一个优选实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。
本领域技术人员可以理解实施例中的装置中的模块可以按照实施例描述进行分布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
以上公开的仅为本发明的几个具体实施例,但是,本发明并非局限于此,任何本领域的技术人员能思之的变化都应落入本发明的保护范围。