首页> 中国专利> 使用基于对象的存储设备在文件系统上使用覆盖对象进行故障处理

使用基于对象的存储设备在文件系统上使用覆盖对象进行故障处理

摘要

在阵列中进行数据存储的系统和方法。系统包括连接到存储子系统的客户端,存储子系统包括可作为阵列中的行和列寻址的数据存储位置。每一列都包括单独的存储设备。每一行都包括冗余数据。对于给定行,协调存储设备协调冗余数据的计算和存储。系统检测存储区域的故障,作为响应,配置覆盖存储设备以临时覆盖所述发生故障的区域,维护所述覆盖存储设备和所述发生故障的区域之间的关联,以及,维护在区域处于发生故障的状态时对覆盖存储设备进行的更改的记录。作为对检测到所述发生故障的区域已经恢复的响应,系统使用该关联标识覆盖设备,并使用对覆盖设备进行的更改的记录来使发生故障的区域再同步。

著录项

  • 公开/公告号CN101770408A

    专利类型发明专利

  • 公开/公告日2010-07-07

    原文格式PDF

  • 申请/专利权人 赛门铁克公司;

    申请/专利号CN200910252307.X

  • 发明设计人 G·马修;C·K·哈默;B·拉詹;

    申请日2009-12-02

  • 分类号

  • 代理机构中国国际贸易促进委员会专利商标事务所;

  • 代理人李向英

  • 地址 美国加利福尼亚

  • 入库时间 2023-12-18 00:05:42

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2015-09-09

    授权

    授权

  • 2012-02-15

    实质审查的生效 IPC(主分类):G06F11/10 申请日:20091202

    实质审查的生效

  • 2010-07-07

    公开

    公开

说明书

技术领域

本发明涉及计算机系统,更具体来说,涉及计算机系统内的数据存储子系统。

背景技术

计算机系统常常包括用于存储数据的数据存储子系统。具体来说,包括通过网络互连在一起的多个客户端的计算机系统越来越多地通过网络共享一个或多个数据存储子系统。数据存储子系统可以包括或进一步连接到由一个或多个磁盘存储设备、磁带驱动器或其他存储介质组成的存储器。计算机系统也可以包括一个或多个服务器,在这些服务器中,维护描述所包括的存储设备的内容的元数据。

数据存储子系统可以带有某种冗余地存储数据,以从存储器错误中恢复。有各种冗余地存储数据的技术,包括擦除编码技术,如里德-索罗蒙编码和使用各种布局的RAID(独立磁盘冗余阵列),如RAID-1、RAID-5或RAID-6。这些RAID布局可以在基于对象的文件系统内实现,每一个独立的存储设备都被当作磁盘。每一个客户端设备都可以通过网络向存储设备传输数据。令人遗憾的是,可能需要某种仲裁来自多个客户端的写访问请求的方式,以避免在冗余数据中产生不一致。一种仲裁方法是要求每一个客户端在访问存储位置之前获取一个锁。然而,此方法要求,每一个客户端都负责执行涉及使用锁定机制的序列化写入的全部功能,并被信任。例如,在RAID-5或RAID-6的情况下,这些功能可以包括读取旧数据和旧奇偶校验,计算新的奇偶校验,记录新的数据和新的奇偶校验,并向一起构成了RAID布局中的行的一部分或整个行的它们的相应的存储位置写入新的数据和新的奇偶校验。此外,对于每一个向RAID布局中的单个位置的写入操作,客户端都可能需要从元数据服务器(MDS)检索信息。这些功能的执行延长了写入延迟,并增大了每一个客户端复杂性,并带来了大量的计算和存储开销。

除上面的考虑之外,数据存储子系统被设计为当一个或多个设备发生故障时最小化可能发生的数据的损失。虽然RAID布局旨在提供高可用性和容错,但是,如果客户端负责维护冗余,在复杂的读取或写入操作过程中,设备容易发生故障的可能性会增大。客户端可能不值得信任,或没有足够的资源处理由数据存储子系统中的设备故障所引起的错误。客户端除了面临冗余地存储数据所需的任务,包括处理设备故障给带来负担,某些基于对象的文件系统可能假设,客户端不被信任,并依赖于单个对象存储设备协作地管理冗余。然而,甚至在这样的协作系统中,也需要在处理设备故障时允许继续执行读取和写入操作,而不会丢失数据,并且也不会给系统的客户端带来负担。还进一步需要当发生故障的设备从故障恢复时能够使发生故障的设备再同步,或如果发生故障的设备不能足够快地恢复,完全使更换设备同步,而不会降低存储器的可用性。

考虑到上面的情况,需要能够解决这些问题的用于管理基于对象的数据存储子系统中的设备故障的有效系统和方法。

发明内容

公开了计算机系统和方法的各种实施例。在一个实施例中,计算机系统包括连接到存储子系统的客户端。存储子系统包括可作为阵列中的行和列寻址的多个数据存储位置。阵列的每一列都包括单独的存储设备。阵列的每一行中存储的数据包括至少某些冗余数据。对于阵列中的给定行,协调存储设备协调冗余数据的计算和存储。计算机系统检测包括存储设备的至少一部分的存储区域的故障。作为对检测到故障的响应,计算机系统配置覆盖存储设备以临时覆盖发生故障的区域,维护覆盖存储设备和发生故障的区域之间的关联,并维护在区域处于发生故障的状态时对覆盖存储设备作出的更改的记录。

在进一步的实施例中,作为对检测到发生故障的区域已经恢复的响应,计算机系统使用该关联来标识覆盖存储设备,并使用对覆盖存储设备进行的更改的记录,使发生故障的区域再同步。在更进一步的实施例中,响应于判断区域的故障是永久的,计算机系统使用该关联来标识覆盖存储设备,并将以前存储在发生故障的区域的数据复制到覆盖存储设备。

在进一步的实施例中,阵列中的行利用擦除-编码布局,如镜像布局、RAID-5布局,或RAID-6布局。对于阵列中的给定行,协调存储设备从以向覆盖设备写入数据为目标的客户端接收写入请求,基于从给定行中的非覆盖设备中检索到的旧数据,计算并存储冗余值,并将写入数据转发到至少包括所述覆盖设备的给定行中的设备。此外,对于阵列中的给定行,协调存储设备从以从覆盖设备读取数据为目标的客户端接收读取请求,使用从给定行中的非覆盖设备中检索到的数据,从发生故障的区域重建数据,并将重建的数据返回到客户端。在一个实施例中,由协调存储设备检测包括存储设备的至少一部分的存储区域的故障。

在考虑下列描述以及附图的情况下,这些及其他实施例将变得显而易见。

附图说明

图1显示了计算机系统的一个实施例。

图2是RAID-5数据存储子系统的一个实施例的一般化方框图。

图3是RAID-6数据存储子系统的一个实施例的一般化方框图。

图4是RAID-1数据存储子系统的一个实施例的一般化方框图。

图5说明了用于处理镜像布局中的设备故障的过程的一个实施例。

图6是显示了客户端和镜像布局中的行之间的I/O事务的一个实施例的顺序图。

图7说明了用于处理RAID-5布局中的设备故障的过程的一个实施例。

图8是说明了客户端和RAID-5布局中的部分行之间的读取事务的一个实施例的顺序图,其中,读取操作的目标存储设备包括临时存储设备。

图9是说明了客户端和RAID-5布局中的部分行之间的写入事务的一个实施例的顺序图,其中,写入操作的目标存储设备包括临时存储设备。

图10说明了用于处理RAID-6布局中的设备故障的过程的一个实施例。

图11是说明了客户端和RAID-6布局中的部分行之间的读取事务的一个实施例的顺序图,其中,读取操作的其中一个目标存储设备是临时存储设备,临时存储设备不是奇偶校验存储设备。

图12是说明了客户端和RAID-6布局中的部分行之间的读取事务的一个实施例的顺序图,其中,一个临时存储设备是接收读取请求的奇偶校验存储设备,另一个临时存储设备是读取请求的其中一个目标存储设备。

图13是说明了客户端和RAID-6布局中的部分行之间的写入事务的一个实施例的顺序图,其中,写入操作的目标存储设备包括临时存储设备。

图14显示了在存储设备发生故障的情况下客户端和存储设备布局中的行之间的I/O事务过程中可以使用的过程的一个实施例。

图15说明了可以用来覆盖和恢复存储子系统中的发生故障的存储设备的过程的一个实施例。

图16显示了用于处理镜像布局中的I/O请求的过程的一个实施例,其中,覆盖存储设备以临时覆盖发生故障的存储设备。

图17显示了用于处理RAID-5布局中的I/O请求的过程的一个实施例,其中,覆盖存储设备以临时覆盖发生故障的存储设备。

图18显示了用于处理RAID-6布局中的I/O请求的过程的一个实施例,其中,两个覆盖存储设备临时覆盖发生故障的存储设备。

尽管本发明可以具有各种修改和替代形式,但是,这里将通过图形中的示例显示特定实施例,并进行详细描述。然而,应了解,图形和详细描述不打算将本发明只限于所说明的特定形式,相反地,本发明可以覆盖如所附权利要求所定义的本发明的精神和范围内的所有修改、等效内容和替代方案。

具体实施方式

图1显示了计算机系统100的一个实施例。如图所示,系统100包括通过网络180互连在一起的客户端110、120,以及130,存储子系统150,以及元数据服务器(MDS)160。客户端110、120,以及130是任意数量的静止或移动电脑的代表,如台式PC、工作站、笔记本电脑、手持式电脑、刀片式服务器等等。虽然所描述的系统100包括客户端和服务器,但是,在备选实施例中,由客户端和服务器执行的功能可以由对等网络配置中的对等节点或由客户端、服务器,以及对等节点的组合来执行。

在备选实施例中,客户端、服务器,以及存储设备的数量和类型不仅限于图1中所显示的那些。通过调制解调器库、直接LAN连接、无线连接、WAN链路等等的不同组合,在系统100中可以有几乎任何数量和组合的服务器、台式机,以及移动客户端互连在一起。此外,在各种时间,可以有一个或多个客户端离线操作。此外,在操作过程中,随着移动用户从一处移动到另一处,连接到系统100,与其断开,以及重新连接到系统100,单个客户端连接类型也会变化。

在系统100内,可能希望将与客户端110、120,以及130中的任何一个客户端关联的数据存储在存储子系统150内。子系统150可以包括单个存储设备151-155。存储设备151-155可以是诸如硬盘、服务器刀片,或专业化设备之类的各种设备中的任何一个设备,并可以包括各种存储器设备,如RAM、Flash RAM、MEMS(微型机电系统)存储器、带蓄电池后备电源的RAM,和/或非易失性RAM(NVRAM)等等。客户端数据可以以诸如RAID-1、RAID-DP、RAID-5、RAID-6、擦除-编码数据表示方案等等之类的各种已知的布局中的一种存储在存储子系统150内,其中,存储器的可靠性可以通过冗余和/或错误校正功能来提高。描述了存储在存储子系统150中的数据的布局的元数据可以存储在MDS 160中。客户端可以从MDS 160中检索元数据,以便识别存储子系统150内的所需的数据存储位置。在备选实施例中,MDS 160的功能可以由各种组件中的任何一个组件来执行,如卷配置守护进程或其他存储管理进程或服务器,具体情况取决于存储子系统150中的存储设备的类型和布局。

在下面的讨论中,数据可以存储在取决于单个存储设备位置的容量的具有给定大小的条带单元中。这些条带单元可以是数据对象、数据片段、块,或适合于单个存储设备的任何其他数据段。然而,从客户端来看,数据条带单元可以有不同大小。例如,客户端可以向条带单元(大小足以填充以阵列方式排列的许多存储设备中的一行)中的存储子系统传输数据。客户端也可以以小于条带单元的大小传输数据。各种条带布局都是可以的,下面将对其中一些布局进一步进行详细描述。对于存储子系统150内的给定行,其中一个存储设备可以被指定为协调存储设备。在某些实施例中,数据可以无需奇偶校验地进行存储,每一行中的协调存储设备可以协调行中的其他存储设备中的单个条带单元的存储。在涉及冗余布局的其他实施例中,协调存储设备可以协调数据的存储以及协调奇偶校验计算。很多这样的替代方案都是可以的。

现在请参看图2,该图显示了存储子系统150的一个实施例的一般化方框图。在所显示的实施例中,存储子系统150包括按RAID-5布局方式排列的存储设备210、220、230、240和250。每一个存储设备210、220、230、240,以及250包括诸如随机存取存储器(RAM)之类的一组临时存储设备215、225、235、245,以及255中的对应的一个。在一个实施例中,存储设备215、225、235、245,以及255可以包括非易失性RAM(NVRAM)。数据可以存储在存储设备中的成排地分为条状的条带单元中。在各种RAID-5实施例中,在每一行中都可以有一个奇偶校验存储设备和至少两个数据存储设备,具体情况取决于布局中的存储设备的数量。例如,在所显示的实施例中,一行可以被定义为五个条带单元,每一个条带单元都存储在存储设备210、220、230、240,以及250中的一个存储设备中。数据可以跨行的一部分、完整的行,或多行地分为条状。每一行都可以包括四个数据条带单元和一个奇偶校验条带单元。更具体来说,所显示的实施例中的第一行可以包括分别存储在存储设备210、220、230、240,以及250中的数据条带单元A1、A2、A3,以及A4和奇偶校验条带单元Ap。第二行可以包括数据条带单元B1、B2、B3,以及B4和奇偶校验条带单元Bp。与其中奇偶校验条带单元Ap存储在存储设备250中的第一行不同,奇偶校验条带单元Bp可以存储在存储设备240中,而数据条带单元B1、B2、B3,以及B4可以分别存储在存储设备210、220、230,以及250中。奇偶校验条带单元的位置可以在诸如行C和D等等之类的每一个连续的行上在多个存储设备之间旋转。

在操作过程中,客户端可以将数据写入到给定行中,好像向RAID-0布局中写入。更具体地说,可以告诉客户端,数据被分为条状,以便对于每一个RAID-5行,整行存储在为该行指定的容纳了奇偶校验条带单元的存储设备中,条带大小等于行中的其他、非奇偶校验条带单元的组合的大小。然后,客户端可以将整行的数据发送到奇偶校验存储设备。然后,奇偶校验存储设备可以根据下面将比较详细地描述的进程,将数据的一个或多个部分转发到给定行中的组件数据存储设备。每一个存储设备都可以将奇偶校验或数据存储在其关联的RAM中,直到计算出新的奇偶校验,此时,可以提交写入操作,可以从RAM向关联的条带单元位置传输数据和奇偶校验。在数据和奇偶校验条带单元被存储在RAM中之后但是在数据和奇偶校验从RAM传输到关联的条带单元位置之前,存储子系统可以将写入完成消息返回到客户端,最小化了写入延迟。可以通过一系列写入操作,写入大于单一行的容量的数据集,每一个写入操作都具有一行或稍小的宽度,并且每一个写入操作都发给其相应的行中的对应的奇偶校验存储设备。

可以按类似的方式处理读取操作。例如,读取请求也可以从客户端发送到给定行中的奇偶校验存储设备。如果被请求的数据存储在与奇偶校验存储设备关联的RAM中,则可以检索数据,并响应请求,将数据直接发送到客户端。如果被请求的数据位于构成该行的一个或多个其他存储设备上,则奇偶校验存储设备可以将对应的读取请求传输到布局中的每一个存储设备,作为回报,接收被请求的数据的一部分。然后,奇偶校验存储设备可以将数据组合起来,将它返回到发出请求的客户端。如果数据的一个或多个部分位于已经发生故障的存储设备上,则奇偶校验存储设备可以从构成该行的足够数量的其余存储设备中检索数据,然后使用可用的数据和奇偶校验重建缺失的数据。

下面将描述许多错误恢复情况。在奇偶校验存储设备之外的存储设备发生故障的情况下,奇偶校验存储设备可以检测故障,并向MDS发送消息,以报告设备故障。或者,奇偶校验存储设备可以向客户端发送错误消息,代替写入完成消息。作为响应,客户端可以与MDS进行接触,以报告错误。在从客户端或从奇偶校验存储设备接收到错误消息时,MDS可以选择新的存储设备以覆盖发生故障的设备,并基于存储在其余存储设备中的数据,使条带的内容被重建。如果在行中的全部设备已经接收到并存储了数据的它们的相应的那些部分之前设备发生故障,则可以从奇偶校验存储设备获得写入数据的完整的副本,以完成写入操作。

在奇偶校验存储设备发生故障的情况下,MDS可以通过诸如轮询等等传统技术来识别奇偶校验存储设备的故障,并选择新的存储设备来覆盖它。新的奇偶校验存储设备可以通过从其他存储设备读取数据并将所产生的值存储在新的存储位置,来重新计算奇偶校验值。在某些实施例中,可以由诸如MDS之类的另一个设备进行奇偶校验重新计算。

图3是存储子系统150的备选实施例的详细方框图。在所显示的实施例中,数据可以作为条带单元存储在存储子系统150中。存储子系统150包括按RAID-6布局方式排列的存储设备310、320、330、240、350,以及360。每一个存储设备310、320、330、340、350和360都包括诸如随机存取存储器(RAM)之类的一组临时存储设备315、325、335、345、355,以及365中的对应的一个。在一个实施例中,存储设备315、325、335、345、355,以及365可以包括Flash RAM、MEMS(微型机电系统)存储器、带蓄电池后备电源的RAM、非易失性RAM(NVRAM),或其他永久性存储设备。数据可以在存储设备上成排地跨条带单元地分为条状。

在各种RAID-6实施例中,在每一行中都可以有两个奇偶校验条带单元和至少两个数据条带单元,具体情况取决于布局中的存储设备的数量。例如,在所显示的实施例中,一行可以被定义为六个条带单元,每一个条带单元都存储在存储设备310、320、330、340、350,以及360中的一个存储设备中。数据可以跨行的一部分、完整的行,或多行地分为条状。每一行都可以包括四个数据条带单元和两个奇偶校验条带单元。更具体来说,所显示的实施例中的第一行可以包括分别存储在存储设备310、320、330、340、350,以及360中的数据条带单元A1、A2、A3,以及A4和奇偶校验条带单元Ap和Aq。第二行可以包括数据条带单元B1、B2、B3,以及B4和奇偶校验条带单元Bp和Bq。与其中奇偶校验条带单元Ap可以存储在存储设备350以及Aq可以存储在存储设备360中的第一行不同,奇偶校验条带单元Bp可以存储在存储设备340中以及Bq可以存储在存储设备350中,而数据条带单元B1、B2、B3,以及B4可以分别存储在存储设备310、320、330,以及360中。奇偶校验存储设备的位置可以在诸如行C和D等等之类的每一个连续的行上在多个存储设备之间旋转。

在写入操作过程中,客户端可以将数据写入到给定行中,好像向RAID-0布局中写入。更具体地说,可以告诉客户端,数据被分为条状,以便对于每一个RAID-6行,整行存储在为该行指定的主奇偶校验存储设备中(上面用下标字母“p”表示),客户端条带单元等于行中的其他、非奇偶校验条带单元的组合的大小。然后,客户端可以将整行的数据发送到主奇偶校验存储设备。然后,主奇偶校验存储设备可以根据下面将比较详细地描述的进程,将数据转发到给定行中的组件数据存储设备和次要奇偶校验存储设备(上面用下标字母“q”表示)。每一个存储设备都可以将奇偶校验和/或数据存储在其关联的RAM中,直到计算出新的奇偶校验,此时,可以提交写入操作,可以从RAM向关联的存储设备传输数据和奇偶校验。在数据和奇偶校验条带单元被存储在RAM中之后但是在数据和奇偶校验从RAM传输到关联的存储设备之前,存储子系统可以将写入完成消息返回到客户端,最小化了写入延迟。可以通过一系列写入操作,写入大于单一行的容量的数据集,每一个写入操作都具有一行或稍小的宽度,并且每一个写入操作都发给其相应的行中的对应的主奇偶校验存储设备。

可以按类似的方式处理读取操作。例如,读取请求也可以从客户端发送到给定行中的主奇偶校验存储设备。如果被请求的数据存储在与主奇偶校验存储设备关联的RAM中,则可以检索数据,并响应请求,将数据直接发送到客户端。如果被请求的数据位于构成该行的一个或多个其他存储设备上,则主奇偶校验存储设备可以将对应的读取请求传输到布局中的每一个存储设备,作为回报,接收被请求的数据的一部分。然后,主奇偶校验存储设备可以将数据组合起来,将它返回到发出请求的客户端。如果数据的一个或多个部分位于已经发生故障的存储设备上,则主奇偶校验存储设备可以从构成该行的足够数量的其余存储设备中检索数据,然后使用可用的数据和奇偶校验重建缺失的数据。请注意,在具有大量的冗余RAID-6及其他布局的情况下,可能不需要从全部数据和奇偶校验存储单元中检索数据;某些数据部分的子集可以足够重建缺失的数据。

图4是存储子系统150的再一个备选实施例的详细方框图。在所显示的实施例中,数据可以作为条带单元存储在存储子系统150中。存储子系统150包括按RAID-1布局方式排列的存储设备410和420。在所显示的实施例中,显示了两个存储设备,虽然在备选RAID-1布局中,也可以使用两个以上的存储设备,以提高冗余度。每一个存储设备410和420都包括诸如随机存取存储器(RAM)之类的一组临时存储设备415和425中的对应的一个。在一个实施例中,存储设备415和425可以包括闪存RAM、MEMS(微型机电系统)存储器、带蓄电池后备电源的RAM、非易失性RAM(NVRAM),或其他永久性存储设备。数据可以在存储设备410和420之间形成镜像。数据可以存储在行的一部分、完整的行,或多行中。每一行都可以包括主数据条带单元和次要条带单元。例如,所显示的实施例中的第一行可以包括存储在存储设备410中的数据条带单元A1和存储在存储设备420中的数据条带单元A2。第二行可以包括存储在存储设备410中的数据条带单元B1和存储在存储设备420中的数据条带单元B2等等。主数据存储设备的位置可以在存储设备之间更换,如对于使存储设备410和420分担存储主数据条带单元的职责的每一个连续的行或任何其他模式而交替。

在操作过程中,可以告诉客户端,数据被分为条状,以便对于每一行数据,数据存储在该行的主设备中。客户端可以向主数据存储设备发送数据。然后,主数据存储设备可以将数据转发到给定行中的辅助数据存储设备。每一个存储设备都可以将数据存储在其关联的RAM中,直到条带单元准备还被提交,提供将存储设备中的多个写入请求排序的机会。在数据条带单元被存储在RAM中之后但是在数据从RAM传输到关联的存储设备之前,存储子系统可以将写入完成消息返回到客户端,最小化了写入延迟。可以通过一系列写入操作,写入大于单一行的容量的数据集,每一个写入操作都具有一行或稍小的宽度,并且每一个写入操作都发给其相应的行中的对应的主数据存储设备。对本领域技术人员显而易见的是,通过主数据存储设备,可以类似地协调读取操作。

在存储子系统150的再进一步的实施例中,可以使用擦除-编码方法。例如,在里德-索罗蒙码方案中,协调存储设备可以对K块接收到的数据进行计算,以产生M擦除-代码块,以便只需要M块的N块,才能恢复原始数据,其中,N<M,通常,K<N。对本领域技术人员显而易见的是,还有很多其他合适的冗余或擦除-编码的存储方案。在2007年9月28日发明人George Mathew、CraigHarmer、Oleg Kiselev,以及Ron Karr提出的标题为“System andMethod of Redundantly Storing and Retrieving Data withCooperating Storage Devices”的指定给本申请的转让人的待审批的美国专利申请序列号No.60/976,302中描述了存储设备150的许多实施例,为各种目的,该申请以引用的方式并入本文中。

上文引用的专利申请包括描述了许多写入事务的顺序图,包括客户端和RAID-1布局、RAID-5布局中的整行或部分行、以及RAID-6布局中的整行或部分行之间的写入。下面呈现的图形和讨论基于那些顺序图,并描述了各种RAID布局的许多读取和写入错误情况。

在镜像布局中,可能会发生许多错误情况。例如,如果包括MDS的整个存储系统宕机,作为对向存储设备发送I/O请求的响应,客户端可能接收到错误。更具体地说,客户端可能对于其向存储设备的I/O请求接收到超时错误,并可能试图联系MDS,以获取新的布局。当客户端试图联系MDS以获取新的布局时,它可能为布局请求接收到超时,因为MDS也不可用。此时,客户端请求可能会失败,产生I/O错误。

或者,如果只是存储设备发生故障,则作为对向第一存储设备发送数据的响应,客户端可能接收到错误。存储设备可能临时发生故障,如由于网络分隔或重新启动操作,或由于硬件出故障等等而永久地发生故障。不论是哪一种情况,作为对向发生故障的存储设备发送I/O请求的响应,客户端都可以接收到超时错误。一旦客户端获得超时错误,它可以向MDS发送标识布局图和给出错误的对象的消息。此时,MDS可以开始发生故障的存储设备的错误恢复,并向客户端返回新的布局。

在进一步的备选方案中,作为对由于一个或多个目的地存储设备可能不可用而向其他存储设备转发数据的响应,存储设备可能接收到错误。转发了数据的存储设备,而不是如在前一示例中客户端,可以向MDS发送消息。一旦MDS执行恢复过程,则接收到错误的存储设备可以重试失败的操作。

现在请参看图5,该图显示了用于处理镜像布局中的设备故障的过程500的一个实施例。在所显示的实施例中,显示了连接到包括数据存储设备501-503和临时存储设备504的行的客户端510。设备501-503可以被配置为三路镜像布局。在所显示的实施例中,为便于理解,显示的设备501-504中的每一个都是单独的设备。然而,在备选实施例中,每一个设备都代表存储对象,多个存储对象都可以位于单一物理存储设备上。假设数据大小等于一行的容量。过程500可以以客户端510和存储设备501-503之间的I/O序列开始(方框520),在一个实施例中,这些序列可以遵循在上文引用的专利申请中呈现的序列,直到设备发生故障。作为示例,假设设备501发生了故障(方框530)。作为对设备故障的响应,可以向镜像布局中添加临时存储设备504(方框540)。可以给临时设备504分配指向设备501的克隆属性。随后,从客户端510指向包括设备501的存储器的I/O序列(方框550)可以继续进行,根据下面进一步描述的过程,设备504覆盖设备501。从客户端510的观点来看,设备504覆盖布局中的设备501,布局的其他方面保持不变。临时设备504可以被配置为跟踪修改最初存储在设备501中的数据的写入操作。作为进一步的示例,假设在某个时间点,设备501可以被恢复(方框560)。因此,可以说,设备504覆盖设备501,而不是替换设备501。作为对设备501被恢复的响应,可以进行再同步过程570,其中,在设备501不可用时已经存储在设备504中的数据被复制到设备501中。随后,根据在方框520中所使用的过程,客户端510和存储设备之间的I/O序列(方框580)可以恢复。在备选实施例中,I/O序列可以在完成再同步过程570之前恢复。如果请求了指向设备501的还没有被再同步的区域,则该I/O操作可以延迟,直到对于目标区域,完成了再同步。值得注意的是,在备选实施例中,上文所描述的某些步骤可以彼此并行地执行或以与所显示的顺序不同的顺序执行。

虽然在上面的描述中,假设发生故障的设备最终被恢复,可以操作,但是,在某些情况下,故障可能持续很长时间,恢复和数据再同步不切实际。在这样的情况下,可以将临时设备提升到永久状态,替换布局中的发生故障的设备。根据需要,在预定时间长度之后或由于某些其他原因,如配额故障、enospace故障等等,提升临时设备的决定可以由MDS作出。一旦临时设备被提升,则指向临时设备中的地址的写入事务可以使数据存储在现在已提升的设备中。此外,指向现在已提升的设备中的地址的读取事务可以使数据被缓存在其中。经过一段时间以后,随着镜像布局的数据被重建,现在已提升的设备可以与发生故障的设备再同步。再同步过程可以以惰性的方式进行,而不要求随后的文件I/O操作等待。

在故障使覆盖设备被添加到镜像布局之后,如果读取事务指向非发生故障的存储设备,则它可以被处理得好像从来没有发生故障一样。图6中显示了其他情况,该图是显示了客户端和镜像布局中的行之间的I/O事务的一个实施例的顺序图。在所显示的实施例中,如在图5中那样,显示了连接到包括数据存储设备501-503和临时存储设备504的行的客户端510。在时间t0,客户端510可以通过向横跨发生故障的设备503的目标地址发送读取请求620,来开始读取事务。客户端510不必意识到行的单个组件。相反,客户端510可以向协调存储设备传输请求。协调存储设备可以从元数据服务器获取数据存储器的布局,包括行的大小和现在被临时设备504覆盖的目标对象的位置,并将请求传输到目标对象。或者,客户端510可以从元数据服务器获取数据存储器的布局,包括行的大小和现在被临时设备504覆盖的目标对象的位置。一旦存储设备504接收到读取请求,在时间t1,设备504可以将读取请求622转发到另一个存储设备,因为被请求的数据不存储在临时存储设备中。在时间t2,存储设备502可以向设备504传输返回数据623,而设备504可以通过将数据作为返回数据624转发到客户端510,在时间t3作出响应,完成读取事务。值得注意的是,在备选实施例中,上文所描述的某些步骤可以彼此并行地执行或以与所显示的顺序不同的顺序执行。

在时间t4,客户端510可以通过向横跨发生故障的设备503的对象地址发送写入请求630,开始写入事务。客户端510不必意识到行的单个组件。相反,客户端510可以向协调存储设备传输请求。协调存储设备可以从元数据服务器获取数据存储器的布局,包括行的大小和现在被临时设备504覆盖的目标对象的位置,并将请求传输到目标对象。或者,客户端510可以从元数据服务器获取数据存储器的布局,包括行的大小和现在被临时设备504覆盖的目标对象的位置。一旦存储设备504接收到写入请求,它可以将接收到的数据存储在RAM中,在时间t5和t6,设备504可以分别将写入请求632和634(包括写入数据的副本)转发到镜像布局中的其他存储设备。存储设备502可以接收写入请求632,作为响应,在t7,将接收到的数据存储在RAM中,并向设备504传输确认636。存储设备501可以接收写入请求634,作为响应,在t8,将接收到的数据存储在RAM中,并向设备504传输确认638。一旦设备504从镜像布局中的所有活动设备接收到了确认,在t9,确认639可以被传输到客户端510。值得注意的是,写入完成确认639可能不会被发送到客户端,直到由数据存储设备接收到新的数据并确认。这确保了数据被冗余地存储,并可以在任何单一设备发生故障的情况下恢复。随后,设备501、502,以及504中的每一个都可以在t10将存储的数据从RAM传输到磁盘,完成写入事务。值得注意的是,在备选实施例中,上文所描述的某些步骤可以彼此并行地执行或以与所显示的顺序不同的顺序执行。

在时间t11,客户端510可以通过向其位置在设备502中的对象地址发送写入请求650,开始第二写入事务。客户端510不必意识到行的单个组件。一旦存储设备502接收到写入请求,它可以将接收到的数据存储在RAM中,在时间t12和t13,设备502可以分别将写入请求652和654(包括写入数据的副本)转发到镜像布局中的其他存储设备。存储设备501可以接收写入请求652,作为响应,在t14,将接收到的数据存储在RAM中,并向设备502传输确认656。存储设备502可以接收写入请求654,作为响应,在t15,将接收到的数据存储在RAM中,并向设备502传输确认658。一旦设备502从镜像布局中的所有活动设备接收到了确认,在t16,确认659可以被传输到客户端510。随后,设备501、502,以及504中的每一个都可以在t17将存储的数据从RAM传输到磁盘,完成写入事务。值得注意的是,在备选实施例中,上文所描述的某些步骤可以彼此并行地执行或以与所显示的顺序不同的顺序执行。

现在请参看图7,该图显示了用于处理RAID-5布局中的设备故障的过程700的一个实施例。在所显示的实施例中,显示了客户端710连接到包括数据存储设备701-704、奇偶校验存储设备705,以及临时存储设备706的行。在所显示的实施例中,为便于理解,显示的设备701-706中的每一个都是单独的设备。然而,在备选实施例中,每一个设备都代表存储对象,多个存储对象都可以位于单一物理存储设备上。假设数据大小等于一行的容量。过程700可以以客户端710和存储设备701-705之间的I/O序列开始(方框720),在一个实施例中,这些序列可以遵循在上文引用的专利申请中呈现的序列,直到设备发生故障。作为示例,假设设备704发生了故障(方框730)。作为对设备故障的响应,可以向RAID-5布局中添加临时存储设备706(方框740)。可以给临时设备706分配指向设备704的克隆属性。随后,从客户端710指向包括设备704的存储器的I/O序列(方框750)可以继续进行,根据下面进一步描述的过程,设备706替换设备704。从客户端710的观点来看,设备706覆盖布局中的设备704,布局的其他方面保持不变。临时设备706可以被配置为跟踪修改最初存储在设备704中的数据的写入操作。作为进一步的示例,假设在某个时间点,设备704可以被恢复(方框760)。作为对设备704被恢复的响应,可以进行再同步过程770,其中,在设备704不可用时已经存储在设备706中的数据被复制到设备704中。随后,根据在方框720中所使用的过程,客户端710和存储设备之间的I/O序列(方框780)可以恢复。在备选实施例中,I/O序列可以在完成再同步过程770之前恢复。值得注意的是,在备选实施例中,上文所描述的某些步骤可以彼此并行地执行或以与所显示的顺序不同的顺序执行。

虽然在上面的描述中,假设发生故障的设备最终被恢复,可以操作,但是,在某些情况下,故障可能持续很长时间,恢复和数据再同步不切实际。在这样的情况下,可以将临时设备提升到永久状态,替换布局中的发生故障的设备。根据需要,在预定时间长度之后或由于某些其他原因,如配额故障、enospace故障等等,提升临时设备的决定可以由MDS作出。一旦临时设备被提升,则指向临时设备中的地址的写入事务可以使数据存储在现在已提升的设备中。此外,指向现在已提升的设备中的地址的读取事务可以使数据被缓存在其中。经过一段时间以后,随着RAID-5布局的数据和奇偶校验被重建,现在已提升的设备可以与发生故障的设备再同步。再同步过程可以以惰性的方式进行,而不要求随后的文件I/O操作等待。

在RAID-5布局中,可能会发生许多错误情况。例如,如果包括MDS的整个存储系统宕机,作为对向奇偶校验存储设备发送I/O请求的响应,客户端可能接收到错误。更具体地说,客户端可能对于其向奇偶校验存储设备的I/O请求接收到超时错误,并可能试图联系MDS,以获取新的布局。当客户端试图联系MDS以获取新的布局时,它可能为布局请求接收到超时,因为MDS也不可用。此时,客户端请求可能会失败,产生I/O错误。

或者,如果只有奇偶校验存储设备发生故障,则作为对向奇偶校验存储设备发送数据的响应,客户端可能接收到错误。奇偶校验存储设备可能临时发生故障,如由于网络分隔或重新启动操作,或由于硬件出故障等等而永久地发生故障。不论是哪一种情况,作为对向发生故障的奇偶校验存储设备发送I/O请求的响应,客户端都可以接收到超时错误。一旦客户端获得超时错误,它可以向MDS发送标识布局图和给出错误的对象的消息。此时,MDS可以开始发生故障的奇偶校验存储设备的错误恢复,并向客户端返回新的布局。

在进一步的备选方案中,作为对由于一个或多个目的地存储设备可能不可用而向其他存储设备转发数据的响应,奇偶校验存储设备可能接收到错误。转发了数据的奇偶校验存储设备,而不是如在前一示例中客户端,可以向MDS发送消息。一旦MDS执行恢复过程,则接收到错误的奇偶校验存储设备可以重试失败的操作。在更进一步的备选方案中,如果在完成复制操作之前一个或多个设备发生故障,则在成功地将数据传输到其他存储设备之后但是在设备将数据复制到磁盘之前,奇偶校验存储设备可以接收到错误。在此情况下,除联系MDS以获取新的布局之外,一旦标识了覆盖存储设备,奇偶校验存储设备可以向覆盖存储设备传输新的数据。

可以对于RAID-5布局中包括的一个临时存储设备,继续读取事务。例如,如果读取操作指向其中奇偶校验存储设备是临时存储设备的行,则可以通过由临时存储设备将请求转发到目标存储设备来完成读取事务。或者,如果客户端向奇偶校验存储(不是临时存储设备)发送读取请求,并且读取操作的目标存储设备不包括临时存储设备,则奇偶校验存储设备可以将读取操作转发到目标存储设备。在进一步的备选方案中,如果读取操作的目标存储设备包括临时存储设备,则读取事务可以遵循如图8所描述的序列。

图8是说明了客户端和RAID-5布局中的部分行之间的读取事务的一个实施例的顺序图,其中,读取操作的目标存储设备包括临时存储设备。在所显示的实施例中,显示了客户端710从包括数据存储设备701-704、奇偶校验存储设备705,以及临时覆盖存储设备706的行读取数据。假设数据大小小于一行的容量。在时间t0,客户端710可以通过向为目标行标识的奇偶校验存储设备(将从其中读取数据,在所显示的示例中,是奇偶校验存储设备705)发送读取请求810来开始读取事务。一旦存储设备705接收到读取请求,在时间t1、t2,以及t3,设备705可以将读取请求811、812,以及813分别转发到存储设备701、703和704,以便代表临时存储设备706,重建存储在发生故障的存储设备702中的数据。在时间t4、t5,以及t6,存储设备701、703,以及704分别可以将响应821、822,以及823分别传输到包括这样的数据的奇偶校验存储设备705,利用奇偶校验存储设备705中的这些数据,可以重建存储在发生故障的存储设备702中的数据。在时间t7,奇偶校验存储设备705可以为临时设备706重建数据(方框830)。在时间t8,奇偶校验存储设备705可以向客户端710发送响应840,完成读取事务。值得注意的是,在备选实施例中,上文所描述的某些步骤可以彼此并行地执行或以与所显示的顺序不同的顺序执行。

也可以对于RAID-5布局中包括的一个临时存储设备,继续写入事务。例如,如果写入操作指向RAID-5布局中的完整的行,则数据可以被写入到行中的每个存储设备。临时存储设备可以用与其他存储设备相同的方式保存新的数据。临时奇偶校验存储设备可以存储新的数据,也可以与其他存储设备一样,计算并存储新的奇偶校验值。没有指向临时存储设备的部分条带写入操作可以照常进行。然而,指向临时存储设备的部分条带写入操作可以根据图9中所显示的序列进行。

图9是说明了客户端和RAID-5布局中的部分行之间的写入事务的一个实施例的顺序图,其中,写入操作的目标存储设备包括临时存储设备。在时间t0,客户端710可以通过向奇偶校验存储设备705发送目标是向存储设备703和706进行写入的写入请求910,来开始写入事务。一旦奇偶校验存储设备705接收到写入请求,它可以将接收到的数据存储在RAM中(在时间t1,方框920),在时间t2,将包括写入数据的副本的写入请求921转发到存储设备703。存储设备703可以接收写入请求921,作为响应,在t3,将接收到的数据存储在RAM中,并向设备705传输确认922,包括将被写入事务修改的旧数据的副本。设备705可以存储从设备703接收到的旧数据,用于计算新的奇偶校验值。在时间t5和t6,设备705可以分别向设备701和704发送对旧数据941和942的请求。设备701和704分别作为响应943在时间t7以及响应944在时间t8向设备705返回旧数据。设备705可以分别在时间t9和时间t10通过确认945和946向设备701和704确认收到旧数据。在时间t11,设备705可以向设备703发送确认,设备703可以通过向磁盘中写入存储在RAM中的新的数据来作出响应。设备705也可以使用其旧奇偶校验值和从设备701、703,以及704接收到的旧数据值,计算新的奇偶校验值,并将他们存储在RAM中(方框970)。在计算出新的奇偶校验值之后,在时间t12,设备705可以在写入请求980中向临时存储设备706发送新的写入数据。设备706可以在时间t13以确认985作出响应,当在时间t14收到确认985之后,设备705可以向磁盘写入新的奇偶校验值(方框990),而设备706可以向磁盘写入新的数据值(方框995),完成写入事务。在时间t14,设备705可以向客户端710传输确认(未显示),表明完成了写入事务。值得注意的是,在备选实施例中,上文所描述的某些步骤可以彼此并行地执行或以与所显示的顺序不同的顺序执行。

现在请参看图10,该图显示了用于处理RAID-6布局中的设备故障的过程1000的一个实施例。在所显示的实施例中,显示了客户端1010连接到包括奇偶校验存储设备1001和1002,数据存储设备1003-1005,以及临时存储设备1006和1007的行。在所显示的实施例中,为便于理解,显示的设备1001-1007中的每一个都是单独的设备。然而,在备选实施例中,每一个设备都代表存储对象,多个存储对象都可以位于单一物理存储设备上。假设数据大小等于一行的容量。过程1000可以以客户端1010和存储设备1001-1005之间的I/O序列开始(方框1020),在一个实施例中,这些序列可以遵循在上文引用的专利申请中呈现的序列,直到设备发生故障。作为示例,假设设备1003发生了故障(方框1030)。作为对设备故障的响应,可以向RAID-6布局中添加临时存储设备1006(方框1035)。可以给临时设备1006分配指向设备1003的克隆属性。随后,从客户端1010指向包括设备1003的存储器的序列(方框1040)可以继续进行,根据下面进一步描述的类似于RAID-5布局中所使用的过程的过程,设备1006替换设备1003。从客户端1010的观点来看,设备1006覆盖布局中的设备1003,布局的其他方面保持不变。临时设备1006可以被配置为跟踪修改最初存储在设备1003中的数据的写入操作。继续所显示的示例,假设在某个时间点,可能发生第二设备故障(方框1050),在此情况下,设备1004发生故障。作为对设备故障的响应,可以向RAID-6布局中添加第二临时存储设备1007(方框1055)。可以给临时设备1007分配指向设备1004的克隆属性。随后,从客户端1010指向包括设备1004的存储器的序列(方框1060)可以继续进行,根据下面进一步描述的过程,设备1007替换设备1004。随后,设备1003和/或1004可以恢复,可以作为响应,执行类似于上文针对镜像布局和RAID-5布局所描述的过程的再同步过程。或者,可以将临时设备提升到永久状态,替换布局中的发生故障的设备。

在RAID-6布局中,可能发生类似于在RAID-5布局中遇到的那样的错误情况。然而,I/O事务也可以继续,直到RAID-6布局中包括的两个临时存储设备。例如,如果读取操作指向其中两个奇偶校验存储设备都是临时存储设备的行,则可以通过由其中一个临时存储设备将请求转发到目标存储设备来完成读取事务。或者,如果只有一个临时存储设备是奇偶校验存储设备,并且它接收到读取请求,则它可以将读取请求转发到没有被临时存储设备覆盖的任何目标存储设备。此外,如果两个临时存储设备都是目标非奇偶校验存储设备,则读取事务可以遵循如图11所描述的序列。如果其中一个临时存储设备是接收到读取请求的奇偶校验存储设备,并且目标存储设备被临时存储设备覆盖,则读取事务可以遵循如图12所描述的序列。

图11是说明了客户端和RAID-6布局中的部分行之间的读取事务的一个实施例的顺序图,其中,读取操作的其中一个目标存储设备是临时存储设备,临时存储设备不是奇偶校验存储设备。在所显示的实施例中,显示了客户端1010从包括数据存储设备1001-1003、奇偶校验存储设备1004和1005,以及临时覆盖存储设备1006和1007的行读取数据。假设读取请求指向设备1003和1006。在时间t0,客户端1010可以通过向为目标行标识的奇偶校验存储设备(将从其中读取数据,在所显示的示例中,是奇偶校验存储设备1004)发送读取请求1120来开始读取事务。一旦存储设备1004接收到读取请求,在时间t1和t2,设备1004可以将读取请求1221和1222分别转发到存储设备1005和1003,以便代表临时存储设备1006,重建存储在发生故障的存储设备1002中的数据。在时间t3和t4,存储设备1005和1003分别可以将响应1123和1124分别传输到包括这样的数据的奇偶校验存储设备1004,利用奇偶校验存储设备1004中的这些数据,可以重建存储在发生故障的存储设备1002中的数据。在时间t5,奇偶校验存储设备1004可以为临时设备1006重建数据(方框1130)。在时间t5,奇偶校验存储设备1004可以向客户端1010发送响应1140,完成读取事务。

图12是说明了客户端和RAID-6布局中的部分行之间的读取事务的一个实施例的顺序图,其中,一个临时存储设备是接收读取请求的奇偶校验存储设备,另一个临时存储设备是读取请求的其中一个目标存储设备。

在所显示的实施例中,显示了客户端1010从包括数据存储设备1001-1003、奇偶校验存储设备1004和1005,以及临时覆盖存储设备1006和1007的行读取数据。假设读取请求指向设备1002和1007。在时间t0,客户端1010可以通过向为目标行标识的奇偶校验存储设备(将从其中读取数据,在所显示的示例中,是临时奇偶校验存储设备1006)发送读取请求1220来开始读取事务。一旦存储设备1006接收到读取请求,在时间t1、t2,以及t3,设备1006可以将读取请求1221、1222,以及1223分别转发到存储设备1002、1003和1004,以便代表临时存储设备1007,重建存储在发生故障的存储设备1001中的数据。在时间t4、t5,以及t6,存储设备1002、1003,以及1004分别可以将响应1224、1225,以及1226分别传输到这样的数据的奇偶校验存储设备1006,利用奇偶校验存储设备1006中的这些数据,可以重建存储在发生故障的存储设备1001中的数据。在时间t7,奇偶校验存储设备1006可以为临时设备1007重建数据(方框1230)。在时间t8,奇偶校验存储设备1006可以向客户端1010发送响应1240,完成读取事务。值得注意的是,在备选实施例中,上文所描述的某些步骤可以彼此并行地执行或以与所显示的顺序不同的顺序执行。

写入事务也可以继续,直到RAID-6布局中包括的两个临时存储设备。例如,如果写入操作指向RAID-6布局中的完整的行,则数据可以被写入到行中的每个存储设备。临时存储设备可以用与其他存储设备相同的方式保存新的数据。临时奇偶校验存储设备可以存储新的数据,也可以与其他存储设备一样,计算并存储新的奇偶校验值。没有指向临时存储设备的并且不被发送到临时奇偶校验存储设备的部分条带写入操作可以照常进行。然而,指向临时存储设备的部分条带写入操作可以根据图13中所显示的序列进行。

图13是说明了客户端和RAID-6布局中的部分行之间的写入事务的一个实施例的顺序图,其中,写入操作的目标存储设备包括临时存储设备。在时间t0,客户端1010可以通过向奇偶校验存储设备1004发送目标是向存储设备1002和1007进行写入的写入请求1320,来开始写入事务。一旦奇偶校验存储设备1004接收到写入请求,它可以将接收到的数据存储在RAM中(在时间t1,方框1325),在时间t2,将包括写入数据的副本的写入请求1331转发到存储设备1002。存储设备1002可以接收写入请求1331,作为响应,在t3,将接收到的数据存储在RAM中,并向设备1004传输确认1333。设备1004也可以在时间t4将包括写入数据的副本的写入请求1341转发到临时存储设备1007。存储设备1007可以接收写入请求1341,作为响应,在t5,将接收到的数据存储在RAM中,并向设备1004传输确认1343。在从两个设备1002和1007接收到确认之后,设备1004可以在时间t6向客户端1010传输写入完成响应1350。在时间t7,设备1002可以作为响应1335,向设备1004返回旧数据,用于计算新的奇偶校验值。在时间t8,设备1004可以向设备1003发送对旧数据1361的请求。在时间t9,作为响应1363,设备1003可以向设备1004返回旧数据。设备1004可以存储从设备1002和1003接收到的旧数据,用于计算新的奇偶校验值。分别在时间t11和t11,通过确认1337和1365,设备1004可以向设备1002和1003确认收到旧数据。作为对从设备1002和1003接收到旧数据的响应,设备1004可以使用其旧奇偶校验值和从设备701、703,以及704接收到的旧数据值,计算新的奇偶校验值,并将他们存储在RAM中(在时间t12,方框1370)。在时间t13,设备1002和1007可以将存储在RAM中的新的数据写入磁盘中(方框1380和1385)。此外,在时间t14,设备1004可以向磁盘中写入新的奇偶校验值(方框1390),完成写入事务。值得注意的是,在备选实施例中,上文所描述的某些步骤可以彼此并行地执行或以与所显示的顺序不同的顺序执行。

图14显示了在存储设备发生故障的情况下客户端和存储设备布局中的行之间的I/O事务过程中可以使用的过程1400的一个实施例。当客户端从MDS请求布局时,过程1400可以开始(方框1410)。发出请求的客户端可以从MDS接收包括布局并标识协调存储设备的响应(方框1420)。一旦已知协调存储设备,则客户端可以向协调设备传输I/O请求(方框1430)。如果作为对I/O请求的响应,客户端接收到系统停机错误(判断方框1440),则I/O事务可以中止(方框1445),完成过程1400(方框1495)。系统停机错误可以表示,例如,包括MDS的存储子系统的大多数或全部不可用。如果相反作为对I/O请求的响应,客户端接收到设备错误,表示,例如,虽然MDS可用,所指出的协调设备不可用(判断方框1450),则客户端可以将设备错误转发到MDS(方框1452)。如果MDS判断覆盖存储设备可用(判断方框1454),则MDS可以向客户端传输新的布局,包括标识覆盖设备的信息(方框1456),过程1400的流程可以返回到方框1430。如果MDS判断覆盖存储设备不可用(判断方框1454),则I/O事务可以中止(方框1490),完成过程1400(方框1495)。

如果作为对I/O请求的响应,客户端没有接收到系统停机错误或设备错误,但是,在I/O事务过程中,向协调设备返回设备错误(判断方框1460),则协调设备可以向发出了I/O请求的设备转发设备错误(方框1470)。有关设备错误的信息也可以转发到发出了I/O请求的设备,如哪一个存储设备产生了错误,发生了什么类型的错误等等。发出了I/O请求的设备可以向MDS转发设备错误(方框1475)。如果MDS判断覆盖存储设备可用(判断方框1480),则MDS可以向协调设备传输新的布局,包括标识覆盖设备的信息(方框1482),I/O事务可以退去(方框1484)。

然后,过程1400可以在方框1460恢复。如果MDS判断覆盖存储设备不可用(判断方框1480),则I/O事务可以中止(方框1490),完成过程1400(方框1495)。如果作为对I/O请求的响应,客户端没有接收到系统停机错误或设备错误,但是,在I/O事务过程中,协调设备没有接收到任何设备错误(判断方框1460),则可以执行事务(方框1465),完成过程1400(方框1495)。

图15说明了可以用来覆盖和恢复存储子系统中的发生故障的存储设备的过程1500的一个实施例。过程1500可以以发生了存储设备错误的通知开始(方框1510)。例如,MDS可以从客户端或者存储子系统中的其中一个存储设备接收到与存储设备的通信不可用的通知。作为对设备错误通知的响应,可以分配临时覆盖设备,覆盖发生故障的存储设备(方框1520)。一旦分配了覆盖设备,则通过向发出请求的客户端或设备传输包括覆盖设备的新的范围,响应I/O操作过程中的对存储范围的请求(方框1530)。随后的I/O操作可以包括覆盖设备代替发生故障的设备(方框1540)。如果发生故障的设备被恢复(判断方框1550),则可以从覆盖设备使其再同步(方框1555)。更具体地说,通过写入操作被修改的覆盖设备的区域可以被用作被恢复的设备中的要更新的区域的日志。例如,在一个实施例中,覆盖设备可以被用作新恢复的设备的脏区域日志(DRL)。一旦新恢复的设备被再同步,则可以恢复存储子系统的故障之前的操作(方框1580)。如果发生故障的设备没有恢复(判断方框1550)并且故障不被视为永久性的(判断方框1560),则I/O操作可以继续执行,以包括覆盖设备代替发生故障的设备(方框1540)。由于种种原因,故障可以被视为永久性的,如,如果发生故障的设备在预定的时间长度内不可用,如果操作员输入指明,故障是永久性的等等。如果发生故障的设备被认为永久地发生故障,则在存储子系统中可以给覆盖设备分配永久性的状态(方框1570)。作为布局的永久成员,可以在覆盖设备中重新创建存储在发生故障的设备中的数据,并可以恢复存储子系统的故障之前的操作(方框1580)。

图16显示了用于处理镜像布局中的I/O请求的过程1600的一个实施例,其中,覆盖存储设备临时覆盖发生故障的存储设备。当接收到I/O请求时,过程1600可以开始(方框1610)。如果接收到的请求是读取请求(判断方框1620),并且请求不是指向覆盖设备(判断方框1630),则可以从非覆盖设备中检索读取数据(方框1635),完成I/O操作(方框1660)。如果读取请求指向覆盖设备(判断方框1630),则可以将读取请求重定向到镜像设备(方框1640)。然后,可以从镜像设备中检索读取数据(方框1650),完成I/O操作(方框1660)。)如果接收到的请求是写入请求(判断方框1620),则数据可以被写入到布局中的覆盖设备和镜像设备(方框1622)。对覆盖设备进行的更改的记录也可以存储在覆盖设备中(方框1624),万一发生故障的设备随后被恢复,允许再同步发生故障的设备。一旦写入数据已经存储在覆盖设备中,则I/O操作完成(方框1660)。

图17显示了用于处理RAID-5布局中的I/O请求的过程1700的一个实施例,其中,覆盖存储设备临时覆盖发生故障的存储设备。当接收到I/O请求时,过程1700可以开始(方框1710)。如果接收到的请求是读取请求(判断方框1720),并且RAID-5布局中的奇偶校验设备是覆盖设备(判断方框1730),则可以从被寻址的设备中检索读取数据(方框1735),并返回读取数据(方框1756),完成I/O操作(方框1760)。如果奇偶校验设备不是覆盖设备,并且读取请求不指向包括覆盖设备的区域(判断方框1740),则可以从非覆盖设备中检索读取数据(方框1745),并返回读取数据(方框1756),完成I/O操作(方框1760)。如果读取请求指向包括覆盖设备的区域(判断方框1740),则可以从布局中的所有非覆盖存储设备中检索数据(方框1750)。然后,可以从检索到的数据重建发生故障的设备中的数据(方框1752),计算并存储新的奇偶校验值(方框1754),返回读取数据(方框1756),完成I/O操作(方框1760)。

如果接收到的请求是写入请求(判断方框1720),并且如果写入请求指向完全条带(判断方框1770),则数据可以被写入到行中的所有存储设备(方框1775),完成I/O操作(方框1760)。如果写入请求指向部分行,不是修改覆盖设备的请求(判断方框1780),则数据可以存储在非覆盖设备中,计算并存储新的奇偶校验值(方框1795),完成I/O操作(方框1760)。如果写入请求指向部分行,并且是修改覆盖设备的请求(判断方框1780),则写入数据可以存储在奇偶校验设备中(方框1782),并转发到覆盖设备之外的所有目标设备(方框1784)。然后,可以读取行中的非覆盖设备中的旧数据,并返回到奇偶校验设备(方框1786)。然后,奇偶校验设备可以计算并存储新的奇偶校验值(方框1788),并将新的数据转发到覆盖设备(方框1790)。一旦新的数据已经存储在覆盖设备中,则I/O操作完成(方框1760)。

图18显示了用于处理RAID-6布局中的I/O请求的过程1800的一个实施例,其中,两个覆盖存储设备临时覆盖发生故障的存储设备。值得注意的是,RAID-6布局中的单一设备故障可以以与RAID-5布局中的设备故障同样的方式处理。当接收到I/O请求时,过程1800可以开始(方框1810)。如果接收到的请求是读取请求(判断方框1820),并且RAID-6布局中的两个奇偶校验设备都是覆盖设备(判断方框1830),则可以从被寻址的设备中检索读取数据(方框1835),并返回读取数据(方框1856),完成I/O操作(方框1860)。如果读取请求指向非覆盖奇偶校验设备(判断方框1840),可以使用行中的奇偶校验值,以及从非覆盖设备检索到的其他读取数据,对于任何覆盖设备,重建读取数据(方框1845),返回读取数据(方框1856),完成I/O操作(方框1860)。如果两个覆盖设备中的一个是读取操作被指向的奇偶校验设备(判断方框1840),并且读取操作不涉及其他覆盖设备(判断方框1850),则可以从被寻址的设备中检索读取数据(方框1835),并返回读取数据(方框1856),完成I/O操作(方框1860)。如果两个覆盖设备中的一个是读取操作被指向的奇偶校验设备(判断方框1840),并且读取操作不涉及其他覆盖设备(判断方框1850),则可以使用非覆盖奇偶校验设备的存储的值,为覆盖设备重建读取数据(方框1852)。然后,可以从重建的数据计算出新的奇偶校验值(方框1854),并返回读取数据(方框1856),完成I/O操作(方框1860)。

如果接收到的请求是写入请求(判断方框1820),并且如果写入请求指向完全条带(判断方框1870),则数据可以被写入到行中的所有存储设备(方框1875),完成I/O操作(方框1860)。如果写入请求指向部分行,不是修改覆盖设备的请求(判断方框1880),则数据可以存储在非覆盖设备中,计算并存储新的奇偶校验值(方框1895),完成I/O操作(方框1860)。如果写入请求指向部分行,并且是修改至少一个覆盖设备的请求(判断方框1880),则写入数据可以存储在奇偶校验设备中(方框1882),并转发到覆盖设备之外的所有目标设备(方框1884)。然后,可以读取行中的非覆盖设备中的旧数据,并返回到奇偶校验设备(方框1886)。然后,奇偶校验设备可以计算并存储新的奇偶校验值(方框1888),并将新的数据转发到覆盖设备(方框1890)。一旦新的数据已经存储在覆盖设备中,则I/O操作完成(方框1860)。

值得注意的是,前面的流程图只用于讨论目的。在备选实施例中,流程图中所描述的组成要素可以按不同的顺序进行,或者,在某些情况下同时进行。另外,一些流程图的组成要素可以在各种实施例中不存在,或者,也可以与其他组成要素相结合。所有这样的替代方案也是可以的。

值得进一步注意的是,上文所描述的实施例可以包括软件。在这样的实施例中,实现了方法和/或机制的程序指令可以利用计算机可读介质传输或存储。有很多被配置为存储程序指令的介质类型可用,它们包括硬盘、软盘、CD-ROM、DVD、快擦写存储器、可编程ROM(PROM)、随机存取存储器(RAM),以及各种其他形式的易失性或非易失性存储器。

虽然非常详细地描述了上文的实施例,一旦完全理解了上面的说明,很多变化和修改方案对于那些所属领域的技术人员将变得显而易见。下面的权利要求应被解释为包括所有这样的变化和修改方案。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号