一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

由区块对象构成的文件系统的制作方法

2023-02-02 04:49:14 来源:中国专利 TAG:

由区块对象构成的文件系统
1.相关申请
2.本技术要求于2020年3月30日提交的题为“unified storage on block containers”的美国专利申请16/834,762、2020年9月16日提交的题为“managing directory-tree operations in file storage”的美国专利申请17/022,857以及2021年1月29日提交的题为“copying a file system”的美国专利申请17/162,038的优先权。17/022,857和17/162,038申请各自以及本技术还要求于2020年6月9日提交的题为“managing snapshots of directories in file systems”的美国临时专利申请63/036,955和2020年9月11日提交的题为“space accounting in a storage system”的美国临时专利申请63/077,259的优先权。这些申请通过引用明确地并入本文。
附图说明
3.附图例示了各种实施例,并且是说明书的一部分。所示实施例仅仅是示例,并不限制本发明的范围。在整个附图中,相同或相似的附图标记表示相同或相似的要素。
4.图1a例示根据一些实现的数据存储的第一示例系统。
5.图1b例示根据一些实现的数据存储的第二示例系统。
6.图1c例示根据一些实现的数据存储的第三示例系统。
7.图1d例示根据一些实现的数据存储的第四示例系统。
8.图2a是根据一些实施例的具有多个存储节点以及耦接到各存储节点以提供网络附加存储的内部存储的存储集群的透视图。
9.图2b是示出根据一些实施例的耦接多个存储节点的互连交换机的框图。
10.图2c是示出根据一些实施例的存储节点的内容以及非易失性固态存储单元其中之一的内容的多级框图。
11.图2d示出根据一些实施例的使用一些先前图中的存储节点和存储单元的实施例的存储服务器环境。
12.图2e是示出根据一些实施例的控制平面、计算和存储平面以及与基础物理资源进行交互的权限的刀片硬件框图。
13.图2f描绘了根据一些实施例的存储集群的刀片中的弹性软件层。
14.图2g描绘了根据一些实施例的存储集群的刀片中的权限和存储资源。
15.图3a阐述了根据本发明的一些实施例的被耦接以与云服务提供商进行数据通信的存储系统的图。
16.图3b阐述了根据本发明的一些实施例的存储系统的图。
17.图3c阐述了根据本发明的一些实施例的基于云的存储系统的示例。
18.图3d例示根据本发明的一些实施例的可以被具体配置为进行本文描述的一个或多于一个处理的计算装置的示例。
19.图4a~4b例示根据本发明的一些实施例的包括区块容器系统和容器利用系统的数据存储系统的示例。
20.图5例示根据一些实施例的用于表示数据实例的数据结构资源的示例。
21.图6a~6b例示根据本发明的一些实施例的被配置为与容器利用系统交互的数据存储服务系统的示例。
22.图7~11例示根据本发明的一些实施例的数据存储系统的示例方法。
23.图12例示根据本发明的一些实施例的数据存储系统的示例。
24.图13a~13c例示根据本发明的一些实施例的路径集的示例。
25.图14例示根据本发明的一些实施例的数据存储系统的示例。
26.图15例示根据本发明的一些实施例的路径集的示例。
27.图16例示根据本发明的一些实施例的与目录的快照相关联的版本化路径集的示例。
28.图17例示根据本发明的一些实施例的建立和使用路径集以协调区块对象上的快照的实现的示例。
29.图18例示根据本发明的一些实施例的路径集的示例。
30.图19例示根据本发明的一些实施例的建立和使用路径集以协调区块对象上的快照的实现的示例。
31.图20~22例示根据本发明的一些实施例的用于存储系统的快照管理的示例方法。
32.图23例示根据本发明的一些实施例的数据存储系统的示例。
33.图24a~24c例示根据本发明的一些实施例的对虚拟拷贝的豆荚的内容的修改的示例。
34.图25例示根据本发明的一些实施例的拷贝文件系统的示例方法。
具体实施方式
35.参考以图1a开始的附图来描述根据本发明的实施例的用于数据存储的示例方法、设备和产品。图1a例示根据一些实现的数据存储的示例系统。系统100(这里也称为“存储系统”)包括为了例示而非限制的目的的多个元件。可以注意到,系统100可以包括在其他实现中以相同或不同的方式配置的相同、更多或更少的元件。
36.系统100包括多个计算装置164a~b。计算装置(这里也称为“客户端装置”)可以体现为例如数据中心的服务器、工作站、个人计算机或笔记本等。计算装置164a~b可被耦接以通过存储区域网(san)158或局域网(lan)160来与一个或多于一个存储阵列102a~b进行数据通信。
37.san 158可以利用各种数据通信结构、装置和协议来实现。例如,san158的结构可以包括光纤通道、以太网、无限带宽(infiniband)或串行附接的小型计算机系统接口(sas)等。与san 158一起使用的数据通信协议可以包括高级技术附件(ata)、光纤通道协议、小型计算机系统接口(scsi)、因特网小型计算机系统接口(iscsi)、超小型计算机系统接口(hyperscsi)或跨结构的非易失性存储器标准(nvme)等。可以注意到,为了例示而非限制,提供了san 158。可以在计算装置164a~b和存储阵列102a~b之间实现其他数据通信耦接。
38.lan 160也可以利用各种结构、装置和协议来实现。例如,lan 160的结构可以包括以太网(802.3)或无线(802.11)等。lan 160中所使用的数据通信协议可以包括传输控制协议(tcp)、用户数据报协议(udp)、因特网协议(ip)、超文本传送协议(http)、无线接入协议
(wap)、手持装置传输协议(hdtp)、会话发起协议(sip)或实时协议(rtp)等。
39.存储阵列102a~b可以为计算装置164a~b提供持久数据存储。在实现中,存储阵列102a可被包含在机箱(未示出)中,并且存储阵列102b可被包含在另一机箱(未示出)中。存储阵列102a和102b可以包括一个或多于一个存储阵列控制器110a~d(这里也称为“控制器”)。存储阵列控制器110a~d可被体现为包括计算机硬件、计算机软件或计算机硬件和软件的组合的自动化计算机械模块。在一些实现中,存储阵列控制器110a~d可被配置为执行各种存储任务。存储任务可以包括将从计算装置164a~b接收到的数据写入存储阵列102a~b、从存储阵列102a~b擦除数据、从存储阵列102a~b中检索数据并将数据提供至计算装置164a~b、监视和报告磁盘利用率和性能、进行诸如独立驱动冗余阵列(raid)或raid类数据冗余操作等的冗余操作、压缩数据、以及加密数据等。
40.存储阵列控制器110a~d可以以各种方式实现,包括被实现为现场可编程门阵列(fpga)、可编程逻辑芯片(plc)、专用集成电路(asic)、片上系统(soc)、或包括诸如处理装置、中央处理单元、计算机存储器或各种适配器等的分立组件的任何计算装置。存储阵列控制器110a~d可以例如包括被配置为支持经由san 158或lan 160的通信的数据通信适配器。在一些实现中,存储阵列控制器110a~d可以独立地耦接到lan 160。在实现中,存储阵列控制器110a~d可以包括i/o控制器等,该i/o控制器使存储阵列控制器110a~d通过中平面(未示出)耦接至持久存储资源170a~b(这里也称为“存储资源”)以进行数据通信。持久存储资源170a~b主要包括任意数量的存储驱动器171a~f(这里也称为“存储装置”)和任意数量的非易失性随机存取存储器(nvram)装置(未示出)。
41.在一些实现中,持久存储资源170a~b的nvram装置可被配置为从存储阵列控制器110a~d接收要存储在存储驱动器171a~f中的数据。在一些示例中,数据可以源自计算装置164a~b。在一些示例中,将数据写入nvram装置可以比直接将数据写入存储驱动器171a~f更快地执行。在实现中,存储阵列控制器110a~d可被配置为利用nvram装置作为注定要写入存储驱动器171a~f的数据的快速可访问缓冲器。相对于存储阵列控制器110a~d直接将数据写入存储驱动器171a~f的系统,使用nvram装置作为缓冲器的写入请求的延时可能得到改善。在一些实现中,nvram装置可以利用高带宽、低延时ram的形式的计算机存储器来实现。nvram装置被称为“非易失性”,这是因为nvram装置可以接收或包括唯一电源,该唯一电源在nvram装置的主电力损耗后维持ram的状态。这样的电源可以是电池或者一个或多于一个电容器等。响应于电力损耗,nvram装置可被配置为将ram的内容写入诸如存储驱动器171a~f等的持久存储。
42.在实现中,存储驱动器171a~f可以指被配置为持久地记录数据的任何装置,其中“持久地”或“持久”是指装置在电力损耗后维持所记录数据的能力。在一些实现中,存储驱动器171a~f可以与非磁盘存储介质相对应。例如,存储驱动器171a~f可以是一个或多于一个固态驱动器(ssd)、基于闪存存储器的存储、任何类型的固态非易失性存储器、或任何其他类型的非机械存储装置。在其他实现中,存储驱动器171a~f可以包括诸如硬盘驱动器(hdd)等的机械或旋转硬盘。
43.图1b例示根据一些实现的数据存储的示例系统。图1b所例示的存储阵列控制器101可以与针对图1a所描述的存储阵列控制器110a~d类似。在一个示例中,存储阵列控制器101可以与存储阵列控制器110a或存储阵列控制器110b类似。存储阵列控制器101包括为
了例示而非限制的目的的多个元件。可以注意到,存储阵列控制器101可以包括在其他实现中以相同或不同的方式配置的相同、更多或更少的元件。可以注意到,可以在下方包括图1a中的元件,以帮助例示存储阵列控制器101的特征。
44.存储阵列控制器101可以包括一个或多于一个处理装置104和随机存取存储器(ram)111。处理装置104(或控制器101)表示诸如微处理器或中央处理单元等的一个或多于一个通用处理装置。更特别地,处理装置104(或控制器101)可以是复杂指令集计算(cisc)微处理器、精简指令集计算(risc)微处理器、超长指令字(vliw)微处理器、或用于实现其他指令集的处理器或用于实现指令集的组合的处理器。处理装置104(或控制器101)也可以是诸如asic、fpga、数字信号处理器(dsp)或网络处理器等的一个或多于一个专用处理装置。
45.处理装置104可以经由数据通信链路106而连接到ram 111,该数据通信链路106可被体现为诸如第四代双倍数据速率(ddr4)总线等的高速存储器总线。存储在ram 111中的是操作系统112。在一些实现中,指令113存储在ram111中。指令113可以包括用于在直接映射闪存存储系统中进行操作的计算机程序指令。在一个实施例中,直接映射闪存存储系统是直接对闪存驱动器内的数据区块进行寻址而无需闪存驱动器的存储控制器所进行的地址转换的系统。
46.在实现中,存储阵列控制器101包括经由数据通信链路105a~c而耦接到处理装置104的一个或多于一个主机总线适配器103a~c。在实现中,主机总线适配器103a~c可以是将主机系统(例如,存储阵列控制器)连接到其他网络和存储阵列的计算机硬件。在一些示例中,主机总线适配器103a~c可以是用于使存储阵列控制器101能够连接至san的光纤通道适配器或用于使存储阵列控制器101能够连接至lan的以太网适配器等。主机总线适配器103a~c例如可以经由诸如pcie总线等的数据通信链路105a~c而耦接到处理装置104。
47.在实现中,存储阵列控制器101可以包括耦接到扩展器115的主机总线适配器114。扩展器115可以用于将主机系统附接到更多的存储驱动器。扩展器115可以例如是用于在主机总线适配器114被体现为sas控制器的实现中使主机总线适配器114能够附接到存储驱动器的sas扩展器。
48.在实现中,存储阵列控制器101可以包括经由数据通信链路109而耦接到处理装置104的交换机116。交换机116可以是可从一个端点创建多个端点、从而使得多个装置能够共享一个端点的计算机硬件装置。交换机116可以例如是耦接到pcie总线(例如,数据通信链路109)并向中平面呈现多个pcie连接点的pcie交换机。
49.在实现中,存储阵列控制器101包括用于将存储阵列控制器101耦接到其他存储阵列控制器的数据通信链路107。在一些示例中,数据通信链路107可以是快速通道互连(qpi)互连。
50.图1c例示根据一些实现的数据存储的第三示例系统117。系统117(这里也称为“存储系统”)包括为了例示而非限制的目的的多个元件。可以注意到,系统117可以包括在其他实现中以相同或不同的方式配置的相同、更多或更少的元件。
51.在一个实施例中,系统117包括具有可单独寻址的快速写入存储的双外围组件互连(pci)闪存存储装置118。系统117可以包括存储控制器119。在一个实施例中,存储控制器119a~d可以是cpu、asic、fpga或可实现根据本发明所需的控制结构的任何其他电路。在一个实施例中,系统117包括可操作地耦接到存储装置控制器119的各个通道的闪存存储器装
置(例如,包括闪存存储器装置120a~n)。闪存存储器装置120a~n可以作为闪存页、擦除区块和/或足以允许存储装置控制器119a~d对闪存的各方面进行编程和检索的控制要素的可寻址集合而呈现给控制器119a~d。在一个实施例中,存储装置控制器119a~d可以对闪存存储器装置120a~n进行操作,该操作包括存储和检索页的数据内容、布置和擦除任何区块、跟踪与闪存存储器页、擦除区块和单元的使用和重复使用相关的统计、跟踪和预测闪存存储器内的错误代码和故障、控制与对闪存单元的内容进行编程和检索相关联的电压电平,等等。
52.在一个实施例中,系统117可以包括用以存储可单独寻址的快速写入数据的ram 121。在一个实施例中,ram 121可以是一个或多于一个单独的分立装置。在另一实施例中,ram 121可以集成到存储装置控制器119a~d或多个存储装置控制器中。ram 121也可以用于其他目的,诸如存储装置控制器119中的处理装置(例如,cpu)的暂时性程序存储器等。
53.在一个实施例中,系统117可以包括诸如可充电电池或电容器等的存储能量装置122。存储能量装置122可以存储足够的能量来为存储装置控制器119、一定量的ram(例如,ram 121)和一定量的闪存存储器(例如,闪存存储器120a~120n)供电足以将ram的内容写入闪存存储器的时间。在一个实施例中,如果存储装置控制器119a~d检测到外部电力的损耗,则存储装置控制器可以将ram的内容写入闪存存储器。
54.在一个实施例中,系统117包括两个数据通信链路123a、123b。在一个实施例中,数据通信链路123a、123b可以是pci接口。在另一实施例中,数据通信链路123a、123b可以基于其他通信标准(例如,超传输(hypertransport)、无限带宽等)。数据通信链路123a、123b可以基于非易失性存储器标准(nvme)或跨结构的nvme(nvmf)规范,该规范允许从存储系统117中的其他组件到存储装置控制器119a~d的外部连接。应当注意,为了方便起见,这里可以将数据通信链路可互换地称为pci总线。
55.图1d例示根据一些实现的数据存储的第三示例系统124。在一个实施例中,系统124包括存储控制器125a、125b。在一个实施例中,存储控制器125a、125b可操作地分别耦接到双pci存储装置119a、119b和119c、119d。存储控制器125a、125b可以可操作地(例如,经由存储网络130)耦接到一定数量的主机计算机127a~n。
56.在一个实施例中,两个存储控制器(例如,125a和125b)提供存储服务,诸如scs区块存储阵列、文件服务器、对象服务器、数据库或数据分析服务等。存储控制器125a、125b可以通过一定数量的网络接口(例如,126a~d)向存储系统124外部的主机计算机127a~n提供服务。存储控制器125a、125b可以完全在存储系统124内提供集成服务或应用,从而形成融合存储和计算系统。存储控制器125a、125b可以利用存储装置119a~d内或跨存储装置119a~d的快速写入存储器来记录正在进行的操作,以确保在电力故障、存储控制器移除、存储控制器或存储系统关闭或者存储系统124内的一个或多于一个软件或硬件组件的某种故障时操作不会丢失。
57.在一个实施例中,控制器125a、125b作为一个或另一pci总线128a、128b的pci主控进行操作。在另一实施例中,128a和128b可以基于其他通信标准(例如,超传输、无限带宽等)。其他存储系统实施例可以使存储控制器125a、125b作为pci总线128a、128b这两者的多主控进行操作。可选地,pci/nvme/nvmf交换基础设施或结构可以连接多个存储控制器。一些存储系统实施例可以允许存储装置彼此直接通信,而不是仅与存储控制器进行通信。在
一个实施例中,存储装置控制器119a可以在存储控制器125a的指示下操作,以根据已存储在ram(例如,图1c的ram 121)中的数据合成并传送要存储到闪存存储器装置中的数据。例如,可以在存储控制器已经判断为跨存储系统完全提交了操作之后、或者在装置上的快速写入存储器达到了特定使用容量时、或者在特定时间量之后传送ram内容的重新计算版本,以确保提高数据的安全性或释放可寻址的快速写入容量以供重复使用。该机制可以例如用于避免通过总线(例如,128a、128b)从存储控制器125a、125b进行第二次传送。在一个实施例中,重新计算可以包括压缩数据、附加索引或其他元数据、将多个数据段组合在一起、进行擦除码计算等。
58.在一个实施例中,在存储控制器125a、125b的指示下,存储装置控制器119a、119b可以可操作地在不涉及存储控制器125a、125b的情况下根据ram(例如,图1c的ram 121)中所存储的数据来计算数据并将数据传送到其他存储装置。该操作可以用于在一个控制器125a中将所存储的数据镜像到另一控制器125b,或者其可以用于将压缩、数据聚合和/或擦除编码计算和传送卸载到存储装置,以减少存储控制器或到pci总线128a、128b的存储控制器接口129a、129b上的负载。
59.存储装置控制器119a~d可以包括用于实现高可用性原语以供双pci存储装置118外部的存储系统的其他部分使用的机制。例如,可以提供保留或排除原语,使得在用于提供高可用性存储服务的具有两个存储控制器的存储系统中,一个存储控制器可以防止另一存储控制器访问或继续访问存储装置。该机制可以例如在一个控制器检测到另一控制器运行不正常或两个存储控制器之间的互连本身可能正运行不正常的情况下使用。
60.图2a是根据一些实施例的具有多个存储节点150以及耦接到各存储节点以提供网络附加存储或存储区域网络的内部固态存储器的存储集群161的透视图。网络附加存储、存储区域网络或存储集群或其他存储存储器可以包括一个或多于一个存储集群161,各存储集群161具有一个或多于一个存储节点150,其处于物理组件和由此提供的存储存储器的量这两者的灵活的和可重新配置的布置中。存储集群161被设计以装配在机架中,并且一个或多于一个机架可以根据存储存储器的需要来设置和填充。存储集群161具有机箱138,该机箱138具有多个槽142。应当理解,机箱138可被称为外壳、箱体或机架单元。在一个实施例中,机箱138具有十四个槽142,但容易设想到其他数量的槽。例如,一些实施例具有四个槽、八个槽、十六个槽、三十二个槽或其他合适数量的槽。在一些实施例中,各槽142可以容纳一个存储节点150。机箱138包括可用于将机箱138安装在机架上的翼片(flap)148。风扇144提供用于冷却存储节点150及其组件的空气循环,但是可以使用其他冷却组件,或者可以设想不具有冷却组件的实施例。交换机结构146将机箱138内的存储节点150耦接在一起并耦接到网络以用于与存储器通信。在这里描绘的实施例中,为了例示性目的,交换机结构146和风扇144左侧的槽142被示出为由存储节点150占据,而交换机结构146和风扇144右侧的槽142是空的并且可用于插入存储节点150。该配置是一个示例,并且在各种进一步的布置中一个或多于一个存储节点150可以占据槽142。在一些实施例中,存储节点布置不需要是连续的或相邻的。存储节点150是可热插拔的,这意味着可以在不停止或关闭系统的情况下将存储节点150插入到机箱138中的槽142中或从槽142中移除。在相对于槽142插入或移除存储节点150时,系统自动重新配置以识别并适应改变。在一些实施例中,重新配置包括恢复冗余和/或重新平衡数据或负载。
61.各存储节点150可以具有多个组件。在这里所示的实施例中,存储节点150包括由cpu 156即处理器、耦接到cpu 156的存储器154以及耦接到cpu156的非易失性固态存储152填充的印刷电路板159,但是在进一步的实施例中可以使用其他安装件和/或组件。存储器154具有由cpu 156执行的指令和/或由cpu 156操作的数据。如以下进一步说明的,非易失性固态存储152包括闪存,或者在进一步的实施例中包括其他类型的固态存储器。
62.图2b是示出耦接多个存储节点150的通信互连173和配电总线172的框图。参考回图2a,在一些实施例中,通信互连173可以包括在交换机结构146中或与交换机结构146一起实现。在一些实施例中,在多个存储集群161占据机架的情况下,通信互连173可以包括在机架交换机的顶部或与机架交换机的顶部一起实现。如图2b所例示,存储集群161被封闭在单个机箱138内。外部端口176通过通信互连173耦接到存储节点150,而外部端口174直接耦接到存储节点。外部电源端口178耦接到配电总线172。存储节点150可以包括如参考图2a所述的非易失性固态存储152的变化量和不同容量。另外,一个或多于一个存储节点150可以是如图2b所例示的仅计算存储节点。权限168在非易失性固态存储152上实现,例如作为存储在存储器中的列表或其他数据结构。在一些实施例中,权限被存储在非易失性固态存储152内,并且由在非易失性固态存储152的控制器或其他处理器上执行的软件支持。在进一步的实施例中,权限168在存储节点150上实现,例如作为存储在存储器154中的列表或其他数据结构并由在存储节点150的cpu 156上执行的软件支持。在一些实施例中,权限168控制数据如何存储在非易失性固态存储152中以及存储在非易失性固态存储152的何处。该控制有助于确定哪种类型的擦除编码方案被应用于数据以及哪些存储节点150具有数据的哪些部分。各权限168可被指派给非易失性固态存储152。在各种实施例中,各权限可以控制由文件系统、由存储节点150或由非易失性固态存储152指派给数据的索引节点编号、段号或其他数据标识符的范围。
63.在一些实施例中,每条数据和每条元数据在系统中具有冗余。另外,每条数据和每条元数据具有所有者,这可以被称为权限。如果该权限例如由于存储节点的故障而不可达,则存在用于如何找到该数据或该元数据的继承计划。在各种实施例中,存在权限168的冗余副本。在一些实施例中,权限168具有与存储节点150和非易失性固态存储152的关系。覆盖数据段号或数据的其他标识符的范围的各权限168可被指派给特定的非易失性固态存储152。在一些实施例中,用于所有此类范围的权限168分布在存储集群的非易失性固态存储152上。各存储节点150具有用于提供对该存储节点150的(一个或多于一个)非易失性固态存储152的访问的网络端口。在一些实施例中,数据可以存储在与段号相关联的段中,并且该段号是针对raid(独立磁盘冗余阵列)条带的配置的一种间接性(indirection)。因此,权限168的指派和使用建立了对数据的间接性。根据一些实施例,间接性可被称为在这种情况下经由权限168间接引用数据的能力。段识别可以包含数据的一组非易失性固态存储152和该组非易失性固态存储152中的本地标识符。在一些实施例中,本地标识符是装置中的偏移,并且可以由多个段顺序地重复使用。在其他实施例中,本地标识符对于特定的段是唯一的,且从不重复使用。非易失性固态存储152中的偏移被应用于定位数据以写入非易失性固态存储152或从非易失性固态存储152读取(以raid条带的形式)。跨非易失性固态存储152的多个单元条带化数据,该非易失性固态存储152可以包括或不同于具有用于特定数据段的权限168的非易失性固态存储152。
64.在存在特定数据段被定位在何处的改变的情况下,例如在数据移动或数据重建期间,应当在具有该权限168的非易失性固态存储152或存储节点150处查阅针对该数据段的权限168。为了定位特定的数据,实施例计算数据段的散列值或应用索引节点编号或数据段号。该操作的输出指向具有用于该特定数据的权限168的非易失性固态存储152。在一些实施例中,针对进行该操作,存在两级。第一级将例如段号、索引节点编号或目录号等的实体标识符(id)映射到权限标识符。该映射可以包括诸如散列或位掩码等的计算。第二级是将权限标识符映射到特定的非易失性固态存储152,其可以通过显式映射来完成。该操作是可重复的,使得在进行计算时,计算的结果可重复地且可靠地指向具有该权限168的特定非易失性固态存储152。该操作可以包括一组可达的存储节点作为输入。如果该组可达的非易失性固态存储单元改变,则最佳组改变。在一些实施例中,持续保持的值是当前指派(其总是为真),并且所计算出的值是集群将尝试重新配置的目标指派。该计算可以用于在存在可达并且构成相同的集群的一组非易失性固态存储152的情况下为权限确定最佳的非易失性固态存储152。该计算还确定一组有序的对等非易失性固态存储152,该对等非易失性固态存储152还将记录对非易失性固态存储映射的权限,使得即使所指派的非易失性固态存储不可达,也可以确定权限。在一些实施例中如果特定权限168不可用,则可以查阅副本或替代权限168。
65.参考图2a和2b,存储节点150上的cpu 156的许多任务中的两个任务是分解写入数据以及重组读取数据。在系统已判断为要写入数据的情况下,用于该数据的权限168按照如上定位。在已经确定数据的段id的情况下,将写入请求转发到当前被确定为从段所确定的权限168的主机的非易失性固态存储152。然后,驻留有非易失性固态存储152和相应的权限168的存储节点150的主机cpu 156对数据进行分解或分片,并将数据发送到各种非易失性固态存储152。所发送的数据根据擦除编码方案被写为数据条带。在一些实施例中,请求拉取数据,并且在其他实施例中,推送数据。相反,当读取数据时,包含数据的段id的权限168按照如上定位。驻留有非易失性固态存储152和相应的权限168的存储节点150的主机cpu 156请求来自由权限指向的非易失性固态存储和相应存储节点的数据。在一些实施例中,该数据作为数据条带从闪存存储读取。然后,存储节点150的主机cpu 156重组读取的数据,根据适当的擦除编码方案校正任何错误(如果存在的话),并且将重组数据转发到网络。在进一步的实施例中,这些任务中的部分或全部可以在非易失性固态存储152中处理。在一些实施例中,段主机通过从存储中请求页、然后将数据发送到进行原始请求的存储节点,来请求将数据发送到存储节点150。
66.在一些系统中,例如在unix型文件系统中,使用索引式节点或索引节点来处理数据,其中索引式节点或索引节点指定表示文件系统中的对象的数据结构。对象可以例如是文件或目录。元数据可以伴随该对象,作为诸如许可数据和创建时间戳等的属性以及其他属性。段号可被指派给文件系统中的此类对象的全部或一部分。在其他系统中,使用在其他位置指派的段号来处理数据段。为了讨论的目的,分布单元是实体,并且实体可以是文件、目录或段。也就是说,实体是由存储系统存储的数据或元数据的单元。实体被分组为称为权限的组。各权限具有权限所有者,其是具有对权限中的实体进行更新的专有权的存储节点。换句话说,存储节点包含权限,并且该权限继而包含实体。
67.根据一些实施例,段是数据的逻辑容器。段是介质地址空间和物理闪存位置之间
的地址空间,即数据段号在该地址空间中。段也可以包含元数据,其使得数据冗余能够被恢复(重写到不同的闪存位置或装置),而无需涉及高级软件。在一个实施例中,段的内部格式包含客户端数据和介质映射以确定该数据的位置。在适用的情况下,通过将段分解成多个数据和奇偶校验分片(shard)来保护各数据段,例如,防止存储器故障和其他故障。根据擦除编码方案,该数据和奇偶校验分片跨耦接到主机cpu 156(参见图2e和2g)的非易失性固态存储152分布,即条带化。在一些实施例中,术语段的使用是指容器及其在段的地址空间中的位置。根据一些实施例,术语条带的使用是指与段相同的一组分片,并且包括分片如何与冗余或奇偶校验信息一起分布。
68.跨整个存储系统发生一系列地址空间变换。在顶部是链接到索引节点的目录条目(文件名)。索引节点指向逻辑地存储数据的介质地址空间。介质地址可以通过一系列间接介质进行映射以分散大文件的负载,或者实现如去重复或快照等的数据服务。介质地址可以通过一系列间接介质进行映射以分散大文件的负载,或者实现如去重复或快照等的数据服务。然后,段地址被转换为物理闪存位置。根据一些实施例,物理闪存位置具有由系统中的闪存量界定的地址范围。介质地址和段地址是逻辑容器,并且在一些实施例中使用128位或更大的标识符以致实际上是无限的,其中重复使用的可能性被计算为比系统的预期生命期更长。在一些实施例中,以分层方式分配来自逻辑容器的地址。最初,各非易失性固态存储单元152可被指派一定范围的地址空间。在该指派的范围内,非易失性固态存储152能够分配地址而无需与其他非易失性固态存储152同步。
69.图2c是示出存储节点150的内容和存储节点150的非易失性固态存储152的内容的多级框图。在一些实施例中,数据通过网络接口控制器(nic)202相对于存储节点150进行通信。如以上所讨论的,各存储节点150具有cpu 156以及一个或多于一个非易失性固态存储152。在图2c中向下移动一级,各非易失性固态存储152具有相对快速的非易失性固态存储器,诸如非易失性随机存取存储器(nvram)204和闪存存储器206等。在一些实施例中,nvram204可以是不需要编程/擦除周期的组件(dram、mram、pcm),并且可以是能够支持比从该存储器读取频繁得多地被写入的存储器。在图2c中向下移动另一级,nvram 204在一个实施例中被实现为由能量储备218备份的诸如动态随机存取存储器(dram)216等的高速易失性存储器。能量储备218提供充足的电力以在电力故障的情况下保持对dram 216供电足够长时间以用于将内容传送到闪存存储器206。在一些实施例中,能量储备218是电容器、超级电容器、电池或其他装置,其供给足以在电力损耗的情况下使得dram 216的内容能够传送到稳定的存储介质的合适能量供应。闪存存储器206被实现为多个闪存晶圆222,其可被称为闪存晶圆222的封装或闪存晶圆222的阵列。应当理解,闪存晶圆222可以通过以下任意多个方式封装:每个封装一个晶圆、每个封装多个晶圆(即多芯片封装)、以混合封装、作为印刷电路板或其他基板上的裸晶圆、作为封装晶圆等。在所示的实施例中,非易失性固态存储152具有控制器212或其他处理器以及耦接到控制器212的输入输出(i/o)端口210。i/o端口210耦接到闪存存储节点150的cpu 156和/或网络接口控制器202。闪存输入输出(i/o)端口220耦接到闪存晶圆222,并且直接存储器存取单元(dma)214耦接到控制器212、dram 216和闪存晶圆222。在所示的实施例中,在可编程逻辑装置(pld)208(例如fpga)上实现i/o端口210、控制器212、dma单元214和闪存i/o端口220。在该实施例中,各闪存晶圆222具有被组织为十六kb(千字节)页224的页、以及能够相对于闪存晶圆222写入或读取数据的寄存器226。
在进一步的实施例中,代替闪存晶圆222内所例示的闪存存储器或者作为闪存晶圆222内所例示的闪存存储器的附加而使用其他类型的固态存储器。
70.图2d示出存储服务器环境,该存储服务器环境使用图2a~c的存储节点150和存储单元152的实施例。在该版本中,各存储单元152在机箱138(参见图2a)中的pcie(外围组件互连express)板上具有诸如控制器212(参见图2c)、fpga等的处理器、闪存存储器206和nvram 204(即超级电容器支持的dram 216,参见图2b和2c)。存储单元152可被实现为包含存储的单个板,并且可以是机箱内的最大容许故障域。在一些实施例中,多达两个存储单元152可能故障,并且装置将继续无数据丢失。
71.在一些实施例中,基于应用用途将物理存储分割为命名区域。nvram204是存储单元152的dram 216中的连续的保留存储器区块,并由nand闪存支持。nvram 204在逻辑上被分割为多个存储器区域,其中两个存储器区域被写入为假脱机(例如,spool_region)。nvram 204假脱机内的空间由各权限168独立管理。各装置向各权限168提供一定量的存储空间。该权限168进一步管理该空间内的生命期和分配。假脱机的示例包括分布式事务或概念。当存储单元152的主电源故障时,板载超级电容器提供短持续时间的电源保持。在该保持间隔期间,nvram 204的内容被刷新到闪存存储器206。在下一次接通电源时,从闪存存储器206恢复nvram 204的内容。
72.关于存储单元控制器,逻辑“控制器”的责任跨包含权限168的各刀片分布。逻辑控制的这种分布在图2d中示出为主机控制器242、中间层控制器244和(一个或多于一个)存储单元控制器246。控制平面和存储平面的管理是独立处理的,但是部件可以物理地共同位于同一刀片上。各权限168有效地用作独立的控制器。各权限168提供其自身的数据和元数据结构、其自身的后台工作者,并维持其自身的生命期。
73.图2e是刀片252硬件框图,其示出在图2d的存储服务器环境中使用图2a~c的存储节点150和存储单元152的实施例的控制平面254、计算和存储平面256、258以及与基础物理资源进行交互的权限168。控制平面254被分区为多个权限168,该多个权限168可以使用计算平面256中的计算资源以在任何刀片252上运行。存储平面258被分区为一组装置,其各自提供对闪存206和nvram 204资源的访问。在一个实施例中,如这里所述,计算平面256可以对存储平面258(例如,存储阵列)的一个或多于一个装置进行存储阵列控制器的操作。
74.在图2e的计算平面256和存储平面258中,权限168与基础物理资源(即,装置)进行交互。从权限168的角度来看,其资源在所有物理装置上条带化。从装置的角度来看,其向所有权限168提供资源,与权限恰好在何处运行无关。各权限168已被分配了或一直被分配有存储单元152中的存储存储器的一个或多于一个分区260,例如闪存存储器206和nvram 204中的分区260。各权限168使用属于它的这些分配分区260来写入或读取用户数据。权限可以与系统的不同量的物理存储相关联。例如,一个权限168与一个或多于一个其他权限168相比,可以具有一个或多于一个存储单元152中的更大数量的分区260或更大大小的分区260。
75.图2f描绘了根据一些实施例的存储集群的刀片252中的弹性软件层。在弹性结构中,弹性软件是对称的,即,各刀片的计算模块270运行图2f所描绘的三个相同的处理层。存储管理器274对存储在本地存储单元152nvram204和闪存206中的数据和元数据执行来自其他刀片252的读取和写入请求。权限168通过向存储单元152上驻留有相应数据或元数据的刀片252发出必要的读取和写入来完成客户端请求。端点272解析从交换机结构146监控软
件接收到的客户端连接请求,将客户端连接请求转发给负责完成的权限168,并将权限168的响应转发给客户端。对称的三层结构使得存储系统具有高度的并发性。在这些实施例中,弹性有效且可靠地向外扩展。另外,弹性实现了一种独特的向外扩展技术,该技术使得无论客户端访问模式如何都能跨所有资源均匀地平衡工作,并通过消除对通常利用传统分布式锁定发生的刀片间协调的大量需求来最大限度地实现并发性。
76.仍然参考图2f,运行在刀片252的计算模块270中的权限168进行完成客户端请求所需的内部操作。弹性的一个特征是权限168是无状态的,即它们将活动数据和元数据缓存在其自身的刀片252的dram中以供快速访问,但权限将每个更新存储在其三个单独刀片252上的nvram 204分区中,直到更新被写入闪存206为止。在一些实施例中,对nvram 204的所有存储系统写入都是对三个单独刀片252上的分区进行三次。利用三重镜像nvram 204以及受奇偶校验和reed-solomon raid校验和保护的持久存储,存储系统可以在不丢失数据、元数据或对两者中任一者的访问的情况下幸存于两个刀片252的并发故障。
77.图2g描绘了根据一些实施例的存储集群的刀片252中的权限168和存储资源。各权限168专门负责各刀片252上的闪存206和nvram 204的分区。权限168独立于其他权限168管理其分区的内容和完整性。权限168对传入数据进行压缩,并将其暂时保存在其nvram 204分区中,然后合并、raid保护,并将数据保持在其闪存206分区中的存储段中。随着权限168将数据写入闪存206,存储管理器274进行必要的闪存转换,以优化写入性能并最大限度地延长介质生命期。在后台,权限168进行“垃圾收集”或通过重写数据来回收被客户端淘汰的数据所占据的空间。应当理解,由于权限168的分区是不相连的,因此无需分布式锁定来执行客户端和写入或进行后台功能。
78.这里描述的实施例可以利用各种软件、通信和/或网络协议。另外,可以调整硬件和/或软件的配置,以适应各种协议。例如,本实施例可以利用活动目录(active directory),该活动目录是用于在windowstm环境中提供认证、目录、策略和其他服务的基于数据库的系统。在这些实施例中,ldap(轻量级目录访问协议)是用于查询和修改诸如活动目录等的目录服务提供商中的项的一个示例应用协议。在一些实施例中,网络锁管理器(nlm)被用作与网络文件系统(nfs)协作工作以提供系统v风格的咨询文件和通过网络的记录锁定的设施。服务器消息区块(smb)协议(其一种版本也被称为通用因特网文件系统(cifs))可以与这里讨论的存储系统集成。smp作为通常用于提供对文件、打印机和串行端口的共享访问以及网络上的节点之间的各种通信的应用层网络协议进行操作。smb还提供了经认证的处理间通信机制。amazontm s3(简单存储服务)是由amazon web服务(amazon web service)提供的web服务,并且这里描述的系统可以通过web服务接口(rest(表述性状态转移)、soap(简单对象访问协议)和bittorrent)与amazon s3进行接合。restful api(应用编程接口)分解事务以创建一系列小模块。各模块处理事务的特定基础部分。这些实施例所提供的控制或许可(尤其是针对对象数据)可以包括访问控制列表(acl)的使用。acl是附加到对象的许可的列表,并且acl指定哪些用户或系统处理被授予对对象的访问以及针对给定对象允许哪些操作。
79.图3a阐述了根据本发明的一些实施例的被耦接以与云服务提供商302进行数据通信的存储系统306的图。尽管描绘得不太详细,但图3a所描绘的存储系统306可以与以上参考图1a~1d和图2a~2g所述的存储系统类似。
80.在图3a所描绘的示例中,存储系统306经由数据通信链路304耦接到云服务提供商302。数据通信链路304可被体现为专用数据通信链路、通过使用诸如广域网(wan)或lan等的一个或多于一个数据通信网络而提供的数据通信路径、或者能够在存储系统306和云服务提供商302之间传输数字信息的某个其他机构。
81.图3a所描绘的云服务提供商302可例如被体现为经由数据通信链路304通过共享计算资源而向云服务提供商302的用户提供大量服务的系统和计算环境。云服务提供商302可以提供对诸如计算机网络、服务器、存储器、应用和服务等的可配置计算资源的共享池的按需访问。可配置资源的共享池可以在最少的管理努力下快速地提供并释放给云服务提供商302的用户。一般地,云服务提供商302的用户不知道云服务提供商302为了提供服务而利用的确切计算资源。尽管在许多情况下,这种云服务提供商302可以经由因特网访问,但本领域读者将认识到,提取共享资源的使用以通过任何数据通信链路向用户提供服务的任何系统可被视为云服务提供商302。
82.在图3a所描绘的示例中,云服务提供商302可被配置为通过实现各种服务模型来向存储系统306和存储系统306的用户提供各种服务。例如,云服务提供商302可被配置为通过实现基础设施即服务(iaas)服务模型、通过实现平台即服务(paas)服务模型、通过实现软件即服务(saas)服务模型、通过实现认证即服务(aaas)服务模型、通过实现存储即服务模型来提供服务,其中云服务提供商302提供对其存储基础设施的访问以供存储系统306和存储系统306的用户使用等。读者将理解,云服务提供商302可被配置为通过实现附加的服务模型来向存储系统306和存储系统306的用户提供附加服务,因为上述的服务模型仅仅是为了说明性目的而被包括的,并且绝不表示云服务提供商302可提供的服务的限制,也不表示关于云服务提供商302可能实施的服务模型的限制。
83.为了进一步说明,图3b阐述了根据本发明的一些实施例的存储系统306的图。尽管描绘得不太详细,但图3b所描绘的存储系统306可以与以上参考图1a~1d和图2a~2g所述的存储系统类似,因为该存储系统可以包括上述的许多组件。
84.图3b所描绘的存储系统306可以包括大量存储资源308,该存储资源308可以以多种形式体现。例如,存储资源308可以包括纳米ram或利用沉积在基板上的碳纳米管的其他形式的非易失性随机存取存储器、3d交叉点非易失性存储器、闪存存储器,其包括单级单元(slc)nand闪存、多级单元(mlc)nand闪存、三级单元(tlc)nand闪存和四级单元(qlc)nand闪存等
85.图3b所描绘的示例存储系统306可以实现各种存储架构。例如,根据本发明的一些实施例的存储系统可以利用区块存储,其中数据存储在区块中,并且各区块基本上用作单独的硬盘驱动器。根据本发明的一些实施例的存储系统可以利用对象存储,其中数据作为对象被管理。各对象可以包括数据本身、可变量的元数据以及全局唯一标识符,其中对象存储可以在多个级(例如,装置级、系统级、接口级)处实现。根据本发明的一些实施例的存储系统利用文件存储,其中数据存储在分层结构中。这类数据可以保存在文件和文件夹中,并以相同格式呈现给存储该数据的系统和检索该数据的系统这两者。
86.图3b所描绘的存储系统306还包括通信资源310,该通信资源310可能有助于促进存储系统306内的组件之间的数据通信以及存储系统306与存储系统306之外的计算装置之间的数据通信,包括其中这些资源被相对巨大的区域分开的实施例。
87.图3b所描绘的存储系统306还包括处理资源312,该处理资源312可以有助于执行计算机程序指令以及进行存储系统306内的其他计算任务。处理资源312可以包括为了某一特定目的而定制的一个或多于一个asic以及一个或多于一个cpu。处理资源312还可以包括一个或多于一个dsp、一个或多于一个fpga、一个或多于一个片上系统(soc)或其他形式的处理资源312。存储系统306可以利用存储资源312来进行各种任务,包括但不限于支持以下将更详细描述的软件资源314的执行。
88.图3b所描绘的存储系统306还包括软件资源314,该软件资源314在由存储系统306内的处理资源312执行时可以进行大量任务。软件资源314可以例如包括一个或多于一个计算机程序指令模块,该一个或多于一个计算机程序指令模块在由存储系统306内的处理资源312执行时有助于执行各种数据保护技术以保持存储系统内所存储的数据的完整性。
89.软件资源314还可以包括有助于实现软件定义存储(sds)的软件。在这样的示例中,软件资源314可以包括一个或多于一个计算机程序指令模块,该一个或多于一个计算机程序指令模块在被执行时有助于基于策略地提供和管理独立于基础硬件的数据存储。这样的软件资源314可以有助于实现存储虚拟化,以将存储硬件与管理存储硬件的软件分开。
90.图3c阐述了根据本发明的一些实施例的基于云的存储系统318的示例。在图3c所描绘的示例中,基于云的存储系统318完全在诸如amazon web服务(amazon web service)(aws)、microsoft azure、谷歌云平台(google cloud platform)、ibm云(ibm cloud)和oracle云(oracle cloud)等的云计算环境316中创建。基于云的存储系统318可用于提供与上述的存储系统可能提供的服务类似的服务。例如,基于云的存储系统318可用于向基于云的存储系统318的用户提供区块存储服务,基于云的存储系统318可用于通过使用固态存储来向基于云的存储系统318的用户提供存储服务,等等。
91.图3c所描绘的基于云的存储系统318包括两个云计算实例320、322,这两个云计算实例320、322各自用于支持存储控制器应用324、326的执行。云计算实例320、322可例如被体现为云计算环境316可能提供以支持诸如存储控制器应用324、326等的软件应用的执行的云计算资源(例如,虚拟机)的实例。在一个实施例中,云计算实例320、322可被体现为amazon弹性计算云(amazon elastic compute cloud)(ec2)实例。在这样的示例中,可以启动包括存储控制器应用324、326的amazon机器图像(amazon machine image)(ami)以创建和配置可执行存储控制器应用324、326的虚拟机。
92.在图3c所描绘的示例方法中,存储控制器应用324、326可被体现为计算机程序指令模块,该计算机程序指令模块在被执行时执行各种存储任务。例如,存储控制器应用324、326可被体现为计算机程序指令模块,该计算机程序指令模块在被执行时执行与上述图1a中的控制器110a、110b相同的任务。
93.图3c所描绘的基于云的存储系统318包括具有本地存储330、334、338的云计算实例340a、340b、340n。图3c所描绘的云计算实例340a、340b、340n可例如被体现为云计算环境316可能提供以支持软件应用的执行的云计算资源的实例。图3c的云计算实例340a、340b、340n可能与上述的云计算实例320、322不同,因为图3c的云计算实例340a、340b、340n具有本地存储330、334、338资源,而支持存储控制器应用324、326的执行的云计算实例320、322无需具有本地存储资源。具有本地存储330、334、338的云计算实例340a、340b、340n可例如被体现为包括一个或多于一个ssd的ec2 m5实例、包括一个或多于一个ssd的ec2 r5实例、
以及包括一个或多于一个ssd的ec2 i3实例等。在一些实施例中,本地存储330、334、338必须被体现为固态存储(例如,ssd),而不是利用硬盘驱动器的存储。
94.在图3c所描绘的示例中,具有本地存储330、334、338的云计算实例340a、340b、340n各自可以包括软件守护进程328、332、336,该软件守护进程在由云计算实例340a、340b、340n执行时可以将自身呈现给存储控制器应用324、326,就好像云计算实例340a、340b、340n是物理存储装置(例如,一个或多于一个ssd)那样。在这样的示例中,软件守护进程328、332、336可以包括与通常包含在存储装置上以使得存储控制器应用324、326可以发送和接收存储控制器将发送到存储装置的相同命令的计算机程序指令类似的计算机程序指令。以这种方式,存储控制器应用324、326可以包括与上述的存储系统中的控制器将执行的代码相同(或基本上相同)的代码。在这些和类似的实施例中,存储控制器应用324、326和具有本地存储330、334、338的云计算实例340a、340b、340n之间的通信可以利用iscsi、基于tcp的nvme、消息传送、定制协议或采用某种其他机制。
95.在图3c所描绘的示例中,具有本地存储330、334、338的云计算实例340a、340b、340n各自也可以耦接到云计算环境316所提供的区块存储342、344、346。云计算环境316所提供的区块存储342、344、346可例如被体现为amazon elastic block store(ebs)卷。例如,第一ebs卷可以耦接到第一云计算实例340a,第二ebs卷可以耦接到第二云计算实例340b,以及第三ebs卷可以耦接到第三云计算实例340n。在这样的示例中,云计算环境316所提供的区块存储342、344、346可以以与如何利用上述的nvram装置类似的方式利用,因为在特定云计算实例340a、340b、340n中执行的软件守护进程328、332、336(或某个其他模块)在接收到写入数据的请求时可以发起数据向其附加ebs卷的写入以及数据向其本地存储330、334、338资源的写入。在一些可选实施例中,数据只能写入特定云计算实例340a、340b、340n内的本地存储330、334、338资源。在可选实施例中,可以使用具有本地存储330、334、338的各云计算实例340a、340b、340n上的实际ram作为nvram,而不是使用云计算环境316所提供的区块存储342、344、346作为nvram,从而降低与使用ebs卷作为nvram相关联的网络利用成本。
96.基于云的存储系统318可以用于向基于云的存储系统318的用户提供区块存储服务。虽然由云计算实例340a、340b、340n利用的本地存储330、334、338资源和区块存储342、344、346资源可以支持区块级访问,但是附接到特定云计算实例340a、340b、340n的基于云的对象存储348仅支持基于对象的访问。为了解决这个问题,软件守护进程328、332、336或在特定云计算实例340a、340b、340n上执行的计算机程序指令的某个其他模块可被配置为获取数据区块,将这些区块封装成对象,并将对象写入附接到特定云计算实例340a、340b、340n的基于云的对象存储348。
97.在本发明的一些实施例中,作为从不(或几乎从不)重写对象的尝试的一部分,当数据被写入s3时,所得对象可以用序列号进行标记。在一些实施例中,这些序列号可以保持在其他地方(例如,在数据库中),使得在任何时间点,可以知道与某个数据的最新版本相关联的序列号。以这种方式,可以通过读取与对象相关联的序列号而无需实际从s3中读取某个数据来判断s3是否具有该数据的最新版本。
98.图3d例示可被具体地配置为进行这里所述的处理中的一个或多于一个处理的示例性计算装置350。如图3d所示,计算装置350可以包括经由通信基础设施360彼此通信连接
的通信接口352、处理器354、存储装置356和输入/输出(i/o)模块358。虽然图3d中示出示例性计算装置350,但图3d所例示的组件不旨在是限制性的。在其他实施例中可以使用附加的或替代的组件。现在将更详细地描述图3d所示的计算装置350的组件。
99.通信接口352可被配置为与一个或多于一个计算装置进行通信。通信接口352的示例包括但不限于有线网络接口(诸如网络接口卡)、无线网络接口(诸如无线网络接口卡)、调制解调器、音频/视频连接以及任何其他合适的接口。
100.处理器354一般表示能够处理数据以及/或者解释、执行和/或引导执行这里描述的指令、处理和/或操作中的一个或多于一个的任何类型或形式的处理单元。处理器354可以通过执行存储装置356中所存储的计算机可执行指令362(例如,应用、软件、代码和/或其他可执行数据实例)来进行操作。
101.存储装置356可以包括一个或多于一个数据存储介质、装置或配置,并且可以采用任何类型、形式和组合的数据存储介质和/或装置。例如,存储装置356可以包括但不限于这里所述的非易失性介质和/或易失性介质的任何组合。包括这里所述的数据的电子数据可以暂时和/或永久地存储在存储装置356中。例如,可以将表示被配置为引导处理器354进行这里所述的任何操作的计算机可执行指令362的数据存储在存储装置356内。在一些示例中,数据可被布置在驻留于存储装置356内的一个或多于一个数据库中。
102.i/o模块358可以包括被配置为接收用户输入并提供用户输出的一个或多于一个i/o模块。i/o模块358可以包括支持输入和输出能力的任何硬件、固件、软件或其组合。例如,i/o模块358可以包括用于捕获用户输入的硬件和/或软件,包括但不限于键盘或小键盘、触摸屏组件(例如,触摸屏显示器)、接收器(例如,rf或红外接收器)、运动传感器以及/或者一个或多于一个输入按钮。
103.i/o模块358可以包括用于向用户呈现输出的一个或多于一个装置,包括但不限于图形引擎、显示器(例如,显示屏)、一个或多于一个输出驱动器(例如,显示驱动器)、一个或多于一个音频扬声器以及一个或多于一个音频驱动器。在某些实施例中,i/o模块358被配置为向显示器提供图形数据以呈现给用户。图形数据可以表示一个或多于一个图形用户界面以及/或者可服务于特定实现的任何其他图形内容。在一些示例中,可以通过计算装置350来实现这里所述的任何系统、计算装置和/或其他组件。
104.在一些示例中,可以根据本文描述的原理提供存储计算机可读指令的非暂时性计算机可读介质。当由计算装置的处理器执行时,指令可以指示处理器和/或计算装置进行一个或多于一个操作,包括本文描述的一个或多于一个操作。可以使用各种已知的计算机可读介质中的任一种来存储和/或发送这样的指令。
105.如本文中所提及的非暂时性计算机可读介质可以包括参与提供可由计算装置(例如,由计算装置的处理器)读取和/或执行的数据(例如,指令)的任何非暂时性存储介质。例如,非暂时性计算机可读介质可以包括但不限于非易失性存储介质和/或易失性存储介质的任何组合。示例性非易失性存储介质包括但不限于只读存储器、闪存、固态驱动器、磁存储装置(例如,硬盘、软盘、磁带等)、铁电随机存取存储器(ram)和光盘(例如,致密盘、数字视频盘、蓝光盘等)。示例性易失性存储介质包括但不限于ram(例如,动态ram)。
106.可以通过以下声明进一步描述本发明的优点和特征。
107.1.一种数据存储系统,包括:存储器,其存储指令;以及处理器,其通信地耦接到所
述存储器并且被配置为执行所述指令以:建立由区块对象构成的文件系统,其中,所述区块对象存储所述文件系统的各个文件和目录的元数据,并且支持对与所述文件系统的文件和目录相关联的数据的区块的随机读写访问。
108.2.根据声明1所述的数据存储系统,其中,所述区块对象表示与所述文件系统的文件和目录相关联的数据的区块的线性地址空间。
109.3.根据任何前述声明所述的数据存储系统,其中,所述区块对象精简设置有区块范围解除分配能力。
110.4.根据任何前述声明所述的数据存储系统,其中,所述处理器被配置为执行所述指令以:使用所述区块对象的句柄向所述区块对象写入内容和从所述区块对象读取内容。
111.5.根据任何前述声明所述的数据存储系统,其中,所述处理器被配置为执行所述指令以:将所述区块对象存储到作为与所述文件系统相关联的文件存储服务的批量后端进行操作的数据存储。
112.6.根据任何前述声明所述的数据存储系统,其中,所述处理器被配置为执行所述指令以:建立包括由所述区块对象构成的文件系统的豆荚,其中,所述豆荚是将存储实体分组在命名空间内并且支持对作为组的存储实体的操作的存储系统构造。
113.7.根据声明6所述的数据存储系统,其中,所述处理器被配置为执行所述指令以:生成所述豆荚的虚拟副本,使得在生成所述豆荚的虚拟副本之后对所述豆荚进行的修改与所述豆荚的虚拟副本不同。
114.8.根据声明7所述的数据存储系统,其中,所述豆荚的虚拟副本包括所述豆荚的不可变快照。
115.9.根据声明7所述的数据存储系统,其中:所述豆荚的虚拟副本包括所述豆荚的克隆;以及所述豆荚的虚拟副本的生成包括创建作为所述豆荚的虚拟克隆的新的可变豆荚。
116.10.根据声明6~9中任一项所述的数据存储系统,其中,所述处理器被配置为执行所述指令以:将所述豆荚从源存储系统复制到目标存储系统。
117.11.根据任何前述声明所述的数据存储系统,其中,所述处理器被配置为执行所述指令以:建立路径集,所述路径集表示与所述文件系统的目录层次结构的文件和目录相关联的区块对象的集合;基于所述路径集和应用于所述文件系统的目录层次结构的操作来协调对区块对象的集合的操作的实现。
118.12.根据声明11所述的数据存储系统,其中:所述文件系统包括表示所述文件系统的目录层次结构的配置信息;以及所述区块对象不包括表示所述文件系统的目录层次结构的配置信息。
119.13.一种方法,包括:由数据存储系统的处理器建立由区块对象构成的文件系统;以及由所述处理器将所述区块对象存储到作为所述文件系统的批量后端进行操作的数据存储,其中,所述区块对象存储所述文件系统的各个文件和目录的元数据,并且支持对与所述文件系统的文件和目录相关联的数据的区块的随机读写访问。
120.14.根据声明13所述的方法,还包括:由所述处理器使用所述区块对象的句柄向所述区块对象写入内容和从所述区块对象读取内容。
121.15.根据声明13或14所述的方法,还包括:由所述处理器建立包括由所述区块对象构成的文件系统的豆荚,其中,所述豆荚是将存储实体分组在命名空间内并且支持对作为
组的存储实体的操作的存储系统构造。
122.16.根据声明15所述的方法,还包括:由所述处理器生成所述豆荚的虚拟副本,使得在生成所述豆荚的虚拟副本之后对所述豆荚进行的修改与所述豆荚的虚拟副本不同。
123.17.根据声明15所述的方法,还包括:由所述处理器将所述豆荚从源存储系统复制到目标存储系统。
124.18.根据声明13~17中任一项所述的方法,还包括:由所述处理器建立路径集,所述路径集表示与所述文件系统的目录层次结构的文件和目录相关联的区块对象的集合;以及由所述处理器基于所述路径集和应用于所述文件系统的目录层次结构的操作来协调对区块对象的集合的操作的实现。
125.19.根据声明18所述的方法,其中:所述文件系统包括表示所述文件系统的目录层次结构的配置信息;以及所述区块对象不包括表示所述文件系统的目录层次结构的配置信息。
126.20.一种存储指令的非暂时性计算机可读介质,所述指令在被执行时指示计算装置的处理器:建立由区块对象构成的文件系统,其中,所述区块对象存储所述文件系统的各个文件和目录的元数据,并且支持对与所述文件系统的文件和目录相关联的数据的区块的随机读写访问。
127.本发明的附加优点和特征可以通过以下声明进一步描述。
128.1.一种统一数据存储系统,包括:存储指令的存储器;以及处理器,其通信地耦接到存储器并且被配置为执行指令以:提供表示区块的线性地址空间的区块容器;以及使用区块容器来存储用于多个不同数据存储服务的内容。
129.2.根据声明1所述的系统,其中,多个不同数据存储服务包括文件存储服务、对象存储服务和数据库服务其中至少之一。
130.3.根据前述声明中的任一项所述的系统,其中,区块容器精简设置有区块范围解除分配能力。
131.4.根据前述声明中的任一项所述的系统,其中,区块容器被配置为支持区块容器的快照、克隆、复制、去重复、压缩和加密。
132.5.根据前述声明中的任一项所述的系统,其中,处理器被配置为执行指令以:通过进行一个或多于一个操作来提供区块容器,一个或多于一个操作包括呈现区块容器的句柄;以及通过进行一个或多于一个操作来使用区块容器存储内容,一个或多于一个操作包括使用句柄将内容写入区块容器以及从区块容器读取内容。
133.6.根据前述声明中的任一项所述的系统,其中,处理器被配置为执行指令以通过进行一个或多于一个操作来使用区块容器存储内容,一个或多于一个操作包括将内容写入作为用于多个不同数据存储服务中所包括的数据存储服务的批量后端进行操作的数据存储。
134.7.根据前述声明中的任一项所述的系统,其中,处理器被配置为执行指令以提供被配置为由多个不同数据存储服务调用的应用程序接口。
135.8.一种数据存储系统,包括:存储指令的存储器;以及处理器,其通信地耦接到存储器并且被配置为执行指令以:提供表示区块的线性地址空间的区块容器;以及使用区块容器来存储用于不是区块存储服务的数据存储服务的内容。
136.9.根据前述声明中的任一项所述的系统,其中,数据存储服务包括文件存储服务。
137.10.根据前述声明中的任一项所述的系统,其中,数据存储服务包括对象存储服务。
138.11.根据前述声明中的任一项所述的系统,其中,数据存储服务包括数据库服务。
139.12.根据前述声明中的任一项所述的系统,其中,区块容器被配置为支持区块容器的精简设置、快照、克隆、复制、去重复、压缩和加密。
140.13.一种方法,包括:由数据存储系统提供表示区块的线性地址空间的区块容器;以及由数据存储系统使用区块容器来存储用于多个不同数据存储服务的内容。
141.14.根据前述声明中的任一项所述的方法,其中,使用区块容器存储内容包括:将内容写入作为用于多个不同数据存储服务中所包括的数据存储服务的批量后端进行操作的数据存储。
142.15.根据前述声明中的任一项所述的方法,其中,区块容器精简设置有区块范围解除分配能力。
143.16.根据前述声明中的任一项所述的方法,其中,区块容器被配置为支持区块容器的快照、克隆、复制、去重复、压缩和加密。
144.17.根据前述声明中的任一项所述的方法,其中:提供区块容器包括精简设置区块容器;以及使用区块容器存储内容包括将内容动态地写入到区块容器。
145.18.根据前述声明中的任一项所述的方法,其中:提供区块容器包括呈现区块容器的句柄;以及使用区块容器存储内容包括使用句柄将内容写入到区块容器以及从区块容器读取内容。
146.19.根据前述声明中的任一项所述的方法,其中,多个不同数据存储服务包括文件存储服务、对象存储服务和数据库服务其中至少之一。
147.20.根据前述声明中的任一项所述的方法,还包括:通过数据存储系统提供被配置为由多个不同数据存储服务调用的应用程序接口。
148.本发明的附加优点和特征可以通过以下声明进一步描述。
149.1.一种数据存储系统,包括:存储指令的存储器;以及处理器,其通信地耦接到存储器并且被配置为执行指令以:建立路径集,路径集表示与文件系统的目录层次结构的服务层实体相关联的存储层实体的集合;以及基于路径集和应用于文件系统的目录层次结构的服务层实体中的一个或多于一个服务层实体的操作来协调对存储层实体的操作的实现。
150.2.根据声明1所述的数据存储系统,其中,服务层实体包括文件系统的目录层次结构内的文件和目录;以及存储层实体包括实现文件和目录的区块对象。
151.3.根据前述声明中的任一项所述的数据存储系统,其中,操作包括与文件系统的目录层次结构相关联的目录的快照;并且协调对存储层实体的操作的实现包括响应于修改存储层实体的请求来实现存储层实体中的存储实现实体上的快照。
152.4.根据前述声明中的任一项所述的数据存储系统,其中,在第一时间将快照应用于目录;以及延迟存储层实体上的快照的实现,直到在第一时间之后的第二时间请求修改存储层实体为止。
153.5.根据前述声明中的任一项所述的数据存储系统,其中,修改存储层实体的请求包括删除存储层实体的请求或者写入存储层实体的数据或元数据的请求。
154.6.根据前述声明中的任一项所述的数据存储系统,其中,操作还包括与文件系统的目录层次结构相关联的目录的子目录的快照;以及协调对存储层实体的操作的实现包括响应于修改存储层实体的请求来实现存储层实体上的子目录的快照。
155.7.根据前述声明中的任一项所述的数据存储系统,其中,处理器被配置为执行指令以建立附加路径集,附加路径集表示与文件系统的目录层次结构的服务层实体相关联的存储层实体的附加集合;路径集对应于操作中的第一操作,第一操作在第一时间应用于文件系统的目录层次结构;以及附加路径集对应于操作中的第二操作,第二操作在第一时间之后的第二时间应用于文件系统的目录层次结构。
156.8.根据前述声明中的任一项所述的数据存储系统,其中,路径集表示在第一时间与文件系统的目录层次结构的服务层实体相关联的存储层实体的集合;以及附加路径集表示在第二时间与文件系统的目录层次结构的服务层实体相关联的存储层实体的附加集合。
157.9.根据前述声明中的任一项所述的数据存储系统,其中,在第二时间与文件系统的目录层次结构的服务层实体相关联的存储层实体的附加集合不同于在第一时间与该文件系统的目录层次结构的服务层实体相关联的存储层实体的集合。
158.10.根据前述声明中的任一项所述的数据存储系统,其中,文件系统的目录层次结构与被指定为利用路径集来管理的受管理目录相关联。
159.11.根据前述声明中的任一项所述的数据存储系统,其中,服务层实体由数据存储系统的服务层管理,服务层被配置为提供数据存储服务;存储层实体由数据存储系统的存储层管理;以及数据存储服务的某些方面与服务层分离以由存储层实现。
160.12.根据前述声明中的任一项所述的数据存储系统,其中,服务层维持表示文件系统的目录层次结构的配置信息;以及存储层的存储层实体不维持表示文件系统的目录层次结构的配置信息。
161.13.根据前述声明中的任一项所述的数据存储系统,其中,操作包括快照操作、克隆操作、复制操作、连续数据保护操作、配额操作、空间管理操作和空间核算操作其中至少之一。
162.14.一种数据存储系统,包括:存储指令的存储器;以及处理器,其通信地耦接到存储器并且被配置为执行指令以:确立为在第一时间应用于文件系统的目录层次结构的操作将在稍后的时间被选择性地实现;检测在第一时间之后的第二时间修改存储层实体的请求;以及响应于该请求并且基于指示第一时间的存储层实体与文件系统的目录层次结构相关联的路径集,在基于请求修改存储层实体之前实现对存储层实体的操作。
163.15.根据前述声明中的任一项所述的数据存储系统,其中,操作包括目录层次结构的快照。
164.16.根据前述声明中的任一项所述的数据存储系统,其中,存储层实体包括实现文件系统的目录层次结构的文件或目录的区块对象。
165.17.根据前述声明中的任一项所述的数据存储系统,其中,路径集指示具有目录树的文件系统的任何受管理目录,该目录树包括由区块对象实现的文件或目录。
166.18.一种方法,包括:接收修改实现文件系统的文件服务层实体的存储层实体的请求;响应于该请求并且基于指示存储层实体与文件系统的目录之间的关系的路径集,确定为存在要应用于存储层实体的对目录的待决操作;以及基于该确定,在基于该请求修改存
储层实体之前将待决动作应用于存储层实体。
167.19.根据前述声明中的任一项所述的方法,其中,待决动作包括目录的快照。
168.20.根据前述声明中的任一项所述的方法,其中,存储层实体包括实现文件系统的目录的目录层次结构的文件或目录的区块对象。
169.本发明的附加优点和特征可以通过以下声明进一步描述。
170.1.一种数据存储系统,包括:存储指令的存储器;以及处理器,其通信地耦接到存储器并且被配置为执行指令以:基于包括由区块对象构成的文件系统的豆荚来生成豆荚的虚拟副本,使得在生成豆荚的虚拟副本之后对豆荚进行的修改不同于豆荚的虚拟副本。
171.2.根据声明1的系统,其中:豆荚和豆荚的虚拟副本最初共享区块对象的内容;以及响应于修改区块对象中的区块对象的内容的请求,处理器被配置为执行指令以:在豆荚中生成区块对象的第一虚拟私有实例,其中区块对象的第一虚拟私有实例与区块对象共享区块对象的内容和区块对象的豆荚相关标识;以及在豆荚的虚拟副本中生成区块对象的第二虚拟私有实例,其中区块对象的第二虚拟私有实例与区块对象共享区块对象的内容和区块对象的豆荚相关标识。
172.3.根据声明2所述的系统,其中,处理器被配置为执行指令以:确定为通过豆荚接收到请求;以及将与请求相关联的修改应用于豆荚中的区块对象的第一虚拟私有实例,而不应用于豆荚的虚拟副本中的区块对象的第二虚拟私有实例。
173.4.根据声明2所述的系统,其中,处理器被配置为执行指令以:确定为通过豆荚的虚拟副本接收到请求;以及将与请求相关联的修改应用于豆荚的虚拟副本中的区块对象的第二虚拟私有实例,而不应用于豆荚中的区块对象的第一虚拟私有实例。
174.5.根据声明1~3中任一项所述的系统,其中,豆荚的虚拟副本包括豆荚的不可变快照。
175.6.根据声明1~4中任一项所述的系统,其中:豆荚的虚拟副本包括豆荚的克隆;以及生成豆荚的虚拟副本包括创建作为豆荚的虚拟克隆的新的可变豆荚。
176.7.根据任一前述声明所述的系统,其中:生成豆荚的虚拟副本包括将豆荚的修改时期从第一时期更新为第二时期;第一时期表示在生成豆荚的虚拟副本的时间点的豆荚;以及第二时期表示生成豆荚的虚拟副本的时间点之后的豆荚的可变版本。
177.8.根据声明1~6中任一项所述的系统,其中:豆荚和豆荚的虚拟副本最初共享区块对象的内容;以及豆荚的虚拟副本的生成包括将区块对象的共享内容标记为写时拷贝内容。
178.9.根据任一前述声明所述的系统,其中:文件系统包括数据存储系统的文件系统层中所管理的文件系统实体;以及文件系统实体由数据存储系统的区块对象存储中所管理的区块对象构成。
179.10.根据任一前述声明所述的系统,其中,区块对象的内容:表示文件系统实体的内容;以及将文件系统实体的内容映射到数据存储系统中的数据块。
180.11.根据任一前述声明所述的系统,其中,处理器被配置为执行指令以在豆荚的复制处理中使用豆荚的虚拟副本。
181.12.一种数据存储系统,包括:存储指令的存储器;以及处理器,其通信地耦接到存储器并且被配置为执行指令以:基于包括由区块对象构成的文件系统的豆荚生成豆荚的克
隆,区块对象包括将文件系统的内容映射到数据存储系统中的数据区块的元数据,其中豆荚和豆荚的克隆最初共享区块对象的内容;接收修改区块对象中的区块对象的内容的请求;确定为区块对象的内容在豆荚与豆荚的克隆之间共享;基于该请求生成区块对象的第一虚拟私有实例,第一虚拟私有实例对于豆荚是本地的并且与区块对象共享区块对象的内容;以及基于该请求生成区块对象的第二虚拟私有实例,第二虚拟私有实例对于豆荚的克隆是本地的并且与区块对象共享区块对象的内容。
182.13.根据声明12所述的系统,其中,处理器被配置为执行指令以:确定为通过豆荚的克隆接收到请求;以及将与请求相关联的修改应用于豆荚的克隆中的区块对象的第二虚拟私有实例,而不是应用于豆荚中的区块对象的第一虚拟私有实例。
183.14.一种方法,包括:基于包括由数据存储系统中的区块对象构成的文件系统的豆荚来生成豆荚的虚拟副本,其中豆荚和豆荚的虚拟副本最初共享区块对象的内容;接收修改区块对象中的区块对象的内容的请求;确定为区块对象的内容在豆荚与豆荚的虚拟副本之间共享;生成区块对象的第一虚拟实例,第一虚拟实例对于豆荚是本地的并且与区块对象共享区块对象的内容;以及生成区块对象的第二虚拟实例,第二虚拟实例对于豆荚的虚拟副本是本地的并且与区块对象共享区块对象的内容。
184.15.根据声明14所述的方法,还包括:确定为通过豆荚接收到请求;以及将与请求相关联的修改应用于豆荚中的区块对象的第一虚拟私有实例,而不是应用于豆荚的虚拟副本中的区块对象的第二虚拟私有实例。
185.16.根据声明14所述的方法,还包括:确定为通过豆荚的虚拟副本接收到请求;以及将与请求相关联的修改应用于豆荚的虚拟副本中的区块对象的第二虚拟私有实例,而不是应用于豆荚中的区块对象的第一虚拟私有实例。
186.17.根据声明14或15所述的方法,其中,豆荚的虚拟副本包括豆荚的不可变快照。
187.18.根据声明14~16中任一项所述的方法,其中,豆荚的虚拟副本包括豆荚的克隆;以及生成豆荚的虚拟副本包括创建作为豆荚的虚拟克隆的新的可变豆荚。
188.19.根据声明14~18中任一项所述的方法,其中:生成豆荚的虚拟副本包括将豆荚的标识从第一标识更新为第二标识;第一标识表示生成豆荚的虚拟副本的时间点的豆荚;以及第二标识表示生成豆荚的虚拟副本的时间点之后的豆荚的可变版本。
189.20.根据声明14~18中任一项所述的方法,其中,生成豆荚的虚拟副本包括将区块对象的共享内容标记为写时拷贝内容。
190.本文可以借助于示出指定功能及其关系的执行的方法步骤来描述一个或多于一个实施例。为了便于描述,在本文中任意地定义了这些功能构建块和方法步骤的边界和序列。只要适当地进行指定的功能和关系,就可以定义替代的边界和序列。因此,任何这样的替代边界或序列都在权利要求的范围和精神内。此外,为了便于描述,已经任意定义了这些功能构建块的边界。只要适当地进行某些重要功能,就可以定义替代边界。类似地,流程图块也可以在本文中任意定义以例示某些重要功能。
191.就所使用的程度而言,流程图块边界和序列可能已经以其他方式定义,并且仍然进行某些重要功能。因此,功能构建块和流程图块和序列这两者的这种替代定义在权利要求的范围和精神内。本领域普通技术人员还将认识到,本文的功能构建块以及其他说明性块、模块和组件可以如所示的那样实现,或者由分立组件、专用集成电路、执行适当软件的
处理器等或其任何组合来实现。
192.虽然本文明确描述了一个或多于一个实施例的各种功能和特征的特定组合,但是这些特征和功能的其他组合同样是可能的。本发明不受本文公开的特定示例的限制,并且明确地包含这些其他组合。
193.根据本发明的某些实施例,存储系统可以在区块容器上提供统一数据存储,并且使用区块容器上的统一存储可以提供诸如区块、文件、对象和/或数据库服务等的一个或多于一个数据存储服务。为此,存储系统可以利用区块容器和与区块容器相关联的一个或多于一个资源,使得由存储系统提供的数据存储服务受益于和/或访问区块容器和与区块容器相关联的资源。在某些示例中,这可以允许被优化用于使用全闪存数据存储的实现的区块容器以用于提供被类似地优化用于使用全闪存数据存储的实现的一个或多于一个数据存储服务。存储系统可以提供和/或促进对区块容器和容器数据的高效操作,诸如高效的写入、读取、扩展、精简设置、删除、范围复制、映射、解除映射、快照、克隆、复制、压缩、去重复、垃圾收集等。
194.图4a~4b例示数据存储系统400的示例,其包括彼此通信地耦接的区块容器系统402和容器利用系统404。区块容器系统402和容器利用系统404可以使用任何合适的数据通信技术通信地耦接。
195.区块容器系统402可以提供区块容器405和与区块容器405相关联的资源406。区块容器405可以表示区块的线性地址空间,其中区块容器系统402可以快速且动态地创建和删除区块容器。区块容器405可以精简设置有区块范围解除分配能力。在一些示例中,区块地址空间可以是任何合适的大小,包括非常大(例如,字节或区块的64位地址空间)。区块容器405的实现可以支持区块容器405内和之间的所存储内容的操作和/或共享,诸如跨不同类型的区块容器(例如,跨用于不同类型的存储系统的不同形式的区块容器)的所存储内容的操作或共享等。所存储内容的这种操作或共享的示例包括但不限于整个区块容器以及用于区块容器内和区块容器之间的区块范围的快照、克隆、检查点、复制、去重复、压缩、加密和通过引用操作(例如,通过将一个区块容器的内容引用到另一个区块容器的内容进行克隆)的虚拟复制。区块容器405可以被标记、分组和/或命名,以允许诸如快照、克隆、检查点和复制等的操作或机制在各种类型的区块容器405的集合上一致地和原子地操作,以形成或替换匹配的区块容器405的集合。这样的特征可以便于将单独的区块容器405或区块容器405的集合分组为组。
196.这样的组的示例可以被称为“豆荚(pod)”,豆荚可以表示数据集以及存储数据集的一个或多于一个存储系统。豆荚可以具有名称和标识符。存储系统可以添加到豆荚和从豆荚移除。当存储系统被添加到豆荚时,豆荚的数据集可以被拷贝到该存储系统,然后在数据集被修改时保持最新数据。当从豆荚移除存储系统时,豆荚不再保持存储系统上的最新数据集。对于豆荚而言活动的任何存储系统可以接收和处理修改或读取豆荚的请求。豆荚还可以是管理单元,其表示区块容器405、卷、文件系统、对象/分析存储、快照和其他管理实体的集合,其中在任何一个存储系统上进行管理改变被自动反映到与豆荚相关联的所有活动存储系统。在本文描述的存储系统的上下文中,豆荚可以作为某组对象(例如,区块容器或者区块容器的快照或克隆)的命名空间操作,该组对象可以作为组操作,使得从豆荚添加或移除(诸如区块容器等的)对象组导致未来操作对这些对象的经调整集合进行操作。如果
在存储系统之间(诸如通过对称同步复制等)复制豆荚,则针对豆荚正常操作的各个存储系统将存储具有相同名称和其他标识或标签元数据的这些对象的相同集合。
197.在某些示例中,区块容器405的实现可以优化用于闪存数据存储(例如,全闪存数据存储)的数据存储系统400。例如,区块容器系统402可以被配置为通常收集将被组织成段(例如,中等大小的段)的更新的集合,其中段以通过垃圾收集处理改变或重新使用由所存储的段所保持的内容和容量的方式被写入和管理。段可以是诸如兆字节的量级等的任何合适的大小,并且可以围绕闪存擦除区块最佳地调整大小,或者针对跨被组织为擦除区块的若干基于闪存的存储装置被写入为碎片的擦除编码段最佳地调整大小,或者针对作为用于数据存储系统400的批量后端和/或由数据存储系统400提供的数据存储服务操作的数据存储中的整个数据结构的写入和读取(例如,在作为数据存储系统400的构建后端操作的对象存储中写入和读取整个对象)中的期望吞吐量是合理最优的大小。这样的段可以与基于闪存的数据存储一起工作,基于闪存的数据存储直接或通过诸如分区驱动器等的一些方案暴露擦除区块。这样的方案还可以用于将要写入(以及最终收集的垃圾)的数据组织到非基于闪存的分区驱动器或组织到典型类型的对象存储中的中等大小的对象,其中典型类型的对象存储最佳地支持被写入并最终删除而无需在适当位置更新的对象。
198.在某些实施例中,区块容器系统402可以包括和/或可以被专门设计为使用全闪存数据存储来进行基于区块的数据存储。为此,区块容器系统402可以是基于区块的闪存存储系统,其被优化用于基于区块的闪存存储并且保持数据完整性,提供一致的低延迟和高性能,并且最大化物理介质耐久性。
199.与区块容器405相关联的资源406可以包括被配置为对区块容器405和/或区块容器405的内容进行创建、删除、修改、精简设置、分配、解除分配、附加或以其他方式操作的区块容器系统402的任何组件。资源406可以以任何合适的方式实现,包括作为硬件和/或软件组件(例如,作为可由处理器执行以对区块容器405进行操作的计算机实现的指令)。资源406可以包括本文描述的任何存储系统资源,包括存储资源308、通信资源310、处理资源312、软件资源314和上述其他资源中的任一个。区块容器系统402的资源406的示例包括但不限于数据减少资源(例如,模式移除、去重复和压缩资源)、元数据资源(例如,诸如跟踪逻辑区块地址和物理介质地址之间的关系的一个或多于一个映射等的元数据)、数据结构资源(例如,称为逻辑区的结构图)、数据复制资源(例如,快照、克隆、扩展拷贝、异步复制、同步复制资源)、存储回收资源(例如,垃圾收集资源)、用于跟踪对数据的操作以用于以时移方式(例如,通过后台处理在合适的时间)实现或完成改变的实现的后备数据结构资源、前台或内联数据处理资源(例如,作为数据写入处理的一部分的前台或内联数据减少)、以及后台处理资源(例如,应用于在阈值时间长度内维持不变的逻辑存储数据的后台数据减少、存储回收等)。区块容器系统402的资源406的示例可以包括被配置为进行诸如写入、读取、扩展、精简设置、删除、范围拷贝、映射、取消映射、快照、克隆、复制、压缩、去重复和垃圾收集区块容器405和/或区块容器405的内容的操作的组件和/或处理。
200.区块容器405可以被配置为在任何合适大小和配置的区块中存储和寻址数据。因此,区块容器系统402可以将区块容器405用于多种类型的用途。在某些实现中,区块容器405可以用于表示卷,其可以作为通过scsi、nvme或一些其他区块协议访问的单独数据存储驱动器(例如,操作系统可访问的所安装的驱动器卷)而对客户端主机起作用。在某些实现
中,区块容器405可以附加地或替代地包括或表示固定或可变大小的数据区块,各个数据区块包含多个数据扇区(例如,零个或更多个512字节的数据扇区)。
201.区块容器系统402可以包括或实现上述任何存储系统或存储系统的特征。在某些实施例中,区块容器系统402可以包括虚拟映射的基于写时分配和/或写时拷贝区块的存储系统。
202.区块容器405可以以适于提供本文描述的区块容器系统402的一个或多于一个特征的任何方式实现。现在将描述用于实现区块容器405的架构的示例。这些示例是说明性的而非限制性的。在其他示例中可以使用用于实现区块容器405的附加或替代架构。
203.在某些示例中,可以使用到区块或内容可寻址存储的矢量的线性表来实现区块容器405。在某些示例中,可以使用区块引用的两级矢量来实现区块容器405,其中区块本身被压缩并写入垃圾收集段中。在某些实现中,两级矢量可以使用更细粒度矢量级的写时拷贝。在某些示例中,可以使用对区块或内容可寻址存储的散列引用(例如,散列表)来实现区块容器405。在某些示例中,可以使用引用区块或内容可寻址存储的b树或类似数据结构来实现区块容器405。
204.在某些示例中,区块容器405可以使用被称为逻辑区的结构的图来实现。逻辑区可以包括指向逻辑区块地址、指向其他逻辑区或指向逻辑区块地址和其他逻辑区的组合的指针的列表。逻辑区可以链接在一起以形成数据结构,诸如表示数据之间的关系的逻辑区节点的图等。可以使用逻辑区的任何合适的结构,诸如逻辑区的非循环图等。在某些示例中,区块容器系统402可以使用逻辑区的有向非循环图(dag)或平衡有向非循环图(b-dag)。
205.在某些示例中,逻辑区可以被分类为两种类型的逻辑区:以某种方式(例如,通过包括或指向映射到数据的物理介质位置的逻辑地址)引用一定量的存储数据的叶逻辑区;以及引用其他叶或复合逻辑区的复合逻辑区。
206.叶区可以以各种方式引用数据。可以直接指向所存储数据的单个范围(例如,64千字节的数据),或者可以是对所存储数据的引用的集合(例如,1兆字节的内容“范围”,其将与该范围相关联的一些数量的虚拟区块映射到物理存储的区块)。在后一种情况下,可以使用一些标识来引用这些区块,并且区的范围内的一些区块可以不被映射到任何事物。同样在后一种情况下,这些区块引用不需要是唯一的,从而允许来自一些数量的区块容器(例如,区块容器405)内和跨一些数量的区块容器(例如,区块容器405)的一些数量的逻辑区内的虚拟区块的多个映射以映射到相同的物理存储的区块。代替所存储的区块引用,逻辑区可以编码简单的模式。例如,作为相同字节的串的区块可以简单地编码作为相同字节的重复模式的区块。
207.复合逻辑区可以是具有某个虚拟大小的内容的逻辑范围,其包括多个映射,各个映射从内容的复合逻辑区的逻辑范围的子范围映射到底层叶或复合逻辑区。然后,变换与复合逻辑区的内容相关的请求涉及在复合逻辑区的上下文内获取该请求的内容范围,确定请求映射到哪个底层叶或复合逻辑区,并且变换该请求以应用于那些底层叶或复合逻辑区内的适当内容范围。
208.在区块容器系统402的某些实现中,区块容器可以被定义为逻辑区。因此,可以使用逻辑区模型来组织区块容器。在某些示例中,逻辑区的图可以包括与区块容器系统402中的区块容器相关联的根节点。根节点可以指向一个或多于一个其他节点,该一个或多于一
个其他节点指向映射到存储与区块容器相关联的数据的物理介质位置的其他节点和/或逻辑地址。
209.取决于实现,可以从多个其他复合逻辑区引用叶或复合逻辑区,从而有效地允许在区块容器内和跨区块容器的内容的较大集合的廉价复制。因此,逻辑区可以基本上布置在引用的非循环图内,各个引用终止于叶逻辑区。这可以用于制作区块容器的副本,进行区块容器的快照,或者作为支持区块容器内和区块容器之间的虚拟范围副本的一部分,作为扩展拷贝操作或类似类型的操作的一部分。
210.实现可以为各个逻辑区提供可以用于命名该逻辑区的标识。这简化了引用,因为复合逻辑区内的引用变成包括逻辑区标识和与各个这样的逻辑区标识相对应的逻辑子范围的列表。在逻辑区内,各个所存储的数据区块引用也可以基于用于命名的一些标识。
211.为了支持区的这些重复使用,逻辑区可以被配置为写时拷贝逻辑区。当数据修改操作影响了写时拷贝叶或复合逻辑区时,拷贝该逻辑区,其中副本是新的引用并且可能具有新的标识(取决于实现)。副本保留与底层叶或复合逻辑区相关的所有引用或标识,但是具有由修改操作产生的任何修改。例如,写入请求、写入相同请求、扩展写入读取请求、扩展写入请求或比较和写入请求可以将新区块存储在存储系统中(或使用去重复技术来识别现有的所存储的区块),从而导致修改相应的叶逻辑区以引用或存储对新区块集合的标识,可能替换先前区块集合的引用和所存储的标识。替代地,解除映射请求可以修改叶逻辑区以移除一个或多于一个区块引用。在这两种类型的情况下,修改叶逻辑区。如果叶逻辑区是写时拷贝逻辑区,则将创建新的叶逻辑区,该新的叶逻辑区是通过从旧区拷贝未受影响的区块引用然后基于修改操作替换或移除区块引用而形成的。
212.然后可以修改用于定位叶逻辑区的复合逻辑区,以存储与作为先前叶逻辑区的替换的拷贝和修改的叶逻辑区相关联的新的叶逻辑区引用或标识。如果该复合逻辑区是写时拷贝逻辑区,则新的复合逻辑区被创建为新的引用或具有新的标识,并且对其底层逻辑区的任何未受影响的引用或标识被拷贝到该新的复合逻辑区,其中先前的叶逻辑区引用或标识被新的叶逻辑区引用或标识替换。
213.基于通过用于处理修改操作的非循环图的搜索路径,该处理从被引用区进一步向后继续到引用复合区间,其中所有写时拷贝逻辑区被拷贝、修改和替换。
214.然后,这些拷贝的叶逻辑区和复合逻辑区可以丢弃写时拷贝的特性,使得进一步的修改不会导致拷贝。例如,第一次修改写时拷贝“父”复合区内的某个底层逻辑区时,可以拷贝和修改该底层逻辑区,其中副本具有新的标识然后被写入父复合逻辑区的拷贝和替换实例中。但是,第二次拷贝和修改某个其他底层逻辑区,并且该其他底层逻辑区副本的新标识被写入父复合逻辑区时,可以适当地修改父复合逻辑区,而不会进一步拷贝和替换以代表对父复合逻辑区的引用。
215.修改对区块容器或没有当前叶逻辑区的复合逻辑区的新区域的操作,这可以创建新的叶逻辑区以存储那些修改的结果。如果要从现有的写时拷贝复合逻辑区引用该新的逻辑区,则将修改该现有的写时拷贝复合逻辑区以引用该新的逻辑区,从而产生与用于修改现有的叶逻辑区的序列类似的另一拷贝、修改和替换操作序列。
216.如果父复合逻辑区不能生长得足够大(基于实现)以覆盖与要针对新的修改操作而创建的新的叶逻辑区相关联的地址范围,则可以将父复合逻辑区拷贝到两个或更多个新
的复合逻辑区中,然后从单个“祖父”复合逻辑区引用新的复合逻辑区,该“祖父”复合逻辑区再次是新的引用或新的标识。如果该祖父逻辑区自身是通过作为写时拷贝逻辑区的另一复合逻辑区找到的,则该另一复合逻辑区将以与前面段落中描述的类似方式被拷贝、修改和替换。
217.该写时拷贝模型可以用作基于逻辑区的这些有向非循环图在存储系统实现内实现快照、区块容器副本和虚拟区块容器地址范围副本的一部分。为了使快照作为另外可写入的区块容器的只读副本,与区块容器相关联的逻辑区的图被标记为写时拷贝,并且对原始复合逻辑区的引用由快照保留。然后,对区块容器的修改操作将根据需要进行逻辑区拷贝,从而得到存储这些修改操作的结果的区块容器和保留原始内容的快照。区块容器副本是类似的,除了原始区块容器和拷贝的区块容器这两者可以修改内容从而产生它们自身的拷贝的逻辑区图和子图之外。
218.虚拟区块容器地址范围副本可以通过在叶逻辑区内和叶逻辑区之间拷贝区块引用来操作(这本身不涉及使用写时拷贝技术,除非区块引用的改变修改写时拷贝叶逻辑区)。替代地,虚拟区块容器地址范围副本可以复制对叶或复合逻辑区的引用。这适用于较大地址范围的区块容器地址范围副本。并且,这是图可以变成引用的有向非循环图而不仅仅是引用树的一种方式。与复制的逻辑区引用相关联的写时拷贝技术可以用于确保对虚拟地址范围拷贝的源或目标的修改操作将导致创建新的逻辑区以存储这些修改,而不影响在区块容器地址范围拷贝操作之后立即共享相同逻辑区的目标或源。
219.如上所述的逻辑区是用于实现区块容器405的架构的示例。另一示例包括单实例存储,其中区块与从其内容的安全散列指纹导出的索引相关联地存储,并且其中区块容器将有效地是每当写入区块时更新的引用的阵列。简单的两级逻辑区模型(其中一级表示对各个叶逻辑区的引用的矢量)表示逻辑区模型的更简单版本,其中叶逻辑区可以引用去重复的区块存储或内容可寻址区块存储。无论模型如何,存储到特定逻辑区块地址处的区块容器405中的数据与大容量存储之间的关系应该是动态的,以确保新数据被写入到布置在中等大小的段内的新区块中,并且围绕垃圾收集处理进行组织,垃圾收集处理可以移动仍然被引用的区块,同时删除不再被引用的区块,以便从包含一些不再被引用的区块的段中回收空间,或者特别是在闪存存储器的情况下,以便解决闪存存储器的耐久性问题。
220.区块容器系统402可以被配置为呈现针对区块容器405的句柄。句柄可以包括标识区块容器405的任何合适的数据,诸如指向区块容器405的指针(例如,指向区块容器405的根节点的指针)。容器利用系统404可以使用句柄诸如通过向区块容器405写入内容和/或从区块容器405读取内容等来对区块容器405进行操作和/或与区块容器405交互。
221.容器利用系统404可以被配置为利用区块容器405来存储和管理由统一数据存储系统提供的一个或多于一个数据存储服务的内容。作为示例,对于区块存储服务,可以在单个区块容器405(表示卷的区块容器)上实现区块卷。作为另一示例,对于文件存储服务,可以在各个区块容器405上实现各个文件、目录、文件系统数据和/或元数据。作为另一示例,对于对象存储服务,可以在各个区块容器405上实现各个对象和元数据。作为另一示例,对于数据库,可以分配区块容器405以存储各个重做日志、存档日志、表空间、blob(二进制大对象)、数据配置数据和/或元数据。
222.为此,在一些示例中,容器利用系统404可以被配置为使用区块容器系统402的区
块容器405以及区块容器系统402的资源406来提供用于存储和管理一个或多于一个数据存储服务的内容的一个或多于一个数据存储。例如,容器利用系统404可以提供数据存储408,该数据存储408利用区块容器405来表示存储在数据存储408中的数据。因此,数据存储408可以被称为用于存储和管理数据存储服务的内容的基于容器的数据存储408。数据存储408可以作为一个或多于一个数据存储服务的批量后端数据存储来操作。
223.容器利用系统404可以被配置为促进使用区块容器405来表示任何合适数量和/或类型的数据存储服务的数据。为此,容器利用系统404可以提供和维持用于存储任何合适数量和/或类型的数据存储服务的内容的任何合适数量和类型的数据存储。至少在这方面,数据存储系统400可以是支持各种类型的数据存储服务和/或数据存储协议的统一存储系统。例如,容器利用系统404可以提供用于存储区块、文件、对象和/或数据库存储服务的内容的一个或多于一个数据存储408。
224.区块容器系统402的区块容器405可以由容器利用系统404不同地适配和/或使用以用于各种数据存储服务。例如,某些区块容器405可以用于表示第一存储服务(例如,区块存储服务)的内容,某些区块容器405可以用于表示与第一存储服务不同的第二存储服务(例如,文件存储服务)的内容等。
225.在使用如上所述的逻辑区的图来实现区块容器405的某些实施例中,容器利用系统404可以被配置为使用逻辑区的图来表示和管理数据存储408中的数据。例如,数据存储服务的数据实例可表示为由指向和/或包括数据实例的数据的逻辑区的图所定义的区块容器。容器利用系统404可以诸如通过将数据实例的标识符与逻辑区的图的根节点相关联等,将数据实例与由逻辑区的图定义的区块容器相关联。
226.图5例示根据一些实施例的用于表示数据实例的区块容器500的示例。如图5所示,区块容器500可以包括逻辑区节点502-1至502-3(统称为“逻辑区节点502”、“逻辑区502”或“节点502”)的图(例如,诸如有向非循环图或平衡有向非循环图等的非循环图)。在所示的图中,节点502-1是根节点,节点502-2是节点502-1的子节点,并且节点503-3是节点502-2的子节点。
227.逻辑区的图与数据实例相关联并表示数据实例。在所示示例中,数据实例标识符(数据id)506被映射到根节点502-1,以将具有数据id 506的数据实例关联到根节点502-1,并因此关联到逻辑区502的图。数据id 506可以是任何合适的唯一标识符,并且可以以任何合适的方式产生。例如,容器利用系统404可以生成或接收数据id 506。容器利用系统404可以以任何合适的方式将数据id 506映射到根节点502-1。
228.各个节点502包括指向其他节点502和/或指向映射到存储与数据对象相关联的数据的物理介质位置的逻辑地址的一个或多于一个指针的列表。例如,根节点502-1可以包括指向节点502-2的指针,节点502-2可以包括指向节点502-3的指针。节点502-3可以包括指向诸如映射到物理介质中存储对象的数据的位置的逻辑区块地址等的逻辑地址的指针。在图5中,介质504-1至504-3(统称为“介质504”)可以表示逻辑地址(在线性地址空间中)和/或物理介质中存储数据实例的数据的位置。因此,节点502-1和502-2可以是复合逻辑区,并且节点502-3可以是叶逻辑区。
229.虽然图5描绘了映射到根节点502-1的数据实例的数据id 506,但这是某些实施例的例示。数据实例可以以任何合适的方式与逻辑区的图相关联,包括通过将数据实例直接
映射到用于支持区块容器405和/或区块容器系统402中的区块的虚拟化精简设置的任何其他合适的内部句柄。此外,使用逻辑区的图来表示区块容器405仅是说明性的。区块容器405可以使用任何合适的架构来表示,包括本文描述的任何其他说明性架构。
230.使用区块容器405来表示数据存储408中的数据实例可以为数据实例的存储和管理提供灵活性。例如,对于某些数据存储服务,数据实例可以是任何大小,并且可以通过重新配置表示数据实例的区块容器405来调整大小。作为另一示例,诸如通过将资源应用于区块容器405以对数据实例进行一个或多于一个操作,可使用区块容器系统402的附加资源。为了说明,区块容器系统402的数据减少资源、数据复制资源(例如,快照)和/或存储回收资源可以应用于由区块容器405表示的数据实例。这种应用可以提供数据存储408中的数据实例的瞬时和/或高效快照,通过使用多个区块容器405指向与多个数据实例相关联的相同存储内容来减少数据,以及垃圾收集以回收数据存储408中的存储。
231.区块容器系统402的区块容器405可以适于表示和管理数据存储408中的数据。例如,用于表示区块容器405的架构可以适于减少或最小化与区块容器405相关联的开销。为了说明,区块容器405可以与区块存储服务中的卷相关联,使得区块容器405被绑定到与卷相关联的开销。区块容器405或另一区块容器405可以通过将其从该卷和/或与该卷相关联的至少一些开销中释放来进行适配。例如,可以减少诸如元数据开销、管理开销、视觉开销、与所呈现的用户管理的结构相关联的表示开销和/或与主机导出相关联的开销等的开销,或者从区块容器系统402中消除一些类型的开销。例如,区块容器405可被呈现给一个或多于一个存储服务和/或以其他方式由一个或多于一个存储服务使用,而不被呈现给存储服务的用户或以任何方式直接由存储服务的用户使用和/或不被导出或以其他方式单个地暴露在外部。这样的配置可以允许区块容器405在区块容器系统402中具有最小的开销,并且在一些情况下不具有上述类型的开销中的一种或多于一种开销。例如,诸如文件存储服务等的存储服务可以将文件系统作为整体呈现为导出和用户管理的实体。这些特征可以允许用区块容器405表示数据实例,该区块容器405与例如使用与所描述的区块容器类似的内部结构所实现的一组区块装置相比具有显著更少的开销。因此,对于相同的有限物理存储资源,与可以在区块容器系统402中表示的卷的数量相比,容器利用系统404可以存储和管理用区块容器405表示的更多的数据实例。在某些示例中,例如,与使用适配的低管理负载区块容器405表示的数十亿个数据实例的实际支持相比,使用以区块容器405的样式实现的完整管理负载卷实际上可以仅表示数万个卷。
232.容器利用系统404可以被配置为进行一个或多于一个操作以提供数据存储408并且使用区块容器405和区块容器系统402的资源406来表示和管理数据存储408中的数据。这样的操作可以包括但不限于写入数据、读取数据、创建数据实例、设置数据实例的长度、检索与数据有关的信息、删除数据、快照数据、附加数据、减少数据、复制数据以及回收数据存储408中的存储。在某些示例中,可以缩放区块容器系统402的垃圾收集资源和/或其他资源以处置用区块容器405表示的大量数据实例。
233.在某些示例中,区块容器405可以提供由多个部分形成的标识符,多个部分可以包括例如命名空间部分和命名空间的上下文内的唯一标识符,其中可以通过改变实现区块容器405的层和请求创建区块容器405的层的组合来提供标识符的不同部分。快照、克隆、检查点和副本可以形成新的区块容器名称,使得诸如通过保留与特定区块容器相关联的一些唯
一标识符、同时包括表示快照、克隆、检查点或副本的公共子串等的方式,保留了一些部分,同时以公共方式调整其他部分。因此,例如,考虑到从使用文件系统名称或标识符和相对于文件系统唯一的区块容器标识符的组合所命名的区块容器405构建的文件存储系统,当进行文件存储系统的文件、目录和其他数据和元数据的克隆时,克隆的区块容器405可以保留它们的文件系统相对唯一标识符,同时将文件存储系统标识符部分调整为文件存储系统克隆的标识符。然后,文件存储系统或其他存储服务逻辑可以基于文件存储系统克隆的名称模式指向克隆的区块容器405,同时重用区块容器名称的唯一标识符部分以将区块容器405与文件存储系统内的逻辑组件匹配。
234.替代地或附加地,区块容器405可以以各种方式分组,使得区块容器405在某个组内具有名称(包括作为简单的动态分配的整数的名称)。在这种情况下,可以构建文件存储系统或其他存储服务以利用一个或多于一个组,使得进行组的快照或克隆产生保留区块容器名称但具有不同组名称或标识符的新组。在这种情况下,存储服务逻辑可以指向组,来代替利用区块容器405的一些其他命名模式。
235.在某些示例中,这样的组可以基于豆荚,或者针对基于豆荚的存储系统,组或其他类型的区块容器集合可以包含在豆荚内。豆荚可以为其他形式的快照、克隆、复制方案、对称同步复制、连续数据保护等提供方便的方案。
236.容器利用系统404可以提供如图4b所示的应用程序接口(api)410。api410可以包括当调用操作时可以由容器利用系统404进行的一组定义的操作。该组操作可以包括和/或支持本文描述的容器利用系统404的任何操作。如图4b所示,api 410可以通信地耦接到数据存储408和区块容器405。因此,api410可以对区块容器系统402的区块容器405进行操作。在某些示例中,api410可以通过调用和应用区块容器系统402的一个或多于一个资源406(例如,定义的功能)来对区块容器405进行操作,以进行本文描述的操作。api 410还可以对数据存储408和存储在数据存储408中的数据进行操作。
237.api 410可以暴露给一个或多于一个数据存储服务并由一个或多于一个数据存储服务使用。在这样的配置中,数据存储服务可以利用并受益于数据存储系统400的一个或多于一个特征。例如,数据存储服务可以直接利用和受益于由容器利用系统404提供的数据存储,并且间接利用和受益于由容器利用系统404使用的区块容器405和区块容器系统402的资源406。
238.图6a例示数据存储系统600的示例,其包括被配置为通过api 410与容器利用系统404接合的数据存储服务602。数据存储服务602可以以任何合适的方式实现(例如,作为数据存储系统、作为引擎、作为虚拟数据系统等),并且可以以任何合适的方式与容器利用系统404接合,包括通过向容器利用系统404的api 410发出调用并从容器利用系统404的api 410接收对调用的响应。
239.数据存储服务602可以是任何合适类型的数据存储服务,诸如使用一个或多于一个文件存储协议的文件存储服务、使用一个或多于一个对象存储协议的对象存储服务、使用一个或多于一个区块存储协议的区块存储服务、使用一个或多于一个数据库协议的数据库服务等。在一些示例中,数据存储服务602是并非区块存储服务的数据存储服务602。
240.数据存储系统400和/或数据存储系统600可以向数据存储服务602(例如,通过api 410)提供对区块容器系统402和容器利用系统404的资源的访问,使得数据存储服务602可
以构建在区块容器405上。例如,数据存储服务602可以在数据存储408中存储和管理数据存储服务602的内容,并且可以使用如本文所述的区块容器405来存储和管理内容。
241.现在将描述数据存储服务602是文件存储服务的示例。该示例是说明性的。在其他示例中,文件存储服务可以以其他方式实现。在其他示例中,数据存储服务602可以是不同类型的数据存储服务。
242.在某些实现中,数据存储服务602可以包括被配置为管理文件数据的虚拟文件系统(vfs)。例如,vfs可以管理表示与数据文件以及数据文件如何映射到数据实例(诸如存储在数据存储408中的区块容器等)有关的信息的元数据。在某些实施例中,vfs可以采用称为包络的数据结构,其中维持与数据文件和数据文件到区块容器的映射有关的元数据。包络可以包括与一个或多于一个数据文件有关的信息。包络可以包括与数据文件和相应的区块容器有关的任何合适的信息,包括文件标识符、区块容器标识符、容器存储映射信息(例如,与文件标识符和区块容器标识符之间的关系有关的信息)、数据的快照信息(指示较旧的区块容器版本)、表示基于容器的数据存储408中的区块容器的图的根节点的根节点标识符、文件、区块容器和/或逻辑区的图的大小信息、数据的统计信息、数据的日志信息等。在一些示例中,包络可以是目录加上与目录中包含的文件有关的元数据的高速缓存。数据存储服务602可以被配置为结合api 410的调用函数向api 410提供与数据文件有关的任何信息,包括区块容器标识符和/或包络中所表示的其他信息。数据存储服务602还可以被配置为结合来自api 410的调用函数的响应从api 410接收与数据文件有关的信息,包括区块容器标识符和/或要在包络中所表示的其他信息(例如,文件的逻辑大小、用于文件的逻辑空间等)。
243.在某些实现中,数据存储服务602可以被配置为生成并提供区块容器标识符以供容器利用系统404使用。容器利用系统404可以被配置为使用区块容器标识符作为容器利用系统404内的本地标识符,或者可以被配置为将区块容器标识符映射到在容器利用系统404内生成和使用的本地标识符。
244.在某些实施例中,数据存储服务602和容器利用系统404可以被配置为将各个数据文件或包络表示为数据存储408中的区块容器。数据存储服务602可以被配置为高速缓存文件并将高速缓存的区块容器批量推送到容器利用系统404以写入数据存储408。数据存储408进而可以保持区块容器和相关联的版本(例如,快照),并且使区块容器可用于由数据存储服务602快速访问。
245.容器利用系统404可以被配置为提供事务语义以供数据存储服务602使用。在某些实施例中,对于至少一些操作类别,事务语义可以允许数据存储服务602向文件发出多个更新,并请求对表示文件的区块容器进行所有更新或不进行任何更新。容器利用系统404可以被配置为实现所有更新或不实现更新,并且将新数据或旧数据返回到数据存储服务602。
246.在某些实现中,容器利用系统404和数据存储服务602可以被配置为支持多容器事务。例如,容器利用系统404可以使用区块容器系统402的一个或多于一个资源406来提供并行事务队列的阵列(例如,32个缓冲器),其中可以独立地写入该阵列以增加吞吐量。可以最大化写入的并行事务队列的数量以增加吞吐量。
247.为了说明这种并行事务队列的使用,事务更新可以包括用于多个元数据要素和/或操作(例如,创建区块容器、创建另一区块容器、附加到区块容器等)的数据。容器利用系
统404可以被配置为一起进行或根本不进行与这种事务更新相关联的任何事物。因此,事务更新中的任何事物可以同时对主机可见。
248.数据存储服务602可以被配置为(例如,向图6a中未示出的主机服务器)提供文件存储服务。为此,数据存储服务602可以被配置为支持任何基于文件的存储协议,包括例如nfs、smb和/或cifs。主机服务器可以使用一个或多于一个这样的协议例如以与vfs接合。
249.在诸如通过nfs或smb等提供文件服务的存储系统的情况下,容器利用系统404使得文件服务层非常简单地集中于协议处置和文件服务语义,而不关心在存储上布局文件,同时受益于区块容器405的丰富语义。例如,文件存储在不必单独实现这些特征的情况下获得去重复和压缩的益处,也将受益于所有其他区块容器或豆荚服务(诸如快照、克隆和各种类型、形式和复制方法等),并且可以能够利用对称同步复制来以简单的方式提供对称可访问的镜像文件。作为创建新文件的一部分,通过将一个区块容器虚拟地拷贝到另一区块容器,可以容易地克隆各个文件。可以通过将与第一文件相关联的区块容器虚拟地拷贝到与第二容器相关联的区块容器来重新克隆文件。例如,这可以非常快速且空间高效地拷贝被存储为文件的虚拟机映像的集合或存储docker和kubernetes样式的容器(这些容器通常存储为覆盖目录的集合),但是其中克隆操作可以用于消除在这种容器的运行时操作期间读取和写入这些覆盖的单独开销。
250.在某些示例中,可以通过基于命名或分组规则制作文件系统的相关联的区块容器的快照序列来对文件存储服务的文件系统进行版本化。如果文件系统的子树例如基于各种类型的标签或名称组件以协调的方式(诸如利用区块容器的属性等)区分,则文件系统可以利用它通过向区块容器服务层请求对具有这些属性的区块容器进行快照以创建具有特定集合的新属性的新区块容器、从而将它们与原始区块容器区分,来获得高性能和灵活的子目录快照。
251.虽然上面已经描述了与容器利用系统404接合的文件存储服务系统的示例,但是包括其他类型的数据存储服务系统的任何合适的数据存储服务系统可以与容器利用系统404接合。例如,基于对象的存储服务系统(例如,s3存储服务系统)可以与容器利用系统404接合。对象存储可以获得去重复和压缩的益处(不必单独实现这些特征),也可以受益于所有其他区块容器或豆荚服务,并且甚至能够利用对称同步复制来以简单的方式提供对称可访问的镜像对象。作为创建新对象的一部分,通过将一个区块容器虚拟地拷贝到另一区块容器,可以容易地克隆各个对象。可以通过将与第一对象相关联的区块容器虚拟地拷贝到与第二容器相关联的区块容器来重新克隆对象。例如,这可以非常快速且空间高效地拷贝虚拟机映像的集合或容器。作为另一示例,数据库服务系统可以与容器利用系统404接合。存储blob的数据库可以受益于去重复和/或继承附加的区块容器和豆荚能力。
252.与容器利用系统404接合的存储服务系统可以被配置为使用任何合适的数据存储协议或协议集来提供数据存储服务。
253.虽然图6a例示由容器利用系统404和区块容器系统402支持的一个数据存储服务602,但是这些系统可以被配置为支持任何数量的数据存储服务,包括不同类型的数据存储服务。图6b例示数据存储系统604的示例,其包括被配置为通过api 410与容器利用系统404接合的n个数据存储服务602(数据存储服务602-1至602-n)。图6b中所示的多个数据存储服务602可以包括被配置为通过api 410与容器利用系统404接合的数据存储服务(例如,文
件、区块、对象、数据库等)的任何合适的组合。
254.可以为数据存储服务602提供对区块容器系统402和容器利用系统404的资源的访问(例如,通过api 410),使得数据存储服务602可以构建在区块容器405上。例如,数据存储服务602可以在由容器利用系统404维持的一个或多于一个数据存储(例如,数据存储408)中存储和管理数据存储服务602的内容,并且可以使用如本文所述的区块容器405来存储和管理内容。
255.容器利用系统404可以用作区块容器系统402和一个或多于一个数据存储服务602之间的中介。这可以允许不同的数据存储服务602容易地与容器利用系统404(例如,通过api 410)接合,以受益于区块容器系统402的区块容器405和资源406。
256.在某些示例中,区块容器系统402和/或容器利用系统404可以被配置为允许与一个存储服务相关联的区块范围或区块容器的空间高效虚拟拷贝或克隆以由另一存储服务使用。作为示例,一个文件系统的各个文件或文件集可以被虚拟地拷贝到另一文件系统。作为另一示例,文件系统的各个文件或文件集可以被转变为对象存储中的各个对象或对象集(反之亦然)。作为另一示例,可以从数据库虚拟地拷贝数据库blob以制作文件或对象。在更复杂的示例中,可以虚拟地拷贝包含在虚拟机的文件系统映像内的文件(其中文件系统映像本身bei1存储为例如区块卷或区块容器上的各个文件),以在直接利用区块容器的文件系统或对象存储内形成独立文件或对象。
257.在某些示例中,区块容器系统402和/或容器利用系统404可以被配置为提供其变型,其中可以针对区块容器提供多个标识,使得不同的存储服务可以共享区块容器,该共享可以包括继承对区块容器的内容的改变。例如,文件系统和对象存储可以共享区块容器。文件系统可以使用区块容器的第一标识符,并且对象存储可以使用区块容器的第二标识符。对文件系统中的文件的内容所做的改变可以由对象存储中的相应对象通过在共享区块容器中对文件的内容所做的改变来继承。
258.虽然图4a、图4b、图6a和图6b将容器利用系统404和区块容器系统402例示为单独的实体,但是在其他实施例中可以实现其他配置。作为示例,容器利用系统404和区块容器系统402可以被展平成被配置为以本文所述的任何方式操作的容器存储系统。这可以以任何合适的方式实现,包括通过在容器存储系统中实现资源406中的一个或多于一个。在容器存储系统中实现的资源406可以包括与可以在区块存储系统中使用的资源相同的资源,和/或可以包括被配置为与容器存储系统一起使用的资源的适配。读者将理解,容器存储系统的任何其他实现可以被配置为使用本文描述的任何说明性资源和/或其他合适的资源以本文描述的任何方式操作。
259.图7例示用于数据存储系统的示例性方法700。虽然图7例示根据一个实施例的示例性操作,但是其他实施例可以省略、添加、重新排序和/或修改图7中所示的任何操作。图7中所示的一个或多于一个操作可以由数据存储系统400、其中包括的任何组件和/或其任何实现来进行。
260.在操作702中,提供区块容器。例如,区块容器系统402可以以本文描述的任何方式提供区块容器405。
261.在操作704中,区块容器用于存储一个或多于一个数据存储服务的内容。例如,容器利用系统404可以使用区块容器405以本文描述的任何方式存储一个或多于一个数据存
储服务602的内容。
262.在操作706中,管理用区块容器所存储的内容。例如,区块容器系统402和/或容器利用系统404可以诸如通过应用区块容器系统402的资源406对用区块容器405存储的内容进行快照、克隆、去重复、压缩、垃圾收集和/或其他操作等,来进行一个或多于一个操作以管理内容。
263.图8例示用于写入和管理数据的示例性方法800。虽然图8例示出根据一个实施例的示例性操作,但是其他实施例可以省略、添加、重新排序和/或修改图8中所示的任何操作。图8中所示的操作中的一个或多于一个可以由数据存储系统400、其中包括的任何组件和/或其任何实现来进行。
264.在操作802中,数据存储系统接收写入数据的请求。数据存储系统可以从任何合适的源(诸如数据存储服务602、被配置为与数据存储系统接合的另一数据存储系统、或主机(例如,主机控制器、主机服务器等))接收请求。
265.该请求可以包括指示该请求或与该请求相关联的任何信息。例如,该请求可以包括要写入的数据和与该数据有关的信息,诸如数据标识符(数据文件标识符、由数据存储系统使用以识别数据被写入的区块容器的区块容器标识符)、数据的大小信息等。包括在请求中的数据字段可以由用于与数据存储系统接合的模式来定义。
266.在操作804中,数据存储系统响应于在操作802中接收的请求将数据存储到数据存储。数据存储系统可以使用一个或多于一个区块容器来将数据存储到数据存储。
267.操作804可以包括数据存储系统进行一个或多于一个处理以将数据存储到数据存储。处理可以使用本文描述的任何说明性资源。在某些示例中,将数据存储到数据存储可以包括多阶段处理,诸如前端处理和后端处理等。前端处理可以包括使用资源将数据写入临时数据存储(例如,非易失性数据存储、nvram、高速缓存等)并减少数据(例如,经由模式识别、数据去重复和压缩数据)。前端处理可以内联进行,使得数据存储系统可以以低延迟通知从其接收到请求的主机已经进行了数据写入。后端处理可以包括使用资源将数据写入数据存储,这可以包括将减少的数据批量写入全闪存存储器。
268.在操作806中,数据存储系统使用与区块容器相关联的一个或多于一个资源来管理数据存储中的数据。操作806可以包括数据存储系统进行一个或多于一个处理以使用区块容器系统402的一个或多于一个资源来管理数据存储中的数据。处理可使用本文描述的任何说明性资源。在某些示例中,数据存储中的数据的管理可以包括使用区块容器系统402的资源来减少数据存储中的数据(例如,通过深度去重复、深度压缩等)和/或回收存储(例如,通过垃圾收集)。
269.图9例示用于读取数据的示例性方法900。虽然图9例示根据一个实施例的示例性操作,但是其他实施例可以省略、添加、重新排序和/或修改图9中所示的任何操作。图9中所示的操作中的一个或多于一个可以由数据存储系统400、其中包括的任何组件和/或其任何实现来进行。
270.在操作902中,数据存储系统接收读取数据的请求。数据存储系统可以从任何合适的源(诸如数据存储服务602、被配置为与数据存储系统接合的另一数据存储系统或主机(例如,主机控制器、主机服务器等))接收请求。
271.该请求可以包括指示要读取的数据或与要读取的数据相关联的任何信息。例如,
该请求可以包括与要读取的数据有关的信息,诸如数据标识符(数据文件标识符、由数据存储系统使用以识别存储对象数据的数据对象的数据对象标识符等)。包括在该请求中的数据字段可以由用于与数据存储系统接合的模式来定义。
272.在操作904中,数据存储系统响应于在操作902中接收到的请求而从数据存储检索数据。容器存储系统可以使用一个或多于一个区块容器来从数据存储检索数据。例如,数据存储系统可以使用表示数据存储中的数据的区块容器来定位和检索数据。这可以包括使用数据标识符来标识区块容器的句柄,以及使用句柄来访问和使用区块容器以定位和检索数据。
273.另外,在某些示例中,数据存储系统可以使用(诸如后备表或高速缓存等的)后备数据结构来定位和检索数据。数据存储系统可以被配置为生成后备数据结构并用表示要由数据存储系统以时移方式(诸如稍后作为后台处理的一部分)进行的动作的日志的数据填充后备数据结构。例如,后备数据结构可以指示被写入筒仓但尚未写入数据存储的元组。因此,数据存储系统可以使用后备数据结构以及区块容器来定位和检索正被读取的数据。
274.图10例示使用区块容器来表示数据存储中的数据的示例性方法1000。虽然图10例示根据一个实施例的示例性操作,但是其他实施例可以省略、添加、重新排序和/或修改图10中所示的任何操作。图10中所示的一个或多于一个操作可以由数据存储系统、其中包括的任何组件和/或其任何实现来进行。
275.在操作1002中,数据存储系统接收将数据写入数据存储的请求。数据存储系统可以从任何合适的源(诸如数据存储服务602、被配置为与数据存储系统接合的另一数据存储系统、或主机(例如,主机控制器、主机服务器等))接收请求。
276.该请求可以包括指示该请求或与该请求相关联的任何信息。例如,该请求可以包括要写入的数据和与数据有关的信息,诸如数据标识符(数据文件标识符、由数据存储系统使用以识别数据被写入的数据实例的数据对象标识符)、数据的大小信息等。该请求中包括的数据字段可以由用于与数据存储系统接合的模式来定义。
277.在操作1004中,数据存储系统响应于在操作1002中接收的请求而使用区块容器将数据存储到数据存储。数据存储系统使用具有映射到区块容器的唯一标识符的句柄来标识区块容器。
278.在某些示例中,将数据存储到数据存储可以包括数据存储系统进行多阶段处理,诸如前端处理和后端处理等。前端处理可以包括将数据写入临时数据存储(例如,非易失性数据存储、nvram、高速缓存等)并减少数据(例如,经由模式识别、数据去重复和压缩数据)。前端处理可以内联进行,使得数据存储系统可以以低延迟通知主机已经进行了数据写入。后端处理可以包括将数据写入数据存储,这可以包括将减少后的数据批量写入全闪存存储器。
279.在操作1006中,数据存储系统接收从数据存储读取数据的请求。数据存储系统可以从任何合适的源(诸如数据存储服务602、被配置为与容器存储系统接合的另一数据存储系统或主机(例如,主机控制器、主机服务器等))接收请求。
280.该请求可以包括指示要读取的数据或与要读取的数据相关联的任何信息。例如,该请求可以包括与要读取的数据有关的信息,诸如数据标识符(数据文件标识符、由数据存储系统使用以识别存储数据的数据对象的数据对象标识符等)等。包括在该请求中的数据
字段可以由用于与数据存储系统接合的模式定义。
281.在操作1008中,数据存储系统使用句柄从数据存储中检索数据。这可以包括使用句柄来识别和使用区块容器以定位和检索数据。操作1008可以附加地包括搜索后备数据结构以识别指示区块容器要用于检索数据(例如,来自尚未被携带到数据的更新版本的数据的快照的数据)的任何数据。
282.图11例示用于使用区块容器来表示数据存储中的数据的示例性方法1100。虽然图11例示根据一个实施例的示例性操作,但是其他实施例可以省略、添加、重新排序和/或修改图11中所示的任何操作。图11中所示的一个或多于一个操作可以由数据存储系统、其中包括的任何组件和/或其任何实现来进行。
283.在操作1102中,数据存储系统提供区块容器(例如,通过精简设置区块容器)。可以响应于将数据写入数据存储的请求而进行的操作1102可以以任何合适的方式进行。例如,数据存储系统可以基于要写入数据存储的数据和/或进一步基于已经存在于数据存储中的区块容器来提供区块容器。
284.在操作1104中,数据存储系统将表示数据实例的数据存储到区块容器。操作1104可以以任何合适的方式进行,包括通过将数据写入逻辑和/或物理存储介质位置并将区块容器与映射到物理存储介质位置的逻辑存储介质位置(例如,逻辑地址)相关联来进行。
285.在操作1106中,数据存储系统将数据实例的唯一标识符映射到区块容器的句柄。操作1106可以以任何合适的方式执行,包括通过数据存储系统接收或生成数据实例的唯一标识符并且将唯一标识符与区块容器相关联(例如,通过将唯一标识符存储在区块容器中)来进行。
286.根据本发明的某些实施例,存储系统可以建立和使用路径集来协调存储系统的操作。例如,路径集可以被建立并用于管理文件存储中的组操作,诸如对文件存储系统的一个或多于一个特定目录树(例如,一个或多于一个受管理目录的一个或多于一个目录树)的快照操作等。
287.如本文所使用的,路径集可以表示包括在可以应用组操作的组中的数据存储实体的集合。例如,路径集可以表示包括在文件存储系统的特定目录树中的数据存储实体的集合(例如,位于文件存储系统的特定目录处和之下的数据存储实体)。在通常使用中,文件系统内的路径(或路径名)表示从文件系统的根目录到特定文件或目录并且通向该文件系统内的特定文件或目录的名称和标识的目录的分层顺序。然后,路径集可以表示路径(或路径名)以从文件系统的根目录到可以进行本技术中描述的组操作的目录(在层次结构内)的特定公共路径开始的所有文件或目录的集合。本文详细描述了路径集的示例。
288.路径集在包括单独层的存储系统中可能特别有用。例如,存储系统可以具有提供呈现方面的服务层和提供支持服务层的存储方面的存储层。这样的配置可以向存储系统和/或存储系统的用户提供一个或多于一个益处,诸如用于管理存储层处的数据存储的丰富功能集等。服务层可以应用服务层处的操作。存储系统可以建立和使用对存储层可见的路径集,以协调存储层处的这些操作的实现。例如,对于在服务层处应用的组操作,可以建立路径集并将其用于根据需要和/或在即时基础上以高效利用存储系统的资源的方式在存储层处选择性地实现某些类型的组操作(例如,快照操作),诸如目录树粒度操作等。
289.图12例示包括彼此通信地耦接的服务层1202和存储层1204的数据存储系统1200
(“存储系统1200”)的示例。服务层1202和存储层1204可以使用任何合适的数据通信技术(例如,存储系统1200的中间件、应用程序接口、其他接口等)彼此通信地耦接。
290.服务层1202可以被配置为进行一个或多于一个操作以提供存储系统1200的数据存储服务。例如,服务层1202可以提供被配置为由存储系统1200外部的一个或多于一个装置使用以访问和使用数据存储服务的一个或多于一个接口。服务层1202可以包括或提供表示层,该表示层被配置为向外部装置提供接口和/或数据存储服务。
291.服务层1202可以被配置为管理存储系统1200的表示层的服务层实体1204。服务层实体1204可以包括适合于支持由服务层1202提供的数据存储服务的任何一种或多种类型的数据结构。例如,数据存储服务可以包括文件存储服务,并且服务层实体1206可以包括文件存储实体,诸如文件系统的分层布置的目录和文件等。服务层1202可以以适合于提供数据存储服务的任何方式(包括通过创建服务层实体1206并将操作应用于服务层实体1206)来管理服务层实体1204。可以应用于服务层实体1206的操作的示例可以包括提供、写入、读取、修改、移动(从目录层次结构中的一个位置到目录层次结构中的另一位置或者在目录层次结构之间)、拷贝、分组、组织、保护、版本控制、快照、克隆、复制、删除、以及以其他方式在服务层1202中的服务层实体1206上操作。
292.虽然服务层1202可以管理服务层实体1206并提供存储系统1200的表示层服务,但是存储层1204可以被配置为进行操作以实现服务层1202的某些方面,诸如服务层实体1206和由服务层1202应用于服务层实体1206的操作等。在这方面,服务层1202可以与服务层1202的某些实现方面分离,因为存储层1204被配置为进行这些实现方面(可以包括存储服务层实体1206的数据和元数据)。为此,服务层1202可以向存储层1204提供与服务层实体1206和/或由服务层1202进行的操作有关的信息。存储层1204可以接收信息,并且基于该信息,进行实现操作以在存储层1204处实现服务层1202的操作。
293.存储层1204可以被配置为创建和管理与服务层实体1206相关联的存储层实体1208。存储层实体1208可以以任何合适的方式(诸如通过存储表示服务层实体1206的数据(例如,服务层实体1206的数据和元数据))表示服务层实体1206。存储层实体1208可以包括适合于表示服务层实体1206的任何一种或多种类型的数据实体。在某些示例中,存储层实体1208包括以平坦或非分层配置布置或者具有最小层次结构的数据结构,诸如存储层实体1208的集合等。因此,服务层实体1206的分层配置可以不反映在存储层实体1208中。在某些示例中,存储层实体1208包括本文描述的区块对象。
294.将存储系统1200的操作分离成服务层1202操作和存储层1204操作和/或使用存储层实体1208来表示服务层实体1206,这可以为存储系统1200提供一个或多于一个益处。例如,存储层1204可以在实现对数据的操作、管理数据和使用存储系统1200的资源方面提供灵活性。附加地或替代地,存储层1204可以提供在服务层1202中实现将是困难的、不切实际的、不太高效的或更资源密集的数据结构(例如,存储层实体1208)和/或数据存储管理操作。在某些示例中,可以通过使用区块对象作为存储层实体1208来促进存储层1204的这种操作,区块对象可以提供如本文描述的区块对象的任何特征和/或益处。
295.如上所述,当服务层1202将操作应用于服务层实体1206时,服务层1202可以将与操作有关的信息传送到存储层1204。信息可以以任何合适的形式提供,包括作为一个或多于一个请求(例如,应用程序接口调用)或通过网络的请求(例如,远程过程调用)以实现存
储层1204内的服务层操作的各方面。存储层1204可以被配置为以任何合适的方式在相应的存储层实体1208上实现操作。在某些示例中和/或对于某些操作,当从服务层1202接收到与操作有关的信息时,存储层1204可以实时实现操作。对于某些其他示例和/或操作,存储层1204可以选择性地进行和/或延迟进行操作,直到进行该操作变得必要或更高效和/或响应于某些定义的事件为止。对存储层实体1208的操作的这种延迟和/或选择性进行可以为存储系统1200提供一个或多于一个益处。例如,可以减少存储系统1200对持久性存储或通过内部i/o总线或其他互连的i/o操作请求的数量。这可以节省资源并促进存储系统1200的高效操作。
296.在对在服务层1204处应用的特定服务层实体组(例如,受管理目录的目录树)的操作的实现在存储层1204处被延迟或者是选择性的示例中,维持服务层1202和存储层1204之间的数据的一致性可能是个挑战,这至少是因为在对服务层1202处的服务层实体1206的操作的应用和对存储层1204处的存储层实体1208的操作的实现之间的时段期间,附加操作可能应用于服务层1202处的服务层实体1206。附加操作可能诸如通过改变服务层实体1206的分层配置来更改服务层实体1206。随后,当存储层1204确定为延迟存储层实体1208上的操作时(例如,对于“惰性”实现,其中当由于某种其他原因(诸如修改实体等)对实体进行操作时,某些组操作的进行被有意地延迟,然后在与组相关联的各个实体上选择性地实现),为了与服务层1202维持数据的一致性,存储层1204应该在操作被应用于服务层实体1206时在与服务层实体1206相关联的存储层实体1208上实现操作,这是因为在附加操作改变了服务层实体1206的分层配置之前就存在服务层实体1206。
297.维持服务层1202和存储层1204之间的数据一致性的另一挑战是由服务层1202维持的某些信息可能不由存储层1204维持。在某些示例中,服务层1202可以维持与服务层实体1206的配置有关的信息,诸如与服务层1202中的服务层实体1206的分组有关的信息等。这种分组的示例是诸如目录层次结构等的分层配置内的所有服务层实体1206的集合。服务层1202可以维持与服务层实体1206的任何其他一种或多种类型的分组和/或服务层实体1206之间的关系有关的信息。存储层1204可能不知道与目录层次结构中的服务层实体1206之间的关系有关的这种分层详细信息。虽然这可以为存储层1204提供某些益处,但是也可能对维持存储层1204和服务层1202之间的数据一致性提出挑战,特别是当在存储层1204中有意地延迟应用于服务层1202中的服务层实体1206的组的操作的实现时。
298.存储系统1200可以建立和使用路径集1210来协调存储层实体1208上的操作的实现。例如,存储系统1200可以建立和使用路径集1210来管理在服务层1202中应用的服务层操作的存储层实现。为了说明,操作可以应用于服务层1202中的文件系统的目录树(例如,应用于特定目录内组织的所有服务层实体1208和该目录下方的目录树)。存储层1204可以使用路径集1210(包括通过使用路径集1210来识别存储层实体1208与操作之间的关系)来管理存储层1204中的操作的实现。
299.路径集1210可以由存储系统1200的任何合适的组件管理。例如,路径集1210可以由服务层1202、存储层1204、服务层1202和存储层1204之间的中间层或者存储系统1200的各层的任何组合来管理。路径集1210可以使用任何合适的可识别数据结构(诸如数据对象或任何其他可识别构造等)来表示。
300.路径集1210可以表示某些服务层实体1206和与这些服务层实体1206相关联(例
如,实现这些服务层实体1206)的存储层实体1208之间的关系。例如,在某些实施例中,路径集1210可以表示与由服务层1202管理的文件系统的目录层次结构的服务层实体1206相关联的存储层实体1208的集合。例如,说明性路径集1210可以表示与由服务层1202管理的文件系统的特定目录处和之下的目录树相关联或驻留在该目录树内的存储层实体1208的集合,或者更具体地,表示与通过分层包括直接或间接地包括在文件系统的目录内的文件和目录相对应的存储层实体1208的集合。
301.这样的路径集1210可以表示与目录相关联的存储层实体1208的集合,而不表示或包括与文件系统的目录中的文件和目录之间的分层关系有关的信息。也就是说,路径集1210可能不知道服务层1202中的目录中的文件和目录之间的分层关系。路径集1210可以简单地表示存储层实体1208的集合与目录相关联,而不表示或知道目录内的文件和目录之间的分层关系。因此,文件和目录可以在目录内四处移动和链接,从而改变它们在目录内的分层关系,并且路径集1210可以维持不变并继续表示存储层实体1208的集合与目录相关联。以这种或任何其他合适的方式,路径集1210可以将存储层1204中的存储层实体1208与服务层1202中的目录相关联,而不必记录或理解服务层1202中的目录中的文件和目录之间的所有分层关系。
302.路径集1210可以以任何合适的方式与服务层实体1206的分组(诸如文件和目录的目录等)相关联。例如,服务层1202可以管理将目录链接到目录的路径集1210的信息。在某些示例中,由服务层1202管理的文件系统的目录可以包括指向与目录相关联的路径集1210的元数据。
303.路径集1210可以以任何合适的方式与存储层实体1208的集合相关联。例如,存储层1204可管理将存储层实体1208链接到路径集1210(诸如包括由存储层1204中的存储层实体1208表示的文件和目录的目录的路径集)的信息。在某些示例中,存储层实体1208可以包括将存储层实体1208指向路径集1210的元数据。
304.如上所述,路径集1210可以包括表示服务层1202中的目录与表示存储层1204中的目录的文件和目录的存储层实体1208的集合之间的关联的信息。路径集1210可以包括与目录有关的附加信息,诸如与在目录处应用的操作(例如,快照)以及目录在服务层1202中的所有分层成分、操作和/或路径集1210的版本等有关的信息等。路径集1210可以是与目录相关联并且对于存储层1204或服务层1202与存储层1204之间的中间层是已知的(例如,由其实现)的任何合适的可识别构造。现在将描述路径集1210的说明性示例。
305.图13a例示可以由存储系统1200建立和使用的路径集的示例。图13a例示表示服务层的服务层实体(sve)1302与表示存储层中的sve 1302的存储层实体(sge)1304之间的关系的示例路径集1300。如图所示,sve 1302可以包括以分层配置(诸如目录层次结构)布置的sve1、sve2、sve3和sve4。sve1302可以在具有sve1作为顶部节点、sve2和sve4作为sve1的子节点以及sve3作为sve2的子节点的目录层次结构中。因此,sve1可以说是在其目录树中包括sve2、sve3和sve4的目录。sge 1304可以包括表示包括在sve1的目录树中的sve 1302的sge1、sge2、sge3和sge4。因此,sge 1304是与sve1相关联的sge 1304的集合。
306.路径集1300可以通过指示sge 1304的集合与sve1(目录树的顶部节点)相关联来指示sge 1304的集合(sge1、sge2、sge3和sge4)与sve1的目录树相关联。以这种或类似的方式,路径集1300可以不表示整个文件系统的整个分层结构,而是可以(通过将sge 1304与目
录树的顶部节点相关联)简单地将sge 1304的集合与目录树相关联。路径集1300可以简单地将sge 1304的集合与目录树相关联,而不表示sge 1304之间的关系。
307.路径集1300可以以任何合适的方式指示sve1和sge 1304之间的关系。作为示例,路径集1300可以包括指向sve1和sge 1304的信息(例如,元数据)。这种配置由图13a中的箭头1306的配置表示。作为另一示例,sve1和sge1304可以包括指向路径集1300的信息(例如,元数据)。这种配置由图13b中的箭头1312的配置表示。
308.虽然图13a和13b中所示的路径集1300例示出了路径集的示例,但是可以以任何合适的方式配置路径集以表示存储层实体和服务层实体之间的关系。例如,可以针对存储层实体建立和维持路径集,并且路径集可以指示与存储层实体与某些服务层实体(例如,受管理目录)的关系有关的某些信息。这样的路径集可以被称为实体级路径集。
309.图13c例示可以由存储系统1200建立和使用的实体级路径集的示例。图13c例示了与表示服务层实体(sve)1302的存储层实体(sge)1304相关联的示例路径集1310。sve 1302中的一个或多于一个可以各自被分配路径标识符。路径标识符可以用于定义路径集1310,路径集1310指示sge 1304与被分配路径标识符的sve 1302的关系。
310.例如,如图所示,sve 1302可以包括以诸如目录层次结构等的分层配置布置的sve1、sve2、sve3和sve4。路径标识符可以被分配给sve1和sve2。为了说明,sve1的路径标识符可以是“sve1”,并且sve2的路径标识符可以是“sve2”。可以基于任何准则、逻辑或指定将路径标识符选择性地分配给服务层实体。例如,可以基于sve1和sve2被指定为与路径集和/或某些操作(例如,快照操作)一起使用的服务层实体,将路径标识符分配给sve1和sve2。在某些示例中,sve1和sve2可以被指定为文件系统的受管理目录,并且sve3和sve4可以是除了被指定为受管理目录的要素之外的文件存储要素。因此,路径标识符可以被分配给sve1和sve2,但不被分配给sve3或sve4。
311.sge 1304可以包括表示sve 1302的sge1、sge2、sge3和sge4。路径集1310可包括对应于各sge 1304的路径集。各路径集1310可以包括与同相应sge 1304相关联的某些sve 1302有关的信息。例如,sge1的路径集指示sge1被包括在sve1的目录树中。在这种情况下,sge1表示sve1,sve1是其自身目录树的一部分。sge2的路径集指示sge2在sve1和sve2的目录树中。在这种情况下,sge2表示sve2,sve2是其自身目录树和sve1的目录树的一部分。sge3的路径集指示sge3在sve1和sve2的目录树中。在这种情况下,sge3表示sve3,sve3是sve1的目录树和sve2的目录树的一部分。sge4的路径集指示sge4在sve1的目录树中。在这种情况下,sge4表示sve4,sve4是sve1的目录树的一部分。sve3和sve4可能由于一个或多于一个原因(诸如sve3和sve4是除受管理目录之外的服务层实体(例如,诸如文件或其他非目录数据要素和/或未被指定用于路径集操作的目录数据要素等的存储要素))而不被认为是自身目录树的一部分。
312.存储系统1200可以被配置为以任何合适的方式建立和维持实体级路径集,诸如路径集1310等。例如,存储系统1200可以在创建存储层实体时针对存储层实体来建立路径集,并且可以在由存储层实体所实现的服务层实体的配置以将服务层实体移入和移出与路径集1310相关联的目录的方式改变时动态地更新路径集(服务层1202中的改变可以使存储层1204更新存储层实体的元数据)。存储系统1200可以被配置为通过跟踪影响与分层配置有关的路径集信息的对分层配置的任何改变并相应地更新路径集(例如,通过检测移动、硬链
接等)来管理路径集。因此,当服务层实体1206在目录之间移动时,表示服务层实体1206的存储层实体1208的路径集可以被更新以在移动改变路径集时反映该移动。然而,如果移动在与路径集相关联的目录内,或者在与受管理目录的相同列表相关联的目录之间,则移动不会改变路径集,因为服务层实体停留在受管理目录内,因此不需要更新路径集关系。
313.路径集1300和1310是说明性的。在其他实施例中,存储系统1200可以被配置为使用路径集的其他合适的实现。
314.路径集可以包括附加信息。例如,路径集可以包括与应用于存储系统1200的服务层1202中的服务层实体1206的组的操作有关的信息。例如,当某些操作由服务层1202应用于受管理目录的内容时,服务层1202可以提供与用以包括在与受管理目录相关联的路径集中的这些操作有关的信息。这样的信息可以标识操作以及这些操作的定时和/或序列。
315.路径集可以是版本化的。在某些示例中,例如,路径集与服务层实体相关联,并且可以表示与服务层实体相关联的路径集的集合内的路径集的一个版本。例如,存储系统1200可以被配置为基于应用于受管理目录的操作来建立用于受管理目录的路径集的版本。用于受管理目录的路径集中的一个路径集可以表示在特定时间或在应用于受管理目录的操作的时间序列内应用于受管理目录的操作。与诸如受管理目录等的服务层实体相关联的路径集的版本可以以任何合适的方式(诸如通过增加版本计数器并将其应用于新创建的路径集)被索引。本文描述了版本化路径集和使用版本化路径集来协调存储层实体上的操作的实现的示例。
316.现在将描述存储系统的示例,其中服务层1202包括被配置为提供文件存储服务(诸如本文描述的任何文件存储服务或另一合适的文件存储服务等)的文件服务层,并且其中存储层1204包括被配置为管理实现文件存储服务的各方面(例如,实现文件存储服务的服务层实体)的区块对象的区块对象层。然后将在利用区块对象实现文件存储服务的配置的上下文中描述正在建立和使用的路径集的示例。这样的示例配置的一个或多于一个方面可以应用于提供其他类型的存储服务和/或存储服务的实现的存储系统的其他配置。
317.图14例示数据存储系统1400(“存储系统1400”)的示例,其包括利用任何合适的通信技术彼此通信地耦接的文件服务层1402和区块对象层1404。存储系统1400可以是存储系统1200的示例实现。
318.文件服务层1402可以被配置为进行一个或多于一个操作以提供存储系统1400的文件存储服务。为此,文件服务层1402可以管理文件服务层实体1406,文件服务层实体1406可以包括以分层配置(诸如文件系统的目录层次结构等)布置的目录和文件。
319.文件系统可以是以文件作为叶节点的目录树。目录可以提供文件的名称、一些附加的文件元数据(通常包括文件类型)、以及文件的标识,这些标识通常与可以用于定位用于存储内容的元数据和文件本身的其他元数据的名称不同。例如,许多传统的unix文件系统使用i节点编号,但是其他实现可以使用其他形式的唯一标识符。目录本身也可以具有与文件相似或相同的标识符,并且可以以相似或相同的方式在其父目录内命名。这些标识确保了文件或目录被唯一地标识,使得即使被重命名、移动或链接以使得具有多于一个名称,仍然可以被引用。文件或目录在源目录与目标目录之间的移动本质上可以是对源目录和目标目录的操作,该操作在被移动的文件或目录的一个位置处移除名称并且将名称添加到被移动的文件或目录的另一位置。同样,链接将文件的附加名称添加到目标目录。
320.区块对象层1404可以被配置为进行一个或多于一个操作以实现存储系统1400的文件存储服务的文件服务层实体1406。例如,区块对象层1406可以管理与文件服务层实体1404相关联(例如,实现或以其他方式表示)的区块对象1408。区块对象1408可以以本文描述的任何方式配置并且可以由区块对象层1406操作以在区块对象层1406处实施文件服务层实体1406和/或文件存储系统的其他方面。区块对象1408可以是根据基于区块的存储系统中的概念但面向高对象计数以及动态创建和删除的存储系统的实现,高对象计数以及动态创建和删除是基于卷的区块存储的非典型的、并且适合于存储具有高效随机读写访问(至少在区块的级)的各个文件和目录的数据和元数据。这可以将文件服务的实现与用于响应于修改请求而存储各个文件和目录的数据和元数据的存储系统的各方面的实现分开。如本文所述,区块对象1408为某些数据操作提供高效的机制,包括使用高效的虚拟区块对象快照的克隆和/或数据版本化。区块对象1408可以在区块对象层1404的区块对象存储中被存储和管理。
321.在某些示例中,存储在区块对象存储中的区块对象1408可以被配置为具有类似于对象存储中常见的组织的外部可见组织,其中简单命名空间中的键标识存储数据的对象。区块对象1408可以被配置为至少在写入和重写随机区块的级上支持低延迟随机更新。区块对象1408可以被配置为具有用于修改区块对象1408的丰富的原语集(比常规对象存储的原语更丰富)。
322.在某些示例中,区块对象层1404可以被配置为支持区块对象1408的快照、到路径集的链接(其可以替代地由文件服务层1402或文件服务层1402和区块对象层1404之间的中间层处置)和/或区块对象大小的至少区块级随机修改和增加(诸如通过在区块对象1408的当前末端之外写入)。在其他示例中,区块对象层1404可以被配置为提供附加特征。
323.在某些示例中,区块对象1408可以对应于区块容器,诸如本文描述的区块容器405等。例如,区块对象1408可以包括区块容器或者是区块容器的实现。
324.除了支持单个区块对象1408的读取和写入(以及其他类型的修改)之外,区块对象层1404还可以被配置为进行和/或支持应用于文件服务层1402中的文件服务层实体的组的操作。为了实现应用于文件服务层1402中的文件服务层实体1406的组的某些操作,区块对象层1404必须在文件服务层1402中应用操作时识别与组中的文件服务层实体1406相关联的区块对象1408。例如,对于应用于文件服务层1402中的文件系统的目录的快照操作,区块对象层1404必须识别与在快照操作应用于目录时在目录的目录树中的文件服务层实体1406相关联的区块对象1408,以能够实现区块对象层1404中的目录的一致快照。识别所有适当的区块对象1408可能是耗时的并且难以以原子方式实现。
325.存储系统1400可以被配置为在实现区块对象层1404中的操作之前识别文件服务层实体1406的组和与文件服务层实体1406相关联的区块对象1408之间的关系。例如,存储系统1400可以使用预先对文件、受管理目录和区块对象进行分组和配对的实现。然后,存储系统1400可以使用这些所识别的关系来协调对区块对象1408的操作,包括对区块对象1408实现快照操作、克隆操作和/或其他操作。这些关系可以表示为路径集1410。
326.在某些实施例中,路径集1410可以与由文件服务层1402管理的文件系统的一个或多于一个目录相关联,并且可以表示与目录相关联(例如,与文件系统的目录的一个或多于一个目录层次结构的文件服务层实体1406相关联)的区块对象1408的集合。在某些示例中,
可以预先诸如通过将文件系统的目录指定为被指定为支持路径集和/或某些操作(诸如快照、克隆和/或其他操作等)的“受管理目录”等,来指定用于受益于路径集1410的操作的目录层次结构。文件服务层1402可以被配置为管理目录以及被指定为受管理目录的目录的一般属性。包含在受管理目录内的所有文件和目录的集合连同它们的配对区块对象1408可以被表示为路径集1410。
327.在简单的示例中,受管理目录可以从空目录开始,并且添加在其中的文件和目录可以仅保留在其中,直到被删除为止。在这样的示例中,文件或目录不能移入或移出受管理目录,或者被链接(例如,unix用语中的硬链接)到受管理目录或从受管理目录链接出去。这通常可以应用于任何受管理目录(包括其他受管理目录内的受管理目录),使得例如在第一受管理目录内的第二受管理目录内创建的文件不能从该第二受管理目录移出或链接出去,并且第一受管理目录内的文件稍后不能被移入或链接到第二受管理目录中。
328.当文件服务层1402被配置为调用防止文件和目录移入和移出受管理目录和/或将文件和目录链接到受管理目录的限制时,可以存在这样的示例。在这样的示例中,当创建文件或子目录时,或者作为创建受管理目录自身的一部分,或者当在受管理目录内添加文件或子目录时,通常将文件和子目录添加到受管理目录。受管理目录内的文件和子目录可以被标记为相对于受管理目录是“存活”或“活动”的。当从文件系统命名空间中移除文件或子目录时,可以将文件或子目录标记为相对于受管理目录不再是“存活”或“活动”的。
329.在更复杂的示例中,如果在受管理目录的目录树内添加(例如,移动)文件或目录,则文件服务层1402可以将文件或目录标记为受管理目录的一部分。如果从受管理目录中移除(例如,移出)文件或目录,则文件服务层1402可以将文件或目录标记为不再是受管理目录的一部分。如果文件或目录从一个受管理目录链接到另一受管理目录,则文件服务层1402可以将该文件或目录标记为两个受管理目录的成员。如果目录被移入或移出受管理目录,则文件服务层1402可以进行树遍历以递归地将该目录的文件和子目录标记为现在在受管理目录中或不再在受管理目录中。这样的示例支持移入或链接到受管理目录中或从受管理目录移出和链接出去。
330.文件或目录可以在受管理目录内具有一些生命期。当文件或目录被添加到受管理目录时(诸如因为文件或目录被创建),则文件或目录在受管理目录内是存活的。如果在某一时刻从受管理目录中移除文件或目录(诸如因为文件或目录被删除),则文件或目录在受管理目录内不再是存活的。在受管理目录中的文件或目录的生命期期间应用于受管理目录的任何操作将应用于该文件或目录。例如,在添加文件或目录的时间与从受管理目录移除文件或目录的时间之间的受管理目录的任何快照将反映为该文件或目录的所呈现的快照映像。
331.在支持将文件或目录移入或链接到受管理目录(从受管理目录移出或链接出去)的示例中,存储系统1400可以被配置为允许多个生命期范围。例如,如果将文件或目录移出受管理目录,对受管理目录进行一些快照,然后将文件或目录移回到同一受管理目录中,则文件或目录具有两个快照范围,对应于文件或目录在受管理目录中的第一时间以及文件或目录在受管理目录中的第二时间,并且文件或目录从第二时间起而不是从第一时间起是“存活”的。
332.在某些示例中,目录可以仅在创建受管理目录时或者当目录为空时被指定为受管
理目录。在其他示例中,现有非空目录可以被指定为受管理目录。文件服务层1402可以进行被指定为受管理目录的目录的树遍历,并且将树内的各个文件或子目录标记为现在与受管理目录相关联。在其他示例中可以使用其他方案来将非受管理目录改变为受管理目录。
333.在某些示例中,可以在目录树内的任何地方创建受管理目录。在其他示例中,文件服务层1402可以被配置为仅允许某些目录被指定为受管理目录。例如,受管理目录可以限于某些目录,诸如根目录、根目录内的子目录和/或文件系统的顶层目录等。在其他示例中,可以针对文件系统的目录和/或所有目录的其他配置建立路径集1400。
334.在某些示例中,存储系统1400可以被配置为允许一个受管理目录内的目录也被指定为受管理目录,从而使得一些文件和目录与多于一个受管理目录相关联。与多于一个受管理目录相关联的文件和目录可以与多于一组目录级操作(诸如多于一组快照操作等)相关联。这可以支持嵌套受管理目录的嵌套快照。
335.受管理目录可以是被指定用于一个或多于一个管理操作(包括用于建立目录的路径集和/或用于进行目录的快照)的任何目录。受管理目录可以被配置为支持可以应用于受管理目录的各种类型的操作。可以基于任何合适的触发事件将这样的操作应用于受管理目录。例如,文件服务层1402可以基于手动触发(诸如直接响应于请求应用操作的用户输入等)将操作应用于受管理目录。作为另一示例,文件服务层1402可以基于定义的调度或用于应用操作的某个其他定义的策略集合来将操作应用于受管理目录。
336.为了说明,快照策略可以与受管理目录相关联,并且可以包括用于创建快照的一组规则,并且可能包括用于保留快照的一组规则。用于创建快照的规则可以指定何时进行受管理目录的快照,并且用于保留快照的规则可以指定快照被保留多长时间。例如,基于调度的策略的规则可以指定每小时创建快照,其中快照被保留24小时,除了这些快照中的每十二个中的一个(每十二小时一个快照)被保留五天之外。基于触发的策略可以与勒索软件检测方法相关,其中这种检测可以触发快照的创建,其中限制了谁以及在什么情况下可以删除快照。这样的勒索软件保护快照还可以防止文件系统自身被删除,或者至少可以防止文件系统的删除也删除勒索软件保护快照。在某些示例中,受管理目录的一个或多于一个快照可以是被设计成保护版本化数据免受损坏或破坏的只读不可变快照。
337.文件服务层1402可以被配置为提供对快照的访问,包括对快照的内容和/或与快照(例如,快照的列表)有关的信息的访问。在某些示例中,这可以利用可以被访问以访问快照的特殊类型的程序实现的目录来完成。例如,文件服务层1402可以提供称为“..snapshots..”的程序实现的目录,该目录在可能包括快照并且可能包括与目录和/或快照相关的策略或其他信息的任何目录内可用。
338.程序实现的目录可以是可通过文件系统命名空间访问的目录,并且其内容由文件服务层1402确定而不是被存储为明确格式化的结构。可以从标准目录内容查询中省略程序实现的目录以避免混淆常规目录遍历(使得例如进行目录树遍历的posix或类似的“find”命令通常不会注意到“..snapshots..”目录的存在,因为当迭代目录中的条目时不会正常出现。显式地打开或遍历到“..snapshots..”目录中可以提供可用于列出快照或访问策略的访问,但是当正常查看文件系统时,“..snapshots..”目录可以以其他方式不可见。通过访问具有一些特殊后缀(file..snapshots..)的文件,或者通过访问文件就像文件是目录(file/..snapshots...)那样,也可以向文件添加用于访问快照的类似能力。
339.例如,如果存在被称为“managed1”的受管理目录的三个快照,则managed1目录本身以及可能还有managed1目录的子目录可以各自包括(可能隐藏的)程序实现的例如具有条目“snapshot.a”、“snapshot.b”和“snapshot.c”的目录“..snapshots..”。下降到这些中的一个中,然后将在该快照的上下文中访问该目录。因此,“managed1/..snapshots../snapshot.a/subdirectory/file1”将在快照时访问存在于managed1目录内的file1。与策略相关联的快照可以包括策略名称以及/或者可以被组织在“..snapshots..”目录内的某个目录结构中,诸如例如“..snapshots../policies/《policyname》/snapshot.n”等。
340.可以提供附加信息以获得与快照和策略有关的更丰富的信息。例如,snapshots.info文件可以提供与快照有关的丰富信息,诸如快照何时被创建、快照消耗多少空间、对快照的任何限制等。policies.info文件可以提供与策略、各策略的快照调度或其他感兴趣的数据有关的信息。这些可以以xml格式、json格式、某种表格格式或以任何其他有用的格式提供。
341.当遍历快照视图(例如,诸如通过“managed1/..snapshots../snapshot.a/subdirectory/..snapshots..”等)时,可以提供诸如“..snapshots..”等的程序实现的目录。可以允许遍历父目录(诸如通过“subdirectory/..snapshots./snapshot.b/..”等),在这种情况下,父目录现在处于“snapshot.b”而不是“snapshot.a”的上下文中。为了方便起见,如果文件或目录在受管理目录内仍然是存活的(尚未从受管理目录中移除),则可以使用诸如“存活”等的“快照”名称来从快照访问文件或目录。因此,“managed1/..snapshots../snapshot.a/subdirectory/..snapshots../live/file”可以通过快照目录树访问文件的存活版本。可替代地,可以通过例如测试是否存在“file/..snapshots../live”,来确定文件是否仍然被认为存在于正在遍历通过快照目录树的受管理目录的存活版本中。
342.在某些示例中,存储系统1400可以被配置为允许用于逻辑地或基本上通过使用特殊名称的查询来识别快照的灵活方案。例如,“.snapshots../snapshot@time=2020-01-02-03:06:00”可以引用在2020年1月2日上午03:06或之前创建的任何快照,或者“snapshot@time-3h”可以引用来自至少三小时前的快照。
343.如上所述,路径集1410可以与文件服务层1402管理的文件系统的一个或多于一个目录相关联,并且可以表示与文件系统的这些目录相关联的区块对象1408的集合。路径集1410可以以任何合适的方式与诸如受管理目录等的目录相关联。例如,受管理目录可以包括或链接到元数据,该元数据链接到与受管理目录相关联的路径集1410。
344.在某些示例中,受管理目录可以被配置为管理由文件服务层1402获取的受管理目录的快照,并且与受管理目录相关联的路径集1410可以被配置为管理表示受管理目录的快照的信息和/或存储系统层1404中的快照的实现。元数据可以包括命名各快照并且将受管理目录所管理的快照与由与受管理目录相关联的路径集1410所管理的快照相关的策略信息。
345.可以针对由受管理目录所管理的快照和/或针对由与受管理目录相关联的路径集1410所管理的相应快照来定义快照的时间顺序。例如,路径集1410可以为各快照和/或各相应的版本化路径集分配增加的编号,使得更高的编号表示更新近的快照和/或版本化路径集。
346.将受管理目录和与受管理目录相关联的路径集1410相关联的元数据可以以任何合适的方式实现。例如,表示受管理目录的结构可以包括这样的元数据,表示路径集1410的结构可以包括这样的元数据,或者存储系统1400的任何其他结构或实体可以包括这样的元数据。表示受管理目录的结构保存了什么元数据以及表示路径集1410的结构保存了什么元数据或者甚至这些是否是不同的结构的确切细节可以在各实现之间变化。在某些示例中,受管理目录可以表示快照的呈现,并且与受管理目录相关联的路径集1410可以表示将表示目录中的文件和目录的区块对象1408绑定在一起的内部关系。
347.在某些示例中,策略如何在受管理目录和路径集1410之间相关可以在各实现之间变化。对于导致自动创建快照的策略,例如,路径集1401可以被配置为在存储系统1400的区块对象层1404内管理路径集1410的实现中自动调用快照。区块对象层1404可以例如在修改区块对象的活动与在进行该活动时可以测试的时钟或其他传感器之间具有更紧密的集成。这还使得在呈现模型(其通常可以在文件系统服务层1402内发生)与在区块对象层1404内实现该模型之间方便地划分责任。
348.在代表路径集1410的区块对象层1404中可以自动生成快照的示例中,来自文件服务层1202(受管理目录层)的这些快照的呈现可以将其考虑在内。例如,文件服务层1202的快照名称的呈现在一些情况下可以使用可以将路径集创建的快照与通过基于受管理目录的界面呈现的名称相关的模式。例如,路径集可以知道策略的规则,但是受管理目录可以定义策略的名称,因此代表策略所创建的第100个快照可能在路径集结构中仅具有编号100,但是文件服务层1402中的受管理目录实现可以将其转换为“daily/snapshot.100”。
349.受管理目录和路径集1410之间的关系的示例版本是使它们相同,或者更确切地说,使受管理目录的所有策略、命名和其他方面由路径集1410保存,从而留下术语“受管理目录”意指在其上首先创建路径集的目录的便利名称。
350.路径集1410基本上可以是文件和目录的简单集合。路径集1410本身可能不一定记录或理解这些文件和目录之间的分层关系。实际上,因为文件和目录可以在路径集1410内移动并链接,而不更改这些文件或目录与哪个路径集1410相关联,所以这样的操作可以被视为使路径集1410本身保持不变,除了作为路径集的一部分的文件和目录被这样的操作修改的程度之外。
351.图15例示表示文件服务实体1502与表示文件服务实体1502的区块对象(bo)1504的关系的示例路径集1500(例如,路径集1500-1和1500-2)。如图所示,文件服务实体1502可以包括以分层配置(诸如具有d1作为顶部节点、d2和d3作为d1的子节点、以及f1作为d2的子节点的目录层次结构等)布置的目录d1、目录d2、目录d3和文件f1。bo 1504可以包括实现文件服务实体1502的bo1、bo2、bo3和bo4。箭头1506的配置(例如,配置1506-1和1506-2)描绘了文件服务实体1502与表示文件服务实体1502的bo 1504之间的关系。如配置1506-1和1506-2所示,路径集1500-1可以表示与具有d1作为顶部节点的目录层次结构中的文件服务实体1502相关联的bo 1504(例如,bo1、bo2、bo3和bo4)的集合,并且路径集1500-2可以表示与具有d2作为顶部节点的目录层次结构中的文件服务实体1502相关联的bo 1504(例如,bo2和bo4)的集合。
352.在图15所示的示例中,各路径集1500是与文件系统的不同目录相关联的路径集。在某些示例中,可以针对某些类型的目录(诸如如上所述的被指定为受管理目录的目录等)
建立路径集1500。例如,目录d1和d2可以被指定为受管理目录,路径标识符(例如,“d1”和“d2”)被分配给该受管理目录并用于路径集1500。d3可以不是受管理目录,并且可以不被分配用于在路径集1500中使用的路径标识符。
353.通常,路径集表示少于与文件服务实体1502有关的所有配置信息。例如,路径集可以表示与受管理目录d1或d2相关联的bo 1504的集合,而不表示与目录d1或d2内的分层结构有关的信息。例如,路径集1500-1可以表示bo1、bo2、bo3和bo4与目录d1相关联,但是可以不包括与目录d1内的bo1、bo2、bo3和bo4之间的关系或d1、d2、d3和d4之间的关系有关的任何信息。
354.在某些示例中,路径集1410可以与应用于文件服务层1402中的受管理目录d1或d2的操作相关联。例如,文件服务层1402可以将操作应用于受管理目录d1。操作向受管理目录d1的应用可以被配置成触发与受管理目录相关联的路径集1410的建立和/或更新。例如,当区块对象1408被添加到路径集1410和从路径集1410移除时,用于受管理目录d1的路径集1410可以随时间更新以反映路径集1410中的区块对象1408的当前成员资格。当特定类型的组操作被应用于受管理目录d1时,诸如通过在应用组操作时成员资格和内容存在时锁定路径集1410中的成员资格和内容等,受管理目录d1的路径集1410可以被版本化。与应用于受管理目录d1的组操作相关联的该锁定成员资格和内容可以被称为路径集1410的版本。
355.在该意义上,路径集1410可以说是基于操作和/或操作被应用于受管理目录的顺序而被版本化的。例如,文件服务存储层1402可以在时间序列中的第一时间将第一特定组操作应用于受管理目录d1。作为响应,存储系统1400可以记录用于受管理目录d1的路径集1410的第一版本。路径集1410的第一版本可以指示第一操作、与第一操作相关联的第一时间、以及当第一操作被应用于受管理目录d1时受管理目录d1的目录层次结构内的文件和目录。随后,文件服务存储层1402可以在时间序列中的第二时间将第二特定组操作应用于受管理目录d1。作为响应,存储系统1400可以记录用于受管理目录d1的路径集1410的第二版本。路径集1410的第二版本可以指示第二操作、与第二操作相关联的第二时间、以及当第二操作被应用于受管理目录d1时受管理目录d1的目录层次结构内的文件和目录。
356.为了说明一个示例,将第一快照操作应用于图15中所示的d1,这实际上可以意味着将第一快照操作应用于与d1相关联的目录层次结构中的所有文件和目录(d1、d2、d3和f1)。存储系统1400可以通过记录针对d1的路径集的第一版本来进行响应,该第一版本表示当第一快照操作被应用于d1时在d1的目录层次结构内的区块对象bo1、bo2、bo3和bo4的集合。然后对目录层次结构进行改变。例如,可以从目录层次结构中移除(例如,删除或移动)d3。更新d1的路径集以反映d3已从路径集中的成员资格中移除。然后将第二快照操作应用于d1,这实际上可以意味着将第二快照操作应用于与d1相关联的目录层次结构中的所有文件和目录(d1、d2和f1)。存储系统1400可以通过记录d1的路径集的第二版本来进行响应,该版本表示当第二快照操作应用于d1时在d1的目录层次结构内的区块对象bo1、bo2和bo4的集合。以这种或类似的方式,可以建立d1的路径集的版本,并且该版本可以表示当将快照操作应用于d1时d1的目录层次结构内的区块对象的集合。
357.图16例示文件系统的目录d1的路径集的版本的示例建立。在所示示例中,响应于第一快照(snapshot1)被应用于d1,建立d1的路径集的第一版本1600-1。路径集的第一版本1600-1表示当第一快照应用于d1时与d1相关联的区块对象(bo)的集合。随后,响应于第二
快照(snapshot2)被应用于d1,建立d1的路径集的第二版本1600-2。路径集的第二版本1600-2表示当第二快照应用于d1时与d1相关联的区块对象的集合。如果在第一快照与第二快照对d1的应用之间没有使d1的成员资格改变,则在第二快照处与d1相关联的区块对象的集合可以与在第一快照处与d1相关联的区块对象的集合相同。否则,集合可以是不同的,并且可以反映在对d1的第一快照和第二快照的应用之间对d1的成员资格做出的任何改变。可以与快照被应用于d1相关联地继续建立d1的路径集的版本,如响应于第n快照(snapshotn)被应用于d1而建立的路径集的第n版本1600-n所示那样。路径集的第n版本1600-n表示当第n快照应用于d1时与d1相关联的区块对象的集合。
358.路径集的版本可以以任何合适的方式被索引,诸如通过增加索引值,使得较高的索引值表示路径集的更新的版本。路径集的版本可以由存储系统1400以任何合适的方式使用,以协调对由路径集指示的区块对象的操作。例如,路径集的新版本的创建可以触发区块对象层1404的一个或多于一个操作。
359.区块对象1408存储文件服务层实体1406的数据和一定量的元数据,诸如由文件服务层1402管理的文件系统的文件或目录等。例如,区块对象1408可以存储由文件服务层1402存储到区块对象1408中的某物的数据和元数据,所述文件服务层1402利用区块对象1408的集合来存储文件服务层1402的内容。对于目录,该数据可以包括要在该目录中列出的文件和目录的目录条目的列表、可以由文件服务层1402使用以至少找到该文件或目录的区块对象的各单个文件或目录的标识符、以及可能的各条目的几个附加属性。例如,存储在目录中的元数据的公共项为条目是引用文件还是目录。目录区块对象的由区块对象层1404存储的元数据可以包括附加的文件系统信息,诸如所有权、许可和/或各种访问和修改时间。替代地,该元数据中的大部分或全部可以存储在目录的区块对象内的数据区块中。在某些示例中,可以存储行或记录的“目录”表对象可以用于将表示目录的结构化数据存储为表,而不是存储为文件服务层1402将格式化的目录信息存储到其中的区块。这样的替代实现可能要求操作(例如,快照和/或克隆操作)如所描述的那样工作,即使该实现不同于如何针对目录存储数据与如何针对文件存储数据。出于本技术的目的,这样的“表”对象仍然可以被称为“区块”对象,只要它们提供操作(例如,快照和/或克隆操作)并且可以根据文件服务层1402的需要进行修改和读取即可。
360.在某些示例中,区块对象存储中的各单个文件的内容可以存储为各自表示该文件的内容的单个区块对象1408。区块对象1408可以具有保持在其他地方或区块对象1408中(诸如在区块对象1408的前一个或前几个区块中)的附加元数据。元数据可以包括所有权、许可、时间戳和/或诸如与链接的文件一起使用的链接计数等的信息,其可以用于确定文件是否从多个目录条目(诸如从多个目录)链接,并且确定到文件的最后一个链接何时已经被移除。
361.各区块对象1408(无论是针对文件还是目录)可以具有可用于命名由特定文件或目录所引用的区块对象1408的标识。该标识可以是名称或名称的一部分。可以存在用于区块对象1408的各种命名空间要素,诸如豆荚、租户、文件系统等。存储在目录中以供文件系统用来引用区块对象1408的标识可以用于从文件系统已知的其他信息来生成全名或固有区块对象标识。例如,文件系统本身可以具有标识,并且可以通过组合文件系统标识和在文件系统内唯一的标识来标识特定区块对象1408。例如,文件系统内的标识可以是简单数字,
如在unix样式的基于i节点的文件系统中常见的。文件系统进而可以在豆荚或租户或一些其他分组结构内,诸如更传统的对象存储风格桶等。例如,在基于豆荚的系统中,可以使用豆荚、文件系统和区块对象编号来确定区块对象1408的完整标识。这种方案的优点在于,该方案允许通过逻辑地拷贝所有文件系统的区块对象或所有豆荚的区块对象来拷贝豆荚或文件系统,并且不必改变存储在文件系统的目录条目中的文件系统相对标识符。
362.例如,如果文件系统标识符是128位全局唯一标识符,并且豆荚也具有128位全局唯一标识符,并且在文件系统内,文件或目录的文件系统相对标识符是64位编号,则豆荚内的区块对象的标识可以由128位文件系统标识符和64位文件系统相对编号形成,但是目录条目可能仅包含64位编号,其可以例如被存储为二进制数据结构中的八字节二进制值。
363.如上所述,路径集1410可以用于基于在文件服务层1402中应用快照操作的时间顺序来按时间顺序定义快照操作集合。快照操作可以以任何合适的方式(诸如通过对它们进行编号)排序,使得路径集的第一快照是编号1,第二快照是编号2,等等。在其他示例中可以使用其他排序方案。
364.在某些示例中,存储系统1400可以维持各个路径集的存活版本。路径集的存活版本表示与通过诸如对区块对象的写入等的改变而更新的路径集相对应的数据集,或者可以存在对某些类型的元数据的更新,其在存活版本中反映但在快照中保持冻结,就像区块对象的数据内容那样。可以将编号分配给数据集的存活版本,使得当获得下一快照时,该编号成为快照编号。数据集的编号实例可以被称为版本,并且除了当前和最高编号的“存活”版本之外的版本是具有冻结逻辑内容的有效快照。因此,这样,当首先创建路径集时,当前存活版本编号可以是版本1,并且可能没有更早的版本。当获取第一快照时,存活版本前进到版本2,并且版本1变成逻辑上内容冻结的快照。当获取第二快照时,存活版本前进到版本3,使版本2也成为逻辑上内容冻结的快照,等等。因此,区块对象1408可以包括存活版本和一组尾随的逻辑上内容冻结的版本。
365.区块对象1408可以与一定数量的路径集相关联。关于各个相关联的路径集,可以看到区块对象1408具有快照生命期,从而从区块对象1408中保存的第一版本延伸到区块对象1408中保存的最后版本。区块对象1408可以由于路径集的“存活”而被丢弃,诸如因为其文件或目录已被移除,导致先前快照是最后版本。因此,当区块对象1408在路径集中变得有效直到区块对象1408在路径集中不再有效的版本时,区块对象1408可以被视为具有与“存活”路径集版本相对应的有效路径集版本的范围,这意味着区块对象1408是有效的,直到区块对象1408之前的版本从路径集中被移除为止。如果区块对象1408可以从路径集中移除(诸如通过将文件或目录移出路径集),然后添加回路径集(诸如通过将该文件或目录移回路径集),则实现可以支持多个有效范围。替代地,文件或目录可以从一个版本中的存活受管理目录中删除(当该版本存活时),并且恢复到稍后版本中的受管理目录。这也可以导致多个有效范围。
366.关于快照和版本,区块对象1408可以被视为具有“存活”可写映像和表示先前时间点的尾部快照映像集。如果区块对象1408表示尚未从存活文件系统中移除的文件或目录,则区块对象1408具有可写映像。如果区块对象1408具有尚未移除的快照,则区块对象1408具有快照映像。如果已从文件系统移除区块对象1408且已移除所有区块对象1408的可达快照,则可从存储系统移除区块对象1408。
367.在区块对象1408知道它在哪个路径集中并且区块对象层1404可以理解哪些区块对象在各路径集中的某些示例中,区块对象层1404可以被配置为每当对路径集获取快照时对路径集中的各区块对象1408进行快照,并且将各个这样的区块对象快照与路径集快照相关联。对于路径集ps1,例如,区块对象层1404可以每当ps1的版本增加时获取ps1中的各区块对象1408的快照,然后将该快照与现在的尾部路径集版本编号相关联。因此,当ps1添加新快照以从版本3移动到版本4时,区块对象层1404获取在ps1中“存活”的各个区块对象1408的快照,并将其与ps1版本3相关联。版本4基本上是“存活”区块对象1408的可写映像。如果区块对象1408也与第二路径集ps2相关联,则区块对象1408可以具有单独编号的版本集以及与其“存活”可写映像相对应的不同版本编号,即使区块对象1408本身仅具有在区块对象1408存活的所有路径集上共享的一个可写映像。
368.但是,在具有许多文件和目录的文件系统中,文件系统或受管理目录中的大多数(在一些情况下,绝大多数)文件在任何两个快照之间都不被修改是常见的。实际上,在许多文件系统中,许多(如果不是大多数)文件被写入一次并且从不被再次修改,尽管包含这些文件的目录被修改为在添加新文件时列出和引用新文件,并且在删除新文件时移除对文件的引用。考虑到这些是常见情况,考虑到文件系统(和受管理目录)可以存储数百万(如果不是数十亿)文件(并且因此数百万(如果不是数十亿)区块对象),并且考虑到处置路径集中的各区块对象1408的快照可能需要一定量的工作,优化模型以避免每当路径集版本前进以产生路径集快照时进行该工作是有意义的。这是路径集内的个体区块对象的有效范围可以应用的地方。
369.在某些示例中,区块对象1408的逻辑内容和跟踪的逻辑元数据可以保持不变,直到来自文件服务层1402的请求通过更改快照跟踪的逻辑元数据或通过更改区块对象1408的内容(诸如通过写入请求或通过用于更改区块对象内容或版本跟踪元数据的任何其他支持的请求)来请求改变。结果,如果路径集的版本编号前进,从而得到路径集快照,则区块对象层1404可以不对任何区块对象1408的版本编号起作用,直到从文件服务层1402接收到修改区块对象1408的逻辑内容或版本跟踪元数据的请求。也就是说,区块对象层1404可以在作用于已经前进的路径集版本之前等待对区块对象1408本身的一些操作,诸如修改操作等。操作的这种选择性和/或延迟的实现可以节省并促进存储系统1400的资源的高效使用。
370.配置操作的这种选择性和/或延迟实现的一种方式是将各区块对象的关联的最后修改版本(例如,最后已知的“存活”版本)与其相关联的路径集各自相关联。修改可以是对区块对象1408的逻辑内容或版本跟踪元数据的改变或者从路径集中对区块对象1408的移除,诸如因为文件从存活文件系统中删除等。直到这样的修改或移除请求到来,不获取区块对象1408的快照。例如,路径集ps1中的文件f1可以在ps1的版本5处被创建、写入和关闭,使得f1的所有当前逻辑内容都在ps1版本5处并且不存在f1的快照。ps1的版本可以从5前进到6再前进到7再前进到8,使得版本5、6和7是快照,并且版本8是ps1的存活版本。f1的区块对象1408将仍然处于ps1的版本5。当ps1的区块对象1408的版本处于版本编号5并且ps1的版本处于版本8时,区块容器层1404可以从文件服务层1402接收对f1的区块对象1408的修改操作。该差异将被检测到,然后将导致区块对象层1404获取区块对象1408的快照。区块对象1408的存活版本将前进到ps1的版本8。如果不是接收到修改f1的请求,而是接收到从ps1移除f1的请求,则区块对象层1408可以通过获取区块对象1408的快照并将区块对象1408标记
为已经在版本8处从ps1移除来进行响应。
371.虽然前一段中描述的示例涉及文件,但是相同的原理可以应用于数据存储服务的目录或其他合适的服务层实体。
372.响应于在路径集版本前进之后(因此在路径集的快照之后)到来的修改或删除操作而获取的区块对象1408的快照可以被分配给自上次快照以来的所有中间路径集版本编号。例如,在本示例中,区块对象1408的快照可以分配给版本5、6和7。替代地,区块对象1408的快照可以仅分配给这些版本中的一个(例如版本5),这将意味着版本6和7基本上与版本5的快照共享相同的版本(作为示例)。仅存储编号之一可以使得存储较少的元数据。
373.在某些示例中,如果区块对象1408的版本与路径集的“存活”版本不匹配,则仅检查或检索区块对象1408的逻辑内容或逻辑快照跟踪元数据的请求(诸如读取文件或列出目录的内容的请求)可以触发创建快照并使路径集的区块对象1408的版本前进。在其他示例中,可以在不触发区块对象快照的创建的情况下检查或检索区块对象1408的当前内容。在这样的其他示例中,区块对象1408的快照可以刚好及时获取,即,刚好在被修改或删除之前获取。
374.可以类似地配置访问区块对象1408的快照。快照访问可以具有由受管理目录和路径集的组合所定义的上下文,这可以使得在特定路径集版本编号的上下文中访问区块对象1408。如果这些版本编号尚不存在,则可以在访问时创建这些版本编号,或者路径集版本编号可以被映射到区块对象1408作为修改、删除或路径集改变移动或链接操作的结果而起作用的任何路径集版本。例如,在上述示例中,访问ps1的快照6或7的请求将使得访问ps1的版本5。如果在修改导致快照并且区块对象1408前进到ps1版本8之前访问ps1的版本7,则区块对象1408可以认为区块对象1408的版本5是可修改的,因为区块对象1408的版本5尚未被转换为快照。
375.然而,如果不关心避免竞争状况,则这可能导致这种竞争状况。竞争状况可以由于如下而发生:在假定区块对象1408的非快照版本不变的情况下访问区块对象1408的非快照版本,同时进行修改操作而导致创建快照并且与路径集相关联的“存活”版本编号前进到新编号。在如下情况下,可能无意地读取修改后的数据:通过快照版本7的检索首先检查到存活版本尚未前进;然后,修改操作产生快照,使存活版本前进,再修改区块对象;然后,通过快照版本7的检索操作在假定仍然处于路径集ps1版本5的情况下读取存活区块对象。可以通过防止同时操作或通过获取快照来避免这种竞争状况,从而冻结版本5,并且在通过快照版本7从版本5读取之前将区块对象前进到8。
376.避免这种竞争状况的另一方式是使用这样的实现,其中在该实现中,区块对象1408的快照不会像创建新的“存活”版本那样被创建太多,从而将先前的版本作为有效的快照留下。在该模型中,当在版本8处发生修改时,不创建之后变成版本5的快照,而是版本5因为现在不变而被简单地留下,并且开始写入不再修改版本5的新版本8。然后,通过版本5的内容的快照版本7检索对于涉及创建快照的竞争状况将是安全的。该方法可以避免引起竞争状况,而不必实现一些锁定以避免同时操作,并且不必创建不必要的快照。
377.在该方法中,如果区块对象1408与两个路径集相关联并且一个前进而另一个不前进,则可能存在混淆,其中对于一个路径集,当前“存活”版本冻结到快照中,并且对于另一路径集,当前“存活”版本保持可修改。例如,在ps1从版本5前进到版本6,然后前进到版本7,
然后前进到版本8,然后被写入的上述情况下,对于与区块对象1408相关联的另一路径集,例如ps2,路径集版本一直保持在例如20,而没有前进。区块对象1408可以在ps1的版本5处冻结并且前进到ps1的版本8的新可写映像,但是区块对象1408不能与用于ps2的版本20进行相同的操作,因为版本20应该仍然是可写的。然而,可以通过操纵区块对象1408的内部版本和与路径集相关联的版本之间的关系来处置该潜在问题。例如,可以存在区块对象1408的内部版本,其在每次留下由修改操作产生的快照时前进。然后将更新任何路径集的“存活”版本以跟踪区块对象1408中的这些前进,而快照不会。因此,当在ps1前进到版本8之后接收到第一修改操作时,区块对象1408可以处于内部版本100,区块对象1408的ps1版本5可以被留下作为引用版本100,区块对象1408本身然后可以前进到内部区块对象版本101,区块对象1408的ps1版本8可以前进到内部区块对象版本101,并且ps2版本20也将被修改以前进到内部区块对象版本101。
378.在该方法中,通过路径集的版本(例如版本n)(存活版本或快照版本)读取区块对象1408可以从与区块对象1408的路径集版本n相关联的区块对象1408的内部版本读取,或者可以从版本n之前的区块对象1408已知的最近路径集版本读取。
379.如先前所述,在一些实现中,区块对象1408可以从路径集移除且接着添加回到路径集,并且可具有从第一次添加到路径集时(诸如当创建相应文件或目录时)到从路径集移除时(诸如当删除文件或目录时)的有效性范围。这可以导致特定区块对象1408的路径集版本的有效性范围,在一些实现中包括多个范围。当从受管理目录的快照遍历快照目录树时,有效性范围不存在问题。任何特定文件或目录存在于该快照中或不存在于该快照中,并且如果在获取该快照时特定文件或目录不在目录树中,则该文件或目录在该遍历期间也将不存在。但是,当查看文件或目录的哪些快照可以(诸如通过先前作为示例快照呈现模型描述的子目录或文件上的“..snapshots..”命名空间)从其他文件和目录获得时,这可能使快照的呈现复杂化。在这种情况下,仅应列出有效的快照,否则可能是诸如来自以下的引用完整性问题:进入不应存在于受管理目录中的目录版本,然后访问该上下文中的父目录,该父目录可能根本不存在,因为它是在该快照之后首先创建的。
380.只要当区块对象1408从路径集中移除时,区块对象1408的路径集的最近有效范围被标记为现在无效、并且当区块对象1408被添加到路径集时(包括当添加回到其先前所处的路径集中时)建立路径集的新范围,就可以推断出相对于任何路径集的有效快照。为了继续先前描述的示例,如果代替在ps1版本8中被修改,由区块对象1408表示的文件已经被移出路径集,则区块对象1408将被更新以指示区块对象1408对于从版本5开始的ps1是有效的并且对于从版本8开始的ps1是无效的。如果获取ps1的某个新快照集合,将其前进到版本12,则如果文件被添加回ps1,则将从版本12开始建立新的有效范围。注意,如果文件仍然未被修改,则版本12的内容仍然在与版本5相关联的内部版本中,尽管从版本12引用该内部版本可能是有意义的,而不是依赖于使用版本12实现实际上来自版本5的内容(尽管这也将起作用)。有效性范围可以提供用于仅列出和访问应该对特定文件或目录有效的路径集的这些快照的方式。因此,在该示例中,为从版本8到版本11无效的文件或目录确定“..snapshots..”程序实现的目录的内容的程序可以从区块对象1408中看到版本8到版本11无效的路径集的有效范围,然后可以避免列出相应的受管理目录快照。
381.在支持非常低开销的快照的实现中,区块容器1408可以被廉价地版本化。然而,将
特定目录内的所有文件和目录关联在一起可能是昂贵的操作,至少因为这样做可能需要在树遍历中读取所有目录,这可能涉及读取和分析数千或数百万个目录中的条目并链接到表示各单个文件的数千到数十亿个区块对象1408。
382.但某些情况下是廉价的。一个示例是获取个体文件的快照。获取个体文件的快照涉及对一个区块对象1408进行快照,跟踪快照发生,并且提供查看快照的方式。为了处置这一点,区块对象1408可以列出并提供与路径集无关的快照的名称或编号。变型方法是向区块对象1408给予私有路径集,其与常规路径集相同地工作,但是对于该个体区块对象1408是本地的。甚至可以针对表示文件而不是目录的区块对象提供该私有路径集。这些快照可以仅通过该文件或目录的个体快照呈现模型(诸如通过文件的“..snapshots..”程序实现的目录等)来呈现。或者,还可以是如下的某种方式:独立于或除了从包含目录本身列出和访问版本之外,从目录的有利位置列出和访问所有该目录的包含文件和目录的可用版本。
383.在文件服务层1402和区块对象层1404之间的接合处可以考虑的一个方面是文件服务层1402可能需要理解是正在访问区块对象的存活版本还是区块对象的快照版本,并且可以被配置为利用将文件访问上下文保持在客户端保持的标识符中的客户端协议来这样做。并且,如果期望posix样式(unix、linux)客户端访问,则文件的存活版本与文件的各快照可以在各导出的文件系统内具有不同的报告的64位i节点编号。
384.忽略i节点问题,标识符可以简单地包括来自路径集的快照信息,诸如路径集本身的标识符以及路径集的快照的编号或其他标识符等。例如,可以针对特定快照内的目录列表报告这些标识符,然后可以将这些标识符从对访问该目录内的特定文件或目录感兴趣的客户端提供回文件服务层1402。
385.处置i节点编号问题可能更复杂。posix通常期望i节点编号在所呈现的文件系统内是唯一的,并且从该角度来看,文件和目录的快照基本上是附加的唯一文件。因此,所有文件和目录的所有快照可以在文件系统内具有唯一的i节点编号,因此存储系统1400可以被配置为避免这些i节点编号的冲突。一种解决方案是从各个快照具有不同的文件系统标识符的角度来看,将文件的快照制作到不同的文件系统中。这在一些情况下可以起作用,但是一些分布式文件系统协议和客户端实现(诸如nfs v3等)可能很难支持这一点。一种替代方案是从64位i节点编号空间中切出编号范围以用于各个路径集快照。例如,各64位i节点编号的36位可以与特定文件或目录相关联,并且各64位i节点编号的28位然后可以与特定路径集快照相关联(形成嵌入在i节点编号内的快照编号空间)。在一些实现中,这将允许640亿个文件和目录以及2.56亿个路径集快照。注意,每个路径集的每个快照可能需要不同的编号,尽管可以从删除的快照中重用编号。
386.在这样的方案中,存活文件和目录可以与特定的i节点快照编号空间(例如,0)相关联。可以存在从存活的i节点快照编号空间到特定路径集快照的快照编号空间的简单映射。例如,存活的i节点快照空间中的i节点编号可以通过使用存活的i节点快照空间内的编号并使用路径集快照的快照编号空间内的编号来映射到快照。因此,在使用符号snapshot-space.i-node-number作为快照编号空间内的i-node编号的命名的情况下,如果快照编号空间0意味着路径集ps1的存活文件系统和快照5具有快照编号空间27,则具有存活i-node 300的文件对于文件的存活版本可能是0.300,并且对于路径集ps1 snapshot27中的文件的版本可能是27.300。注意,如果从存活文件系统中删除文件或目录,则可能不再存在于存活
的i节点快照编号空间中,但是文件可能仍然存在于快照中。因此,存储系统1400可以被配置为确保在相应区块对象的所有快照已被删除之前不重新使用存活的i节点编号。
387.其他映射方案是合理可能的,这取决于文件系统实现、文件系统网络访问协议和文件系统网络客户端实现。通常,映射方案应该将文件和目录标识符映射到特定路径集快照中的文件的标识符。在某些示例中,映射方案应该是直接的,以确定哪个区块对象对应于特定文件服务层标识符。例如,在上面提供的i节点编号方案中,i节点编号27.300对应于编号为0.300的区块对象,即使该区块对象的文件已经从文件系统中删除也是如此。
388.注意,读取目录的结果在读取存活目录和读取目录的快照之间不同,至少因为存储在目录的区块对象中的被引用文件和目录的标识符可以标识存活文件和目录。结果,文件服务层1402可以被配置为解释这些标识符并将它们转换为适合于快照的标识符。因此,例如,在前两段中描述的情况下,目录可以存储所描述的特定文件的i节点编号0.300,但是当在i节点快照编号空间为27的快照的上下文中读取目录时,文件系统服务层可以将其转换为27.300。如果目录存储与这样的i节点编号不同种类的标识符,则可以替代地使用适当的不同变换。
389.图17例示存储系统建立和使用路径集的版本以协调快照操作的实现的示例。在图17中,时间轴1702描绘了进行操作的时间顺序。时间轴1702可以使用任何合适的单位(诸如计数器值和/或时间值等)来表示时间顺序。操作可以由存储系统或其任何组件(包括本文描述的任何示例存储系统和组件)进行。
390.如图所示,在时间值10(t=10)处,获取目录d1的第一快照“snapshot1”。作为响应,建立d1的路径集1704-1的版本。路径集1704-1的版本可以包括指示其与snapshot1以及在snapshot1被应用于d1时在d1的目录树中的文件和目录的集合的关联的信息,如由与时间t=10对齐定位的路径集1704-1的第一版本所表示的。这些文件和目录可以包括由区块对象1706-1实现的文件。在将snapshot1应用于d1的时间处,区块对象1706-1可以包括其自身的存活版本且不包括快照版本,如由位于时间t=10处的bo存活1706-1所表示的。
391.在时间值20(t=20)处,获取目录d1的第二快照“snapshot2”。作为响应,建立d1的路径集的第二版本1704-2。路径集的第二版本1704-2可以包括指示其与snapshot2以及在snapshot2应用于d1时在d1的目录树中的文件和目录的集合的关联的信息,如由与时间t=20对齐定位的路径集的第二版本1704-2所表示的。这些文件和目录仍可以包括由区块对象1706-1实现的文件。在将snapshot2应用于d1时,区块对象1706-1仍然可以包括其自身的存活版本而不包括快照版本,如由位于时间t=20的bo存活1706-1所表示的。
392.在时间值25(t=25)处,接收修改区块对象1706-1的请求1708。所请求修改可以包括对区块对象1706-1的数据或元数据的任何所请求改变,包含删除区块对象1706-1或其数据或元数据的请求或写入到区块对象1706-1的数据或元数据的请求等。响应于请求1708,存储系统可以在进行所请求的修改之前确定是否获取区块对象1706-1的一个或多于一个快照。可以基于d1的路径集的版本和区块对象1706-1的任何快照版本来作出该确定。例如,存储系统可以确定为:区块对象1706-1不具有与d1相关的快照版本,路径集的第一版本1704-1指示当区块对象1706-1包括在d1中时d1的第一待决快照,以及路径集的第二版本1704-2指示当区块对象1706-1包括在d1中时d1的第二待决快照。
393.基于这些确定,存储系统可以创建1710区块对象1706-1的一个或多于一个快照以
在修改区块对象1706-1之前实现d1的第一和第二待决快照。这可以包括创建区块对象1706-1的快照版本。例如,存储系统可以创建对应于d1的snapshot1的第一快照版本1712-1和对应于d1的snapshot2的第二快照版本1712-2。在创建这些快照之后,区块对象可以包括存活版本1706-1以及快照版本1712-1和1712-2。替代地,存储系统可以创建与d1的两个待决快照相对应的区块对象的单个快照版本(因为区块对象的数据在待决快照之间不改变,所以一个快照可用于两个待决快照)。
394.在创建区块对象的快照之后,存储系统可以通过将所请求的修改应用于区块对象的存活版本来将所请求的修改应用1714于区块对象。在应用修改之后,区块对象可以包括修改的存活版本1706-2以及快照版本1712-1和1712-2(或者在替代实现中仅一个快照版本)。
395.现在将关于存储系统1400描述建立和使用路径集来协调诸如快照等的操作的实现的另一方法。图18例示目录层次结构1802,其包括以具有d1作为顶部节点、d2和d3作为d1的子节点以及f1作为d2的子节点的分层配置布置的目录d1、目录d2、目录d3和文件f1。d1、d2、d3和f1可以由文件服务层1402管理。d1、d2、d3和f1可以由包括bo1、bo2、bo3和bo4的区块对象(bo)1804实现,这些区块对象可以由区块对象层1404管理。
396.存储系统1400可以建立bos 1804的路径集1810。路径集可以是实体级路径集,因为各bo 1804可以具有与该bo 1804建立并相关联的对应路径集。路径集可以指示与bo相关联的任何受管理目录。例如,d1和d2可以被指定为与路径集和/或某些操作(例如,快照)一起使用的受管理目录。d1和d2可被分配路径标识符(例如,“d1”和“d2”)以供在路径集中使用。
397.在图18所示的示例中,bo1的路径集指示bo1与d1的目录树中的文件存储要素相关联。在这种情况下,bo1表示作为其自身的目录树的一部分的d1。bo2的路径集指示bo2与d1和d2的目录树中的数据存储要素相关联。在这种情况下,bo2表示作为其自身的目录树和d1的目录树的一部分的d2。bo3的路径集指示bo3与d1和d2的目录树中的数据存储要素相关联。在这种情况下,bo3表示f1,其是d1的目录树和d2的目录树的一部分。bo4的路径集指示bo4与d1的目录树中的数据存储要素相关联。在这种情况下,bo4表示作为d1的目录树的一部分的d3。d3和d4可能由于一个或多于一个原因而不被认为是其自身的目录树的一部分,诸如d3是文件而不是目录并且d4是未被指定为受管理目录的目录。
398.存储系统1400可以被配置为以任何合适的方式建立和维持诸如路径集1810等的实体级路径集。例如,存储系统1400可以建立区块对象1804的路径集,该区块对象1804在文件和目录被创建时实现文件系统的目录层次结构1802的文件和目录,并且可以在由区块对象1804实现的文件和目录的配置改变时更新路径集1810(文件服务层1402中的配置改变可以使区块对象层1404更新区块对象1804的元数据)。存储系统1400可以被配置为使用这样的路径集1810来协调对区块对象1804的操作的实现。例如,可以基于路径集1810在区块对象1804上选择性地实现由文件服务层1402应用于d1和/或d2的快照。
399.图19例示使用路径集1810来协调区块对象1804上的快照操作的实现的存储系统的示例。在图19中,时间轴1902描绘了进行操作的时间顺序。时间轴1902可以使用任何合适的单位(诸如计数器值和/或时间值)来表示时间顺序。操作可以由存储系统或其任何组件进行,或者由其组件的任何其他适当配置的存储系统进行。
400.如图所示,在时间值10(t=10)处,获取目录d1的第一快照“snapshot1”。作为响应,记录应用于d1的第一快照操作1904-1。操作的记录可以包括接收和存储与操作有关的任何信息,诸如操作被应用于d1的时间以及操作与d1的关联等。在snapshot1被应用于d1和/或被记录时,表示目录层次结构1802中的文件f1的区块对象(bo3)可以仅包括bo3的存活版本,如由位于时间t=10的bo3存活1906-1所表示的。如图19所示,路径集1908-1诸如通过与bo3存活1906-1相关联而与bo3相关联。
401.在时间值20(t=20)处,获取目录d1的第二快照“snapshot2”。作为响应,记录应用于d1的第二快照操作1904-2。操作的记录可以包括接收和存储与操作有关的任何信息,诸如操作被应用于d1的时间以及操作与d1的关联等。在snapshot2被应用于d1和/或被记录的时间,bo3仅包括bo3的存活版本,如由位于时间t=20的bo3存活1906-1所表示的。与bo3相关联的路径集1908-1在时间t=20处保持不变。
402.在时间值25(t=25)处,接收修改bo3的请求1910。所请求的修改可以包括对bo3的数据或元数据的任何所请求的改变,包括删除bo3或其数据或元数据的请求或者写入bo3的数据或元数据的请求。响应于该请求,存储系统1400可以在进行所请求的修改之前确定是否获取bo3的一个或多于一个快照。可以基于与bo3相关联的路径集1908-1、bo3的任何快照版本、以及在文件服务层1402中应用的快照的日志来进行该确定。例如,存储系统1400可以确定为:bo3没有与d1相关的快照版本,路径集1908-1指示bo3与d1和d2相关联,以及d1的待决快照(snapshot1和snapshot2)已经应用于d1。可以以任何合适的方式诸如通过如下操作来进行该确定:存储系统1400识别与bo3相关联的路径集1908-1中的d1和d2,查询记录的快照以识别d1和d2的任何待决快照,并且对于d1和d2的任何识别的待决快照,确定bo3的任何匹配快照版本是否已经被获取或尚未被获取。在该示例中,存储系统1400可以将待决快照snapshot1和snapshot2识别为与路径集1908-1中指示的d1相关联,并且针对snapshot1和snapshot2尚未获取bo3的相应快照。
403.基于这些确定,存储系统1400可以创建1912bo3的一个或多于一个快照,以在修改bo3之前在区块对象层1404中实现d1的第一和第二待决快照。这可以包括创建bo3存活1906-1的快照版本。例如,存储系统1400可以创建与d1的snapshot1相对应的第一快照版本1914-1和与d1的snapshot2相对应的第二快照版本1914-2。在创建这些快照之后,bo3可以包括存活版本1906-1以及快照版本1912-1和1912-2。替代地,存储系统1400可以创建与d1的两个待决快照相对应的bo3的单个快照版本(因为bo3的数据在待决快照之间没有改变,所以一个快照可以用于两个待决快照)。
404.在创建bo3的快照之后,存储系统1400可以通过将所请求的修改应用于bo3存活1906-1来将其应用1916于bo3。在应用该修改之后,bo3可以包括修改的存活版本1906-2以及快照版本1914-1和1914-2(或者在替代实现中仅一个快照版本)。如果该修改没有从d1或d2(或另一受管理目录)移除bo3,则bo3的路径集1908-1可以保持不变。如果修改从d1或d2(或另一受管理目录)移除bo3,则存储系统1400可以修改路径集1908-1以反映该改变。
405.图20~22描绘了说明性方法。虽然图20~22例示根据某些实施例的示例操作,但是其他实施例可以省略、添加、重新排序和/或修改图20~22中所示的任何操作。任何说明性方法的操作可以以任何合适的方式与任何其他方法的操作组合。图20~22中所示的操作中的一个或多于一个可以由存储系统、其中包括的任何组件和/或其任何实现来进行。
406.图20描绘了说明性方法2000。在操作2002中,存储系统建立路径集。存储系统可以以任何合适的方式(包括以本文描述的任何方式)建立(例如,创建和维持)路径集。路径集可以以本文描述的任何方式或以另一合适的方式配置。
407.在操作2004中,存储系统基于路径集来协调操作的实现。操作2004可以以任何合适的方式(包括以本文描述的任何方式)进行。例如,存储系统可以使用路径集来协调已经应用于存储系统的服务层的操作在存储系统的存储层中的选择性和/或延迟的实现。
408.图21描绘了说明性方法2100。在操作2102中,存储系统建立路径集。存储系统可以以任何合适的方式(包括以本文描述的任何方式)建立(例如,创建和维持)路径集。路径集可以以本文描述的任何方式或以另一合适的方式配置。
409.在操作2104中,存储系统确立为在第一时间应用于文件系统的目录层次结构的操作将在稍后的时间选择性地实现。操作2104可以以任何合适的方式(包括以本文描述的任何方式)进行。例如,存储系统可以检测和/或记录操作(例如,快照操作)向存储系统的服务层中的目录层次结构的应用。
410.在操作2106中,存储系统检测在第二时间修改存储层实体(例如,区块对象)的请求。操作2106可以以任何合适的方式(包括以本文描述的任何方式)进行。例如,存储系统的存储层可以接收修改存储层实体的请求。
411.在操作2108中,存储系统基于路径集实现对存储层实体的操作。操作2108可以以任何合适的方式(包括以本文描述的任何方式)进行。例如,存储系统可以基于路径集确定为操作应用于存储层实体并且尚未在存储层实体上实现。基于根据路径集的该确定,存储系统然后可以响应于检测到修改存储层实体的请求而实现对存储层实体的操作。
412.在操作2110中,存储系统修改存储层实体。操作2104可以以任何合适的方式(包括以本文描述的任何方式)进行。例如,仅在存储系统已经在操作2108中实现了对存储层实体的操作之后(在存储系统确定为操作将在存储层实体上实现的情况下),存储系统可以响应于在操作2106中检测到的请求而修改存储层实体。
413.图22描绘说明性方法2200。在操作2202中,存储系统接收修改存储层实体(例如,区块对象)的请求。操作2202可以以任何合适的方式(包括以本文描述的任何方式)进行。例如,存储系统的存储层可以从存储系统的服务层接收修改存储层实体的请求。
414.在操作2204中,存储系统基于指示存储层实体与文件系统的目录之间的关系的路径集来确定为存在要应用于存储层实体的对目录的待决操作。操作2204可以以任何合适的方式(包括以本文描述的任何方式)进行。
415.在操作2206中,存储系统将待决操作应用于存储层实体。操作2206可以以任何合适的方式(包括以本文描述的任何方式)进行。可以响应于操作2204中的确定并且在修改存储层实体的请求在存储层实体上实现之前进行操作2206。
416.在操作2208中,存储系统修改存储层实体。操作2208可以以任何合适的方式(包括以本文描述的任何方式)进行。可以响应于操作2204中的确定并且在将待决操作应用于存储层实体之后进行操作2206。
417.可以以本文描述的任何方式和/或以其他合适的方式建立和使用路径集。作为示例,路径集可以用于物理空间核算操作,诸如确定当从文件系统删除目录时可以回收多少空间等。作为另一示例,路径集可以用于支持文件系统的嵌套目录的嵌套快照。例如,可以
获取文件系统中的各受管理目录(包括根目录(其默认可以是受管理目录)和作为受管理目录的任何子目录)的快照。在某些示例中,快照和路径集可以应用于任何目录,而不是限于受管理目录或某些目录。
418.一个有趣的问题可能随着存储系统中的空间核算而出现,其能够核算区块文件系统和区块对象之间的去重复、克隆和其他形式的物理区块共享。具体地,当考虑物理存储的区块(以及可能地区块在压缩或其他数据减少技术之后消耗的空间,并且可能地包括诸如使存储的区块可从故障恢复所需的附加容量)报告可以在相同或不同逻辑存储实体(文件、对象、区块对象、卷、受管理目录、文件系统、豆荚等)内的多个逻辑地址之间共享的区块时,可以在逻辑存储实体之外共享的物理存储的区块和不在逻辑存储实体之外共享的物理存储的区块之间进行区分。例如,卷可以包括对于该卷唯一的一些数量的区块(卷内可以存在多个引用,但是物理区块不与在存储系统内管理的其他存储实体共享)和对于该卷不唯一的一些数量的区块(物理区块与在存储系统内管理的至少一个其他存储实体共享,该实体可以是另一卷或者可以是包括文件、对象或区块对象的一些其他种类的实体)。共享区块的报告可以进一步分解以考虑来自特定逻辑实体(诸如在该示例中的卷等)的引用的分数。例如,可以存在第一卷和第二卷,其中第一卷具有十个固有区块,第二卷具有五个固有区块,并且第一卷包括对特定共享区块的两个引用,并且第二卷包括对特定共享区块的三个引用。在该示例中,第一卷具有十个固有区块和一个共享区块,并且第二卷具有五个固有区块和一个共享区块。此外,第一卷可以被认为包括对共享区块的引用的40%,并且第二卷可以被认为包括对共享区块的引用的60%。存在可能发生这种核算的许多其他方式,但是在逻辑存储实体的固有区块与逻辑存储实体间的共享区块之间至少存在基本区别。
419.具体地,在受管理目录和路径集的上下文中,可以在受管理目录的基础上提供空间核算,以描述由作为受管理目录的一部分的所有文件所消耗的固有空间与共享空间,使得以某种有用的方式报告固有和共享的物理空间消耗,可能扩展到由文件和受管理目录的快照所消耗的空间的某个有用的描述。
420.在具有将与特定受管理目录相关联的区块对象链接在一起的路径集的基于区块对象的存储系统中,存储系统可以提供对如上文针对受管理目录所描述的固有区块与共享区块的核算。这可以通过使存储系统基于如上所述的对存储区块的逻辑引用来进行逻辑计算、然后对与各个区块对象相关联的各个路径集这样做来完成。通过针对各路径集累积固有区块与共享区块的核算,并且取决于实现,可能地进一步从数据减少和故障恢复的开销的各种组合中核算它们相关联的物理容量,可以向受管理目录提供与实际空间消耗有关的这种粒度信息。这对于多级受管理目录特别感兴趣和/或有用,其中受管理目录的层次结构中的较低层处的共享区块可能很好地是较高层处的固有区块,因为作为较高受管理目录内的子目录的一个受管理目录可能与作为同一较高受管理目录内的子目录的另一受管理目录中的区块对象共享重复区块,诸如通过去重复处理或通过区块或区块对象虚拟拷贝或克隆操作等。
421.这些种类的多目录级计算可能变得特别感兴趣和/或有用的示例是较低级的受管理目录被完全克隆到同一较高级的受管理目录下方的另一较低层的受管理目录的情况。在这种情况下,两个较低级的受管理目录中的所有区块都变成共享区块,可能具有对两个受管理目录各自的部分容量分配,而较高级目录的共享和固有区块的计数将在很大程度上保
持不变。当区块被写入这两个较低级的受管理目录各自中的区块对象时,或者当添加或删除新文件时,或者当其他修改导致对共享和固有区块以及所计算的容量的改变时,两个较低层目录将彼此偏离,而较高层目录可以继续基于较高层受管理目录的组合区块对象的组合来累积固有区块、共享区块和所计算容量的计数。
422.于2020年9月10日提交的美国临时专利申请63/077,259描述了空间核算的示例,该申请已经通过引用并入本文。这些示例可以以适合于空间核算的任何方式实现和/或以其他方式与路径集组合。作为引用共享区块与固有区块以及用于克隆逻辑区块或其他逻辑存储要素的范围的方式的示例,参见于2017年12月14日提交的美国专利申请15/842,850,其内容通过引用并入本文。特别地,

850专利申请描述了叶和复合逻辑区的说明性模型以及用于通过来自这些区的内容标识符引用共享区块的模型。该模型适用于克隆、快照以及内联和后处理去重复。
423.基于路径集内和路径集之间(并且因此在受管理目录内和受管理目录之间)的区块共享的模式的固有和共享区块的计算以及可能地存储容量的部分归属对于各种目的可以是有用的。这可以被提供给用户以使他们理解考虑共享和固有空间的空间消耗。这可以用作退单(charge-back)模型的一部分,其中克隆和去重复可以减少退单的量,或者其中共享区块的部分归属可以包括在退单计算中。这些也可以用作配额模型的一部分,由此可以防止将增加固有和部分归属的容量的操作或者可以产生某种警告。在这种情况下,配额可以应用于较高层目录,从而允许在该较高层目录内的各种对象和较低层目录(包括较低层受管理目录)内和之间进行任何量的克隆、虚拟拷贝或复制内容,而不会显著增加该克隆、拷贝或复制的内容或完全反对配额。元数据开销可能仍然向这样的配额添加一定的量。
424.根据本发明的某些实施例,诸如本文描述的任何说明性存储系统等的数据存储系统可以被配置为使用豆荚来高效地拷贝由区块对象构成的文件系统。例如,存储系统可以基于包括由区块对象构成的文件系统的豆荚来生成豆荚的虚拟副本,使得在生成豆荚的虚拟副本之后对豆荚进行的修改与豆荚的虚拟副本不同。豆荚中的文件系统的所有区块对象和配置信息(例如,元数据、状态信息等)将被包括在豆荚的虚拟副本中,从而产生文件系统的综合虚拟副本。豆荚的这种拷贝可以在某些实施例中用于实现文件系统的基于豆荚的快照或克隆,并且可以用作复制文件系统的处理的一部分。
425.在某些示例中,术语“豆荚”是指将大量存储实体(例如,区块对象和文件系统)分组在命名空间内并且支持对作为组的所有实体的高效操作的任何存储系统构造。豆荚可以提供到包括组中的实体的数据集中的视图。因此,可以通过豆荚来访问(例如,读取、写入等)组中的实体。
426.在某些示例中,术语“虚拟副本”是指源的任何副本,其被配置为作为源的完整副本而被访问(例如,操作),但实际上不是源的完整副本。源的虚拟副本可以包括允许源的虚拟副本作为源的完整副本被访问而不是源的完整副本的任何数据集(元数据、表、图或其他数据结构)。例如,虚拟副本可以包括源元数据和/或对源元数据和/或数据的引用的全部或子集的副本。虚拟副本可以不包括源数据的实际物理副本,而是可以替代地被映射到源数据,使得所有源数据(或者在一些示例中,源数据的至少一部分)最初由源和源的虚拟副本共享。
427.在某些示例中,由区块对象构成的文件系统可以指利用区块对象来表示和/或管
理文件系统的内容的任何文件系统。可以存储在区块对象数据存储中的区块对象可以基于以区块为基础的存储系统中的概念来实现,但是面向高对象计数以及动态创建和删除,这不是基于卷的区块存储的典型。区块对象适合于存储具有高效随机读写访问(至少在区块级)的文件系统的各个文件和目录的数据和元数据。在一些情况下,区块对象可以专用于特定用途,诸如用于以更适合于结构化数据访问的形式存储目录或其他文件系统元数据等。
428.区块对象为某些数据操作(包括利用和/或与高效地创建源的副本(诸如源的快照、克隆或复制)相关的操作)提供高效的机制。区块对象可以被配置为至少在写入和重写随机区块的级上支持低延迟随机更新。区块对象可以被配置为具有用于修改区块对象的丰富的原语集(比常规对象存储的原语更丰富)。
429.在某些示例中,区块对象可以对应于区块容器,诸如本文描述的区块容器405等。例如,区块对象可以包括区块容器或者是区块容器的实现。
430.图23例示包括豆荚2302的数据存储系统2300(“存储系统2300”)的示例,豆荚2302包括由区块对象2306构成的文件系统2304。
431.豆荚2302可以是存储系统2300内的任何构造,其在命名空间内定义一组存储实体并且支持对作为组的实体的高效的组级操作。豆荚2302及其组级操作可以被配置为支持与文件系统可以使用的一样多的区块对象。对于具有很少文件的文件系统(诸如存储虚拟机映像或数据库表空间的有限使用的文件系统等),这可能不是那么多,可能在数百到几千个区块对象的范围。对于其他文件系统,区块对象的数量可以是数百万或甚至数十亿,使得用于支持组和对这些组的操作的机制扩展到这些大量的区块对象更加重要。
432.在某些示例中,豆荚2302可以包括包含对豆荚2302的内容的一个或多于一个引用(例如,指针、基于标识符的引用等)的任何数据结构,其中上述引用是诸如对文件系统2304的引用、对文件系统2304中的文件系统实体的引用(例如,对布置在一个或多于一个层次结构中的文件和目录的引用)、对区块对象2306的引用等。例如,豆荚2302可以包括包含任何这样的引用的表。这样的表或其他合适的数据结构可以将豆荚2302与其内容相关联。
433.存储系统2300可以被配置为支持通过豆荚2302访问文件系统2304。这可以允许存储系统2300确定为访问文件系统2304的请求是通过豆荚2302接收的,并且因此是针对豆荚2302中的文件系统2304而不是针对另一豆荚中的另一文件系统(文件系统2304的副本)。换句话说,文件系统2304的不同访问可以由存储系统2300识别,以区分对豆荚2302中的文件系统2304的访问与对豆荚2302的一个或多于一个其他豆荚或副本中的文件系统2304的副本的访问。如果文件系统标识是文件系统属性,则对其他豆荚中的副本的访问将需要有区别的标识。这可以通过添加豆荚作为文件系统标识的一部分来处置。一旦文件系统的豆荚已经被标识,对文件系统的实体(例如,文件系统的区块对象)的任何访问都可以在豆荚的命名空间内操作,因此当查看在哪个豆荚中的哪个区块对象正在被引用的区块对象标识符(诸如目录对象内的区块对象标识符等)时,应该不存在歧义。
434.在某些示例中,存储系统2300可以被配置为维持诸如表(例如,间接表)等的数据结构,其中该表包括将诸如文件系统等的存储实体映射到包括存储实体的豆荚的信息。这样的数据结构可以允许存储系统2300跨多个豆荚针对文件系统2304使用相同的文件系统标识,其中各豆荚的唯一豆荚标识被添加到文件系统标识,以通过包括文件系统2304的豆荚来区分文件系统2304。相同原理可以应用于文件系统2304内的实体的标识符(包括文件
系统2304的文件系统要素和区块对象2306的标识符),应用于文件系统的路径集,应用于文件系统的受管理目录,或者应用于存储系统2300可以实现的任何其他文件系统元数据。元数据可以存储在区块对象2306中,或者可以以某种其他方式实现。豆荚的虚拟副本应当确保豆荚中的任何文件系统的所有相关信息将被虚拟地或物理地从豆荚拷贝到豆荚的虚拟副本。
435.虽然图23所示的示例示出了豆荚2302包括一个文件系统2304,但这仅是说明性的。在其他示例中,豆荚2302可以被定义为包括一个或多于一个附加数据存储实体,诸如一个或多于一个附加文件系统和/或一个或多于一个其他类型的数据存储实体(例如,一个或多于一个卷)等。豆荚可以被定义为包括存储实体的任何合适的分组。
436.文件系统2304可以包括用于定义文件系统2304中所包括的文件系统实体(例如,以一个或多于一个层次结构所布置的文件和目录)的配置的文件系统元数据。可以采用任何合适的元数据(例如,路径集)和/或文件系统实体(例如,受管理目录)来表示文件系统2304的配置信息。在某些示例中,文件系统2304包括存储系统2300的文件系统层(例如,诸如上述文件服务层等)中所管理的文件系统实体。
437.文件系统2304可以以任何合适的方式由区块对象2306构成。例如,文件系统2304和/或文件系统实体可映射到相应区块对象2306或以其他方式与相应区块对象2306相关联。因为文件系统2304包括在豆荚2302中,所以与文件系统2304相对应的区块对象2306也包括在豆荚2302中。
438.区块对象2306可以包括引用(例如,指向)文件系统2304的实际数据2308的元数据内容,但其自身可能不知道文件系统2304的配置(例如,结构)。区块对象2306的内容可以被认为表示文件系统实体的内容,并且将文件系统实体的内容映射到存储系统2300中的实际数据区块(例如,数据2308)。区块对象2306可以包括任何合适形式的元数据内容,该内容表示文件系统实体的内容,将文件系统实体的内容映射到实际数据2308,并且支持对元数据和/或实际数据2308的高效操作(例如,区块级操作)。
439.在某些实施例中,例如,区块对象2306可以包括诸如b树状基于有向无环图的数据结构等的内容,该数据结构使用被称为区的存储实体来组织对独占或共享内容的引用,该区可以包括以上述和/或如2017年12月25日提交的美国专利申请15/842,850中所述的任何方式配置和操作的复合和叶逻辑区,该美国专利申请的内容通过引用并入本文。

850专利申请描述了引用共享区块与固有区块以及用于克隆逻辑区块或其他逻辑存储要素的范围的方式的示例、叶和复合逻辑区的说明性模型以及用于通过来自这些区的内容标识符引用共享区块的模型。在其他实施例中,区块对象2306可以以其他方式实现。例如,区块对象2306的内容可以包括一个或多于一个表(例如,数据库表)或用一个或多于一个表(例如,数据库表)表示。
440.存储系统2300可以被配置为高效地创建豆荚的副本。这可以通过存储系统2300创建(例如,响应于快照、克隆或以其他方式拷贝豆荚的请求)豆荚的虚拟副本来实现。存储系统2300可以被配置为以使得在生成豆荚的虚拟副本之后对豆荚进行的修改与豆荚的虚拟副本不同的方式生成豆荚的虚拟副本。当豆荚的虚拟副本是豆荚的可写副本时,对豆荚的可写副本进行的修改同样不同于豆荚。
441.图23例示由存储系统2300生成的豆荚2302的虚拟副本2312。存储系统2300可以以
任何合适的方式生成豆荚2302的虚拟副本2312。作为示例,存储系统2300可以生成包括对豆荚2302的引用的新数据结构,如图23所表示的。作为另一示例,存储系统2300可以生成作为表示豆荚2302的数据结构的副本的新数据结构,并且生成新标识符并将其分配给新数据结构。如果豆荚2302包括包含对文件系统2304的引用的数据结构,则豆荚2302的虚拟副本2312可以包括包含对文件系统2304的引用的副本的新数据结构。如果豆荚2302包括包含对文件系统2304的内容、区块对象2306和/或区块对象2306的内容的引用的数据结构,则豆荚2302的虚拟副本2312可以包括包含对文件系统2304的内容、区块对象2306和/或区块对象2306的内容的引用的副本的新数据结构。豆荚2302和豆荚2302的虚拟副本2312共享自创建虚拟副本2312起尚未被修改的任何数据(例如,任何元数据或至少一些元数据)。
442.在创建豆荚2302的虚拟副本2312时,豆荚2302的至少一些内容在豆荚2302和豆荚2302的虚拟副本2312之间共享。在某些示例中,豆荚2302的所有内容(例如,文件系统2304和区块对象2306的所有内容)最初在豆荚2302和豆荚2302的虚拟副本2312之间共享。例如,豆荚2302的虚拟副本2312可以由包括对与豆荚2302相同的内容的引用的数据结构来表示。图23通过虚线例示文件系统2304的内容和区块对象2306的内容在豆荚2302和豆荚2302的虚拟副本2312之间共享。虽然图23示出数据2308不包括在豆荚2302或豆荚2302的虚拟副本2312中,但是在其他示例中,数据2308可以被认为包括在豆荚2302和豆荚2302的虚拟副本2312中并且在豆荚2302和豆荚2302的虚拟副本2312之间共享,至少因为数据2308由包括在豆荚2302和豆荚2302的虚拟副本2312中并且在豆荚2302和豆荚2302的虚拟副本2312之间共享的区块对象2306来引用。
443.在其他示例中,豆荚2302的内容的子集最初在豆荚2302和豆荚2302的虚拟副本2312之间共享。这可以以各种方式实现,例如通过共享区块对象2306的内容、共享区块对象2306的内容中的一部分、共享区块对象2306的内容及文件系统2304的内容中的一部分、共享组织对区块对象及/或文件系统的引用的数据结构等。这样的示例可以包括存储系统2300将豆荚2302的一些要素部分地拷贝到豆荚2302的虚拟副本2312中,诸如通过在豆荚2302的虚拟副本2312中创建头部要素的副本和/或创建占位符要素等。支持高效拷贝的豆荚2302的虚拟副本的任何配置可以由存储系统2300生成。
444.存储系统2300可以被配置为进行作为生成虚拟克隆的一部分的一个或多于一个操作,该虚拟克隆使得存储系统2300能够定位在已经创建了豆荚2302的虚拟副本2312之后对豆荚2302进行的任何修改,使得这些修改针对豆荚2302不同并且不与豆荚2302的虚拟副本2312共享。如果虚拟副本2312是豆荚2302的可写副本,则这样的操作还可以使得存储系统2300能够定位在已经创建豆荚2302的虚拟副本2312之后对豆荚2302的虚拟副本2312进行的任何修改,使得这些修改针对豆荚2302的虚拟副本2312不同并且不与豆荚2302共享。
445.在某些示例中,与生成虚拟副本相关联的操作可以包括存储系统2300将与虚拟副本2312有关的信息添加到诸如表等的数据结构。例如,存储系统2300可以维持全局地标识文件系统(例如,使用存储系统2300中的全局标识符)并且按豆荚和豆荚相关标识符引用特定豆荚内的文件系统的表。当存储系统2300生成豆荚2302的虚拟副本2312时,豆荚2302中的文件系统2304的条目保持不变,并且包括通过豆荚和豆荚相关文件系统标识符引用豆荚2302中的文件系统2304的名称和标识符。存储系统2300向表添加豆荚2302的虚拟副本2312的新条目。新条目包括豆荚2302的虚拟副本2312的新名称和使用豆荚相关文件系统标识符
引用豆荚2302的虚拟副本2312中的文件系统2304的标识符。存储系统2300可以使用表中的这样的条目来确定在已经创建豆荚2302的虚拟副本2312之后接收到的修改请求的访问上下文(例如,路径),诸如是通过豆荚2302还是通过豆荚2302的虚拟副本2312接收到与文件系统2304相关联的修改请求。
446.当区块对象在文件系统在其中进行操作的豆荚内时,区块对象标识在豆荚内应该是唯一的,但是当通过作为豆荚级副本的另一豆荚访问时,它们的标识应该映射。因此,例如,考虑到具有文件系统fs1和区块对象集object1至object9999的豆荚pod1,如果豆荚被克隆以形成豆荚pod2,则原始文件系统可以作为pod1.fs1被访问,并且文件系统的对象可以作为pod1.object1至pod1.object9999被访问,并且克隆的文件系统和对象可以作为pod2.fs1和pod2.object1至pod2.object9999被访问。
447.替代方案可以使用表从不是基于豆荚的文件系统标识符映射到豆荚和豆荚相关文件系统标识符的组合。在这种情况下,为了访问文件系统的克隆,可以使用新的标识符,然后将新的标识符映射到克隆豆荚和豆荚相关文件系统标识符。
448.在某些示例中,与生成虚拟副本相关联的操作可以包括:存储系统2300更新与豆荚2302和/或豆荚2302的虚拟副本2312相关联的信息,以指示豆荚2302和/或豆荚2302的虚拟副本2312的修改时期(例如,新修改时间段的开始)。例如,当生成豆荚2302的虚拟副本2312并且虚拟副本2312是豆荚2302的克隆时,存储系统2300可以更新豆荚2302的标识符以指示豆荚2302的新修改时期的开始,并且提供豆荚2302的克隆的标识符以指示豆荚2302的克隆的新修改时期(例如,第一修改时期)的开始。
449.存储系统2300可以被配置为使用修改时期来确定如何处理在已经生成豆荚2302的克隆之后接收到的修改请求。例如,当通过访问上下文(例如,通过豆荚2302或豆荚2302的克隆)接收到修改请求时,存储系统2300可以将数据实体的时期(诸如根据请求要修改的区块对象2306的时期)与同访问上下文相关联的豆荚2302或豆荚2302的克隆的修改时期进行比较。如果所比较的时期不匹配,则数据结构在豆荚2302和豆荚2302的克隆之间共享,并且应该在进行修改之前被私有化。存储系统2300可以制作数据实体(例如,区块对象2306)的私有副本,并且用当前修改时期标记数据实体的私有副本。然后,存储系统2300可以使用数据结构的私有副本在豆荚2302或豆荚2302的克隆(取决于访问上下文)内私有地进行修改,使得修改针对豆荚2302或豆荚2302的克隆不同并且不与另一豆荚共享。
450.在某些示例中,与生成虚拟副本相关联的操作可以包括:存储系统2300操纵诸如路径等的访问上下文的实体上的写时拷贝状态。例如,当在两个访问路径之间共享数据结构时,两个路径可以各自将它们对共享数据结构的引用标记为写时拷贝。向下修改任一路径的任何尝试将遇到所指向的数据结构上的写时拷贝状态,这将导致存储系统2300制作所指向的数据结构的副本,这使得现在数据结构所指向的各种结构由两个数据结构(原始和副本)共享。对下一级数据结构的引用被标记为写时拷贝等等,沿着路径向前,使得沿着从发生共享向下到被修改的数据结构的路径的数据结构被拷贝和更新。
451.在已经生成豆荚2302的虚拟副本2312之后,可以根据需要(诸如响应于预定义触发事件的发生等)选择性地进行豆荚2302的至少一些内容的定位(例如,私有化),豆荚2302的至少一些内容可以包括豆荚的任何内容,诸如元数据、文件系统2304的内容(例如,文件系统实体)、区块对象2306和/或区块对象2306的内容。可以定义并使用任何合适的触发事
件来触发豆荚2302的内容的定位,诸如可包括读取数据的请求、修改数据的请求或任何其他合适类型的访问请求的访问请求等。修改数据的请求可以包括添加、删除、创建、改变、移动或克隆某些事物(例如,添加区块对象、添加元数据、创建文件、删除文件、改变文件、创建目录、向目录添加文件或从目录移除文件、删除目录、在目录之间移动文件或目录、克隆区块对象等)的请求。这样的修改的示例包括但不限于添加块或目录对象、添加表示新的受管理目录的新文件系统或新路径集的元数据、删除区块对象、删除文件系统、由于受管理目录被删除而删除路径集、以及诸如通过添加或移除目录中的条目来修改某些事物、更新路径集、将区块重写到区块对象、写入扩展区块对象的新区块,在区块对象之间或在单个区块对象的部分之间进行虚拟拷贝操作、以及从区块对象解除映射一些区块(例如,通过使区块对象中的区块不再指向任何事物来使区块对象中的区块虚拟归零)。任何这样的修改请求可以对在豆荚2302和豆荚2302的虚拟副本2312之间共享的数据或元数据进行操作,并且将被定位到豆荚2302或豆荚的虚拟副本2312(取决于请求的访问上下文)作为修改的一部分。
452.通过生成豆荚2302的虚拟副本、然后基于预定义的触发事件根据需要选择性地进行豆荚2302的内容和/或豆荚2302的虚拟副本的内容的定位,可以提供豆荚2302的高效拷贝。高效拷贝可以允许快速创建虚拟副本并且使用存储系统2300的最小资源,并且允许选择性地进行豆荚2302的内容和/或豆荚2302的虚拟副本的内容的定位(其可以包括豆荚2302的内容和/或豆荚2302的虚拟副本的实际拷贝),使得资源仅在需要时用于定位。这对于由大量区块对象构成的文件系统和/或表示从未更新或很少更新的大量数据的文件系统尤其有益。
453.在已经生成豆荚2302的虚拟副本2312之后对豆荚2302进行的修改与豆荚2302的虚拟副本2312不同。为了例示,存储系统2300可以接收修改豆荚2302的内容的请求。该请求可以是修改区块对象2306或区块对象2306的内容和/或文件系统实体或文件系统实体的内容。例如,这样的请求可以包括修改与区块对象2306的内容相关联(例如,由其引用)的数据2308(例如,数据区块)内的数据的请求。响应于请求,存储系统2300可以确定为该请求与豆荚2302相关联(例如,通过豆荚2302接收),并且要修改的内容与豆荚2302和豆荚2302的虚拟副本2312这两者相关联(例如,由豆荚2302和豆荚2302的虚拟副本2312共享),并且应该在进行所请求的修改之前被定位。该确定可以以任何合适的方式(包括基于请求的访问上下文、与请求的访问上下文和要修改的内容相关联的豆荚的修改时期、引用计数和/或与请求的访问上下文和要修改的内容相关联的写时拷贝标记)进行。
454.然后,存储系统2300可以定位豆荚2302的内容,并且基于修改请求以不与豆荚2302的虚拟副本2312共享修改或经修改内容的任何合适的方式私有地修改豆荚2302中的内容。因此,在豆荚2302中进行的修改对于豆荚2302是私有的,并且因此与豆荚2302的虚拟副本2312不同。在某些示例中,结合修改豆荚2302中的内容,存储系统2300可以更新与经修改内容(诸如经修改内容的修改时期(例如,通过更新与内容相关联的标识符)、与经修改内容相关联的引用计数器或与内容相关联的写时拷贝标记等)相关联的元数据,以指示内容的定位和/或修改。
455.图24a~24c例示对豆荚2302中的区块对象的内容进行修改的示例。在图24a中,区块对象2306-1由豆荚2302和豆荚2302的虚拟副本2312共享。存储系统2300检测修改区块对象2306-1的内容的请求。修改区块对象2306-1的内容的请求可以包括修改区块对象2306-1
的内容而不修改区块对象2306-1映射到的数据区块2308-1的请求,或者可以包括修改数据区块2308-1的请求,并且涉及修改区块对象2306-1的内容,因为区块对象2306-1映射到数据区块2308-1。
456.存储系统2300可以确定与请求相关联的访问上下文,这可以包括确定请求是通过豆荚2302还是豆荚2302的虚拟副本2312接收的。存储系统2300还可以确定为区块对象2306-1在豆荚2302与豆荚2302的虚拟副本2312之间共享并且应在修改区块对象2306-1之前定位,使得修改将是本地的且针对豆荚2302或豆荚2302的虚拟副本2312不同,且不与另一豆荚共享。
457.响应于定位区块对象2306-1的请求和确定,如图24b中所示,存储系统2300可以生成区块对象2306-1的虚拟私有实例(豆荚2302中的区块对象2306-1的第一私有实例2306-1-1和豆荚2302的虚拟副本2312中的区块对象2306-1的第二私有实例2306-1-1)。在一些示例中,区块对象2306-1的虚拟私有实例2306-1-1可以彼此相同,除了它们与豆荚2302和豆荚2302的虚拟副本2312的相应关联之外。在某些示例中,区块对象2306-1的各虚拟私有实例2306-1-1可与区块对象2306-1共享区块对象2306-1的初始内容和区块对象2306-1的豆荚相关标识。
458.在生成虚拟私有实例2306-1-1之后,存储系统2300可以进行一个或多于一个所请求的修改。例如,存储系统2300可以确定为通过豆荚2302接收到修改请求,这意味着将在豆荚2302中私有地应用修改,使得豆荚2302中的修改与豆荚2302的虚拟副本2312不同。然后,存储系统2300可以将所请求的修改应用于豆荚2302中的区块对象2306-1的第一虚拟私有实例2306-1-1,且不应用于豆荚2302的虚拟副本2312中的区块对象2306-2的第二虚拟私有实例2306-1-1。在图24c中,经修改的第一虚拟私有实例2306-1-1被表示为经修改的第一虚拟私有实例2306-1-2,以指示豆荚2302中的经修改的第一虚拟私有实例2306-1-2与豆荚2302的虚拟副本2312中的第二虚拟私有实例2306-1-1不同(例如,不相同)。
459.上述修改操作可以诸如当虚拟副本2312是豆荚2302的快照或克隆时应用于各种类型的虚拟副本。在虚拟副本2312是豆荚2302的快照的示例中,快照可以是豆荚2302在某个时间点的不可变(例如,只读)快照。在这样的示例中,可以不通过豆荚2302的快照接收修改请求。
460.在虚拟副本2312是豆荚2302的克隆的示例中,克隆可以是豆荚2302的可变副本(例如,作为豆荚2302的虚拟克隆的新豆荚),这意味着在生成豆荚2302的克隆之后,豆荚2302和豆荚2302的克隆各自可以被独立且私有地修改,而不与另一豆荚共享修改。在这样的克隆示例中,可以通过豆荚2302接收修改请求以修改豆荚2302的内容,或者通过豆荚2302的克隆接收修改请求以修改豆荚2302的克隆的内容。当确定为通过豆荚2302的克隆接收到修改请求时,存储系统2300可以如上所述进行操作以将所请求的修改应用于豆荚的克隆中的私有实例(例如豆荚中的区块对象的虚拟私有实例)而不应用于源豆荚中的相应私有实例(例如源豆荚中的区块对象的相应虚拟私有实例)。
461.如上所述,豆荚的虚拟副本可以是豆荚的快照,快照可以是虚拟副本的一种形式。在某些示例中,豆荚的快照可以是表示豆荚在某个时间点的状态的豆荚的不可变(例如,只读)时间点映像。快照在被移除之前保持不变(虚拟地),但是当原始豆荚被修改时,原始豆荚可以从该快照(以及豆荚的任何其他快照)定位其修改。也就是说,在创建快照之后,豆荚
可以继续是可写入的,并且因此能够与快照不同地被修改,使得在创建快照之后对豆荚进行的任何修改不会对该快照或豆荚的任何其他快照进行。在某些示例中,豆荚的快照可以在快照的生命期期间保持与豆荚相关联,直到快照被删除为止。例如,该关联可以被包括在空间核算的一些计算中,以诸如提供豆荚自身正在使用存储系统的多少物理容量的指示,该指示与豆荚的快照使用存储系统的多少附加物理容量相耦接。
462.还如上所述,豆荚的虚拟副本可以包括豆荚的克隆,克隆可以是第二形式的虚拟副本。在某些示例中,豆荚的克隆可以为最初是豆荚的可变(例如,可写)副本的不同豆荚。在创建克隆豆荚时,源豆荚和克隆豆荚可以是对称的,具有相同的内容(例如,,诸如通过豆荚引用相同内容,这些豆荚的内容在它们之间共享)。可以独立地修改源豆荚和克隆豆荚中的各个豆荚,使得对豆荚中的一个豆荚进行的修改与另一豆荚不同并且不对另一豆荚进行修改,从而允许豆荚在创建克隆之后彼此偏离。
463.存储系统2300可以被配置为进行本文所述的任何操作以生成豆荚快照的豆荚克隆、豆荚克隆的豆荚克隆和/或豆荚克隆的豆荚快照。作为示例,豆荚2302可以是另一豆荚的快照或克隆,并且豆荚2302的虚拟副本2312可以是豆荚2302的快照或克隆。因此,豆荚的虚拟副本序列可以由存储系统2300生成,并且可以包括豆荚克隆、豆荚快照、或者豆荚克隆和豆荚快照这两者的序列。
464.图25描绘了说明性方法2500。虽然图25例示根据某些实施例的示例操作,但是其他实施例可以省略、添加、重新排序和/或修改图25中所示的任何操作。图25中所示的一个或多于一个操作可以由存储系统、其中包括的任何组件和/或其任何实现来进行。
465.在操作2502中,存储系统生成包括由区块对象构成的文件系统的豆荚的虚拟副本。豆荚和豆荚的虚拟副本诸如通过豆荚和豆荚的虚拟副本各自引用相同的内容(例如,文件系统实体、区块对象、元数据等)最初在它们之间共享内容(例如,区块对象的内容)。
466.存储系统可以以任何合适的方式(包括以本文描述的任何方式)生成豆荚的虚拟副本。例如,豆荚的虚拟副本的生成可以包括:存储系统进行本文描述的针对豆荚和/或豆荚的虚拟副本的一个或多于一个操作,以准备初始共享的内容随后根据需要在豆荚和豆荚的虚拟副本之间清楚地定位。例如,存储系统可以诸如通过用与豆荚的虚拟副本有关的信息(例如,与虚拟副本及其与文件系统的关系有关的信息)更新间接表、更新豆荚修改时期(例如,从当前时期到下一时期)、更新豆荚标识符(例如,从当前标识符到下一标识符)、提供虚拟副本的新时期或标识符、标记写时拷贝状态等,来更新与豆荚和/或豆荚的虚拟副本相关联的信息。
467.在操作2504中,存储系统接收修改区块对象中包括的区块对象的内容的请求。该请求可以以任何合适的方式或通过任何合适的访问上下文来接收,并且可以包括任何类型的修改请求。虽然在修改请求与区块对象的内容相关联的上下文中描述了该特定示例,但是在其他示例中,修改请求可以包括修改豆荚的任何其他内容或豆荚的虚拟副本(例如,元数据、路径集等)的请求。
468.在操作2506中,存储系统确定要修改的内容是在豆荚和豆荚的虚拟副本之间共享还是对于豆荚或豆荚的虚拟副本是本地的(通过该豆荚或豆荚的虚拟副本接收该请求)。操作2506可以以任何合适的方式(包括以本文描述的任何方式)进行。例如,存储系统可以使用该请求的访问上下文、修改时期、写时拷贝指示、引用计数器、任何其他机制或这些机制
中的任何机制的组合来进行该确定。
469.当存储系统确定为区块对象的内容在豆荚和豆荚的虚拟副本之间共享时,存储系统可以进行方法2500的操作2508、2510和2512。另一方面,如图25所示,当存储系统确定为区块对象的内容对于豆荚或豆荚的虚拟副本是本地的时,存储系统可以进行操作2512而不进行方法2500的操作2508和2510。
470.在操作2508中,存储系统生成对于豆荚是本地的区块对象的第一虚拟实例。区块对象的第一虚拟实例可以与区块对象共享区块对象的内容。操作2508可以以任何合适的方式(包括以本文描述的任何方式)进行。
471.在操作2510中,存储系统生成对于豆荚的虚拟副本是本地的区块对象的第二虚拟实例。区块对象的第二虚拟实例可以与区块对象共享区块对象的内容。操作2510可以以任何合适的方式(包括以本文描述的任何方式)进行。
472.在操作2512中,存储系统应用与请求相关联的修改。操作2512(或方法2500的较早操作)可以包括存储系统确定请求的访问上下文,该确定可以包括确定请求是通过豆荚还是豆荚的虚拟副本接收到的。当通过豆荚接收到请求时,存储系统可以将与请求相关联的修改应用于豆荚中的区块对象的私有实例,而不应用于豆荚的虚拟副本中的区块对象的相应私有实例。如果共享内容并且进行操作2508,则虚拟私有实例可以是在操作2508中生成的第一私有虚拟实例,或者如果要修改的内容先前定位到豆荚,则虚拟私有实例可以是先前在豆荚中生成的虚拟私有实例。当通过豆荚的虚拟副本接收到请求时,存储系统可以将与请求相关联的修改应用于豆荚的虚拟副本中的区块对象的私有实例,而不应用于豆荚中的区块对象的相应私有实例。如果共享内容并且进行操作2510,则虚拟私有实例可以是在操作2510中生成的第二私有虚拟实例,或者如果要修改的内容先前定位到豆荚的虚拟副本,则虚拟私有实例可以是先前在豆荚的虚拟副本中生成的虚拟私有实例。
473.在某些示例中,豆荚可以用于数据复制。例如,存储系统(例如,存储系统2300)可以被配置为作为整体复制豆荚。为此,源存储系统可以在目标存储系统中的某个其他位置处建立豆荚的物理副本。目标存储系统可以在源存储系统附近(例如,在相同的数据中心或附近的数据中心中)或更远。
474.复制到与高带宽网络连接的相对附近的位置可以是同步的,在这种情况下,复制的副本随着所有修改发生而保持最新(或者至少随着任何完成的修改而保持最新)。在某些示例中,豆荚可以是一个存储系统中的数据的子集,其作为单元被扩展到另一存储系统上的镜像副本,以供连接到任一存储系统的主机(包括连接到两个存储系统的单个主机)对称访问。在这种对称的情况下,在两个存储系统上可能没有两个明显分离且单独标识的豆荚;可以替代地存在一个命名和标识的豆荚,其在两个存储系统上(或者实际上在对称地复制豆荚的任何数量的存储系统上)存储物理副本。然后,至少在正常运行且彼此之间通信并且存储豆荚的最新物理副本的复制存储系统之间,可以将向任何存储系统发起的对豆荚的更新同步复制到其他存储系统上的豆荚的其他副本。
475.豆荚可以用于除对称同步复制之外的复制类型。这样的其他复制模型可以定义在管理上分开的在豆荚之间具有不对称关系的豆荚,在任何特定时间点,一个豆荚是源,并且一个豆荚是目标。现在将描述其示例版本。
476.一个版本是非对称同步复制,其中存在显式源系统,该显式源系统允许写入并且
同步复制到第二存储系统上的具有单独标识的单独豆荚。在第二存储系统(无论哪个存储系统当前是目标)上的访问可能需要操作以使得能够访问豆荚的克隆(诸如用于消防演习目的),或者需要操作以切换复制,使得先前的复制目标被升级为用于复制关系的主豆荚,这使得新的主豆荚是复制源,并且至少在先前的源变得可用时,先前的复制源是复制目标。当原始源以某种方式发生故障时,这可能发生,并且当发生这种情况时,复制通常将停止。这也可以作为翻转源和目标的一组管理动作而发生。
477.另一版本是有时被称为“近同步”复制的第二类型的非对称复制,其中对一个存储系统上的源豆荚的修改被发送到第二存储系统上的目标豆荚,但是其中用信号通知对源豆荚修改操作的完成不需要等待修改在目标上完成的指示。这种类型的复制可以遵循与上文针对非对称同步复制所描述的相同的升级、克隆、消防演习和方向反转模型,除了一些操作可以优选地涉及等待修改以在一些方向切换、快照或克隆操作可以完成之前赶上之外。
478.另一版本是有时被称为异步、定期或基于快照的复制的第三种类型的非对称复制。该方案涉及定期地获取快照(诸如以每小时一次的间隔,但不是必须以规则的间隔)并将该快照的内容从源存储系统发送到一个或多于一个目标存储系统。这可以高效地完成,使得针对一个快照发送的数据量大致与自上次发送的快照起的变化量相关。快照到快照复制的一种实现涉及将最近的快照与先前发送的快照进行比较并且生成和发送差异列表。另一实现可以涉及使用类似的事物来发送已经创建、删除或修改的区块对象的列表,同时使用逻辑区和内容区块标识符模型来发送对区块对象的实际改变。
479.当基于豆荚实现了这些形式的复制中的任何一种并且确保了豆荚内的文件系统的区块对象和相关元数据从一个存储系统上的豆荚复制到第二存储系统上的豆荚(相同豆荚或配对豆荚)时,并且在复制处理正在正常运行并且不处于某种初始同步或不同步恢复模式期间,该第二存储系统将具有豆荚所包含的文件系统的所有内容。在对称复制的豆荚的情况下,如果文件系统逻辑本身实现了确保来自共享包含文件系统的对称复制豆荚的存储系统的一致和正确访问所需的锁定和其他协调,则文件系统可以从共享豆荚的所有存储系统访问。在不对称复制的豆荚的情况下,运行且可访问的文件系统可以与针对向源豆荚的更新而当前活动的源存储系统相关联。替代地,运行且可访问的文件系统可以与任何存储系统上的豆荚的克隆相关联(诸如针对前面提到的消防演习情况等)。
480.考虑到可以使快照与区块对象或区块对象的集合一起工作,并且考虑到可以通过搜索在两个快照之间添加、移除或修改的存储实体来比较快照的差异,定期或其他基于差异的复制技术可以将这些差异从一个存储系统或数据中心发送到另一存储系统或数据中心。存储系统可以采用机制来优化这一点,包括考虑已经发送的数据或以其他方式已经存储在目标上的数据。这些优化可以包括抑制重复串的发送或减少由包含有限范围的字节值的数据所发送的字节的压缩。优化还可以使用数据校验和或指纹来确定为复制目标已经具有示出为两个快照之间的差异或者在豆荚数据集到目标的初始传送中示出的数据。优化还可以包括对已经从源存储系统或数据中心发送到目标存储系统或数据中心的区块的知晓(awareness),诸如因为具有相关联标识符的区块或逻辑数据段在该存储系统内以某种方式虚拟地复制(或者在源存储系统上被确定为该存储系统内的副本,并且因此已经被该存储系统的去重复机制减少),并且该区块或逻辑数据段标识符的发送在目标上被识别为先前已经传送。也可以使用豆荚的几乎同步的复制,诸如取决于各种轻量级检查点的复制等。
481.在某些示例中,复制处理可以使用豆荚的虚拟副本。作为示例,可以生成并比较存储系统中的源豆荚的第一虚拟副本和第二虚拟副本以确定副本之间的任何差异。然后,可以使用所确定的差异来更新另一存储系统中的豆荚的复制。
482.如果在特定豆荚内创建文件系统,使得在该同一豆荚内创建和操纵其所有区块对象,则上述操作可以是直接的。如果从豆荚本身获取快照或克隆,则所有区块对象和其他文件系统状态将被保持在快照中并且将在克隆中可用。如果豆荚被复制到另一存储系统,则文件系统的所有区块对象也应该被复制,无论复制是同步的、几乎同步的、定期的还是基于复制豆荚快照都是如此。
483.在支持在豆荚之间移动文件系统时可能会出现更复杂的问题,这可能是用于确保一组文件系统可以一起且一致地、可能与其他非文件系统对象(诸如也可以一起分组到豆荚中的卷或其他类型的存储实体)一起被快照、克隆或复制的有用特征。例如,如果豆荚正在被复制并且文件系统被移动到豆荚中,则所有文件系统和区块对象应当被复制到目标,这将要求复制处理意识到新的区块对象已经被添加到豆荚。文件系统的内容(例如,区块、受管理目录以及目录对象和结构)可能没有以其他方式被修改,因此它们可能不会示出为改变。存储系统(例如,存储系统2300)可以进行用于检查先前未被复制的对象的处理,该处理可以检测到新对象尚未被复制。如果区块对象的数量非常大,则这可能表示可扩展的簿记问题。如果区块对象需要以某种方式被标记为特定豆荚的一部分以供复制高效地进行,则存储系统可以采用中间转换表(例如,间接表)来识别并在表中注意到被识别为在豆荚之间转变的文件系统的一部分的区块对象应该真正被认为是目标豆荚的一部分(即使区块对象尚未被迁移)。然后,修改这些区块对象的操作可以检测差别并且如同区块对象是目标豆荚的一部分那样操作,或者移动区块对象作为修改操作的一部分。只要文件系统的标识是相同的或者以可预测的方式在豆荚之间映射,则文件系统级操作可以首先在一个豆荚中查找区块对象,然后在另一豆荚中查找区块对象。如果文件系统被移动多次,则可能存在一系列豆荚来搜索以查找特定区块对象。
484.复制也可以类似地通过将尚未移动但作为已经移动的文件系统的一部分的区块对象考虑为应当作为该豆荚的复制的一部分而被复制的对象来处置这一点。如果快照或检查点本质上不能考虑尚未移动的区块对象,则这可能导致基于快照或检查点的复制的问题。这可以通过确保对区块对象的任何修改首先将区块对象移动到区块对象的文件系统的当前豆荚来处置。只要文件系统根据文件系统是在快照或检查点建立之前还是之后被移动而被包括在快照或检查点中或者从快照或检查点中排除,在文件系统被移动到豆荚的时间与快照或检查点建立的时间之间对区块对象的任何修改就将被包括在豆荚中,并且任何未修改的区块对象可以从它们在豆荚外部的先前位置或它们在豆荚内部的未修改状态被检索,并且结果将是相同的。
485.此外,如果使用数据库风格的机制来存储区块对象到豆荚的关系,则在豆荚之间传送文件系统之后修改区块对象到豆荚的关系可能是相对快速的表操作。
486.将文件系统移出豆荚的问题可能是类似的。文件系统到豆荚的映射可以被更新使得文件系统不再在其先前豆荚中,然后文件系统的区块对象将仿效,间接地通过区块对象与不再在豆荚中的文件系统具有关系,或者通过更新区块对象自身以指示其不再在豆荚中,可能首先发生文件系统关系且稍后更新区块对象到豆荚映射。如对正被移动到作为文
件系统的一部分的豆荚中的区块对象的修改那样,如果将修改区块对象的操作应用于已经移出豆荚的文件系统中的区块对象,则可以在应用更新之前将区块对象移出豆荚以保持与豆荚的任何先前或后续快照、检查点或克隆的适当关系。
487.各种形式的基于豆荚的复制可能遭受问题:如果现有文件系统(或卷)被移动到豆荚中,则非常大的数据集可能突然被添加到必须被复制的数据,这以及时的方式复制可能是不可能的、困难的或不切实际的。同步或几乎同步的复制可能不考虑数百千兆字节的数据或数十万个区块对象的突然出现,并且仍然维持零或非常低的rpo和rto。如果由于文件系统(或卷)被移动到豆荚中而突然添加了太字节的数据或数百万的新区块对象,则基于快照差异的复制也可能错失其rpo目标。
488.为了解决这个问题,存储系统可以配置有在文件系统(或卷)可以被添加到正被复制的豆荚之前将区块卷或文件系统迁移到目标存储系统或数据中心的机制。这种机制可以包括将两个豆荚连结在一起或将豆荚彼此分开的机制,其中如果两个豆荚已经在相同的存储系统之间复制,则连结是高效的。例如,存储系统可以在将包含文件系统的豆荚与已经在源存储系统和目标存储系统之间复制的另一豆荚连结之前将该豆荚复制到目标存储系统。对于同步复制或几乎同步复制的豆荚,该连结本身可以是复制操作。对于基于快照差异的复制,连结可以是如同步或几乎同步复制那样的发送操作,或者已经代表一个豆荚发送的数据可以包含区块、数据段或区块对象或文件系统标识符,其中当发送包括一个豆荚连结到第二豆荚时的时间的两个快照之间的差异时,可以清楚地看出由于第一豆荚已经被复制,已经存在通过连结添加到第二豆荚的结果区块、逻辑段、区块对象或文件系统。
489.在一个豆荚与已经复制的第二豆荚连结之前传送或复制该一个豆荚也可以以多种方式进行,包括通过在连结操作之前通过网络传送第一豆荚或针对第一豆荚建立正在进行的复制,或者通过将第一豆荚的数据拷贝到一些本地但可移除的存储装置(诸如可以与第一存储系统的本地网络断开连接的单独存储系统等)、然后将该可移除存储装置物理地运输到目标存储系统的数据中心(诸如通过将其放在卡车、火车、飞机、轮船或某种组合上)并将其运送到目标数据中心以进行安装并以某种方式与目标存储系统的数据集合并。在故障导致临时或扩展的复制中断之后,发送基于快照差异的复制的数据的这些机制中的一些机制也可以用于同步或几乎同步的复制。
490.在某些示例中,一个或多于一个存储系统可以被配置为标识已经在存储系统之间传输(例如,作为复制或其他传送操作的一部分)的数据的实例,诸如区块或逻辑段等。例如,虚拟复制操作的序列(豆荚的、区块容器的、或者诸如卷或区块容器等的存储要素的逻辑段到相同或不同的这样的存储要素的其他逻辑段的虚拟复制操作的序列)可以使得共享内容作为共享逻辑段。只要逻辑段保持相同,这些逻辑段或逻辑段的部分就可以被给予保持相同的标识符。如果通过共享第一逻辑段的一些上下文,修改该第一段的内容,则可以创建具有新标识符的第二逻辑段。对于第一逻辑段的在形成第二逻辑段的改变中未被修改的至少一些部分,该第二逻辑段可以共享第一逻辑段的这些部分。这些共享部分可以保留来自第一逻辑段的标识,其中修改的部分被给予新的唯一标识。
491.此外,虚拟拷贝操作或去重复可以使得从多个逻辑段引用数据区块。存储系统中唯一存储的区块(包括非复制的、非拷贝的区块或由于虚拟拷贝操作或去重复而在存储要素之间共享的区块)也可以在存储系统内具有标识。豆荚、区块对象、卷和其他存储实体可
以例如通过拷贝操作或去重复处理来共享各种数据区块,使得这些存储实体通过这些标识将这些数据区块并入到存储实体的逻辑段中。
492.如果在某个时间点,具有逻辑段或部分标识符的组合的逻辑段集合或者区块标识符集合以某种方式从第一存储系统(诸如通过第一次复制等)传送到第二存储系统,则第二存储系统可以记录这些逻辑段、部分和区块标识符中的一些或全部。从第一存储系统复制到第二存储系统或者甚至从第二存储系统复制回到第一存储系统的后续处理可以使用这些标识符来确定为某个逻辑段、部分或区块标识符已经存在于目标上,并且因此不需要传送这些逻辑段、部分或区块的内容,即使特定逻辑段、部分或区块标识符的存在可能是由与特定复制处理无关的操作集合引起的也是如此。例如,虚拟拷贝操作集合可能已经得到了并入已通过一些其他复制或传送处理到达存储系统的逻辑段、部分或区块的区块对象。
493.此外,从第二存储系统到第三存储系统的复制处理或其他传送处理可以使得第三存储系统接收具有源自第一存储系统的标识符的逻辑段、部分或区块。即使由于在这些逻辑段、部分或区块从第一存储系统传送到第二存储系统之后发生的从第二存储系统到第三存储系统的传送而导致所得标识符存在于第三存储系统上,随后在第一存储系统和第三存储系统之间操作的复制处理之后也可以确定为这些逻辑段、部分或区块标识符中的一些已经存在,从而允许避免它们的实际内容传送。
494.这种用于避免内容传送的标识的传递使用可以任意地扩展到制作内部虚拟副本并在彼此之间以各种方式传送数据的任何数量的存储系统。并且,通过这种虚拟副本和物理传送的任何合理组合,可以比较匹配的逻辑段、部分和区块标识符,以避免传送物理传送的目标已经存储的内容。
495.这也可以用于在虚拟服务器环境中运行或在云提供商基础设施中运行的虚拟存储系统。此外,虚拟或物理存储系统可以将内容存储在云提供商基础设施中(诸如存储在基于云的对象存储中),并且如果这些相同的标识符存储在对象存储中,则可以读取这些标识符以确定为正在从对象存储中读取数据(诸如从已经将内容存储在对象存储中的存储系统再融合豆荚的内容)的存储系统已经具有该内容中的一部分内容,因此不需要从对象存储中读取标识符已经存在的内容。
496.在某些实例中,数据存储系统(诸如本文中描述的任何说明性存储系统等)可建立由区块对象构成的文件系统。数据存储系统、文件系统和区块对象可以被定义和/或配置为以本文描述的任何方式来操作。
497.在前述描述中,已经参考附图描述了各种示例性实施例。然而,显而易见的是,在不脱离如所附权利要求中阐述的本发明的范围的情况下,可以对本发明进行各种修改和改变,并且可以实现附加的实施例。例如,本文描述的一个实施例的某些特征可以与本文描述的另一实施例的特征组合或替代本文描述的另一实施例的特征。因此,说明书和附图被认为是说明性的而不是限制性的。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献