首页> 中国专利> 用于保留克隆分离操作之后的存储对象中的消重的系统和方法

用于保留克隆分离操作之后的存储对象中的消重的系统和方法

摘要

一种用于保留从基存储对象的克隆的分离操作中作为结果的存储对象(例如,灵活卷)的数据块的消重的系统和方法。所述克隆可以包括与基存储对象的至少一个数据块共享的数据块和不与基存储对象的至少一个数据块共享的至少一个数据块。与基存储对象共享的克隆的数据块可以被指示成接收可以包括将新的指针指派给所指示的数据块的写分配。每个数据块可以包括多个指针,包括虚拟地址指针和物理地址指针。照此,可以将单个物理地址指针指派给包括相同的虚拟地址指针的克隆的数据块。

著录项

  • 公开/公告号CN103890738A

    专利类型发明专利

  • 公开/公告日2014-06-25

    原文格式PDF

  • 申请/专利权人 网络存储技术公司;

    申请/专利号CN201280052979.6

  • 发明设计人 B.拉伊;A.沙马;

    申请日2012-04-26

  • 分类号G06F12/02;

  • 代理机构中国专利代理(香港)有限公司;

  • 代理人谢攀

  • 地址 美国加利福尼亚州

  • 入库时间 2023-12-17 00:35:36

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2016-09-21

    授权

    授权

  • 2016-08-10

    著录事项变更 IPC(主分类):G06F12/02 变更前: 变更后: 申请日:20120426

    著录事项变更

  • 2014-07-16

    实质审查的生效 IPC(主分类):G06F12/02 申请日:20120426

    实质审查的生效

  • 2014-06-25

    公开

    公开

说明书

技术领域

本发明的实施例涉及存储系统,并且特别地,用于保留克隆分离操作之后的存储对象中的消重(deduplication)。

背景技术

如所期望的,一种存储系统通常包括可以将信息输入其中并且可以从其中获取信息的一个或多个存储设备。该存储系统包括尤其通过调用存储操作来功能地组织该系统以便支持由该系统所实现的存储服务的存储操作系统。存储系统可以根据各种存储架构来实现,包括但不限于,网络附接的存储环境、存储区域网、以及直接附接到客户端或主计算机的磁盘组装件。存储设备通常是被组织为磁盘阵列的磁盘驱动器,其中术语“磁盘”通常描述自给式旋转磁介质存储设备。本上下文中的术语“磁盘”与硬盘驱动器(HDD)或直接访问存储设备(DASD)同义。

存储系统的存储操作系统可以实现诸如文件系统之类的高级模块,以逻辑地将在卷上存储的信息组织为存储对象的层级结构,诸如文件和逻辑单元(LU)。一种已知类型的文件系统是不重写磁盘上的数据的随地写(write-anywhere)文件系统。被配置成对存储系统进行操作的随地写文件系统的示例是可从加利福尼亚州森尼维尔市NetApp, Inc.获得的随地写文件布局(WAFL?)文件系统。

存储系统可以进一步被配置成允许许多服务器访问在存储系统上存储的存储对象。在该模型中,服务器可以运行通过计算机网络(诸如,点对点链路、共享的局域网(LAN)、广域网(WAN)、或通过诸如因特网之类的公用网络而实现的虚拟专用网(VPN))而“连接”到存储系统的诸如数据库应用之类的应用。每个服务器可以通过经由网络向系统发布作为基于文件的和基于块的协议消息(以分组的形式)的访问请求(读/写请求)来请求存储系统的数据服务。

可以将多个存储系统互连,以提供被配置成服务许多服务器的存储系统架构。在一些实施例中,存储系统架构提供一个或多个聚合(aggregate),每个聚合包括一组一个或多个存储设备(例如,磁盘)。每个聚合可以存储一个或多个存储对象,诸如一个或多个卷。聚合可以跨被互连为集群(cluster)的多个存储系统而分布。存储对象(例如,卷)可以被配置成存储由该集群响应于由服务器所发布的多协议数据访问请求而服务的诸如文件和逻辑单元之类的存储对象的内容。

集群的每个存储系统(节点)可以包括(i)适于服务特定的聚合或卷的存储服务器(被称为“D刀片”)以及(ii)适于将数据访问请求重定向到集群的任何存储服务器的多协议引擎(被称为“N刀片”)。在说明性实施例中,每个存储系统的存储服务器体现为磁盘元件(D刀片),并且多协议引擎体现为网络元件(N刀片)。N刀片从客户端接收多协议数据访问请求,将该访问请求转换成集群构造(CF)消息,以及将该消息重定向到集群的适当的D刀片。

集群的存储系统可以被配置成彼此通信以共同地动作,以提高性能或弥补集群内的任何单个存储系统故障。集群通过提供至共享存储(包括一组存储设备)的访问来向服务器提供数据服务。通常,服务器将为与存储系统的数据访问会话而与集群的存储系统相连接。在与存储系统的数据访问会话期间,服务器可以提交由存储系统接收和执行的访问请求(读/写请求)。

集群的每个存储系统可以包括存储操作系统。此外,每个服务器可以运行要求集群的数据服务的多个应用。每个服务器的数据可以存储于共享存储上的存储对象中,诸如数据聚合、卷、卷的克隆等。照此,存储系统可以包括对存储对象执行系统操作的存储操作系统。例如,存储操作系统可以对卷执行消重操作,产生卷的克隆,以及对卷的克隆执行分离操作。

如本领域所公知的,为了节省卷上的存储空间,可以对卷的数据进行消重。然后可以产生对于卷的克隆,因此克隆可以基于或依赖于基卷,以使得灵活卷的克隆包括与基卷共享的数据块。灵活卷的克隆还可以包括经消重的数据块。然后可以对卷的克隆执行分离操作以使该克隆独立于其基卷,以使得作为结果的卷不包括与基灵活卷共享的数据块。然而,通常,将卷的克隆与其基卷相分离导致作为结果的卷中的消重的损失,因此作为结果的卷中的数据块不再包括经消重的数据块。照此,将卷的克隆与其基卷相分离的常规的存储系统技术不保留作为结果的卷的数据块中的消重。

发明内容

本文所描述的实施例提供一种用于保留存储对象克隆分离操作之后的作为结果的存储对象中的消重的系统和方法。在这些实施例中,可以对原始存储对象进行消重,并且然后为经消重的原始存储对象产生克隆。克隆可以依赖于“基存储对象”,包括产生该克隆的时间点处的原始存储对象的数据。然后可以对该克隆执行分离操作以产生独立于其基存储对象的作为结果的存储对象。在一些实施例中,在克隆的分离操作期间,消重被保留在作为结果的存储对象中,从而保留消重的存储节约益处。

在一些实施例中,存储系统可以在多个存储设备上存储多个存储对象,并且对存储对象执行操作。如本领域所公知的,每个存储对象可以包括基础数据块和指针数据块。基础数据块可以包括被存储以寻址存储设备上的位置的客户端数据。存储对象的指针数据块可以包括指向基础数据块的指针。存储系统可以对原始存储对象执行消重,因此,(基础数据块中的)客户端数据的实例在存储聚合中仅存储一次,并且原始存储对象的多个指针数据块可以指向相同的客户端数据的单个实例,因而提供存储节约益处。

存储系统然后可以产生经消重的原始存储对象的克隆,克隆依赖于“基存储对象”(包括产生该克隆的时间点处的原始存储对象的数据)和“增量(delta)数据”(包括产生该克隆的时间点之后的对于原始存储对象的数据改变)。如果原始存储对象被消重,那么基存储对象也可以被消重并且具有消重的存储益处(原因在于,基存储对象包括产生克隆的时间点处的原始存储对象的拷贝)。

基存储对象还可以包括基础数据块和指针数据块。基础数据块可以包括被存储以寻址存储设备上的位置的客户端数据。基存储对象的指针数据块可以包括指向基存储对象的基础数据块的指针。克隆可以包括基存储对象的指针数据块的单独拷贝,但通常将不具有基存储对象的基础数据块的单独拷贝。更确切地说,因为克隆包括与基存储对象相同的指针数据块,所以克隆包括指向基存储对象的相同的基础数据块的相同指针。照此,因为克隆不包含被存储到单独的/新的地址位置的基础数据块的单独拷贝,所以克隆“共享”基存储对象的基础数据块(被称为“共享数据块”)。因而,克隆可以视为依赖于基存储对象。

然后可以对克隆执行分离操作,以使克隆独立于其基存储对象。分离操作可以产生并存储用于克隆的共享数据块的单独拷贝。例如,分离操作逻辑可以提交用于基存储对象的共享数据块的写分配,来为克隆将共享数据块拷贝并存储到存储设备上的单独的/新的地址位置。照此,因为克隆将基础数据块的其单独的拷贝存储在单独的/新的地址位置处,所以基存储对象的基础数据块将不再与克隆共享。因而,分离操作可以修改克隆以产生包含基础数据块的单独拷贝的且独立于基存储对象的“作为结果的存储对象”。然而,通常,作为结果的存储对象将不保留原始或基存储对象的任何在前消重。

在一些实施例中,如果基存储对象包括经消重的数据块并且如果将依赖于基存储对象的克隆与基存储对象相分离,由克隆分离操作所产生的作为结果的存储对象可以保留基存储对象的消重。在这些实施例中,当对克隆执行分离操作时,写分配逻辑可以确保当发现克隆的两个或更多指针数据块包括指向基存储对象的相同的基础数据块的相同指针时,基础数据块的单个拷贝被产生并存储到新的地址位置(而不是基础数据块的多个拷贝被存储到多个新的地址位置)。同样,作为结果的存储对象中的两个或更多指针数据块将被配置成使得指向基础数据块的单个拷贝的每个指针被存储到新的地址位置。照此,在作为结果的存储对象中,数据的实例将在存储聚合中存储一次,并且作为结果的存储对象的多个指针数据块可以指向数据的单个实例,因而提供消重存储节约益处。

在一些实施例中,经受分离操作的克隆的指针数据块可以被指示成接收写分配。例如,与基存储对象共享的克隆的指针数据块可以被指示成接收写分配。克隆的每个指针数据块可以包括两个指针:虚拟地址指针和物理地址指针。虚拟地址指针可以指向克隆的虚拟地址空间中的位置,并且物理地址指针可以指向存储聚合(例如,基础数据块)内的位置。如果克隆的指针数据块与基存储对象共享并且如果未接收到包括相同的虚拟地址指针的克隆的另一个指针数据块的写分配,则可以将新的指针指派给克隆的所指示的指针数据块的物理地址指针。如果新的指针被指派给克隆的指针数据块的物理地址指针,那么记录对于物理地址指针的改变。例如,每个克隆可以包括描述该克隆的物理地址指针与该克隆的虚拟地址指针之间的关系的块映射。块映射可以包括虚拟地址指针对物理地址指针的一对一配对。照此,克隆的每个虚拟地址指针与该克隆的一个物理地址指针相对应。然后,在克隆的指针数据块的后续写分配中,可以检查克隆的块映射以确定是否已经将新的指针指派给与对应于克隆的后续指针数据块的虚拟地址指针的虚拟地址指针配对的物理地址指针。照此,如果已经确定了是否接收到包括相同的虚拟地址指针的克隆的指针数据块的写分配,那么写分配将向克隆的指针数据块指派与已经被指示用于写分配的克隆的指针数据块的虚拟地址指针配对的来自块映射的物理地址指针。照此,如果克隆的多个所指示的指针数据块具有相同的虚拟地址指针,那么可以仅将一个新的物理地址指针指派给包括相同的虚拟地址指针的该克隆的所有所指示的指针数据块。

照此,克隆分离和消重保留系统和方法呈现了对于存储系统环境的若干优势。例如,当基存储对象因消重而包括共享数据块时,将克隆与其基存储对象相分离可以更高效。克隆分离和消重保留系统和方法可以导致更快的克隆分离操作以及作为结果的存储对象中的经消重的数据块的保留。照此,因为在作为结果的存储对象中保留了消重,所以存储系统可以利用较少的存储资源,并且存储系统的管理员可以不需要在作为结果的存储对象上重新运行消重过程。

附图说明

图1是一些实施例操作于其中的示例性分布式存储系统环境的示意图。

图2是可以被用于一些实施例操作于其中的存储系统环境中的示例性存储系统的示意图。

图3是根据一些实施例的形成被用于存储操作系统中的集成协议软件栈的一组软件层的示意图。

图4是用于实现用于一些实施例操作于其中的示例性存储系统的存储协议的存储侧层的示意图。

图5是可以被用于一些实施例中的聚合(系统或数据聚合)的实施例的示意性框图。

图6是根据一些实施例的包括各种数据结构的文件结构的框图。

图7是根据一些实施例来自文件的块到存储聚合的存储设备的块的示例性映射。

图8是根据一些实施例的卷的数据块的双块号的示例性映射。

图9是根据一些实施例的用于将数据块标记为脏并且利用脏标记来处理数据块的方法的流程图。

图10是根据一些实施例的用于将灵活卷克隆的数据块标记为假脏并且利用假脏标记来处理数据块的方法的流程图。

图11是根据一些实施例的用于利用对写分配逻辑的修改来将数据块标记为假脏的方法的流程图。

图12A是包括数据块的消重的灵活卷克隆的多个数据块的示例。

图12B是已经标记为“假脏”的灵活卷克隆的经消重的数据块的示例性修改后的写分配。

图13是被用于一些实施例中的示例性数据克隆层级迁移管理数据结构900。

具体实施方式

在以下描述中,为了解释的目的,阐述了许多细节和替代。然而,本领域一般技术人员将意识到实施例能够在不使用这些特定细节的情况下实施。在其它实例中,公知的结构和设备采用框图形式来示出,以免因不必要的细节而使实施例晦涩难懂。

将跟着的描述划分成三个部分。部分I包含本文所使用的术语。部分II描述一些实施例操作于其中的集群存储系统环境。部分III描述一种用于保留卷克隆分离操作之后的卷中的消重的系统和方法。

存储对象:如本文所使用的,存储对象包括用于存储数据的任何类型的容器。存储对象的示例包括但不限于文件、LU、配额树(qtree)、卷、灵活卷、聚合、存储设备等。为了说明的目的,以下实施例关于灵活卷(例如,基灵活卷、灵活卷克隆、灵活卷克隆层级等)来描述。然而,在其它实施例中,任何其它类型的存储对象可以被用于以下实施例中。

克隆:如本文所使用的,克隆可以包括存储对象的即时复制,其中在创建时不要求附加的存储空间。存储对象的克隆可以包括存储对象的数据的透明虚拟拷贝并且不要求对数据进行任何拷贝。存储对象的克隆衍生自并且基于存储对象。例如,克隆可以包括存储对象的虚拟图像、指向存储对象的指针、或指向存储对象的图像的指针。例如,克隆可以包括虚拟图像或指向基存储对象的指针。照此,克隆可以包括可以被动态地供应、定大小、以及调整大小的虚拟容器,以简化操作。然而,增量存储容量只对于克隆特定的元数据和非冗余的数据块而言是需要的。在一些实施例中,该克隆存储包括基存储对象与该克隆之间的改变的数据。当创建克隆时,它使用基存储对象和/或基存储对象的快照图像来用作它的基。例如,克隆可以包括指向存储对象的图像的指针和增量数据,因此在第一时间点处产生图像并且在该第一时间点之后的第二时间点处产生克隆。克隆的增量数据可以包括在第一时间点与第二时间点之间的对于存储对象的改变。该克隆接收快照图像元数据的拷贝,并且然后当克隆被写时更新其元数据。基存储对象与克隆之间的共同快照是只读的,并且可以作为用于多个克隆的基而重新使用。因而,节约了存储设备空间,原因在于所使用的新的设备空间与少量的元数据或者对于基存储对象或克隆的有意义的改变相关联。因而,克隆可以包括基存储对象或甚至是基存储对象的另一个克隆的可写时间点图像。照此,克隆将新级别的敏捷度和效率添加到存储操作。为了说明的目的,以下实施例关于灵活卷克隆来描述。然而,在其它实施例中,任何其它类型的克隆可以被用于以下实施例中。

集群存储系统:如本文所使用的,集群存储系统可以包括一组一个或多个存储系统。在一些实施例中,集群可以包括一个存储系统。照此,有时可以可互换地使用术语“集群”和“存储系统”。在其它实施例中,集群包括多个存储系统。

灵活卷:如本文所使用的,灵活卷可以包括可以跨多个存储设备高效地分布的并且可以被调整大小以满足改变的业务或应用需要的一种类型的存储卷。在一些实施例中,存储系统可以提供跨被互连为集群的多个节点而分布的一个或多个存储卷和一个或多个聚合。每个存储卷可以被配置成存储诸如文件和逻辑单元之类的数据。照此,在一些实施例中,灵活卷可以被包括在存储聚合内,并且进一步包括至少一个存储设备。存储聚合可以通过RAID丛而抽象化,其中每个丛包括RAID群。此外,每个RAID群可以包括多个存储磁盘。照此,灵活卷可以包括遍布在多个存储磁盘或设备之上的数据存储。

基灵活卷:如本文所使用的,基灵活卷包括不是灵活卷的克隆的卷。例如,基灵活卷可以是被克隆过的灵活卷。照此,基灵活卷可以视为至少一个灵活卷克隆所依赖的基卷。灵活卷克隆可以视为子灵活卷。

快照:如本文所使用的,快照包括创建文件系统的在线且只读拷贝的特征。快照可以在不复制文件内容的情况下防范文件的意外删除或修改。在一些实施例中,快照被灵活卷克隆用来创建基灵活卷的时间点视图或图像。当改变文件时,快照拷贝(或作为结果的灵活卷克隆)仍然可以指向在其被修改之前文件存在其中的存储设备块,并且将改变写到新的存储设备块。当数据在基灵活卷中被改变时,原始数据块保持与快照拷贝相关联,而不是被标记以供重新使用。

增量数据:如本文所使用的,增量数据包括基灵活卷与其灵活卷克隆之间的差异。例如,灵活卷克隆增量可以包括已经被存储或写到新的存储设备块的基灵活卷与灵活卷克隆之间的改变或差异。

虚拟卷块号:如本文所使用的,虚拟卷块号(VVBN)可以指定数据块在容器文件内的偏移。例如,虚拟卷块号可以包括灵活卷的虚拟块地址空间内的块地址。在一些实施例中,虚拟卷块号可以包括灵活卷克隆的虚拟块地址空间内的块地址。照此,虚拟卷块号可以包括虚拟地址指针。

物理卷块号:如本文所使用的,物理卷块号(PVBN)可以指定数据块在存储聚合内的位置。例如,物理卷块号可以指定用于灵活卷的数据块的存储聚合内的位置。在一些实施例中,物理卷块号可以指定用于灵活卷克隆的数据块的存储聚合内的位置或地址。照此,物理卷块号可以包括物理地址指针。

一致点:如本文所使用的,一致点(CP)可以指代用于执行数据块的多个写分配的文件系统(例如,随地写文件布局)的写片段或点。照此,每个CP可以包括多个写分配以使得每个CP导致对磁盘文件系统图像上的一致。在一些实施例中,WAFL系统可以把所有进入的写分配请求记到存储器日志。照此,包括写分配请求的日志可以被用来确定哪些数据块需要在CP处更新或被写。

索引节点:如本文所使用的,索引节点可以指代文件特定的信息。照此,存储系统上的或者灵活卷或灵活卷克隆中的每个文件可以与索引节点相关联。在一些实施例中,索引节点可以包括文件相关的元数据和指向数据块的指针。

消重:如本文所使用的,消重可以指代用于消除冗余数据的数据压缩技术。在一些实施例中,卷的消重可以导致在存储设备上存储一次数据,并且卷内的多个引用可以指向所存储的数据的单个实例。例如,存储对象(例如,卷)可以包括多个数据块。每个数据块可以包括引用存储设备内的相同块的指针。照此,存储对象的多个数据块可以均指向存储设备内的单个块。

分离:如本文所使用的,分离操作可以指代使存储对象的克隆(例如,灵活卷克隆)独立于其基存储对象(例如,基灵活卷)。在一些实施例中,将克隆与其基存储对象相分离导致不与另一个存储对象(例如,克隆的基灵活卷)共享数据块的新的存储对象(例如,克隆当前是卷或灵活卷)。例如,灵活卷克隆的分离操作可以导致具有被指派给灵活卷克隆的数据块的新的物理卷块号的与基灵活卷共享的灵活卷克隆的数据块。

图1是一些实施例操作于其中的示例性虚拟服务器环境100的框图。环境100可以包括一组一个或多个服务器系统和一个或多个存储系统120。服务器系统110均可以经由网络167而访问连接至服务器系统110的一个或多个存储系统120。一个或多个存储系统120包括集群存储系统135。集群135中的每个存储系统120可以包括用于存储客户端数据的一组存储设备130,集群135的存储设备130包括存储系统120的共享存储。注意,服务器系统110也彼此连接(例如,经由网络167)以彼此通信(例如,如本文所描述的,以共同地工作以向用户/客户端系统(未示出)提供数据访问服务,以共同地托管多个虚拟机)。

服务器系统110可以包括可以运行与存储系统120进行交互以接收读/写访问请求以及通过网络167接收或发送数据的一个或多个应用112的计算机系统。在一些实施例中,服务器系统110可以包括托管服务器系统110的多个实例的框架(chassis),每个服务器系统110托管体现为虚拟机的多个客户端系统。网络167和/或网络167的子网可以物理地体现于此类框架内。

在服务器系统110上运行的应用112可以通过发送和处理针对来自一个或多个存储系统120的数据的访问请求而提供数据访问服务。继而,应用112利用存储系统120的服务来访问、存储、和管理一组存储设备130中的数据。照此,服务器系统110可以运行提交针对访问存储设备上的特定存储对象的访问请求的一个或多个应用112。每个应用112可以提交针对访问集群135的存储系统上的特定存储对象的访问请求,并且集群135可以执行接收到的对存储对象的请求。应用112可以包括基于非虚拟的应用,诸如典型电子邮件交换应用或数据库应用。在其它实施例中,应用112可以包括基于虚拟的应用,诸如虚拟机(以下所讨论的)。

存储系统120可以通过诸如局域网(LAN)、以太网子网、PCI或PCIe子网、交换式PCIe子网、广域网(WAN)、城域网(MAN)、因特网等之类的网络167而在本地耦合至服务器系统110。在一些实施例中,服务器系统110可以包括在单个框架(例如,刀片服务器框架)内托管服务器系统110的多个实例的框架,其中服务器系统110的每个实例经由网络167与框架中的服务器系统110的每个其它实例进行通信。

每个存储系统120可以具有分布式架构。例如,每个存储系统120可以包括单独的N模块(网络模块)和D模块(数据模块)组件(未示出)。在此类实施例中,N模块被用来与服务器系统110进行通信,而D模块包括文件系统功能并且被用来与存储设备130进行通信。在另一个实施例中,存储系统120可以具有集成架构,其中将网络和数据组件都包含在单个盒或单元中。存储系统120可以通过交换构造(未示出)而耦合至集群135中的其它存储系统120。以该方式,可以将集群135的所有存储系统120互连以形成可以由所连接的服务器系统110所访问的单个存储池。

存储系统120包括协作以提供分布式存储系统架构的功能组件,所述分布式存储系统架构向服务器系统110提供整合数据服务。服务器系统110可以包括利用集群存储系统135的服务来存储和管理存储系统120的存储设备130中的数据的计算机系统。服务器系统110与存储系统120之间的交互能够实现存储服务的供应。也就是说,服务器系统110可以请求存储系统120的服务,并且存储系统120可以通过经由连接系统167来交换分组而返回由服务器系统110所请求的服务的结果。当访问采用文件和目录形式的信息时,服务器系统110可以通过经由传输控制协议/网际协议(TCP/IP)来发布使用基于文件的访问协议(诸如,公用因特网文件系统(CIFS)协议或网络文件系统(NFS)协议)的分组而请求存储系统的服务。可替代地,当访问采用块的形式的信息时,服务器系统110可以发布包括基于块的访问协议(诸如,光纤通道协议(FCP)、或因特网小型计算机系统接口(iSCSI)存储区域网(SAN)访问)的分组。

存储系统120可以包括将数据存储在一组存储设备130中优选地在一个或多个可写存储设备介质(诸如,磁存储设备、录像带、光、DVD、磁带、以及适于存储包括数据和奇偶校验信息的信息的任何其它类似介质)上的计算机系统。存储系统120可以实现文件系统以将数据逻辑地组织为存储设备130上的存储对象。存储系统120或服务器系统110可以运行提交针对访问存储设备130上的特定存储对象的访问请求的一个或多个应用112。

服务器系统110与一个或多个存储系统120之间的交互能够实现存储服务的供应。也就是说,服务器系统110可以请求一个或多个存储系统120的服务(通过提交读/写访问请求),并且一个或多个存储系统120可以通过经由网络167对服务器系统110接收或发送数据(例如,通过经由通过网络167的连接来交换数据分组)而响应服务器系统110的读/写访问请求。

存储系统120与服务器系统110中的任何一个之间的通信通常体现为通过计算机网络167所发送的分组。服务器系统110可以向存储系统120发送访问请求(读/写访问请求)以访问在存储系统上存储的特定数据。服务器系统110可以通过发布根据用于访问存储设备的常规存储访问协议(诸如DIFS、NFS等)而格式化的存储访问协议消息来请求存储系统120的服务。当访问采用文件和目录形式的数据时,访问请求(例如,读/写访问请求)可以通过经由传输控制协议/网际协议(TCP/IP)来发布使用基于文件的访问协议(诸如,公用因特网文件系统(CIFS)协议、或网络文件系统(NFS)协议)的分组而实现。可替代地,当访问采用块的形式的数据时,服务器系统110可以通过发布使用基于块的访问协议(诸如,光纤通道协议(FCP)、或因特网小型计算机系统接口(iSCSI)存储区域网(SAN)访问)的分组来发布访问请求。

在服务器系统110上运行的每个应用112可以利用集群135的服务来存储和访问其数据。存储系统120可以包括在一组一个或多个存储设备130中将数据存储为存储对象的计算机系统。存储设备130可以包括可写存储设备介质,诸如存储设备、录像带、光学设备、DVD、磁带、闪速存储器、磁随机存取存储器(MRAM)、相变RAM(PRAM)、或适于存储信息(包括数据和奇偶校验信息)的任何其它类似介质。

如本领域所公知的,存储设备130可以包括存储对象,包括一个或多个存储卷,其中每个卷具有在该卷上实现的文件系统。在存储设备130上实现的文件系统可以在单个卷中提供多个目录,每个目录包含零个或多个文件名。文件系统提供如何在卷上组织数据(文件)的逻辑表示,其中将数据(文件)表示为组成一个或多个目录的文件名。公用文件系统的示例包括新技术文件系统(NTFS)、文件分配表(FAT)、分层文件系统(HFS)、通用存储设备格式(UDF)、UNIX?文件系统等。对于可以实现随地写文件布局(WAFL?)文件系统的数据ONTAP?存储操作系统(可从加利福尼亚州森尼维尔市的NetApp, Inc.获得)而言,通常在每个卷内存在WAFL文件系统,并且在WAFL文件系统内,可以存在一个或多个逻辑单元(LU)。

图2是可以被用于图1的存储系统环境中的示例性存储系统120的示意性框图。本领域技术人员将理解的是,本文所描述的实施例可以应用于任何类型的专用计算机(例如,存储系统)、或者体现或不体现为存储系统的包括独立计算机的通用计算机。为了该目的,能够宽泛地且可替代地将存储系统120称为计算机系统。此外,本文所描述的实施例的教导能够适于各种存储系统架构,包括但不限于,网络附接的存储环境、存储区域网、以及直接附接至服务器计算机的磁盘组装件。因而,术语“存储系统”应该宽泛地视为包括此类布置。

存储系统120包括由系统总线260互连的网络适配器210、处理器220、存储器240、非易失性随机存取存储器(NVRAM)245、以及存储适配器250。网络适配器210包括通过计算机网络150而将存储系统120连接至服务器系统110所需要的机械、电气、和信令电路。存储系统可以包括一个或多个网络适配器。每个网络适配器210具有唯一的IP地址,并且可以为服务器系统110提供一个或多个数据访问端口以访问存储系统120(其中网络适配器接受来自服务器系统110的采用数据分组的形式的读/写访问请求)。

存储器240包括可由处理器220和适配器寻址的用于存储软件程序代码和数据的存储位置。存储器240可以包括通常由电力循环或其它重启操作(例如,其是“易失性”存储器)来清除的随机存取存储器(RAM)的形式。然而,在其它实施例中,存储器240可以包括不需要电力来保持信息的非易失性形式的存储器。处理器220和适配器可以继而包括被配置成运行软件代码以及操纵在存储器240中存储的数据的处理元件和/或逻辑电路。

存储系统120还可以包括可以被用作确保存储系统120在发生系统关机或其它无法预见的问题的情况下不“丢失”接收到的信息(例如,CIFS和NFS请求)的后备存储器的NVRAM 245。NVRAM 245通常是在发生对阵列的任何电力失去的情况下保存存储器的最后状态的具有后备电池或者其它内建的最后状态保留能力的大容量固态存储器阵列(RAM)(例如,闪速存储器)。因而,即使存储器240中存储的访问请求丢失或被擦除(例如,由于暂时的断电),其仍然可以从NVRAM 245中恢复。

处理器220运行尤其通过调用存储操作来功能地组织存储系统以便支持由存储系统所实现的文件服务的存储系统120的存储操作系统应用300。在一些实施例中,存储操作系统300包括由处理器220所运行的多个软件层(包括消重层275)。在一些实施例中,消重层275被实现以对卷克隆的数据进行消重。存储操作系统300的部分通常驻存于存储器240中。然而,对于本领域技术人员将明显的是,其它处理和存储器件(包括各种计算机可读介质)可以被用于存储和运行与存储操作系统300相关的程序指令。

在一些实施例中,元数据结构290也驻存于存储器240中。在其它实施例中,元数据结构290还可以驻存于NVRAM 245中或存储于存储设备125上。如以下所讨论的,在一些实施例中,元数据结构290由消重层275产生并用来存储用于所存储的块的序列的元数据,并且被用来确定如何处理用于所述块的写分配。在这些实施例中,元数据结构290有时被称为块比较机制。在其它实施例中,元数据结构290还由消重层275用来记录经消重的冗余块至其对应匹配的存储块的映射。在这些实施例中,元数据结构290有时还被称为映射机制。

存储适配器250与在存储系统120上运行的存储操作系统300协作以访问由服务器系统110所请求的数据。所述数据可以在经由存储适配器250而附接到存储系统120或如本文所定义的存储系统的其它节点的存储设备125上存储。存储适配器250包括通过输入/输出(I/O)互连布置(诸如,常规的高性能光纤通道串行链路拓扑)而耦合到存储设备125的I/O接口电路。响应于从服务器系统110接收到的访问请求,数据可以由存储适配器250来检索,并且如果必要的话,在通过系统总线260转发到网络适配器210之前,由处理器220(或适配器250自身)来处理,其中可以将数据格式化成分组并且返回给服务器系统110。

在说明性实施例中,存储设备125可以包括被布置成多个卷的磁盘设备,每个卷具有与其关联的文件系统。在一些实施例中,存储设备125包括被配置成多个RAID(独立磁盘的冗余阵列)群的磁盘设备,由此将多个存储设备125组合成单个逻辑单元(即,RAID群)。在典型的RAID群中,该群的存储设备125在磁盘之间共享或复制数据,这可以提高数据可靠性或性能。根据优选的RAID-4配置,RAID群的存储设备125被配置成使得一些磁盘存储条带数据并且至少一个磁盘存储用于数据的单独的奇偶校验。然而,也考虑其它配置(例如,具有跨条带的分布式奇偶校验的RAID-5、RAID-DP等)。单个卷通常包括多个存储设备125,并且可以体现为多个RAID群。

现在简要地描述用于示例性存储系统120的存储操作系统300的组织。然而,要清楚考虑的是,本文所描述的实施例的原理能够使用各种替代的存储操作系统架构来实现。如以上所讨论的,如本文关于存储系统所使用的术语“存储操作系统”通常指代可操作于存储系统上的实现文件系统语义(诸如,以上所提及的WAFL?)和管理数据访问的计算机可执行代码。在该意义上,数据ONTAP?软件是被实现为微核的此类存储操作系统的示例。存储操作系统还能够实现为在诸如UNIX?或Window?之类的通用操作系统之上操作的应用程序,或者实现为具有可配置功能的通用操作系统。

如图3中所示,存储操作系统300包括形成集成协议软件栈的一组软件层。协议栈为服务器系统110提供数据路径360,以使用数据访问协议来访问在存储系统120上存储的数据。协议栈包括网络驱动器(例如,以太网驱动器)的介质访问层310。介质访问层310与诸如网际协议(IP)层320和传输层330(例如,TCP/UDP协议)之类的网络通信和协议层进行对接。IP层320可以被用来为服务器系统110提供一个或多个数据访问端口以访问存储系统120。在一些实施例中,IP层320层为由存储系统120所实现的一个或多个远程文件访问协议中的每个提供专用私有端口。

数据访问协议层340提供多协议数据访问并且例如可以包括基于文件的访问协议,诸如超文本传输协议(HTTP)协议、NFS协议、CIFS协议等。存储操作系统300可以包括对其它协议的支持,诸如基于块的访问协议。此类协议可以包括但不限于直接访问文件系统(DAFS)协议、基于web(网络)的分布式创作和版本控制(WebDAV)协议、光纤通道协议(FCP)、因特网小型计算机系统接口(iSCSI)协议等。

存储操作系统300可以使用存储侧层370来管理存储设备125。如图4中所示,存储侧层370可以包括实现存储协议(诸如,RAID协议)的存储层380以及实现设备控制协议的设备驱动器层385(诸如,小型计算机系统接口(SCSI)、电子集成驱动器(IDE)等)。将存储侧层370与网络和协议层桥接的是存储操作系统300的文件系统层350。在说明性实施例中,文件系统层350实现具有基于块的磁盘上格式表示的使用索引节点来描述文件的文件系统。

文件系统层350为每个文件指派唯一的索引节点号和关联的索引节点。索引节点可以包括被用来存储关于文件的元数据信息(诸如,文件名、文件何时被产生或最后修改、文件的所有权、用于文件的访问许可、文件的大小等)的数据结构。每个索引节点还可以包含关于文件的块位置的信息。在一些实施例中,块位置由为文件的每个块所赋予的唯一逻辑块号(LBN)来指示。如以下所讨论的,如果存储设备包括磁盘设备,那么具有序列的LBN的一组块指示了该组块被顺序地存储在磁盘设备的相同轨道上。文件系统350可以对包含和索引(通过索引节点号)各种文件的索引节点的索引节点文件进行存储和维护。

响应于从服务器系统110接收文件访问请求(包含外部文件句柄),文件系统350生成从存储设备125加载(检索)所请求的数据的操作(如果其未驻存于存储系统的存储器240中的话)。访问请求中的外部文件句柄通常标识由服务器系统110所请求的文件或目录。具体地,文件句柄可以指定与所请求的数据对应的生成号、索引节点号、和卷号。如果信息未驻存于存储系统的存储器240中,那么文件系统层350使用接收到的索引节点号来索引到索引节点文件中,以访问用于所标识的文件的适当的索引节点条目,并且从该索引节点中检索文件位置信息(例如,逻辑块号)。

文件系统层350然后将逻辑块号传递给设备驱动器层385的适当的驱动器(例如,在光纤通道互连上实现的SCSI的封装)。设备驱动器层385访问来自存储设备125的适当的块,并且在存储器240中加载所请求的数据,以供存储系统120处理。在成功完成该请求时,存储系统(和存储操作系统)通过网络150将响应(例如,由CIFS规范所定义的常规的应答分组)返回给服务器系统110。

应注意的是,通过以上所描述的为存储系统处所接收的请求而执行数据存储访问所需要的存储操作系统层的软件“路径”360可以可替代地以硬件、或者硬件和软件的组合来实现。也就是说,在可替代的实施例中,存储访问请求路径360可以被实现为在现场可编程门阵列(FPGA)或专用集成电路(ASIC)内体现的逻辑电路。该类型的硬件实现可以提高由存储系统120响应于由服务器系统110所发布的文件系统请求分组而提供的文件服务的性能。此外,在另一实施例中,网络和存储适配器210和250的处理元件可以被配置成分别从处理器220卸载分组处理和存储访问操作中的一些或所有,以从而提高由存储系统120所提供的数据访问服务的性能。

在一些实施例中,存储操作系统300还包括与存储操作系统300的其它软件层和文件系统联合操作的消重层275,以如本文所描述的那样对在存储系统120上存储的数据进行消重。例如,在一些实施例中,消重层275可以驻存于存储操作系统300的文件系统层350与存储层380之间(如图3和4中所示)。在其它实施例中,消重层275可以驻存于存储操作系统300的其它层附近。

在一些实施例中,存储侧层370还包括离台(de-staging)层375。例如,在一些实施例中,离台层375可以驻存于存储操作系统300的文件系统层350与消重层275之间。在其它实施例中,离台层375可以驻存于存储操作系统300的其它层附近。

离台层375可以被实现于一些存储系统125中,以采用两个阶段来执行所接收的针对文件的写请求。在第一阶段中,将由文件系统层350所接收的写请求发送到离台层375,写请求包含待写的数据的块。离台层375为所接收的每个写请求产生写日志,写日志包含待写的数据的块。可以将写日志295存储到例如NVRAM 245(如图2中所示)。在第二阶段中,以预定的时间间隔(被称为一致点),将累积的写日志295(例如,NVRAM 245中的)发送到然后将写日志中的数据的块写到存储设备125的存储层380。

本文所描述的实施例可以应用于在具有或不具有离台层375的情况下实现的存储系统120。在一些实施例中,消重层275与离台层375联合使用。在这些实施例中,消重层275可以处理在等待要写到存储设备125的接下来的一致点的第一阶段期间所累积的写日志。在该时间期间,消重层275可以在将块写到存储设备125之前处理所累积的写日志中的块以进行可能的消重。在其它实施例中,消重层275在不使用离台层375的情况下使用。在这些实施例中,消重层275可以从文件系统350接收写请求,并且当接收到所述请求时处理写请求的块以供消重。

注意,当在第一阶段中产生用于针对文件的写请求的写日志时,文件系统层350可以指派用于待写的文件中的每个块的LBN,块的所指派的LBN指示了该块将在接下来的一致点处被写到其中的存储设备125上的位置。同样,文件系统层350可以指派用于文件的索引节点号和索引节点。照此,每个写日志可以包括待写的数据的块、块要被写到其中的位置(LBN)、指派给文件的索引节点号。当在第一阶段中产生用于针对文件的写请求的写日志时,文件系统层350还可以将用于文件的块的LBN存储于其被指派的索引节点中。

在其中消重层275在不具有离台层375的情况下被使用的其它实施例中,消重层275可以从文件系统350接收针对文件的写请求,由此文件系统层350可以指派用于待写的文件中的每个块的LBN。同样,文件系统层350可以指派用于文件的索引节点号和索引节点,并且将用于文件的块的所指派LBN存储于其被指派的索引节点中。

在一些实施例中,消重层275可以被预包括在存储操作系统300软件中。在其它实施例中,消重层275可以包括与存储操作系统300一起工作以增强其功能的外部辅助插入式软件模块。照此,可以将消重层275强加在现有的存储操作系统300和文件系统350上,以提供如本文所描述的数据的消重。

如图4中所示,存储侧层370可以包括实现存储协议(诸如RAID协议)的存储层380以及实现设备控制协议(诸如,小型计算机系统接口(SCSI)、电子集成驱动器(IDE)等)的设备驱动器层385。将存储侧层370与网络和协议层桥接的是存储操作系统300的文件系统层350。在说明性实施例中,文件系统层350实现具有基于块的磁盘上格式表示的使用索引节点来描述文件的文件系统。

文件系统层350为每个文件指派唯一的索引节点号和关联的索引节点。索引节点可以包括被用来存储关于文件(诸如,文件名、文件何时被产生或最后修改、文件的所有权、用于文件的访问许可、文件的大小等)的元数据信息的数据结构。每个索引节点还可以包含关于文件的块位置的某些信息。在一些实施例中,块位置由为文件的每个块所赋予的唯一的逻辑块号(LBN)来指示。如以下所讨论的,如果存储设备包括磁盘设备,那么具有序列的LBN的一组块指示了该组块被顺序地存储在磁盘设备的相同轨道上。文件系统350可以对包含和索引(通过索引节点号)各种文件的索引节点的索引节点文件进行存储和维护。

响应于从服务器系统110接收文件访问请求(包含外部文件句柄),文件系统350生成从存储设备130加载(检索)所请求的数据的操作(如果其未驻存于存储系统的存储器240中的话)。访问请求中的外部文件句柄通常标识由服务器系统110所请求的文件或目录。具体地,文件句柄可以指定与所请求的数据对应的生成号、索引节点号、和卷号。如果信息未驻存于存储系统的存储器240中,那么文件系统层350使用接收到的索引节点号来索引到索引节点文件中,以访问用于所标识的文件的适当的索引节点条目,并且从该索引节点中检索文件位置信息(例如,逻辑块号)。

文件系统层350然后将逻辑块号传递给设备驱动器层385的适当的驱动器(例如,在光纤通道互连上实现的SCSI的封装)。设备驱动器层385访问来自存储设备130的适当的块,并且在存储器240中加载所请求的数据,以供由存储系统120处理。在成功完成该请求时,存储系统(和存储操作系统)通过网络150将响应(例如,由CIFS规范所定义的常规的应答分组)返回给服务器系统110。

应注意的是,通过以上所描述的为存储系统处所接收的请求而执行数据存储访问所需要的存储操作系统层的软件“路径”360可以可替代地以硬件、或者硬件和软件的组合来实现。也就是说,在可替代的实施例中,存储访问请求路径360可以被实现为在现场可编程门阵列(FPGA)或专用集成电路(ASIC)内体现的逻辑电路。该类型的硬件实现可以提高由存储系统120响应于由服务器系统110所发布的文件系统请求分组而提供的文件服务的性能。此外,在另一实施例中,网络和存储适配器210和250的处理元件可以被配置成分别从处理器220卸载分组处理和存储访问操作中的一些或所有,以从而提高由存储系统120所提供的数据访问服务的性能。

在一些实施例中,存储操作系统300还包括与存储操作系统300的其它软件层和文件系统联合操作的消重层275,以如本文所描述的那样对在存储系统120上存储的数据进行消重。例如,在一些实施例中,消重层275可以驻存于存储操作系统300的文件系统层350与存储层380之间(如图3和4中所示)。在其它实施例中,消重层275可以驻存于存储操作系统300的其它层附近。

在一些实施例中,存储侧层370还包括离台层375。例如,在一些实施例中,离台层375可以驻存于存储操作系统300的文件系统层350和消重层275之间。在其它实施例中,离台层375可以驻存于存储操作系统300的其它层附近。

离台层375可以被实现于一些存储系统130中,以采用两个阶段来执行所接收的针对文件的写请求。在第一阶段中,将由文件系统层350所接收的写请求发送到离台层375,写请求包含待写的数据的块。离台层375为所接收的每个写请求产生写日志,写日志包含待写的数据的块。可以将写日志295存储到例如NVRAM 245(如图2中所示)。在第二阶段中,以预定的时间间隔(被称为一致点),将NVRAM 245中的所累积的写日志数据结构发送到然后将写日志中的数据的块写到存储设备130的存储层380。

本文所描述的实施例可以应用于在具有或不具有离台层375的情况下实现的存储系统120。在一些实施例中,消重层275与离台层375联合使用。在这些实施例中,消重层275可以处理在等待要写到存储设备125的接下来的一致点的第一阶段期间所累积的写日志。在该时间期间,消重层275可以在将块写到存储设备125之前处理所累积的写日志中的块以进行可能的消重。在其它实施例中,消重层275在不使用离台层375的情况下使用。在这些实施例中,消重层275可以从文件系统350接收写请求,并且当接收到所述请求时处理写请求的块以供消重。

注意,当在第一阶段中产生用于针对文件的写请求的写日志时,文件系统层350可以指派用于待写的文件中的每个块的LBN,块的所指派的LBN指示了该块将在接下来的一致点处被写到其中的存储设备130上的位置。同样,文件系统层350可以指派用于文件的索引节点号和索引节点。照此,每个写日志可以包括待写的数据的块、块要被写到其中的位置(LBN)、指派给文件的索引节点号。当在第一阶段中产生用于针对文件的写请求的写日志时,文件系统层350还可以将用于文件的块的LBN存储于其被指派的索引节点中。

在其中消重层275在不具有离台层375的情况下被使用的其它实施例中,消重层275可以从文件系统350接收针对文件的写请求,因此文件系统层350可以指派用于待写的文件中的每个块的LBN。同样,文件系统层350可以指派用于文件的索引节点号和索引节点,并且将用于文件的块的所指派LBN存储于其被指派的索引节点中。

在一些实施例中,消重层275可以被预包括在存储操作系统300软件中。在其它实施例中,消重层275可以包括与存储操作系统300一起工作以增强其功能的外部辅助插入式软件模块。照此,可以将消重层275强加在现有的存储操作系统300和文件系统350上,以提供如本文所描述的数据的消重。

图5是可以被用于一些实施例中的聚合500(系统或数据聚合)的实施例的示意性框图。可以在一组一个或多个灵活卷510之间分配聚合500的总存储空间。可以在聚合500的总存储空间内的存储大小方面,动态地增大或减小灵活卷510。每个灵活卷510可以包括一个或多个存储对象,诸如逻辑单元号(块)502、导向器504、配额树506、文件508等。聚合500被说明性地层放在由至少一个RAID丛550所表示(依赖于存储配置是否成镜像)的RAID系统的顶上,其中每个RAID丛550包括至少一个RAID群550。每个RAID群550进一步包括多个存储磁盘530,例如,一个或多个数据磁盘和至少一个奇偶校验磁盘。

图6是包括各种数据结构的示例性文件结构的框图600。在一些实施例中,文件结构被用于随地写文件布局(WAFL)文件系统中。例如,文件结构可以包括卷610。在一些实施例中,卷610可以包括灵活卷或灵活卷克隆。灵活卷可以包括基灵活卷且因而不依赖于另一个灵活卷。灵活卷可以包括灵活卷的克隆。照此,卷610可以包括基灵活卷的可写时间点图像(例如,快照),并且包括用于存储空间以保存与基灵活卷的任何期望的改变的增量灵活卷部分。照此,在一些实施例中,灵活卷克隆包括基灵活卷的可写时间点图像(例如,基于基灵活卷的快照)与存储对于灵活卷克隆依赖于其或从其衍生的基灵活卷的任何期望的改变的增量灵活卷克隆部分。

在一些实施例中,卷610可以包括卷信息块,其可以包括与用于卷610的数据结构树相关的信息。卷信息块可以包括可以描述或包括卷610中的所有索引节点的索引节点文件以及可以包括卷610的块分配位图的块映射文件。

卷610可以存储一个或多个文件。每个文件可以由索引节点620来描述。在一些实施例中,索引节点620包括关于文件、文件大小、文件类型的元数据以及指向用于文件的数据块的指针。

每个索引节点620可以包括一个或多个数据块630。在一些实施例中,每个数据块630可以包括多个指针。例如,每个数据块630可以包括虚拟卷块号(VVBN)和物理卷块号(PVBN)。虚拟卷块号可以引用卷(例如,灵活卷克隆)的关联的逻辑块号或虚拟块号,并且对应的物理卷块号可以引用存储聚合中的物理块。例如,物理卷块号可以引用或提供指向物理块640的指针,并且虚拟卷块号可以引用或提供指向逻辑或虚拟块645的指针。照此,索引节点的每个数据块可以包括VVBN-PVBN配对,以使得虚拟卷块号引用卷的逻辑或虚拟块号,并且物理卷块号引用存储设备或存储聚合中的物理块号。

因而,卷(例如,灵活卷克隆)可以与用于数据的每个块的两个卷块号(例如,虚拟卷块号和物理卷块号)相关联。虚拟卷块号可以包括数据的逻辑或虚拟块在灵活卷克隆中的地址,并且物理卷块号可以包括灵活卷克隆的数据的物理块在存储聚合中的地址。

图7是来自文件的块到存储聚合的存储设备的块的映射700。存储聚合可以包括每个卷或灵活卷的信息。例如,存储聚合可以包括用于每个卷的RAID文件和容器文件。RAID文件可以包括描述卷(例如,灵活卷克隆)的元数据,诸如卷的名称、文件系统标识符、卷的当前状态、卷的大小、以及与卷关联的其它信息。容器文件可以包括关于卷的所有块的信息。例如,被用于卷内的块地址可以指代该卷的容器文件内的块偏移。照此,容器文件可以包括关于卷内的每个块的信息。因而,卷的容器文件可以包括指代卷的给定数据块的位置(例如,在灵活卷克隆和存储聚合内)的两种实现。此类实现可以包括物理卷块号和虚拟卷块号。物理卷块号指定数据块在存储聚合内的位置。在一些实施例中,物理卷块号可以被用来读块或将块写到RAID存储聚合。虚拟卷块号可以指定数据块在容器文件或灵活卷或灵活卷克隆内的偏移。

如图7中所见,映射700可以包括文件710,其包括多个文件块。每个文件块可以与文件块号相关联。单个块可以属于若干逻辑或虚拟的和物理的存储容器或关联。例如,文件块号715可以与卷(例如,灵活卷克隆)、存储聚合、和存储设备相关联。如所见,文件块715可以与卷或容器文件720相关联。例如,文件块号715可以与卷或容器文件720的虚拟卷块号725相关联或映射。类似地,虚拟卷块号725可以与存储聚合相关联。例如,虚拟卷块号725可以指向或被映射到存储聚合730的物理卷块号735。物理卷块号735可以指向或被映射到存储设备。例如,物理卷块号735可以指向或被映射到存储设备740的设备块号745。照此,文件、卷容器文件、存储聚合、和存储设备包括由块号来索引的块的阵列。

照此,卷的块地址空间可以由容器文件来定义。文件写系统可以使用容器文件来将虚拟卷块号转变为聚合的块地址空间中的块地址(例如,物理卷块号)。卷可以包括由虚拟卷块号来索引的物理卷块号的阵列。此类信息可以被包括在包括虚拟卷块号到物理卷块号映射(例如,VVBN-PVBN映射)的容器映射内。

图8是双块号的映射800。在一些实施例中,卷的数据块可以包括双虚拟块号。例如,卷(即,灵活卷或灵活卷克隆)可以包括多个索引节点。每个索引节点包括至少一个数据块指针,包括虚拟卷块号和物理卷块号。如图8中所见,物理卷块号810可以包括指向存储聚合840内的聚合块845的指针。此外,虚拟卷块号820可以包括指向容器映射830的块号835的指针。块号835可以提供指向存储聚合840的存储聚合块845的指针。照此,每个虚拟卷块号可以与物理卷块号相关联。在一些实施例中,可以将虚拟卷块号与物理卷块号之间的关联存储在VVBN-PVBN映射内。在一些实施例中,多个虚拟卷块号可以与单个物理卷块号相关联。例如,第一虚拟卷块号和第二虚拟卷块号二者都可以与单个物理卷块号相关联。照此,第一虚拟卷块号和第二虚拟卷块号指向存储聚合内的相同块。

图9是用于将数据块标记为脏并且利用脏指示符或标记来处理数据块的方法900的流程图。如将讨论的,将数据块指示或标记为“脏”可以不保留灵活卷克隆分离操作之后的灵活卷克隆的消重。

如先前所讨论的,灵活卷克隆可以包括一个或多个索引节点,并且每个索引节点可以包括一个或多个数据块。每个数据块可以包括双指针,包括虚拟卷块号和物理卷块号。在一些实施例中,灵活卷克隆的多个数据块可以包括相同的指针。照此,灵活卷克隆的多个数据块可以包括相同的虚拟卷块号和相同的物理卷块号。此类配置可以被称为灵活卷克隆的数据的消重。

在一些实施例中,随地写文件布局系统可以将卷的数据块标记为“脏”或“假脏”(如以下将进一步讨论的)。将数据库标记为“脏”可以包括设置数据块的首部中的至少一位以指示数据块在写分配操作期间已经被修改以及必须被寻址。

在一些实施例中,分离灵活卷克隆可以包括数据块的写分配。如先前所讨论的,灵活卷克隆可以包括指向基灵活卷的快照的指针和可以包括灵活卷克隆与基灵活卷的快照之间的数据方面的差异的增量数据。照此,灵活卷克隆包括与基灵活卷的快照共享或依赖于基灵活卷的快照的数据块和不与基灵活卷的快照共享的数据块(例如,与灵活卷克隆的增量数据关联的数据块)。当执行灵活卷克隆分离操作(例如,使灵活卷克隆独立于基灵活卷的操作)时,可以将与基灵活卷的快照共享的数据块标记为“脏”,而可以不将与增量数据关联的数据块标记为“脏”。然而,如将进一步详细讨论的,将数据块标记为“脏”在将灵活卷克隆从其基灵活卷分离之后可能不保留该灵活卷克隆中的消重。

如图9中所见,方法900可以将共享或依赖于基灵活卷的快照的灵活卷克隆的数据块标记为“脏”(在步骤910处)。在一些实施例中,方法900可以通过检查灵活卷克隆的容器文件来确定灵活卷克隆的数据块共享或依赖于基灵活卷的快照。例如,方法900可以访问与容器文件关联的灵活卷克隆的虚拟卷块号至物理卷块号(VVBN-PVBN)映射。在一些实施例中,如果灵活卷克隆的数据块共享或依赖于基灵活卷的快照,那么该数据块的物理卷块号可以包括孔(hole)或“0”值。然而,如果灵活卷克隆的数据块不共享或依赖于基灵活卷的快照(例如,与灵活卷克隆的增量数据关联的数据块),那么该数据块的物理卷块号可以不包括孔或“0”,并且可以代之以指定存储聚合内的地址或位置。因而,当执行卷克隆分离操作时,方法900可以将具有“0”的物理卷块号的灵活卷克隆的数据块(如VVBN-PVBN映射中所指示的)标记为“脏”。

方法900可以接收用于弄脏的数据块的写分配(在步骤920处)。在一些实施例中,弄脏的数据块的写分配可以发生在一致点(CP)期间。在一些实施例中,随地写文件布局可以收集或聚集多个数据块更新(例如,与正在经受分离操作的灵活卷克隆关联的数据块的写分配),并且在一个时间(例如,一致点)写或更新多个数据块。在一些实施例中,随地写文件布局可以利用非易失性存储器来将所有进入的数据块更新请求记入日志。照此,非易失性存储器可以包括与基灵活卷的快照共享的、根据将灵活卷克隆与基灵活卷的快照相分离而要求更新或被写的灵活卷克隆的数据块的数据日志。在一些实施例中,如关于图2所讨论的,将数据块更新请求记入日志的非易失性存储器可以包括NVRAM日志的内容。

在接收弄脏的数据块的写分配之后,方法900可以将新的虚拟卷块号指派给数据块(在步骤930处)。例如,方法900可以在与基灵活卷的快照共享或由其支持的数据块已经被弄脏之后将新的虚拟卷块号指派给该数据块。此外,方法900还可以将新的物理卷块号指派给该数据块(在步骤940处)。因而,对数据块的“脏”标记在写分配期间将新的虚拟卷块号和新的物理卷块号指派给该数据块。照此,因为把新的虚拟卷块号和物理卷块号指派给灵活卷克隆的数据块,所以把灵活卷克隆的数据块标记为“脏”将导致与基灵活卷的快照共享的灵活卷克隆的数据块内的消重的损失。

图10是用于将灵活卷克隆的数据块标记为“假脏”并且利用假脏指示符或标记来处理数据块的方法1000的流程图。通常,将数据块标记为“假脏”可以包括当执行灵活卷克隆分离操作时保留数据块的虚拟卷块号并且将新的物理卷块号指派给灵活卷克隆的数据块。

如先前所描述的,灵活卷克隆可以包括一个或多个数据块,其可以包括双指针,包括虚拟卷块号和物理卷块号。类似地,将灵活卷克隆的数据块标记为“假脏”可以包括设置数据块的首部中的至少一位以指示数据块在写分配操作期间已经被修改以及必须被寻址。

在一些实施例中,分离灵活卷克隆以使得其从基灵活卷的对应快照中独立可以包括将数据块标记为“假脏”。如先前所讨论的,灵活卷克隆可以包括具有指向基灵活卷的快照的指针的数据块和与可以包括灵活卷克隆与基灵活卷的快照之间的数据方面的差异的增量数据对应的数据块。因而,灵活卷克隆包括与基灵活卷的快照共享或依赖于基灵活卷的快照的数据块和不与基灵活卷的快照共享的数据块。当执行灵活卷克隆的分离操作时,可以将与基灵活卷的快照共享的数据块标记为“假脏”,而可以不将与增量数据关联的数据块标记为“假脏”,原因在于与增量数据对应的数据块不依赖于基灵活卷的快照。

如图1000中所见,方法1000可以将共享或依赖于基灵活卷的快照的灵活卷克隆的数据块标记为“假脏”(在步骤1010处)。在一些实施例中,方法1000可以通过检查灵活卷克隆的容器文件来确定灵活卷克隆的数据块共享或依赖于基灵活卷的快照。例如,方法1000可以访问与容器文件关联的灵活卷克隆的VVBN-PVBN映射。在一些实施例中,如果灵活卷克隆的数据块共享或依赖于基灵活卷的快照,那么该数据块的物理卷块号可以包括孔或“0”值。然而,如果灵活卷克隆的数据块不共享或依赖于基灵活卷的快照(例如,与灵活卷克隆的增量数据关联的数据块),那么该数据块的物理卷块号可以不包括孔或“0”,并且可以代之以指定存储聚合内的地址或位置。因而,当执行卷克隆分离操作时,方法1000可以将具有“0”的物理卷块号的灵活卷克隆的数据块标记为“假脏”。

方法1000可以接收用于已经被标记为“假脏”的数据块的写分配(在步骤1020处)。在一些实施例中,被标记或指示为“假脏”的数据块的写分配可以发生在CP处。在一些实施例中,WAFL系统可以收集或聚集多个数据块更新(例如,与正在经受分离操作的灵活卷克隆关联的数据块),并且在一个时间(例如,一致点)写或更新卷的多个数据块。在一些实施例中,随地写文件布局可以利用非易失性存储器将对所有进入的数据块更新请求(例如,已经被标记为“假脏”的灵活卷克隆的数据块)记入日志。照此,非易失性存储器可以包括与基灵活卷的快照共享的、根据将灵活卷克隆与基灵活卷的快照相分离而要求更新或被写的灵活卷克隆的数据块的数据日志。在一些实施例中,如关于图2所讨论的,将数据块更新请求记入日志的非易失性存储器可以包括NVRAM日志的内容。

在接收已经被标记或指示为“假脏”的数据块的写分配之后,方法1000可以将虚拟卷块号保留到新写的或更新的数据块(在步骤1030处)。例如,方法1000可以在与基灵活卷的快照共享或由其支持的灵活卷克隆的数据块被标记为“假脏”之后将虚拟卷块号保留到该数据块。此外,方法1000可以将新的物理卷块号指派给灵活卷克隆的数据块(在步骤1040处)。因而,对数据块的“假脏”标记保留虚拟卷块号,但在写分配期间将新的物理卷块号指派给该数据块。照此,因为将新的物理卷块号指派给新写的数据块,所以将灵活卷克隆的数据块标记为“假脏”可能不足以保留消重。然而,如以下进一步详细讨论的,对数据块的“假脏”标记的使用和写分配逻辑的改变可以保留灵活卷克隆分离操作之后的灵活卷克隆中的消重。

图11是用于当指派灵活卷克隆的数据块的物理卷块号时利用对写分配逻辑的改变或修改来将灵活卷克隆的数据块标记为“假脏”的方法1100的流程图。通常,方法1100可以将要与其基灵活卷分离的灵活卷克隆的数据块标记为“假脏”,如果灵活卷克隆的该数据块与基灵活卷的快照共享的话。此外,对于灵活卷克隆的给定虚拟卷块号,方法1100可以仅为数据块分配一次新的物理卷块号。

如图11中所见,方法1100可以扫描灵活卷克隆的索引节点(在步骤1105处)。在一些实施例中,灵活卷克隆可以包括多个索引节点。照此,可以由方法1100来扫描灵活卷克隆的每个索引节点。方法1100可以确定灵活卷克隆的索引节点的特定数据块是否与基灵活卷的支持快照共享(在步骤1110处)。在一些实施例中,该确定通过访问并检查与灵活卷克隆关联的容器文件来执行。如先前所描述的,容器文件可以包括虚拟卷块号至物理卷块号(VVBN-PVBN)映射。照此,与已经被指派给灵活卷块号的数据块的虚拟卷块号关联的物理卷块号可以包括孔或“0”值或者地址或位置。如果来自VVBN-PVBN映射的物理卷块号不是“0”,那么该数据块可能不与基灵活卷的快照共享(例如,该数据块与灵活卷克隆的增量数据相关联)。照此,方法1100可以不将该数据块指派或标记为“假脏”(在步骤1115处)。然而,在一些实施例中,如VVBN-PVBN映射中所指示的,与基灵活卷的快照共享或由其支持的灵活卷克隆的数据块可以包括孔或“0”的物理卷块号。在与虚拟卷块号关联的物理卷块号是孔或“0”的情况下,方法1100可以将灵活卷克隆的数据块指派、标记、或指示为“假脏”(在步骤1120处)。

照此,方法1100可以接收要经受灵活卷克隆分离操作的灵活卷克隆的数据块。灵活卷克隆的VVBN-PVBN映射被接收并引用以确定该数据块是否与基灵活卷的支持快照共享(例如,指向存储聚合的相同数据块)。例如,可以在VVBN-PVBN映射中检查所接收的数据块的虚拟卷块号,并且可以分析对应的物理卷块号。照此,灵活卷克隆的VVBN-PVBN映射包括虚拟卷块号与物理卷块号之间的关联。如果与虚拟卷块号关联的物理卷块号不与基灵活卷的快照共享(例如,对应的物理卷块号不是“0”),那么不将该数据块标记或指示为“假脏”。然而,如果与虚拟卷块号关联的物理卷块号与基灵活卷的快照共享(例如,对应的物理卷块号是“0”),那么将该数据块标记或指示为“假脏”。

方法1100可以接收灵活卷克隆的数据块的写分配(在步骤1130处)。如先前所讨论的,数据块的写分配可以发生在一致点期间。在一些实施例中,在一致点期间可以接收多个写分配。照此,可以接收灵活卷克隆的多个数据块的写分配。例如,可以接收已经被标记为“假脏”的灵活卷克隆的每个数据块的写分配。方法1100可以检查或分析灵活卷克隆的容器文件中的VVBN-PVBN映射(在步骤1140处)。在一些实施例中,步骤1140处的对VVBN-PVBN映射的检查或分析可以包括分析与灵活卷克隆的数据块的虚拟卷块号关联的物理卷块号。可以做出与虚拟卷块号关联的物理卷块号是否为孔或“0”的确定(在步骤1150处)。如果如VVBN-PVBN映射中所指示的,物理卷块号不是孔或“0”,那么可以假设已经将物理卷块号指派或分配给与数据块关联的虚拟卷块号。因为已经为已经被指派了物理卷块号的相同虚拟卷块号发布了数据块的写分配,那么与来自VVBN-PVBN映射的虚拟卷块号关联的物理卷块号可以被使用或指派到灵活卷克隆的数据块(在步骤1160处)。照此,不将新的物理卷块号指派给灵活卷克隆的数据块。

然而,如果如VVBN-PVBN映射中所指示的,物理卷块号是孔或“0”,那么可以将新的物理卷块号指派或分配给灵活卷克隆的数据块(在步骤1170处)。例如,灵活卷克隆的数据块可以包括虚拟卷块号。方法1100可以通过查找数据块的虚拟卷块号以及接收与该虚拟卷块号关联的物理卷块号的值来分析灵活卷克隆的VVBN-PVBN映射。如果物理卷块号是“0”,那么可以将新的物理卷块号分配或指派给该数据块。该方法还可以利用新分配或指派的物理卷块号来更新VVBN-PVBN映射(在步骤1180处)。例如,在将新的物理卷块号分配给数据块之后,与数据块的虚拟卷块号对应的物理卷块号的值可以从孔或“0”改变到新分配的物理卷块号(例如,存储聚合内的地址或位置,并且不是孔或“0”)。

作为结果,方法1100可以在灵活卷克隆分离操作期间保留灵活卷克隆的数据块的消重。例如,作为结果的灵活卷(例如,在已经将灵活卷克隆与基灵活卷的快照相分离之后)可以包括多个数据块,其中某些数据块将包括相同的虚拟卷块号和相同的物理卷块号。因而,通过块共享来保留消重。

图12A是包括数据块的消重的灵活卷克隆的多个数据块的示例1200。通常,与消重关联的灵活卷的多个数据块包括相同的虚拟卷块号和物理卷块号。如图12A中所见,数据块1210和数据块1220中的每个包括虚拟卷块和物理卷块。数据块1210包括虚拟卷块1211和物理卷块1212。类似地,数据块1220包括虚拟卷块1221和物理卷块1222。因为数据块1210和数据块1220被消重,所以所述数据块共享虚拟卷块号和物理卷块号。例如,虚拟卷块1211和虚拟卷块1221可以包括相同的值或号“VVBN1”。此外,物理卷块1212和物理卷块1222可以包括孔或“0”的值。照此,物理卷块1212和1222中的每个与基灵活卷的快照共享。

图12B是已经被标记为“假脏”的灵活卷克隆的经消重的数据块的修改后的写分配1240的示例。通常,利用修改后的写分配将数据块标记为“假脏”(如先前关于图11所描述的)导致灵活卷克隆的共享数据块的消重的保留。在一些实施例中,如果利用修改后的写分配来将图12A的数据块1210和1220标记为“假脏”(如关于图11所描述的),那么可以保留消重。例如,数据块1280和数据块1290可以表示在修改后的写分配以及被标记或指示为“假脏”之后的数据块1210和数据块1220。如图12B中所见,数据块1280包括虚拟卷块1281和物理卷块1282,并且数据块1290包括虚拟卷块1291和物理卷块1292。每个数据块1280和1290包括相同的虚拟卷块号和相同的物理卷块号。例如,数据块1280的虚拟卷块1281和数据块1290的虚拟卷块1291二者都包括相同的虚拟卷块号“VBN1”。同样地,数据块1280的物理卷块1282和数据块1290的物理卷块1292还包括相同的物理卷块号“PVBN3”。照此,每个数据块共享指向相同的虚拟卷块和相同的物理卷块的指针。因而,已经保留了消重。

图13示出被用于一些实施例中的灵活卷克隆数据块写分配数据结构1300。在一些实施例中,灵活卷克隆数据块写分配数据结构1300包括多个数据集条目1350,每个数据集条目1350表示卷标识符、索引节点标识符、数据块标识符、和写分配指示符(以下所讨论的)。每个数据集条目1350可以包括用于存储对卷、索引节点、数据块、和写分配指示符进行描述或标识的数据的多个数据字段。

在一些实施例中,表示用于数据块的写分配的灵活卷克隆块数据写分配数据条目1350可以包含用于卷标识符1310、索引节点标识符1320、数据块标识符1330、和写分配指示符1340的数据字段。卷标识符1310可以包括标识特定灵活卷的信息。例如,灵活卷标识符1310可以包括灵活卷或灵活卷克隆的名称或地址。在一些实施例中,灵活卷标识符可以标识基灵活卷,或者灵活卷标识符可以提供用于灵活卷克隆的身份信息。照此,灵活卷标识符1310可以标识基灵活卷或灵活卷克隆的任一。

索引节点标识符1320可以标识用于每个数据集条目1350的卷的索引节点。例如,索引节点标识符1320可以标识正在经受卷克隆分离操作的灵活卷克隆的索引节点。数据块标识符1330可以标识如根据索引节点标识符1320所标识的索引节点的数据块。例如,如果索引节点包括多个数据块,那么索引节点标识符1320可以标识与该节点关联的一个此类数据块。

写分配指示符1340可以指示对由数据块标识符1330所标识的数据块执行的写分配的类型。例如,写分配指示符1340可以包括针对数据块指示符1330中所标识的数据块的“假脏”的标记或指示符。

在一些实施例中,当要将灵活卷克隆与其基灵活卷相分离时,可以生成或接收卷标识符字段1310、索引节点标识符字段1320、数据块标识符字段1330、以及写分配指示符字段1340。例如,每当要将灵活卷克隆与其基灵活卷相分离时,可以更新灵活卷克隆数据块写分配数据结构1300。

照此,灵活卷克隆数据块写分配数据结构1300接收关于卷的信息,在数据结构中存储关于卷的信息,以及包括用于卷的数据块的写分配指示符。

各种实施例

如对于计算机领域技术人员而言将明显的,一些实施例可以使用根据本文的教导而编程的常规的通用或专门数字计算机或微处理器来常规地实现。一些实施例可以由被编程以执行本文所描述的方法或过程步骤的通用计算机来实现。此类编程可以产生用于根据来自程序软件的指令而执行特定方法或过程步骤和功能(本文所描述的)的新的机器或专用计算机。如对于软件领域技术人员而言将明显的,可以由程序员基于本文的教导来准备适当的软件编码。如对于本领域技术人员而言将显而易见的,一些实施例还可以通过准备专用集成电路或通过互连常规组件电路的适当网络来实现。本领域技术人员将理解的是,信息可以使用任何各种不同的技术和技巧来表示。

一些实施例包括计算机程序产品,包括具有在其上/中存储的指令的计算机可读介质(多个介质),并且当运行所述指令(例如,由处理器)时,执行本文所描述的方法、技术、或实施例,计算机可读介质包括用于执行本文所描述的方法的各个步骤、技术、或实施例的指令集。计算机可读介质可以包括非临时计算机可读介质。计算机可读介质可以包括具有在其上/中存储的可以被用来控制、或引起计算机执行实施例的任何过程的指令的存储介质。存储介质可以在不具有限制性的情况下包括任何类型的设备,包括软盘、迷你盘(MD)、光盘、DVD、CD-ROM、微驱动器、和磁光盘、ROM、RAM、EPROM、EEPROM、DRAM、VRAM、闪速存储设备(包括闪速卡)、磁或光卡、纳米系统(包括分子存储器IC)、RAID设备、远程数据存储/存档/入库、或适于在其上/中存储指令和/或数据的任何其它类型的介质或设备。

一些实施例包括在计算机可读介质(多个介质)中的任何一个上存储的用于控制通用或专门计算机或微处理器这二者的硬件以及用于使得计算机或微处理器能够与使用实施例的结果的人类用户和/或其它机制进行交互的软件指令。此类软件可以在不具有限制性的情况下包括设备驱动器、操作系统、和用户应用。最后,此类计算机可读介质进一步包括用于执行本文所描述的实施例的软件指令。被包括在通用/专门计算机或微处理器的编程(软件)中的是用于实现一些实施例的软件模块。

技术人员将进一步领会,本文所描述的实施例的各种说明性的逻辑块、电路、模块、算法、技术、过程、或方法步骤可以实现为计算机电子硬件、计算机软件、或这二者的组合。为了说明硬件和软件的该可互换性,通常本文根据其功能来描述各种说明性的组件、块、模块、电路、和步骤。此类功能是实现为硬件还是软件依赖于在整体系统上所强加的特定应用和设计约束。本领域技术人员可以为每个特定的应用以变化的方式来实现所描述的功能,但此类实现决定不应解释为引起与本文所描述的实施例的背离。

结合本文所公开的实施例来描述的各种说明性的逻辑块、模块、和电路可以利用被设计成执行本文所描述的功能的通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或其它可编程逻辑设备、离散门或晶体管逻辑、离散硬件组件、或其任何组合来实现或执行。通用处理器可以是微处理器,但可替代地,处理器可以是任何常规的处理器、控制器、微控制器、或状态机。处理器还可以实现为计算设备的组合,例如,DSP和微处理器的组合、多个微处理器、联合DSP核的一个或多个微处理器、或任何其它此类配置。

结合本文所公开的实施例来描述的算法、技术、过程、或方法可以直接采用硬件、采用由处理器所运行的软件、或采用这二者的组合来体现。在一些实施例中,本文所描述的任何软件应用、程序、工具、模块、或层可以包括引擎,包括被配置成执行本文所描述的实施例的硬件和/或软件。通常,本文所描述的软件应用、程序、工具、模块、或层的功能可以直接采用硬件来体现,或体现为由处理器所运行的软件,或体现为这二者的组合。软件应用、层、或模块可以驻存于RAM存储器、闪速存储器、ROM存储器、EPROM存储器、EEPROM存储器、寄存器、硬盘、可移动盘、CD-ROM、或本领域所公知的任何其它形式的存储介质中。将示例性存储介质耦合至处理器,以使得处理器能够从存储介质读数据并向所述存储介质写数据。可替代地,存储介质可以集成到处理器。处理器和存储介质可以驻存于ASIC中。ASIC可以驻存于用户设备中。可替代地,处理器和存储介质可以驻存作为用户设备中的离散组件。

虽然参考许多特定细节来描述了本文所描述的实施例,但是本领域一般技术人员将认识到,实施例能够在不背离实施例的精神的情况下采用其它特定形式来体现。因而,本领域一般技术人员将理解的是,本文所描述的实施例不由前述说明性细节而限制,而是由所附权利要求来定义。

去获取专利,查看全文>

相似文献

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

客服邮箱:kefu@zhangqiaokeyan.com

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

  • 服务号