具有数据块共享的文件系统转让专利

申请号 : CN201580046541.0

文献号 : CN106575309B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : R.达斯W.蒂普顿M.史密斯S.费尔马

申请人 : 微软技术许可有限责任公司

摘要 :

为了提供可以快速地复制或重新布置文件的操作,文件系统允许在两个或更多文件之间或者在文件内共享所存储的数据。文件系统提供这样的操作:其允许将来自一个文件的区段复制到另一个文件的区段中,或者复制到相同文件中的不同区段中,如果区段不重叠的话。为了支持这样的操作,文件系统追踪用于文件的区段的所存储的数据的存储位置,并且追踪是否与任何其它文件或者由相同文件的另一个部分共享用于文件的区段的所存储的数据。对于引用所共享的所存储的数据的文件的区段的写入调用向存储设备上的新区段的写入操作,并且所追踪的用于受影响的区段的信息被更新。

权利要求 :

1.一种由文件系统配置以管理对于一个或多个存储设备上的多个文件系统对象的存储和访问的计算机,所述计算机包括:存储数据的存储介质,所述数据指示所述一个或多个存储设备上的所存储的数据是否由文件系统对象共享;

处理系统,包括存储器和处理器,其中计算机程序代码被存储在所述存储器中,所述计算机程序代码在由所述处理器执行时将所述处理系统配置成:对来自应用的、访问所述一个或多个存储设备上的文件系统对象的请求做出响应;

响应于将数据写入文件系统对象的请求,至少基于被存储在所述存储介质上的数据来确定所述文件系统对象是否包括被共享的数据;

响应于确定所述文件系统对象包括被共享的所述数据,将所述数据写入所述一个或多个存储设备中的、用于所述文件系统对象的新区段,并且更新指示所述一个或多个存储设备上的所存储的所述数据是否被共享的所述数据;以及响应于对按照期望的顺序来重新布置源文件系统对象的期望的数据的请求:标识要从所述源文件系统对象被复制的所述期望的数据,创建目的地文件系统对象,所述目的地文件系统对象仅包括按照所述期望的顺序的、所标识的所述数据并且引用由所述源文件系统对象使用的所标识的所述数据在所述一个或多个存储设备上的存储位置,以及更新指示所述一个或多个存储设备上的所存储的所述数据是否被共享的所述数据,来指示在所引用的所述存储位置中的所标识的所述数据由所述源文件系统对象和所述目的地文件系统对象共享。

2.根据权利要求1所述的计算机,其中指示是否共享所存储的数据的数据包括所共享的区段的索引。

3.根据权利要求2所述的计算机,其中对于所共享的区段,索引包括引用计数,该引用计数指示共享区段的文件系统对象的数目。

4.根据权利要求1所述的计算机,其中,文件系统包括将来自源文件的一个或多个区段的区间复制到目的地文件中的区段的区间的命令,使得源文件和目的地文件共享用于块的区间的所存储的数据。

5.根据权利要求4所述的计算机,其中应用使用文件系统命令以进行文件的复制。

6.根据权利要求4所述的计算机,其中应用使用所述文件系统命令以提供对重新布置文件的请求。

7.根据权利要求1所述的计算机,其中与第二文件共享所存储的数据的第一文件具有属性集,以使得写入第一文件将数据写入到所述一个或多个存储设备上的新区段。

8.一种由计算机的文件系统执行的计算机实现的过程,包括:

将数据存储在存储介质中,所述数据指示在一个或多个存储设备上的所存储的数据是否由文件系统对象共享;

接收向文件系统对象写入数据的请求;

响应于对写入数据的所述请求,至少基于被存储在所述存储介质中的所述数据来确定所述文件系统对象是否包括被共享的数据;

响应于确定所述文件系统对象包括被共享的数据,将所述数据写入到所述一个或多个存储设备中的、用于所述文件系统对象的新区段并且更新指示在所述一个或多个存储设备上的所存储的所述数据是否被共享的所述数据;以及响应于对按照期望的顺序来重新布置源文件系统对象的期望的数据的请求:从所述源文件系统对象标识所述期望的数据,

创建目的地文件系统对象,所述目的地文件系统对象包括按照所述期望的顺序的、所标识的所述数据并且引用来自所述源文件系统对象的所标识的所述数据在所述一个或多个存储设备上的存储位置,以及更新指示在所述一个或多个存储设备上的所存储的所述数据是否被共享的所述数据,来指示在所引用的所述存储位置中的所标识的所述数据由所述源文件系统对象和所述目的地文件系统对象共享。

9.根据权利要求8所述的计算机实现的过程,其中,指示是否共享所存储的数据的数据包括所共享的区段的索引。

10.根据权利要求9所述的计算机实现的过程,其中,所述索引包括,针对所共享的区段的指示共享该区段的文件系统对象的数目的引用计数。

11.根据权利要求8所述的计算机实现的过程,其中,文件系统包括将来自源文件的一个或多个区段的区间复制到目的地文件中的区段的区间的命令,使得源文件和目的地文件共享用于块的区间的所存储的数据。

12.根据权利要求11所述的计算机实现的过程,其中应用使用文件系统命令以进行文件的复制。

13.根据权利要求11所述的计算机实现的过程,其中应用使用文件系统命令以提供重新布置文件的所述请求。

14.根据权利要求8所述的计算机实现的过程,其中与第二文件共享所存储的数据的第一文件具有属性集,以使得写入第一文件将数据写入到存储设备上的新区段。

15.一种由计算机的文件系统执行的计算机实现的过程,包括:

所述文件系统存储数据,所述数据指示在一个或多个存储设备上的所存储的数据是否被文件共享;

所述文件系统接收对源文件的指示,其中来自所述源文件的期望的数据将按照期望的顺序被重新布置;

标识来自源文件系统对象的所述期望的数据;

所述文件系统创建目的地文件,所述目的地文件包括按照所述期望的顺序的所标识的所述数据并且引用所述一个或多个存储设备上的、用于来自所述源文件系统对象的所述期望的数据的存储位置;

所述文件系统更新指示所述一个或多个存储设备上的所存储的所述数据是否被共享的所述数据,来指示在所述存储设备上的所述存储位置中的所述数据由所述源文件和所述目的地文件共享。

16.根据权利要求15所述的计算机实现的过程,其中,指示是否共享所存储的数据的数据包括所共享的区段的索引。

17.根据权利要求16所述的计算机实现的过程,其中,所述索引包括,针对所共享的区段的指示共享该区段的文件系统对象的数目的引用计数。

18.根据权利要求15所述的计算机实现的过程,其中所述目的地文件是源文件的快照。

19.根据权利要求15所述的计算机实现的过程,还包括文件系统确认成功完成了数据向目的地文件的复制。

20.根据权利要求15所述的计算机实现的过程,其中与第二文件共享所存储的数据的第一文件具有属性,所述属性被设置成使得对所述第一文件写入以便将数据写入到存储设备中的新区段。

说明书 :

具有数据块共享的文件系统

背景技术

[0001] 计算机中的文件系统一般是管理对存储在一个或多个存储设备上的文件中的数据的访问的操作系统的部分。文件系统提供接口,其它应用可以通过该接口创建和管理文件系统对象,向文件写入数据,并且从存储在存储设备上的文件读取数据。
[0002] 可以由文件系统提供的操作是复制文件。可以出于各种目的而复制文件。在一些实例中,文件的复制的目的是提供备份副本,其不意图在随后修改原始文件时被修改。另一个目的是提供原始文件的单独可修改的克隆体。
[0003] 可以由文件系统提供的另一个操作是重新布置一个或多个文件。例如,可能以对于访问数据而言低效的次序布置了文件中的数据。例如,如果不再想要文件中的数据的部分,并且仅使用期望的数据创建新的文件,则可以使用这样的重新布置。作为另一个示例,文件可以被分成两个文件。作为另一个示例,两个文件可以合并在一起。

发明内容

[0004] 提供该发明内容以便以简化形式介绍以下在具体实施方式中进一步描述的概念的选择。该发明内容不意图标识所要求保护的主题的关键特征或必要特征,也不意图用于限制所要求保护的主题的范围。
[0005] 为了提供可以快速地复制或重新布置文件的操作,文件系统允许在两个或更多文件之间或者在文件内共享所存储的数据。文件系统提供以下操作:其允许将来自一个文件的区段(extent)复制到另一个文件的区段中,或者复制到相同文件中的不同区段中(如果区间不重叠的话),使得用于文件的区段的所存储的数据被共享。
[0006] 为了支持这样的操作,文件系统追踪用于文件的区段的存储设备上的存储位置,并且追踪存储设备的区段中的所存储的数据是否在文件之间或者文件内共享。当文件的区段共享所存储的数据时,向该区段的写入调用写入操作,该写入操作在存储设备上的新区段上存储数据。所追踪的关于用于存储设备上的受影响区段的所共享的所存储的数据的信息被更新。可以修改文件系统操作,诸如写入和删除文件系统对象,以支持所存储的数据在文件之间或者文件内的共享,以及支持文件的单独隔离修改。
[0007] 通过允许由一个文件系统对象引用的所存储的数据被其它文件系统对象引用,所存储的数据在文件系统对象之间的这种共享允许文件、卷和其它文件系统对象被快速地复制、克隆、重新布置等。
[0008] 在以下描述中,参照附图,附图形成以下描述的部分并且在附图中作为说明而示出了该技术的具体示例实现。要理解到,可以利用其它实施例并且可以做出结构改变而不脱离本公开的范围。

附图说明

[0009] 图1是其中可以实现文件系统的示例计算机的框图。
[0010] 图2是文件系统对象的示例类层级结构的图。
[0011] 图3是示例块共享索引的图。
[0012] 图4是描述了复写(duplicate)文件的区间(range)的示例实现的流程图。
[0013] 图5是描述了向文件系统对象写入数据的示例实现的流程图。
[0014] 图6是描述了删除文件系统对象的示例实现的流程图。
[0015] 图7是描述了获得卷内的文件的快照的流程图。
[0016] 图8是描述了重新布置卷内的文件的流程图。

具体实施方式

[0017] 以下章节描述了具有文件系统的计算机的示例实现。
[0018] 图1图示了利用其可以实现文件系统的示例计算机。计算机可以是各种通用或专用计算硬件配置中的任何一种。可以使用的计算机类型的一些示例包括但不限于个人计算机、游戏操控台、机顶盒、手持式或膝上型设备(例如媒体播放器、笔记本计算机、平板计算机、蜂窝电话、个人数字助理、语音记录器)、服务器计算机、多处理器系统、基于微处理器的系统、可编程消费者电子产品、联网个人计算机、微型计算机、大型计算机、以及包括以上类型的计算机或设备中的任何一个的分布式计算环境等等。特定示例计算机是支持多个虚拟机器的服务器计算机,多个虚拟机器利用多个虚拟硬驱动器来访问存储阵列上的数据。
[0019] 参照图1,示例计算机100包括至少一个处理单元102和存储器104。计算机可以具有多个处理单元102。处理单元102可以包括彼此独立地操作的一个或多个处理核(未示出)。附加协同处理单元,诸如图形处理单元1020,也可以存在于计算机中。存储器104可以是易失性的(诸如,动态随机存取存储器(DRAM)或其它随机存取存储器设备),非易失性的(诸如,只读存储器、闪速存储器等)或者这两个的某种组合。存储器的这种配置在图1中通过虚线106图示。计算机100可以包括附加存储装置(可移除和/或不可移除),其包括但不限于磁记录或者光学记录的盘或带。这样的附加存储装置在图1中通过可移除存储装置108和不可移除存储装置110图示。图1中的各种组件一般地通过诸如一条或多条总线130之类的互连机构而互连。
[0020] 计算机存储介质是其中可以通过计算机将数据存储在可寻址物理存储位置中并且从可寻址物理存储位置检索数据的任何介质。计算机存储介质包括易失性和非易失性存储器,以及可移除和不可移除存储介质。存储器104和106、可移除存储装置108和不可移除存储装置110全部是计算机存储介质的示例。计算机存储介质的一些示例是RAM、ROM、EEPROM、闪速存储器或其它存储器技术、CD-ROM、数字多用盘(DVD)或其它光学或磁光记录的存储设备、磁盒、磁带、磁盘存储设备或其它磁性存储设备。计算机存储介质可以包括诸如存储阵列之类的多个存储设备的组合,其可以由操作系统或文件系统管理以便对于计算机而言看起来像是一个或多个存储卷。计算机存储介质和通信介质是相互排斥的介质类目。
[0021] 计算机100还可以包括(多个)通信连接112,其允许计算机在通信介质之上与其它设备通信。通信介质典型地通过在有线或无线物质之上传播经调制的数据信号(诸如,载波或其它输运机构)来在该物质之上传送计算机程序指令、数据结构、程序模块或其它数据。术语“经调制的数据信号”意指这样的信号,其一个或多个特性以将信息编码在信号中的这种方式被设置或改变,由此改变信号的接收设备的配置或状态。作为示例而非限制,通信介质包括诸如有线网络或直接有线连接之类的有线介质,以及诸如声学、射频、红外和其它无线介质之类的无线介质。通信连接112是与通信介质通过接口相连以在通信介质之上传送数据以及从通信介质接收数据的设备,诸如有线网络接口,无线网络接口,射频收发器,例如Wi-Fi、蜂窝、长期演进(LTE)或蓝牙等收发器,导航收发器,例如全球定位系统(GPS)或全球导航卫星系统(GLONASS)等收发器。
[0022] 计算机100可以具有(多个)各种输入设备114,诸如键盘、鼠标、笔、相机、触摸输入设备、传感器(例如,加速度计或陀螺仪)等等。也可以包括(多个)输出设备116,诸如显示器、扬声器、打印机等等。所有这些设备在本领域中是公知的并且此处不需要详尽地讨论。各种输入和输出设备可以实现自然用户接口(NUI),其是使得用户能够在免受由诸如鼠标、键盘、遥控器等等输入设备强加的人工约束的情况下以“自然”方式与设备交互的任何接口技术。
[0023] NUI方法的示例包括依赖于话语识别、触摸和触笔识别、悬停、屏幕上和屏幕附近的手势识别、空中手势、头部和眼睛追踪、语音和话语、视觉、触摸、手势和机器智能的那些方法,并且可以包括使用触敏显示器、语音和话语识别、意图和目标理解、使用深度相机(诸如立体相机系统、红外相机系统和其它相机系统、以及这些的组合)的运动手势检测、使用加速度计或陀螺仪的运动手势检测、面部识别、三维显示器、头部、眼睛和凝视追踪、沉浸式增强现实和虚拟现实系统(所有这些提供更加自然的接口),以及用于使用电场感测电极感测脑部活动的技术(诸如,脑电波技术和相关方法)。
[0024] 各种存储装置110、通信连接112、输出设备116和输入设备114可以在外壳内与计算机的其余部分集成,或者可以通过计算机上的输入/输出接口设备连接,在该情况下,参考标号110、112、114和116可以指示用于连接到设备的接口或者设备本身,如情况可能的那样。
[0025] 计算机一般地包括操作系统,其是在计算机上运行、管理由应用对计算机的各种资源的访问的计算机程序。可以存在多个应用。各种资源包括存储器、存储装置、输入设备和输出设备,诸如显示设备和如图1中示出的输入设备。文件系统一般地被实现为计算机的操作系统的部分,但是可以与操作系统不同。文件系统可以在分布式计算环境中实践,在分布式计算环境中,由通过通信网络链接的多个计算机来执行操作。在分布式计算环境中,计算机程序可以位于本地和远程计算机存储介质二者上,并且可以由不同计算机的处理单元执行。
[0026] 操作系统、文件系统和应用可以使用具有一个或多个计算机程序的一个或多个计算机的一个或多个处理单元来实现,所述一个或多个计算机程序由所述一个或多个处理单元来处理。计算机程序包括计算机可执行指令和/或计算机解译的指令,诸如程序模块,该指令由计算机中的一个或多个处理单元处理。一般地,这样的指令定义例程、程序、对象、组件、数据结构等等,其在由处理单元处理时指令处理单元在数据上执行操作或者配置处理器或计算机以实现各种组件或数据结构。
[0027] 在给定一个或多个计算机和一个或多个存储设备的情况下,不管是单个计算机还是分布式计算机的集合还是一个或多个计算机连接到分布式存储装置,文件系统都提供应用与管理存储设备的细节之间的抽象层,存储设备诸如是其中存储数据的每一个设备内的实际存储位置。该抽象层允许应用标识文件并且使用对文件内的位置和文件的引用来访问文件,而不需要使应用具有关于存储设备上的实际存储位置的信息或者关于存储设备的其它细节。
[0028] 在一些计算机中,管理多个处理单元以运行多个虚拟机器,其中每一个虚拟机器由一个或多个数据文件定义。还可以管理存储设备以提供多个虚拟硬驱动器(VHD)。例如对在数据中心中的虚拟机器和虚拟硬驱动器的管理通常牵涉到复制和重新布置数据文件。例如,可以出于备份或其它目的(诸如扩充容量)而复制数据卷。可以复制虚拟机器使得虚拟机器的不同实例可以被独立地修改。可以重新布置数据文件以消除不想要的数据,划分文件或者合并文件。
[0029] 通过允许在文件之间共享所存储的数据,如本文中所述,这样的操作可以被快速地执行而不读取或写入所存储的数据,由此减少针对副本所消耗的存储空间的数量。通过允许在文件之间共享所存储的数据,如本文中所述,这样的操作还可以在单独的文件上或者甚至单独的文件的部分上执行。
[0030] 现在将更加详细地描述允许在两个或更多文件之间或者文件内共享所存储的数据的文件系统的实现。
[0031] 在文件系统中,对文件的引用被定义为各种文件系统对象的组合,诸如存储设备或者存储设备的集群的名称、目录和目录路径的名称、文件流和文件的名称、或者其它类型的文件系统对象。每一个文件系统对象一般地是经命名的构造物,其表示存储在文件系统内的数据。
[0032] 在文件系统内,当存储用于文件的数据时,其一般地被分解成存储在存储设备上的存储位置中的小组块(通常称为块)。文件系统一般地针对每一个文件追踪其中存储文件的每一个块的存储设备内的存储位置,以及那些块的排序。文件系统还可以定义簇,其是块的群组,并且一些操作可以限于在簇上而不是块的群组上执行的操作。
[0033] 当在文件中写入数据时,一些文件系统修改用于文件的存储设备上的所分配块内的数据。这被称为“原地”写入。当在文件中写入数据时,其它文件系统被配置成使用“写时复制”或者“写入新区”的写入,这牵涉到向存储设备中的自由存储块写入数据,然后改变文件到块的映射以引用新写入的块,其中从该文件摒弃覆写的数据块。
[0034] 除了追踪其中存储了用于文件的每一个块的所存储的数据的存储位置之外,文件系统还追踪是否与任何其它文件和/或在相同文件内共享用于文件的块的所存储的数据。文件系统还提供以下操作:其允许将来自一个文件的一个或多个块的区间(range)复制到另一个文件的一个区间中,或者复制到相同文件中的不同区间中,如果区间不重叠的话。当共享用于块的所存储的数据时,对该块的写入调用到存储设备上的新块的写入操作,并且更新针对受影响的块的追踪信息。可以修改文件系统操作,诸如写入和删除文件系统对象,以支持所存储的数据在文件之间或者文件内的共享。
[0035] 通过允许用于一个文件系统对象的块的存储数据被其它文件系统对象引用,存储数据在文件系统对象之间的这种共享允许文件、卷和其它文件系统对象被快速地复制、克隆、重新布置等等。
[0036] 现在将描述这样的文件系统的示例实现。在图2到图8的以下描述中,使用存储块作为存储操作的示例粒度。应当理解到,可以应用以下内容以便取决于由所牵涉到的存储设备、处理单元、操作系统和文件系统使用的协定而使用文件(while)的任何形式的区段(extent),诸如块、簇或其它存储子集。
[0037] 参照图2,作为示例实现,文件系统一般地定义不同种类的文件系统对象200(诸如目录202、文件204和文件流206)的集合。文件204可以包括如在208处指示的文件流206的集群。例如,文件可以包括元数据文件流和数据文件流。根目录210是特殊种类的目录202,其提供所管理的卷的顶级目录。由根目录管控的卷可以包括多个存储设备或者存储设备的部分,但是仅出于说明的目的,本文中的描述将是指单数存储设备。
[0038] 每一个文件系统对象还可以具有一个或多个属性,诸如名称以及取决于文件系统的实现的其它属性。第一文件系统对象的属性可以包括用于所创建的并且取决于第一文件系统对象的其它文件系统对象的默认设置。例如,目录的属性可以定义用于在该目录内创建的文件和文件流的默认设置。类似地,文件的属性可以定义用于包括在该文件内的文件流的默认设置。
[0039] 文件、文件流或其它类似对象还可以包括区段表格252,其针对文件或文件流的每一个区段(诸如簇或块或其它存储子集)列出关于该区段的各种信息,诸如其在存储装置中的位置,以及其它数据。区段表格可以以数个方式存储。例如,在一些实现中,区段表格可以是关于块的简单信息列表或阵列,其将由文件使用的虚拟块标识符映射到用于引用存储设备上的存储位置的逻辑块标识符。作为另一个示例,在一些实现中,区段表格可以以诸如B+树之类的编索引的树结构进行存储,所述树结构使用虚拟簇编号作为键并且使用逻辑簇编号作为值。可以针对每一个区段存储诸如区段的属性之类的其它数据。
[0040] 尽管前文描述了具有对象类层级结构内的文件系统对象的文件系统,但是还可以使用的是使用其它类型数据结构来表示文件系统结构的文件系统的其它实现,并且本发明不限于以上描述的对象类型,或者面向对象的实现。术语“文件系统对象”意图意指取决于文件系统的文件系统结构的任何实现,诸如根目录、文件等,并且不限于面向对象的实现。
[0041] 一般地,文件系统允许应用和用户在用于存储卷的根目录内创建多个目录以及那些目录内的其它文件对象,这创建了目录树。存储卷的名称以及包含文件系统对象的目录的名称的列表被称为路径。计算机程序通过向文件系统提供包含期望的文件系统对象的路径以及文件系统对象的名称而经由文件系统访问文件系统对象。要指出,取决于实现,卷可以是指存储设备中或者存储设备的一部分中或者多个存储设备中可用的存储位置。
[0042] 文件系统典型地通过编程接口使各种操作可用于其它计算机程序,编程接口诸如是函数调用等,所述操作允许访问存储装置。文件系统可以包括初始化存储设备(本文中还称为“卷”)以便使用的操作,以及创建、读取、写入或更新、或删除文件对象的操作。计算机程序通过指定用于要在其上执行操作的文件系统对象的名称和路径以及操作来在文件系统对象上执行操作。
[0043] 为了追踪是否与任何其它文件或者由相同文件内的多个位置共享用于文件的块的所存储的数据,如图2中所示,文件系统可以包括块共享索引250,其指示存储设备上的哪些存储块被共享。作为示例,这样的索引可以是每一个共享块的列表。这样的索引可以是包含共享块的每一个块集合的列表。如果共享以大于块的粒度发生,诸如以簇或其它存储子集发生,则索引可以是基于在其处发生共享的粒度。索引可以包括引用计数,其指示块中的所存储的数据被共享的次数。索引可以作为表格存储在存储器或存储装置中。通过以使其与用于卷的根目录相关联的方式存储索引,可以针对每一个卷维持索引,每一个卷使得这种共享能够用于该卷或者卷的一部分中的文件,如在250中指示。
[0044] 现在将结合图3描述块共享索引250的示例实现。在图3中,第一文件300的图形图示指示具有八个簇(编号为1到8)的文件。针对第一文件300提供区段表格302。该区段表格302指示文件簇1到4对应于卷310中的区间“a”到“b”中的所存储的数据块。类似地,文件的簇5到8对应于卷中的区间“x”到“y”中的所存储的数据块。第二文件304是第一文件的副本,并且共享用于其所有数据块的所存储的数据。因而,区段表格306中的位置信息与区段表格
302中的位置信息等同。区段表格302和306可以以其它方式不同,例如通过存储不同的属性信息而不同。索引350存储信息,该信息在该示例中针对每一个区段(“volextent”)指示该区段被共享的次数(“refcnt”)。在该示例中,卷区间[a-b]被引用两次(例如,“2”是用于该块区间的引用计数),并且该卷区间[x-y]类似地被引用两次。
[0045] 在给定使得能够由不同文件或者在相同文件内共享所存储的数据的文件系统的情况下,可以实现各种文件系统操作以利用这样的共享。例如,复制文件的全部或部分,克隆文件、文件的集合或者甚至整个卷,重新布置文件的内容等等全部可以通过允许文件系统对象引用由其它文件系统对象使用的所存储的数据块而快速地达成。
[0046] 继而可以由多个文件系统操作使用以执行更加复杂的共享操作的基元操作(primitive operation)的示例是将一个文件的区段复写到另一个文件中的操作。这样的操作可以提供作为文件系统应用编程接口的部分,作为可以在文件系统对象上执行的可用文件系统操作之一。至少使用目的地文件系统对象、目的地对象中的区间、源文件系统对象、以及源文件系统对象内的区间来执行该操作。
[0047] 如图4中所示,响应于调用命令,文件系统确保400调用者具有针对目的地文件系统对象的写入准许。文件系统还确保402调用者具有针对源文件系统对象的读取准许。如果源和目的地文件相同,如在404处指示的,则比较源和目的地区间以确保它们不重叠,如在406处所确定的。如果另外不存在与输入参数有关的错误,则更新408目的地文件区段表格以引用用于来自源文件的指定区间中的块的所存储的数据。用于这些存储数据块的引用计数在块共享索引中被增加410。
[0048] 作为API命令的具体示例,可以提供以下内容:
[0049] 。
[0050] 在该示例中,“FileHandle”句柄是用于目的地文件的文件句柄。“SourceVcn”值是距源文件的开头的以簇为单位的偏移量。“ClusterCount”值是要复写的簇的数目。“TargetVcn”值是距目的地文件的开头的以簇为单位的偏移量。
[0051] 通过使用这样的基元操作,各种其它操作可以用于执行更高层级的复制操作。作为示例,可以执行文件复制操作。可以创建或打开目的地文件以提供目的地文件句柄。源文件的大小提供簇计数,并且零是用于源和目的地文件二者的偏移量。更加复杂的示例是通过在一个或多个文件内搬移块的应用实现的操作,诸如归并虚拟硬驱动器的差异盘。应用分析源文件以便以新次序生成源数据块的子集的序列。在获得目的地句柄之后,可以定义操作的序列来将来自源文件的所指定的块复制到目的地文件内的所指定的块以得到期望的块的新次序。这样的复制在没有读取和写入所存储的数据的情况下发生;替代地,用于目的地文件的区段表格引用用于从源文件复制的块的所存储的数据,并且更新块共享索引以指示用于这些块的所存储的数据由源文件和目的地文件二者共享。
[0052] 如果数据文件可以共享所存储的数据块,则文件系统对象上的其它操作可能受以下事实的影响:所存储的数据被共享,特别地写入文件和删除文件。该操作集合不意图为穷举性的,而是仅仅说明可以取决于文件系统是否支持所存储的数据在文件系统对象之间的共享而以不同方式实现的操作的种类。
[0053] 例如,现在将结合图5描述向文件写入数据。当要向文件的簇写入数据时,针对每一个块检查500块共享索引。如果块共享索引指示用于块的所存储的数据没有被共享,如在502处确定的,则可以针对该块写入504数据。在该情况下,可以使用原地写入操作。如果文件属性已经设置成执行“写入新区”或“写时复制”操作,则可以执行这样的写入操作。如果用于块的所存储的数据被共享,则初始地执行506形式为“写入新区”或“写时复制”或类似的操作以将用于文件的块的新数据写入到存储设备上的新块。更新508用于文件的区段表格以引用新写入的块。然而,因为所存储的数据的原始块不再被当前文件使用,但是之前与另一个文件共享,所以用于所存储的数据的原始块的引用计数在块共享索引中被减小510。
如果在引用计数被减小之后块共享索引中的引用计数指示块不再被共享(例如,如果引用计数是1),则可以从块共享索引移除该块。
[0054] 参照图6描述删除文件。在图6中,删除操作一般地牵涉到删除600对文件系统对象(包括其区段表格)的引用。因为可以与其它文件共享用于要删除的文件的块的所存储的数据,所以在文件系统内的任何分配表格中将存储块标记为“自由”之前,针对该块检查602块共享索引。如果没有共享块中的所存储的数据,则可以将存储块标记606为自由。如果块共享索引包括块,则用于该块的引用计数被减小604。如果在引用计数被减小之后块共享索引中的引用计数指示块中的所存储数据不再被共享,则可以从块共享索引移除该块。
[0055] 通过使用这样的文件系统,可以进行快速的文件复制,其对于例如出于各种目的而进行备份复制而言特别有利。在一些情况下,备份文件可以大于可用的存储装置。大文件否则也将花费长时间来复制。在进行文件的备份复制之后,随后可以修改文件。通过支持所存储的数据在文件之间的共享,与写时复制或写入新区文件组合地,可以甚至是在很少的可用存储装置的情况下进行快速复制,而同时允许修改这样的备份。而且,这样的文件系统有利地支持数据文件的快速重新布置。例如,如果认识到不再想要当前文件的相当大的部分,则可以创建新的文件,其共享当前文件的仅仅期望的部分的所存储的数据。
[0056] 现在将结合图7和8描述这种类型的两个示例操作。
[0057] 图7使用虚拟机器作为示例描述了获得文件的快照。这样的操作可以例如用于获得卷内的单个虚拟机器的快照,而没有克隆可能包含大量虚拟机器的整个卷。虚拟机器一般地映射到文件,并且获得虚拟机器的快照是可以在文件层级而不是卷层级下执行的操作。因而,当获得虚拟机器的快照时,文件系统可以仅追踪关于该虚拟机器的该快照的改变,而不会追踪对不是该虚拟机器的部分的文件中的其它块的改变。
[0058] 通过使用以上描述的文件复制操作,当获得文件的第一快照时,利用作为原始文件的区段列表的副本的区段列表来创建新的文件。新的文件可以被定义为没有改变的快照。对于原始文件的未来写入操作可以使用写时复制或写入新区的写入操作来执行,所述写时复制或写入新区的写入操作修改原始文件的区段列表,以及块共享索引。图7描述了在获得下一个快照时发生了什么。
[0059] 在图7中,文件系统接收700创建虚拟机器的快照的指令。文件系统标识702定义了虚拟机器的一个或多个文件。文件系统标识704所标识的文件中的经修改的块。然后通过创建706区段列表以及更新708块共享索引来创建新的快照文件,该区段列表引用来自先前的快照文件的未经修改的块和所标识的文件中的经修改的块。作为示例,该区段列表将新文件的虚拟块标识符映射到来自先前的快照文件的未经修改的块的对应逻辑块标识符以及来自所标识的文件的经修改的块的对应逻辑块标识符。这样的操作可以在没有读取或者写入来自存储装置的实际数据块的情况下执行。文件系统可以返回710成功做出快照的指示。
[0060] 图8描述了重新布置文件的内容。可以例如使用这样的操作来管理其中源文件的部分被标识为有用的虚拟硬驱动器。通过引用源文件的期望部分来创建新的文件。在图8中,文件系统接收800用于重新布置源文件的内容的指令。文件系统还接收802指示源文件中的期望数据的数据。该数据可以以许多方式提供,例如通过用户输入或者应用输入,或者作为从存储器或存储装置检索或接收的指令的部分。文件系统然后通过创建804区段列表以及更新806块共享索引来创建新的文件,该区段列表以期望次序引用仅仅期望的块。作为示例,新文件的区段列表可以将(以期望次序的块的)虚拟块标识符映射到来自源文件的期望块的对应逻辑块标识符。这样的操作可以在没有读取或写入来自存储装置的实际数据块的情况下执行。文件系统可以返回808成功重新布置文件的指示。
[0061] 相应地,在一个方面中,具有文件系统的计算机包括用于追踪由文件共享的所存储的数据的部件,以及用于如果与另一个文件共享用于要写入的区段的所存储的数据,则向存储设备上的新区段写入用于文件的数据的部件。文件系统还可以包括用于将源文件中的区段复制到目的地文件中的区段使得源文件和目的地文件共享用于区段的所存储的数据的部件。
[0062] 在另一个方面中,具有文件系统的计算机包括用于将源文件的区段复制到目的地文件中的区段使得源文件和目的地文件共享存储设备上的所存储的数据的部件。文件系统可以包括用于追踪所共享的所存储的数据的部件。
[0063] 在另一个方面中,具有文件系统的计算机包括用于做出文件的快照的部件,包括标识自文件的先前的快照起的改变,以及创建与文件的先前的快照共享用于未经修改的区段的所存储的数据的文件。计算机包括用于基于快照而追踪和更新关于由文件共享的所存储的数据的信息的部件。这样的操作可以在没有追踪对于存储装置中不是文件的部分的其它区段的改变的情况下执行。这样的操作可以在没有读取或写入用于所复制的文件的区段的所存储的数据的情况下执行。
[0064] 在另一个方面中,具有文件系统的计算机包括用于重新布置源文件的部件,包括标识要重新布置的源文件的块,以及创建与源文件共享用于所标识的块的所存储的数据的目的地文件。计算机包括用于追踪关于在文件之间共享的所存储的数据的信息的部件。这样的操作可以在没有追踪对于存储装置中不是源和目的地文件的部分的区段的改变的情况下执行。这样的操作可以在没有读取或写入用于要复制到目的地文件的源文件的区段的所存储的数据的情况下执行。
[0065] 在另一个方面中,具有文件系统的计算机管理对于一个或多个存储设备上的多个文件系统对象的访问和存储。计算机包括存储数据的存储介质,该数据指示是否由文件系统对象共享所存储的数据。计算机还包括存储器和处理器,其中计算机程序代码存储在存储器中,计算机程序代码在由处理器执行时将处理器配置成对来自应用的访问一个或多个存储设备上的文件系统对象的请求做出响应,其中将数据写入共享了所存储的数据的文件的区段使得数据被写入到一个或多个存储设备上的新区段并且关于所共享的所存储的数据的信息被更新。
[0066] 在另一个方面中,计算机实现的过程包括维持追踪由数据文件对所存储的数据的共享的信息。如果接收到向文件写入数据的请求,则确定文件是否与其它数据文件共享所存储的数据。如果文件共享所存储的数据,则写入用于共享所存储的数据的区段的数据使得数据被写入到存储设备上的新区段,并且所维持的关于所共享的所存储的数据的信息被更新。
[0067] 在另一个方面中,制造品包括存储介质,其中计算机程序代码存储在存储介质中,计算机程序代码在由一个或多个计算机执行时将一个或多个计算机配置成维持指示是否由文件系统对象共享所存储的数据的数据。通过向存储设备上的新区段写入数据以及更新关于所共享的所存储的数据的信息,计算机可以对来自应用的向共享所存储的数据的文件的区段写入数据的请求做出响应。
[0068] 在前述方面中的任一个中,指示是否共享所存储的数据的数据可以包括所共享的区段的索引。对于所共享的区段,索引可以包括引用计数,其指示共享用于该区段的所存储的数据的文件系统对象的数目。
[0069] 在前述方面中的任一个中,文件系统可以包括,将来自源文件的区段复制到目的地文件中的区段使得源文件和目的地文件共享用于区段的所存储的数据的命令。应用可以使用文件系统命令来进行文件的复制。应用可以使用文件系统命令来重新布置文件。
[0070] 在前述方面中的任一个中,获得文件的快照可以在没有追踪对于存储设备中不是文件的部分的其它区段的改变的情况下执行。
[0071] 在前述方面中的任一个中,复制文件或者文件的部分可以在没有读取或写入来自存储装置的用于所复制的文件的区段的所存储的数据的情况下执行。
[0072] 在前述方面中的任一个中,与第二文件共享所存储的数据的第一文件可以具有属性,该属性被设置成使得向第一文件写入以便向存储设备中的新区段写入数据。
[0073] 在另一个方面中,计算机的文件系统接收要从其复制数据的源文件的指示,该数据存储在存储设备上的存储位置中。文件系统创建目的地文件(该目的地文件引用用于要复制的数据的存储设备上的存储位置)并且存储数据,该数据指示存储设备上的存储位置中的数据由源和目的地文件共享。
[0074] 在前述方面中的任一个中,目的地文件可以是源文件的快照,其中源文件具有先前的快照文件。要复制的数据是来自先前的快照文件的未经修改的数据以及来自源文件的经修改的数据。可以通过以下操作来创建目的地文件:引用来自先前的快照文件的未经修改的数据和来自源文件的经修改的数据在存储设备上的存储位置并且更新指示在存储设备上的存储位置中的数据由源和目的地文件以及先前的快照文件共享的数据。
[0075] 在前述方面中的任一个中,目的地文件可以从源文件接收重新布置的数据。标识要从源文件复制的数据。可以通过以下操作来创建目的地文件:对目的地文件中的所标识的数据进行排序和引用所标识的数据在存储设备上的存储位置,并且更新指示存储设备上的存储位置中的数据由源和目的地文件共享的数据。
[0076] 在前述方面中的任一个中,文件系统可以确认成功完成了数据向目的地文件的复制。
[0077] 前述方面中的任一个可以体现在一个或多个计算机中,体现为这样的计算机的任何单独的组件,体现为由一个或多个计算机或者这样的计算机的任何单独组件执行的过程,或者体现为包括具有所存储的计算机程序指令的计算机存储装置的制造品,计算机程序指令在由一个或多个计算机处理时配置一个或多个计算机。
[0078] 本文中描述的前述可替换实施例中的任一个或全部可以以期望形成附加混合实施例的任何组合来使用。可替换地或者此外,本文中描述的各种组件中的一个或多个的功能性可以至少部分地由一个或多个硬件逻辑组件执行。例如但不作为限制,可以使用的说明性类型的硬件逻辑组件包括现场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、片上系统的系统(SOC)、复杂可编程逻辑器件(CPLD)等。应当理解到,在随附权利要求中定义的主题未必限于以上描述的具体实现。以上描述的具体实现仅作为示例而公开。