具有用户不可知加密文件的服务器侧去重的云文件系统的制作方法

文档序号:7991129阅读:298来源:国知局
具有用户不可知加密文件的服务器侧去重的云文件系统的制作方法
【专利摘要】描述了一种支持加密文件的用户不可知加密和去重的云存储系统。此外,云存储系统使得能够在用户不向其他用户发送每个文件的情况下用户与其他用户共享文件、文件群或整个文件系统。该云存储系统还允许客户端设备通过确定是否传送已经存在于云存储系统中的加密数据来最小化带宽利用。此外,云存储系统包括客户端设备向云存储系统通知将来可能需要哪些数据的机制,以使得在客户端设备请求该数据时云存储系统可以以较少等待时间使得该数据可用。
【专利说明】具有用户不可知加密文件的服务器侧去重的云文件系统
[0001]相关申请的交叉引用
本申请要求保护以下美国临时申请的权益:2011年10月19日提交的美国临时申请N0.61/549,206 ;2011年9月25日提交的美国临时申请N0.61/538,928 ;2011年9月11日提交的美国临时申请N0.61/533,264;以及2011年5月14日提交的美国临时申请N0.61/486,240,通过参考将它们中的每一个都合并于此。
【技术领域】
[0002]本发明的实施例涉及网络附加存储的领域;并且更具体地涉及云存储系统的领域。
【背景技术】
[0003]随着基于云的存储系统、在线备份服务以及大文件传输系统变得司空见惯,存储和带宽需求是可以导致关键竞争优势(在受到控制的情况下)的两个决定性因素。然而,存在下述竞争因素,即这些在线存储系统的用户希望他们的数据是安全的免受这种服务的运营商以及服务的其他用户二者的影响。
[0004]将在线文件系统实施为针对顾客的服务的传统方式是允许每个用户通过万维网接口、跨越文件传输协议连接或其他文件传送协议将文件上传到在线存储系统。典型地,文件被发送到未加密的服务意味着该服务的运营商可以访问用户的数据。在一些情况下,月艮务对数据加密以便存储在它们的服务内,而在其他情况下,服务在将数据上传到该服务之前提供加密数据的客户端软件。在其中客户端在上传之前加密数据的情况下,传统方法是O使客户端使用某一唯一密钥(例如用户密码或公共密钥)来加密文件;2)使客户端上传加密文件;3)将加密文件存储在服务器上。
[0005]向在线存储系统的客户端提供加密上传的传统手段呈现出许多缺点。首先,可能使两个不同的客户端具有每一个客户端存储在在线存储系统中的数据(例如图片、电影、歌曲、文档)的精确副本。然而,因为两个文件将由每个客户端唯一地加密,所以加密数据是不相同的并且在线存储系统必须存储同一未加密数据的两个副本(尽管以加密形式)。服务不能存储该数据的仅仅一个副本,因为每个客户端将仅能够解密客户端上传的副本。
[0006]一种替换方法是使服务管理服务器侧上的加密密钥,并且因此能够解密客户端上传的文件。服务器然后能够确定两个解密文件是相同的并且存储解密数据的仅仅一个副本。然后,当每个客户端请求其数据时,服务器利用该客户端加密密钥来加密数据并且传送所请求的文件。该方法危及运营商对每个客户端数据的完全访问的安全性。不讲道德的运营商可能搜寻它们的客户端的数据。此外,服务自身是薄弱的单点并且安全性的成功破坏暴露客户端的所有数据。
[0007]根据所述的传统方法或替换方法,每当客户端将文件保存到在线存储系统时,客户端必须上传加密数据,而不管该文件的副本(加密形式或未加密形式)是否已经存在于在线存储系统中。因此,即使根据所述的替换方法客户端浪费了上传数据的有价值带宽资源也不需要服务器,因为在线存储系统已经使数据处于其存储池中。
【专利附图】

【附图说明】
[0008]通过参考用于说明本发明实施例的以下描述和附图可以更好地理解本发明。在附图中:
图1是图示根据本发明实施例的与客户端设备耦合的云存储系统的框图。
[0009]图2是图示包括云存储网关和云存储池的云存储系统的框图。
[0010]图3图示根据本发明实施例的用于将文件保存在所存储的云文件系统中的方法的流程图。
[0011]图4图示根据本发明实施例的用于执行用户不可知文件加密的方法的流程图。
[0012]图5图示根据本发明实施例的用于执行数据的用户不可知加密的方法的流程图。
[0013]图6图示根据本发明实施例的用于执行用户不可知文件加密的方法的视觉化。
[0014]图7图示根据本发明实施例的用于将文件保存在云文件系统中(包括生成文件系统清单)的方法的流程图。
[0015]图8图示根据本发明实施例的用于从云文件系统中的文件读取数据的方法的流程图。
[0016]图9图示根据本发明实施例的云文件系统以及将文件存储在该云文件系统中的视觉化。
[0017]图10图示根据本发明实施例的用户不可知加密以及文件的压缩的视觉化。
[0018]图11图示根据本发明实施例的用户不可知加密以及两个文件的压缩的视觉化。
[0019]图12图示根据本发明实施例的用于使云存储网关从云文件池返回文件块的方法的流程图。
[0020]图13图示根据本发明实施例的用于使云存储网关从云存储池预取文件块的方法的流程图。
[0021]图14图示根据本发明实施例的用于使云存储网关检查云存储系统中的文件块的方法的流程图。
[0022]图15图示根据本发明实施例的用于使云存储网关将文件块添加到云存储系统的方法的流程图。
[0023]图16图示根据本发明实施例的从云存储系统请求文件块的数据流图。
[0024]图17图示根据本发明实施例的请求云存储池预取文件块的数据流图。
[0025]图18图示根据本发明实施例的请求云存储系统是否具有一个或多个文件块的指示的数据流图。
[0026]图19图示根据本发明实施例的将一个或多个文件块存储在云存储系统中的数据流图。
[0027]图20图示根据本发明实施例的列出存储在云存储系统中的文件的用户界面。
[0028]图21图示根据本发明实施例的用于访问由云文件系统客户端模块提供的特征的用户界面。
[0029]图22图示根据本发明实施例的由云文件系统客户端模块提供的用于管理客户端设备上的云文件系统访问的用户界面。[0030]图23图示根据本发明实施例的由云文件系统客户端模块提供的用于管理客户端设备上的本地缓存的用户界面。
[0031]图24图示根据本发明实施例的由云文件系统客户端模块提供的用于将本地文件系统中的文件夹转换成云文件系统中的文件夹的用户界面。
[0032]图25图示根据本发明实施例的示例性计算机系统的框图。
[0033]图26图示了示出根据本发明实施例的在转换成云文件系统中的存储之前和之后的文件系统元素的子集的用户界面。
[0034]图27图示根据本发明实施例的用于将文件保存在云文件系统中(包括生成文件系统清单)的方法的流程图。
[0035]图28图示根据本发明实施例的由云文件系统客户端模块提供的用于在云存储系统中生成新用户的用户界面。
[0036]图29图示根据本发明实施例的由云文件系统客户端模块提供的用于管理虚拟文件夹的用户界面。
[0037]图30图示根据本发明实施例的由云文件系统客户端模块执行的用于向客户端设备的操作系统提供大量可用空间的方法。
[0038]图31图示根据本发明实施例的由网络文件访问门户和客户端设备访问的云存储系统。
[0039]图32图示根据本发明实施例的由访问云存储系统的网络文件访问门户提供的网络文件浏览器界面。
[0040]图33图示了示出根据本发明实施例的各数据结构之间的关系的框图。
[0041]图34图示了示出根据本发明实施例的在两个客户端设备上使用的单个用户清单的各数据结构之间的关系的框图。
[0042]图35图示了示出根据本发明实施例的在两个客户端设备上使用的两个用户清单的各数据结构之间的关系的框图。
[0043]图36图示根据本发明实施例的由用于向用户提供文件、文件夹和文件系统的恢复选项的CFS客户端模块提供的界面。
[0044]图37图示了示出存储在本地存储系统中的数据到存储在云存储系统中的数据的转变的框图。
[0045]图38图示根据本发明实施例的从本地存储系统中的存储到云存储系统中的存储的转变的方法的框图。
[0046]图39图示了示出根据本发明实施例的从云存储系统访问数据的多个用户和机器的框图。
[0047]图40图示了示出根据本发明实施例的要被检索的文件块的优先级队列的框图。
[0048]图41图示根据本发明实施例的地理上分布的云存储池。
[0049]图42图示根据本发明实施例的由云文件系统客户端模块提供的用于访问虚拟文件夹的快照的用户界面。
[0050]图43图示根据本发明实施例的由云文件系统客户端模块提供的用于将本地文件系统中的文件夹转换成云文件系统中的文件夹的用户界面。
[0051]图44图示根据本发明实施例的与其他安装的文件系统相比的所安装的云文件系统的前述方面。
【具体实施方式】
[0052]期望构造一种存储系统(“云存储系统”),其存储加密客户端数据,在服务器上不具有客户端加密密钥的情况下消除存储在该云存储系统中的数据的复制,以及最小化带宽利用。下面的叙述描述了用于生成云存储系统的方法和装置,该云存储系统在提供数据的端到端加密以及最小化带宽利用的同时最小化云存储系统中的数据的复制。
[0053]在下面的描述中,阐述了许多特定细节,诸如逻辑实现、操作码、指定操作数的手段、资源划分/共享/复制实现、系统部件的类型和相互关系、以及逻辑划分/集成选择以便提供对本发明的更彻底理解。然而,将会认识到,本领域技术人员可以在没有这些具体细节的情况下实践本发明。在其他实例中,为了不使本发明变得模糊,没有详细示出控制结构、门级电路以及全软件指令序列。本领域普通技术人员将能够利用所包括的描述来实施适当的功能,而无需过度的试验。
[0054]在说明书中对“ 一个实施例”、“实施例”、“示例实施例”等等的参考指示所述实施例可以包括特定特征、结构或特性,但是每个实施例不必包括特定特征、结构或特性。此外,这样的短语不必指代同一实施例。此外,当结合实施例来描述特定特征、结构或特性时,主张它们在本领域技术人员的知识范围内以便结合无论明确描述与否的其他实施例来实现这样的特征、结构或特性。
[0055]在下面的描述和权利要求中,可以使用术语“耦合”和“连接”连同它们的派生词。应该理解,不意图使这些术语彼此同义。“耦合”被用来指示可能或可能不彼此直接物理或电接触、共同操作或彼此交互的两个或更多元件。“连接”被用来指示彼此耦合的两个或更多元件之间的通信的建立。
[0056]为了易于理解,在图中已经使用虚线来表明某些条目的可选性质(例如本发明的给定实施方式不支持的特征;给定实施方式支持但是在一些情况下使用而在其他情况下不使用的特征)。
[0057]可以使用在一个或多个电子设备上存储并执行的代码和数据来实施图中示出的技术。这样的电子设备使用非暂时性有形机器可读介质(例如磁盘;光盘;只读存储器;闪速存储器设备;相变存储器)以及暂时性机器可读通信介质(例如传播信号的电、光、声或其他形式,诸如载波、红外信号、数字信号等等)来存储代码和数据并传送该代码和数据(内部地和/或通过网络与其他电子设备)。此外,这样的电子设备通常包括与一个或多个其他部件耦合的一个或多个处理器的集合,所述其他部件诸如存储设备、一个或多个输入/输出设备(例如键盘、触摸屏和/或显示器)以及网络连接。处理器集合以及其他部件的耦合通常通过一个或多个总线或桥接(也被称为总线控制器)。载送网络业务的存储设备和信号分别表示一个或多个非暂时性有形机器可读介质以及暂时性机器可读通信介质。因此,给定电子设备的存储设备通常存储用于在该电子设备的一个或多个处理器的集合上执行的代码和/或数据。当然,可以使用软件、固件和/或硬件的不同组合来实施本发明实施例的一个或多个部分。
[0058]图1是图示根据本发明实施例的与客户端设备耦合的云存储系统的框图。在传统在线存储系统中,客户端数据的在线存储次于(例如备用)客户端数据在客户端设备上的存储。因此,每个文件主要被存储在客户端设备上并且这些文件的副本被存储在在线存储系统中。这呈现出以下问题:即要求客户端设备能够存储至少与客户端存储在在线存储系统中的数据一样多的数据或者创建保持存储在客户端设备上的数据以及存储在在线存储系统中的数据之间的同步的逻辑问题。例如,用户将在线存储系统中的数据视为他们的设备上的数据的副本,而不是将在线存储系统中的数据视为他们的设备的扩展。
[0059]图1示出通过通信网络130 (诸如局域网或广域网)与云存储系统135耦合的多个客户端设备101A-D。本发明的实施例支持许多不同客户端设备。客户端设备是能够访问文件并且跨越网络连接进行通信的计算设备。例如客户端设备可以是桌上型计算机、膝上型计算机、服务器、平板计算机、掌上计算机、智能电话、机顶盒或游戏控制台。本领域技术人员将会认识到所述客户端设备是示例性的并且决不限于本发明的实施例所支持的客户端设备。
[0060]在图1中,云存储系统135充当云文件系统(“CFS”)的数据的主要存储装置。此外,客户端设备101A-D被配置成运行CFS客户端模块,该CFS客户端模块被配置成访问CFS。CFS客户端模块还管理该客户端设备101A-B所利用的CFS的本地缓存。每个客户端设备101A-D中的本地缓存在很大程度上对客户端设备101A-D的用户来说是透明的。此外,尽管向利用客户端设备IOlA的用户示出存储在该用户的CFS中的每个文件和文件夹的外观,但不是访问所有这些文件和文件夹所需的所有数据总是呈现在该用户的CFS的本地缓存中。当用户从他的CFS访问文件时,客户端设备IOlA从不存在于他的客户端设备的IOlA本地缓存中且访问该文件所需的云存储系统135中检索任何数据。当用户的客户端设备IOlA中的本地缓存填充来自云存储系统135的数据时,该客户端设备IOlA逐出来自本地缓存的数据以便为来自云存储系统135的数据腾出地方。在至少一个实施例中,位于CFS的本地缓存中的数据可以被标记为非逐出(“固定的”),如此在逐出期间将不会从CFS的本地缓存中逐出固定的数据。在至少一个实施例中,客户端设备IOlA向用户呈现CFS的内容就像CFS是本地设备一样。
[0061]例如,CFS客户端模块可以包括存在于CFS的本地缓存中的文件块的数据库。该文件块的数据库将包括CFS客户端模块用来追踪哪些文件块存在、哪些文件块可能被逐出以便为更多文件块腾出地方、哪些文件块已经被固定用于本地缓存、哪些文件块已经被保存到云存储系统、以及多少空间已经被本地缓存使用的信息。CFS客户端模块可以用来确定哪些文件块应该被逐出的一种方法是确定客户端设备最后所使用的缓存文件块中的每一个的时间戳;例如,该数据库将包括每次CFS客户端模块访问文件块时更新的字段。CFS客户端模块然后将能够确定最近没有被访问(例如在最后三十天内没有被访问)的任何文件块,并且选择首先逐出它们。每当CFS客户端模块尝试如参考图8描述的那样检索文件块时,CFS客户端模块可以追踪文件块的访问/使用。CFS客户端模块还可以通过每当文件块被使用时递增数据库中的计数器来追踪文件块被多频繁地使用。于是CFS客户端模块可以在确定应该逐出哪些文件块时考虑所使用的计数器,以使得在两个其他方面等同的逐出候选之间具有低使用计数的候选将首先被逐出。本领域技术人员将会认识到,可以实施其他逐出策略,其包括较多、较少或不同逐出准则。例如,将会认识到,CFS客户端模块将文件块缓存在客户端设备的本地存储系统中并且可以使得用户能够设置本地缓存的存储界限,以使得当本地缓存中的数据接近或超过该存储界限时CFS客户端模块开始逐出文件块。[0062]在文件块数据库的一个实施例中文件块本身也被存储在数据库中,而在另一实施例中文件块与数据库分开存储且数据库被用来追踪该文件块。
[0063]这些特征呈现出CFS与客户端设备IOlA无缝集成以使得用户可以将CFS类似地视为客户端设备IOlA可用的其他存储系统的明显优势。此外,CFS能够存储比客户端设备IOlA中的本地缓存所保存的数据量多得多的数据。例如,如果客户端设备的本地存储系统可以存储80千兆字节(“GB”)数据且本地缓存限于本地存储系统的12.5%,则本地缓存是10GB。然而,CFS可以包括曾经存储在云存储系统中的每个文件。数据量可能远大于IOGB并且可能是或许10万亿字节数量级。因为CFS客户端模块每次仅保持多达10GB,所以CFS客户端模块能够代表客户端设备上用户可用的所有文件,而实际上不具有这些文件所需的所有数据。当用户访问CFS中的文件时,CFS客户端模块从云存储系统检索所需数据。应该注意,不会基于客户端设备的本地存储系统来限制客户端设备在CFS中进行存储可用的存储空间量,该本地存储系统仅需要为本地缓存提供充足空间的足够存储空间。相反,基于云存储系统中的存储量来限制客户端设备在CFS中进行存储可用的存储空间量。
[0064]这为客户端设备上的用户创建许多期望的使用模型。例如,通过使用CFS,用户能够在永远不向客户端设备添加大存储设备的情况下访问大量存储空间。当用户填充他们的本地存储系统的容量时,可能将数据移入云存储系统中以释放本地存储系统中的容量。
[0065]通过将CFS安装在用户的客户端设备上其他文件也可用于所有的该设备,并且一旦CFS被安装CFS就可用于另一客户端设备。由此,可能通过准予对CFS的访问(读取或写入访问)来向客户端设备提供对文件的访问。于是当该客户端设备访问文件时,从云存储系统检索该文件数据,从而使得跨越设备无缝地且比等待下载整个文件库以便共享显著更快地共享数据。此外,具有大媒体收集的用户可以将他们的媒体库文件夹转换成CFS中的文件夹并且与所有的用户设备共享该CFS。于是,所有的用户媒体收集将可用于安装CFS的任何客户端设备。此外,用户可以在不上传任何额外文件数据或将文件的副本存储在CFS中的情况下简单地通过将CFS清单拷贝到新名称来容易地创建整个文件系统的快照或新版本,从而允许用户在他的手边保持整个文件系统的多个版本。
[0066]此外,当CFS客户端模型变得与设备更集成时(例如变成在客户端设备的初始化中很早加载的操作系统的一部分),则越来越多的文件可以被存储在云存储系统中。事实上不仅用户的文档将在CFS中可用,而且甚至使得应用程序也在CFS中实现可用。事实上制造商可以通过更新CFS并且与从CFS访问其文件的客户端设备共享CFS来容易地将CFS客户端模块集成到云设备上的操作系统中并且将操作系统文件和应用程序文件推送到客户端设备。
[0067]此外,内容供应商现在具有通过生成包含其内容的CFS并且与用户共享该CFS而将内容分配给订户的简易方法。事实上,内容供应商可以生成专用于每个用户的个体云文件系统,它们所有都包含同一内容并且仅上传内容一次,因为一旦用户安装他的专用CFS每个用户都将具有对该内容的访问。事实上,利用云存储系统的中央访问控制能力,内容供应商可以使不再订阅的用户禁用对CFS的访问。
[0068]在一个实施例中,云存储系统135是一种服务,它被提供给加入该服务的用户并且通常是开放的以使公众加入。本发明的另一实施例允许企业维护用于作为该企业的成员的客户端设备101A-101D的云存储系统135。[0069]图2是图示包括云存储网关和云存储池的云存储系统的框图。在图2中,客户端设备201A (诸如客户端设备101A-D中的一个)通过通信网络230与云存储系统235耦合。该云存储系统235包括云存储网关245,其与云存储池260耦合。该云存储网关245与客户端设备20IA和云存储池260通信。
[0070]云存储网关245将来自客户端设备20IA的请求转变成云存储系统235应用程序编程接口(“API”)调用。此外,在至少一个实施例中,云存储网关包括云存储池260的远程缓存。因此,当客户端设备从云存储系统235请求数据时,云存储网关245接收对数据的请求。转而,云存储网关245利用云存储系统235 API调用来从云存储池260请求数据。当云存储网关245从云存储池260接收到所请求的数据时,云存储网关260将所请求的数据传送回到客户端设备201A。此外,在其中云存储网关245包括云存储池260的远程缓存的实施例中,该云存储网关245将所请求的数据保存在云存储池260的远程缓存中,以使得可以在不与云存储池260进行通信的情况下服务于从客户端设备201A或其他客户端设备(未示出)进一步请求所请求的数据。当云存储池260的远程缓存填充时,云存储网关245从云存储池260的远程缓存逐出数据以便为来自云存储池260的更多数据腾出地方。
[0071]图3图示根据本发明实施例的用于将文件保存在所存储的CFS中的方法的流程图。在图3中,客户端设备正运行CFS客户端模块。CFS客户端模块在框300处接收文件以保存在CFS中,CFS主要被存储在云存储系统中。CFS客户端模块在框310处利用用户不可知文件加密函数对该文件加密。
[0072]如在【背景技术】中描述的那样,传统客户端侧加密利用对每个用户或客户端设备来说唯一的密钥对数据加密。因此,两个客户端使用传统客户端侧加密而加密的同一数据很可能在结果得到的加密数据之间具有差异。然而,用户不可知文件加密与传统加密的不同之处在于具有由不同用户或客户端设备加密的同一数据的两个文件将产生具有相同加密数据的文件。
[0073]CFS客户端模块在框320处通过将加密文件存储在客户端设备上的CFS的本地缓存中来继续。CFS客户端模块利用用户不可知去重来将加密文件存储在客户端设备上。当利用用户不可知去重时,CFS客户端模块能够认识到加密文件何时已经存在于CFS的本地缓存中并且不存储该加密文件的第二副本。
[0074]CFS客户端模块在框330处通过执行服务器侧用户不可知文件去重来继续,其中CFS客户端模块确定加密文件是否已经存在于云存储系统中。在加密文件不存在于云存储系统中的情况下,CFS客户端模块将加密数据传送到云存储系统。服务器侧用户不可知文件去重使得CFS客户端模块能够促使云存储系统存储加密文件,以致其他用户或客户端设备可以从云存储系统访问加密文件,假定该其他用户或客户端设备可以识别加密文件。然而,虽然该其他用户或客户端设备可以访问加密文件,但是在先前不生成或接收用户不可知文件加密函数所使用的加密密钥的情况下该其他用户或客户端设备将不能对加密文件解密。
[0075]图4图示根据本发明实施例的用于执行用户不可知文件加密的方法的流程图。在图4中,客户端设备正运行与云存储系统交互的CFS客户端模块。CFS客户端模块在框400处接收文件480以便压缩和加密。在框405处,CFS客户端模块将文件480划分成块481A-N的集合。
[0076]在至少一个实施例中,CFS客户端模块确定该块中的一个或多个将受益于数据变换函数并且在该情况下对将受益于该变换的那些块进行变换。例如,数据块可能受益于压缩变换,诸如zip、bzip或gzip,由此减小块的尺寸。更进一步地,一些块将不受益于变换,或者将不期望变换这些块,并且因此将不会对这些块进行变换。
[0077]在框410中,CFS客户端模块生成压缩块482A-N的集合。在一个实施例中,CFS客户端模块还将描述如何变换块(例如利用哪个压缩算法)的信息嵌入到压缩块中。如先前所述,压缩块482A-N中的一个或多个可能与导出其的块相同(即没有发生压缩或变换)。此夕卜,本领域技术人员将认识到可以在对块进行处理的另一时间发生块的压缩。例如,压缩可以发生在框425中的生成加密密钥之后但是在块的加密之前。甚至还有,压缩甚至可以在框430中的块加密之后,尽管传统理解暗示加密数据的压缩不会产生有利于非加密数据的加密的结果。
[0078]CFS客户端模块在框415处生成文件清单483。CFS客户端模块在框420处遍历压缩块482A-N集合中的每个块。使用每个块(例如块482A),CFS客户端模块在框425中利用用户不可知加密根据块482A生成加密密钥484A、加密块485A以及块标识符(“ID”)486A。在框430中,CFS客户端模块将块ID 486A和加密密钥484A存储在文件清单483中。CFS客户端模块按照出现在文件480中的对应块481A-N顺序将每个块ID 486A-N和加密密钥484A-N存储在文件清单483中。加密密钥484A-N在这里有时被称为用户不可知加密密钥。
[0079]在框435中,CFS客户端模块将云存储系统中的加密块485A存储在与块ID 486A相对应的位置处。例如,CFS客户端模块可以调用负责将加密块485A传送到云存储系统以便存储的通信线程。这样CFS客户端模块可以调用用于将多个块上传到云存储系统的多个通信线程。这些线程可以由CFS客户端模块来管理以使得在任何给定时间仅指定数目的线程存在,并且仅指定数量的带宽被消耗以使得客户端设备的性能不会因CFS客户端模块而降级。此外,CFS客户端模块可以对通信线程进行优先级排序以使得某些块在其他块之前被传送。例如,如果CFS客户端模块接收到已经与其他用户或设备共享CFS的指示,则该CFS客户端模块可以对与共享CFS相关联的加密块的上传进行优先级排序。以这种方式,从其他用户和客户端设备请求的加密块将在已经不与其他用户或客户端设备共享其他加密块之前被上传到云存储系统。
[0080]在一个实施例中,客户端设备包括CFS的本地缓存并且CFS客户端模块确定CFS的本地缓存是否已经在与块ID 486A相对应的位置处包含加密块。因为利用用户不可知加密对块进行加密,所以块ID 486A与加密数据485A相对应,不管它是否由另一用户或客户端设备生成。因此,如果CFS的本地缓存在与块ID 486A相对应的位置处包含加密块,则该加密块与加密块485A相同并且CFS客户端模块不需要再次存储加密块485A。
[0081]类似地,CFS客户端模块可以向云存储系统询问该云存储系统是否在与块ID486A相对应的位置处包含加密块,并且如果云存储系统不包含,则CFS客户端模块可以对加密块485A和块ID 486A到云存储系统的上传进行排队。例如,云存储系统生成指示存在于该云存储系统中的数据的数据结构。该数据结构被传送到客户端设备并且CFS客户端模块向数据结构询问块的存在。这样,CFS客户端模块不必上传已存在于云存储系统中的块。在一个实施例中,该数据结构是存在于云存储系统中的所有块ID的散列表。在另一实施例中,该数据结构是用于确定哪些块存在于云存储系统中的布鲁姆过滤器。还可以提供其他数据结构以允许CFS客户端模块关于哪些块存在于云存储系统中进行询问或者CFS客户端模块可以与转而对存在于云存储系统中的块的状态做出响应的云存储系统传达该询问。
[0082]询问哪些块已经存在于云存储系统中呈现出明显优势。具体来说,可以用来自任何客户端设备的数据对云存储系统播种,因为所存储的相同数据块是相同的,不管哪个客户端设备或用户将该块存储在云存储系统中。例如服务供应商可以利用它所确定的将很可能处于客户端设备上的数据来对云存储系统播种。例如,应用程序和操作系统文件跨越用户和客户端设备具有高度一致性。如果该数据被任何服务供应商、客户端设备或用户添加到云存储系统;则任何随后的客户端设备或用户将不必上传数据,由于它已经存在于云存储系统中。因为数据传输消耗有价值的资源(例如可能与货币成本相关联的上传所需的时间和带宽使用),所以没有上传数据会向服务供应商和客户端设备/用户呈现出节省。可以利用具有高度一致性的媒体数据的存储来获取该相同的节省。例如,从内容分发器检索的歌曲或电影可能具有高度一致性,而不管哪个用户检索到所述数据。一旦第一用户或客户端设备将该数据存储在云存储系统中,其他客户端设备或用户将不需要再次上传该数据。
[0083]在框440处,用户不可知加密函数返回完整的文件清单483以供进一步处理,诸如将文件清单484添加到包含文件的细节以及文件夹在CFS中的位置的文件系统清单。
[0084]图5图示根据本发明实施例的用于执行数据的用户不可知加密的方法的流程图。在框500中,用户不可知加密方法接收数据(例如文件块、文件、文件清单等等)580以进行加密。该方法然后根据数据580生成加密密钥582。加密密钥582可以是将等同生成的任何密钥,不管针对该特定数据580生成加密密钥582的用户或客户端设备如何。
[0085]例如,加密密钥582可以是对数据580进行散列的结果。期望散列算法的示例包括加密散列函数;例如安全散列算法(“SHA”,比如SHA-O、SHA-1、SHA-256、或SHA-512)或者消息摘要(“MD”)算法(比如MD-2、MD-4、或MD-5)。在其他实施例中,可以经由其他算法来计算加密密钥582。例如,可以像检索数据580的预定子集那样简单地计算加密密钥582。
[0086]用户不可知加密方法在框520处通过使用数据580和加密密钥582生成加密数据584来继续。可以利用任何适合的加密对称或非对称加密算法来对数据580加密。适合的加密算法的非限制性示例包括高级加密标准(“AES”)、数据加密标准(“DES”)、三重DES、Blowfish、两鱼法(Twofish)、Serpent、Rivest-Shamir-Adleman (“RSA”)、NTRUEncrypt、以及椭圆曲线加密法(“ECC”)。在任何情况下,选择适合的加密算法和加密密钥生成方法以使得所选加密算法可使用所生成的加密密钥582。
[0087]在框530中,根据加密数据584来生成ID 586。ID 586可以是将等同生成的任何ID,不管针对该特定数据580生成ID 586的用户或客户端设备如何。例如,ID 586可以是对加密数据584进行散列的结果。如参考框510所述,可以使用任何适合的散列算法。在其他实施例中,可以经由其他算法(诸如检索加密数据586的预定子集)来计算ID 586。本发明的另外其他实施例可以使用数据580来生成ID 586,而不是使用加密数据586来生成ID586,尽管这样的实施例可能将加密数据586暴露于潜在安全风险。在框540中,用户不可知加密方法返回加密密钥582、加密数据584和ID 586。本领域技术人员将会认识到,CFS客户端模块可能希望将信息嵌入加密数据584。例如,CFS客户端模块可能预先考虑具有固定或可变宽度的块报头的加密数据。该块报头可以包括这样的具有区块类型、编码类型或原始尺寸的信息。该块报头然后可以被云存储系统和/或CFS客户端模块用来验证数据和/或帮助加密块的解密/解压缩。在一个实施例中,块报头包括区块类型(I字节)、编码类型(I字节)、以及原始尺寸(4字节)。然而在另外的实施例中,块报头包括更多、更少、或其他字段。例如,本发明的一个实施例生成仅包括编码类型和原始尺寸的块报头。
[0088]参考在其中同一密钥被用来加密数据还被用来解密数据的对称加密算法来描述本发明的实施例。然而,使用非对称算法,可利用用于加密的一个密钥以及用于解密的不同对应密钥等同地操作。当对于用户不可知加密而使用非对称加密函数时,所述用户不可知加密方法将需要返回与所生成的加密密钥582相对应的解密密钥,而不是加密密钥582。同样地,其他对保存加密密钥以便加密数据的未来解密的参考转而将保存对应的解密密钥。
[0089]在本发明的一个实施例中,当生成ID 586时每个用户和客户端设备利用同一算法是有必要的,以致对于访问该数据的所有用户和客户端设备来说存储在由ID 586标识的位置中的数据是相同的。此外,尽管描述了可以使用许多算法来生成加密密钥582、加密数据584以及加密数据586,但是本领域技术人员将会认识到当针对特定系统内的所有用户选择相同算法时存在某些优点。具体地,当利用给定云存储系统的每个用户或客户端设备采用给定算法集合时,则对于相同的数据每个用户或客户端设备将生成相同的加密密钥、加密数据和ID。因此,尽管数据的加密将是用户不可知的,但是云存储系统将能够通过其对应ID来标识加密数据并且仅存储该数据的一个副本。
[0090]图6图示根据本发明实施例的用于执行用户不可知文件加密的方法的视觉化。在步骤690A处该方法以客户端设备创建FILEa 601开始。在步骤690B中,在客户端设备上运行的CFS客户端模块将文件分成块602A-N,并且可选地将每个块压缩成压缩块603A-N (在图6中也被示为CHUNKS^);该步骤也可以被称为文件到块的分解。在步骤690C处,CFS客户端模块使用来自每个块的数据D来为该块生成加密密钥。如此以致Da是来自压缩块603A的数据并且用 于生成加密密钥604A,即Ka ;即Ka=AasA3(Da)或者作为集合ChUNKKEY1...n=HASHa (CHUNKS)。在步骤690D处,利用该块加密密钥604A-N来对每个压缩块603A-N加密以生成加密数据605A-N ;即e\)=encrypt (Da, Ka)或者作为集合SCHUNK^n=ENCRYPT(CHUNK1...n,CHUNKKEY1^n)ο在步骤690E中,CFS客户端模块根据加密数据605A-N生成ID606A-N;即 l\)=hashb (eDa)或者作为集合 ID^n=HASHb (eCHUNV.n)。
[0091]图7图示根据本发明实施例的用于将文件保存在云文件系统中(包括生成文件系统清单)的方法的流程图。将参考图27描述根据本发明实施例的生成文件系统清单的另一实施例。在图7中,客户端设备运行CFS客户端模块。CFS客户端模块在框700处接收文件780以保存在CFS中,该CFS主要被存储在云存储系统中。CFS客户端模块利用用户不可知文件加密函数来对文件780加密,在框710处该用户不可知文件加密函数存储加密块且生成文件清单782。如参考图4所述,每个加密块都被存储在云存储系统中并且可选地进一步存储在CFS的本地缓存中。此外,文件清单782包括块ID以及每个都与加密块中的一个相对应的加密密钥的有序列表。在一些实施例中,压缩文件清单782以便存储并且CFS客户端模块在框715中压缩文件清单782是有益的。
[0092]在框720中,CFS客户端模块生成文件清单加密密钥785、加密文件清单786、以及文件清单ID 787。在一个实施例中,这些是利用诸如参考图5所述的方法的用户不可知加密方法而生成。在框725中,CFS客户端模块将文件清单ID 787和文件清单加密密钥785存储在文件系统清单788中。该文件系统清单788包括存储在CFS内的所有文件的列表。将对应文件清单ID和文件清单加密密钥连同标识文件以便显示给用户的信息(诸如每个文件应该被显示的路径)一起存储,以使得CFS客户端模块可以从云存储系统检索与该文件相对应的加密文件清单并且对加密文件清单解密。
[0093]在框730中,CFS客户端模块可选地存储与文件780相对应的文件属性。例如,文件可以具有与该文件相关联的元数据集合,诸如文件尺寸、创建时间戳、修改时间戳、访问控制列表/许可、只读标记、隐藏文件标记或如客户端设备所使用的其他属性。
[0094]在框735中,CFS客户端模块将加密FM存储在具有用户不可知去重的云存储系统中。由此CFS客户端模块执行服务器侧用户不可知去重,其中该CFS客户端模块确定加密文件清单786是否已经存在于云存储系统中。在加密文件清单786不存在于云存储系统中的情况下,CFS客户端模块将加密文件清单786连同文件清单ID 787 一起传送到云存储系统。此外,CFS客户端模块可以执行客户端侧用户不可知去重,其中CFS客户端模块能够识别出加密文件清单何时已经存在于CFS的本地缓存中并且不会存储加密文件清单的第二副本。
[0095]在一个实施例中,在CFS客户端模块在框740处根据文件系统清单788生成加密文件系统清单789。生成加密文件系统清单789的一种方法是对文件系统清单788执行用户相关快照加密。生成加密文件系统清单789的另一种方法是执行多用户文件系统清单加
LU O
[0096]在用户相关快照加密的情况下,CFS利用由用户或客户端设备提供的或对于该用户或客户端设备来说唯一的加密密钥来对文件系统清单788加密。利用该方法,用户可以与应该给予对该CFS的访问的其他用户或设备共享加密密钥(在对称加密的情况下),或者共享对应解密密钥(在非对称加密的情况下)。因此,加密文件系统清单789的副本可以被存储在云存储系统中,但是仅具有对应加密密钥的那些用户和客户端设备将能够对加密文件系统清单789解密。因此,加密文件系统789可以被存储在CFS中,但是仅具有必备加密密钥的那些用户和客户端设备将能够访问标识/解密该加密文件系统清单789中列出的加密文件清单所需的信息。该方法具有允许CFS客户端模块与另外的用户或客户端设备共享CFS快照的优点。CFS客户端模块仅需要使用要与其他用户或客户端设备共享的加密密钥来创建加密文件系统清单789。然后,CFS客户端模块可以将加密文件系统清单789上传到云存储系统并且与其他用户共享加密密钥以及加密文件系统清单789的ID。在另一实施例中,CFS客户端模块可以将加密文件系统清单789和加密密钥直接传送到其他用户或客户端设备。然后该其他用户或客户端设备将在CFS客户端模块生成加密文件系统清单789时访问存在于CFS中的所有文件。然而,由其他用户或客户端设备做出的任何改变将仅被反映在与该其他用户或客户端设备相对应的新创建的文件系统清单中,并且将不会影响用户或客户端设备最初生成的加密文件系统清单789。因此,用户可以通过仅仅传送加密密钥和加密文件系统清单789或加密文件系统清单ID来与另外的用户或客户端设备共享整个CFS的快照。
[0097]在多用户文件系统清单加密的情况下,用户可以以直播方式与另一用户或客户端设备共享CFS。直播方式意味着由用户做出的改变将被反映给其他用户或客户端设备,此外由其他用户或客户端设备做出的任何改变将被反映给用户。
[0098]多用户文件系统清单加密以CFS客户端模块生成通用唯一标识符(“UUID”)开始。该CFS客户端模块确定该UUID是否存在于云存储系统中,并且继续生成新UUID直到生成未使用过的UUID为止。一旦新UUID生成,云存储系统就生成由该UUID标识的多用户文件系统清单收集。在本发明的一个实施例中,云存储系统还创建与多用户文件系统清单收集相关联的访问许可集合并且准予与该CFS客户端模块相关联的用户访问多用户文件系统清单收集。多用户文件系统清单收集是针对该CFS的大量加密文件系统清单版本。现在CFS利用作为加密密钥的UUID对文件系统清单788加密并且将加密文件系统清单789传送到云存储系统中以便存储在多用户文件系统清单收集中。生成对CFS的后续改变以作为针对生成该改变的CFS客户端模块所利用的CFS的版本的补丁改变。文件系统清单788和后续的补丁改变全部都存储在多用户文件清单收集中以使得已经被准予访问多用户文件系统清单的后续用户和客户端设备可以下载多用户文件清单收集中的每个条目来重构云文件系统的当前状态。此外,已准予访问的用户和客户端设备可以向云存储系统订阅以接收对CFS的更新。因此,当用户改变CFS的信息时,这些改变被无缝地推送到所订购的用户和客户端设备。
[0099]在本发明的一个实施例中,云存储系统可以向客户端设备呈现允许用户管理该用户的文件系统清单的用户界面,诸如网页界面。例如,用户可以选择创建文件系统清单的可共享快照并且执行用户相关快照加密以得到能够与另一用户共享的文件系统清单的副本。例如,可以指示云存储系统用电子邮件将链接发送给快照。此外,该电子邮件可以包括解密共享文件系统清单所需的信息。在另一示例中,云存储系统可以通过呈现给客户端设备的用户界面中的菜单来使得快照可用于云存储系统的其他用户。
[0100]该同一用户界面允许用户管理多用户文件系统。例如,客户端设备上的用户可以决定根据现有云文件系统生成多用户文件系统并且管理关于该多用户文件系统的访问许可。对于已经准予访问多用户文件系统的用户来说,云存储系统可以使得那些用户能够经由电子邮件或通过用户界面来访问多用户文件系统清单。如果所有者希望阻止用户访问多用户文件系统,则该所有者可以改变多用户文件系统清单的访问许可,以使得用户将不再被准予从对应UUID所标识的多用户文件系统清单收集下载条目。此外,可以通过同一用户界面来启用对用户或客户端设备的只读许可。
[0101]当仅仅写入到云文件系统中存储的文件的一部分时,与要被写入到的那部分相对应的文件块被拷贝到存储器中。在存储器中的该部分上执行对文件块的更新并且将该经过更新的文件块加密。如上述所述,这导致针对该块的用于更新对应文件清单的新块ID和加密密钥。在将数据添加到文件中间的情况下,多个块可能需要更新,因为数据将移位以容纳新数据。这需要检索与文件的每个部分相对应的每个文件块并且对改变的那部分执行更新、加密以及文件清单更新。在将数据附加到文件末端的情况下,过程是如先前所述对现有块的更新、对现有块的更新以及添加新块的组合、或仅仅添加新块。
[0102]图8图示根据本发明实施例的用于从云文件系统中的文件读取数据的方法的流程图。在图8中,客户端设备正运行CFS客户端模块。
[0103]CFS客户端模块安装CFS以作为针对该CFS使用文件系统清单的客户端目录上的目录或驱动。如上所述,文件系统清单包括含有文件清单列表连同文件系统清单中的每个文件所位于的路径的信息。CFS客户端模块向客户端设备的用户示出CFS以作为客户端设备存储层级的一部分。例如,CFS可以被安装在客户端设备存储系统中的安装点处。安装点可以作为驱动(例如E:驱动)或者作为现有驱动或存储系统中的文件夹。这允许CFS客户端模块将CFS呈现给客户端设备,并且转而呈现给用户以作为任何其他存储系统。描述这个的另一方式是CFS客户端模块仿效去到客户端设备的操作系统的区块存储设备。
[0104]CFS客户端模块在框800处接收对来自CFS中的文件的数据的请求。对数据的请求包括标识CFS客户端模块应该返回的数据集合的信息。例如,该请求可以包括到数据存在于其中的文件的路径。此外,该请求可以包括查找位置和字节计数以指示要在哪里读取数据以及要读取多少数据。CFS客户端模块在框805处定位与该文件相对应的文件清单。将文件清单如下定位于CFS中。CFS客户端模块根据文件系统清单来定位与该文件相对应的文件清单ID。在一个实施例中,CFS客户端模块确定解密的文件系统清单是否存在于CFS的本地缓存中。在另一实施例中,CFS客户端模块确定加密的文件系统清单是否存在于CFS的本地缓存中。在又一实施例中,CFS客户端模块确定CFS的本地缓存是否包含加密或解密的文件清单。如果加密或解密的文件清单都不存在于CFS的本地缓存中,则CFS客户端模块使用文件清单ID从云存储系统检索加密文件清单以标识加密数据。一旦CFS客户端模块具有加密文件清单,或者在加密文件清单处于本地缓存但是解密文件清单不处于本地缓存的情况下,CFS客户端模块使用与文件系统清单中的文件清单相关联的加密密钥来对加密文件清单解密。此外,CFS客户端模块可以将加密文件清单、解密文件清单或者这二者存储在CFS的本地缓存中以供将来访问。
[0105]在框810处,CFS客户端模块确定检索所请求的数据所需的一个或多个文件块。在一个实施例中,CFS客户端模块使用查找位置字节计数来确定从CFS检索所请求的数据需要哪些文件块。例如,如果CFS客户端模块在将文件保存到CFS时将该文件划分成64字节块,则CFS客户端模块可以通过用64字节块大小对查找位置执行整除来确定需要第一块。如上所述,文件清单包括加密密钥以及块ID的有序列表以便对文件块解码。此外,CFS客户端模块可以通过将字节计数添加到查找位置以及用64字节块大小对该结果执行整除来确定需要最后一块。由此,CFS客户端模块可以确定它需要第一块、最后一块以及之间的所有块来导出所请求的数据。本领域技术人员将会认识到,对于将数据存储在CFS中来说,64字节块大小可能不是最优的。在一些配置中,512千字节的块大小可能是最优的;可能利用其他数量(诸如64千字节、128千字节或256千字节)的块大小来更好地为其他配置提供服务。本领域技术人员将理解,本发明不限于任何特定块大小并且所列出的块大小是示例性而不是限制性的。
[0106]在框815处,CFS客户端模块遍历每个所需要的文件块。在框820处,CFS客户端模块确定当前文件块是否存在于CFS的本地缓存中。如果当前文件块不存在于CFS的本地缓存中,则CFS客户端模块在框825中从云存储系统检索该文件块。例如,当CFS客户端模块需要文件清单中列出的第一文件块时,CFS客户端模块向云存储系统发出传送与第一块ID相关联的文件块的请求。一旦CFS客户端模块接收到所请求的文件块,CFS客户端模块可以进一步处理该文件块。
[0107]在一个实施例中,CFS客户端模块验证所接收的文件块830。可以通过根据所接收到的文件块生成检索的块ID来验证文件块。因为块ID是根据加密数据的内容而生成的,所以如果所检索的数据有效则块ID请求应该与所生成的块ID相匹配。
[0108]在本发明的一些实施例中,对于所请求的文件块附近的文件块,CFS客户端模块使用预测检索。例如,预期可能从云存储系统需要的其他文件块是有利的。由此,CFS客户端模块可能在文件清单中搜索所请求的块附近的文件清单中列出的文件块。例如,如果所请求的文件块是文件清单中列出的第一文件块,则CFS客户端模块可以对文件清单中列出的下一文件块排队并检索它以使得如果以及当需要该下一文件块来检索所请求的数据时该块将在CFS的本地缓存中。本领域技术人员将会认识到对接下来的8个文件块(例如)排队并下载它们或者CFS客户端模块可以在4个文件块之前以及4个文件块之后排队并且下载是有利的。本发明的其他实施例根据用于预测检索的逻辑来检索更多或更少或不同的文件块集合。例如,CFS客户端模块可以对不存在于CFS的本地缓存中的接下来的2个块排队以使得如果接下来的第一块和接下来的第三块存在但接下来的第二和第四块不存在,则CFS客户端模块将检索接下来的第二和第四块。
[0109]在其他实施例中,对于文件块的预测检索,CFS客户端模块使用分析判定。例如,CFS客户端模块可以生成块访问的数据库以对如何访问块建模。CFS客户端模块可以保持追踪被访问的先前块ID,并且然后当下一块ID被访问时CFS客户端模块可以生成指示第一块ID、第二块ID的条目以及计数。每当块ID被访问时,CFS客户端模块可以使用先前块ID和当前块ID来更新该追踪。由此,先前块ID被用作第一块ID且当前块ID是第二块ID ;计数在I处开始并且每当先前块ID和当前块ID的相同组合被访问时该计数递增。CFS客户端模块可以使用该分析模型来基于正被访问的块确定哪些块被访问的可能性最大。为了简单起见,让我们采用三个文件块(它们可能是不同文件块相同的一部分):块A、块G、和块P。我们可以发现在4个场合当块G被访问时,块A被预先访问。我们还确定在18个场合当块P被访问时,块A被预先访问。这可以被表示为块A —块G=4 ;块A —块P=18。因此,下次块A被访问时,CFS客户端模块可以确定块P被访问的可能性较高。因此,当块A被访问时,CFS客户端模块可以预测地检索块P。本领域技术人员将会认识到基于分析模型来对链条中的多个块排队并且下载它们是有利的。例如,如果块B被访问且模型预测访问块C,但是块C存在于本地缓存中,则CFS客户端模块将预测在块C之后可能被访问的块。CFS客户端模块可以进一步确定跟随该链条直到为本地缓存检索到两个块,或者直到检索到四个块为止。本领域技术人员将会认识到不同数目的块可能有点优势并且适合CFS客户端模块利用多个块来预测性地缓存。此外,CFS客户端模块可以认识到,对于一个块,许多块都会具有下一次可能被访问的机会并且预测性地缓存具有那些块的链条中的那些块中的一个或多个。
[0110]另一些实施例可以使用用于基于用户和/或客户端设备行为来分析性地确定要检索的下一块的其他方法。例如,CFS客户端模块可以将用户界面队列与块访问相关联并且在该模块上生成本地缓存。在其他实施例中,CFS客户端模块可以基于网络活动性的模型或运行的应用程序的模型来保持追踪文件块访问,以使得当用户访问某些网络位置处的信息时,CFS客户端模块可以将其与访问某些文件块相关联并且当那些网络位置被访问时缓存那些文件块。CFS客户端模块可以将文件块的访问关联到某些应用程序何时被访问,并且然后当将来该应用程序被访问时将那些文件块缓存到本地缓存中。
[0111]为了支持文件块的预测检索,CFS客户端模块采用应该被检索的块ID队列以及服务于所述队列的多个下载线程。基于文件块是否可能比队列中的其他文件块更快地被使用的确定来对文件块的检索进行优先级排序是有利的。由此,当CFS客户端模块确定它应该检索文件块(与对访问文件块中的数据相关联的检索或者预测检索)时,CFS客户端模块将所请求的块ID添加到下载队列并且将该块ID与优先级值相关联。以使得下载线程从需要首先更立即访问的下载队列选择块ID的方式来选择对于每个块ID的优先级值。由此,CFS客户端模块可以将针对作为文件访问的一部分的框825中的检索而请求的块ID与较高程度的优先级相关联,同时将作为框832中的附近文件块的预测检索的一部分的被添加到下载队列的块与较低程度的优先级相关联。
[0112]一个特定实施方式是确定正被检索的块与多靠近正被访问的块。以这种方式,作为框825中的块访问的一部分正被检索的下载队列中的块ID将具有距离0,因为这就是正被访问的块的ID。当CFS客户端模块确定应该预测性地检索FM中的接下来的第一块和FM中的接下来的第四块时,则对应块ID将接收到分别作为那些块离被访问的块的距离的反映的距离I和4。当使用具有块分析方法的块链条访问时,可以采用该同一原理。当CFS客户端模块跟随该链条以找出应该从云存储系统检索到的不处于本地缓存中的下一块时,CFS客户端模块可以追踪要沿着链条向下行进多远并且将其用作离被访问的块的距离。因此,具有离被访问的块的较短距离的块ID的优先级将超过通过下载线程的在下载队列中具有较远距离的块。参考图40来进一步描述一种实施方式。
[0113]此外,在其中云存储系统支持CFS的远程缓存的本发明的实施例中,在框833中CFS客户端模块可以指示云存储系统预取附近的文件块。例如,在本发明的一个实施例中,云存储系统包括云存储网关和云存储池。由此,指示云存储网关将需要被传送到客户端设备的文件块放置在云存储池的云存储网关的远程缓存中是有利的;换言之,指示云存储网关预取文件块。这样,当CFS客户端模块从云存储系统检索文件块时云存储网关将使得文件块处于其远程缓存中,从而消除否则将在云存储网关必须从云存储池检索所请求的文件的情况下发生的等待时间。此外,CFS客户端模块可以指示云存储网关预取不存在于该CFS客户端模块预测访问的CFS的本地缓存中的接下来的两个文件块。由此,如果接下来的第一和接下来的第三块存在于本地缓存中但接下来的第二和第四块不存在于本地缓存中,则CFS客户端模块将指示云存储网关预取接下来的第二和第四块来存储在远程缓存中,以使得当CFS客户端模块请求那些块时云存储网关不必从该云存储池检索那些块。
[0114]在框834中,CFS客户端模块可选地将CFS的本地缓存中的所检索到的文件块存储在与该文件块的ID相关联的位置处。在框835处,CFS客户端模块执行文件块的用户不可知解密和解压缩。如上所讨论的,文件清单具有通过该块的ID与每个文件块相关联的加密密钥或解密密钥(在非对称加密算法的情况下)。因此,CFS客户端模块可以从文件清单检索加密密钥/解密密钥以执行文件块解密。此外,如上所讨论的,一些文件块可以受益于压缩以及被压缩;因此如果是这种情况则CFS客户端模块将对文件块解压缩。在框837中,CFS客户端模块可选地将CFS的本地缓存中的解密/解压缩文件块存储在与该文件块的ID相关联的位置处。一旦解密/解压缩块可用,CFS客户端模块就在框860处如稍后所述的那样继续。
[0115]应该指出,本发明的一个实施例将在框834中缓存加密文件块,而本发明的另一实施例将在框837中缓存解密/解压缩文件块。其他一些实施例可以缓存框834中的加密文件块以及框837中的解密/解压缩文件块二者;然而,在至少一个实施例中,解密/解压缩文件块被缓存在本地缓存的易失的一部分中,以使得当电源中断时解密/解压缩文件块将不存在或者在预定时间段之后甚至将被移除。这给出附加的安全性,尽管加密文件块可能存在于本地缓存中,但是如果CFS客户端模块没有被适当地激活以解密数据则所述数据将不可用于客户端设备的用户。例如,这可能是因为CFS客户端模块还将解密文件系统清单存储在本地缓存的易失部分并且需要用户登录客户端设备以便对文件系统清单解密。因此,用于文件清单以及每个文件的后续文件块的所有加密密钥将受到客户端设备的授权用户的保护。
[0116]返回参考框820,如果CFS客户端模块确定文件块存在于CFS的本地缓存中,则CFS客户端模块通过从本地缓存检索文件块而继续到框850。从先前讨论显然的是,文件块可以被存储在本地缓存中以作为加密文件块或解密/解压缩文件块或这二者。如果加密文件块仅是可用的文件块,则CFS客户端模块将在框855中对加密文件块执行用户不可知解密和解压缩。否则,CFS客户端模块在框850中从本地缓存检索解密/解压缩文件块。此夕卜,CFS客户端模块可以如上所述在框832中确定预测性地检索附近文件块和/或在框833中指示云存储系统预取附近文件块。
[0117]在本发明的一个实施例中,有必要在框860中将解密/解压缩文件块划分成具有客户端设备预期从CFS客户端模块接收到的大小的组群。例如,如果文件块被存储在256千字节大小的块中但是客户端设备预期数据被存储在4千字节的区块中,则CFS客户端模块将解密/解压缩文件块划分成64个区块以便将数据返回到客户端设备。当CFS客户端模块仿效去到客户端设备的区块设备并且指定比云存储系统使用的块大小更小的区块大小时这尤其有意义。
[0118]在框870中,CFS客户端模块具有从解密/解压缩文件块请求的数据并且将所请求的数据返回到客户端设备的操作系统。
[0119]图9图示根据本发明实施例的云文件系统以及将文件存储在该云文件系统中的视觉化。在图9中,客户端设备910安装云文件系统902以供在客户端设备上使用。云文件系统902在云文件系统902清单910内。云文件系统902清单910包括指示存在于该特定云文件系统902中的文件和文件夹的条目列表。云文件系统902清单910包括条目名称、条目属性、条目-清单-1D以及条目-清单-加密-密钥。
[0120]用户具有使用云文件系统(诸如云文件系统902)的许多方式。用户可以发起生成要在客户端设备901上使用的新云文件系统。例如,用户可以引导在客户端设备上运行的CFS客户端模块创建存储在云存储系统935中的新存储位置,例如新驱动或新文件夹。使用云文件系统的另一方式是将存储在客户端设备上的文件夹转换成存储在云存储系统935中的文件夹;即使文件夹或驱动可视化。客户端设备上的用户可以指示CFS客户端模块转换特定文件夹,并且然后CFS客户端模块可以假设管理该特定文件夹中的子文件夹和文件。此外,该转换可以以不突兀看似透明的方式来发生。这对运行在本地存储系统中的空间之外的用户特别有利,并且希望在不改变许多配置设置的情况下恢复存储空间,因为文件已从预期位置移去。CFS客户端模块可以将文件从本地存储系统转变到云存储系统但是在该文件在转换之前存在的同一逻辑路径处将它们呈现给客户端设备。
[0121]例如,CFS客户端模块将特定文件夹中的所有数据移动到客户端设备上的临时存储位置。然后,CFS客户端模块可以创建与该特定文件夹相关联的新CFS并且将新CFS安装在先前包含特定文件夹的位置(即安装点)处。CFS客户端模块然后可以开始将文件和子文件夹从临时存储位置转变成云存储系统935中的存储的过程。在转变时段期间,客户端设备可以通过向CFS客户端模块发出请求来访问该特定文件夹中的数据。CFS客户端模块将确定所请求的数据是否被存储在临时存储位置中或者它是否已经被转变到云存储系统935中。如果数据位于临时存储位置中,则CFS客户端模块从临时存储位置检索该数据,例如访问临时存储位置中的文件或文件夹。然而,如果数据位于云存储系统935中,则CFS客户端模块将以图8中指定的方式从云存储系统935访问数据。在转变时段期间,CFS客户端模块将周期性地确定特定文件夹中的还没有被存储在云存储系统935中的文件或子文件夹,并且处理该文件夹以存储在云存储系统935中。
[0122]可以通过用户界面命令使得该转换可用于客户端设备上的用户。例如,用户可以从客户端设备上的文件系统浏览器选择文件夹并且调用包括转换所选文件夹的命令的上下文菜单;例如虚拟化或“云化”该文件夹。据此,CFS客户端模块可以用对用户来说感觉上相同的包括同一数据的文件夹来替换文件夹,或者CFS客户端模块可以用被相同地命名但是向用户呈现文件夹被存储在云存储系统935中的指示的文件夹来替换文件夹。此外,CFS客户端模块可以创建文件夹处于从本地存储到云存储系统935中的存储的转变的指示,并且一旦该转变完成就进一步呈现文件夹被完全存储在z?存储系统935中的指不。
[0123]一旦CFS被安装以供在客户端设备901上使用,CFS客户端模块就如下将子文件夹和文件存储在CFS中。子文件夹被作为条目存储在CFS 902清单910中并且被指定为文件夹而不是文件。CFS 902清单910中的条目包括文件夹的路径,以使得当客户端设备上的用户导航到CFS中的位置时,CFS客户端模块可以根据CFS 902清单910确定位于该位置处的所有文件夹。参考图7来描述云存储系统中的文件存储。此外,CFS 902清单910中针对文件的条目包括针对该文件的路径,以使得当客户端设备上的用户导航到CFS中的位置时,CFS客户端模块可以根据CFS 902清单910确定位于该位置处的所有文件。因此,本领域技术人员将会认识到在不使客户端设备存储包括CFS中的每个文件的文件块的情况下可以根据CFS 902清单 910中的数据将CFS中的文件和子文件夹呈现给用户。
[0124]沿着图9的底部来使将文件添加到CFS 902的过程可视化。在图9中,客户端设备指示CFS客户端模块将文件B保存到CFS 902中的位置。CFS客户端模块对文件B执行用户不可知压缩和加密并且生成文件B清单903 (“FM-B”)。此外,当CFS客户端模块确定加密块已不存在于云存储系统935中时,它将由用户不可知压缩和加密生成的每个加密块传送到云存储系统935。
[0125]因为加密块可以被确定为已经存在,所以当文件B包含与已被存储在云存储系统935中的其他文件中的其他数据区块相同的数据区块时带宽利用被减小。该同一去重允许CFS客户端模块在云存储系统935中存储的单个文件包括多个同样的数据块时减小带宽,因为仅上传的第一块将需要被传送。本领域技术人员将会认识到,因为加密是用户不可知的,所以具有同一文件的两个用户或者具有同一数据块的两个文件将创建一个或多个相同的加密块并且仅需要第一次传送的加密块。由此,在将重复数据存储在云存储系统935中的情况下减小了带宽。
[0126]图9中示出示例性FM-B 903。FM-B 903包含块ID和块加密密钥的列表,如参考图4所述的那样。在图9中,每个块的ID是加密块中数据的散列(例如HASH(ENC.CHUNK I) - HASH (ENC.CHUNKN))。此外,加密密钥是块中数据的散列(例如HASH (CHUNK I)-HASH(CHUNK2))。如图5中所述,这些块ID和加密密钥是示例性的,同时本发明的其他实施例利用根据每个块确定的其他用户不可知数据作为块ID和加密密钥。[0127]CFS客户端模块利用在FM-B 903上的每个区块上采用的同一用户不可知加密来生成加密FM-B、ENC.FM-B 904以及FM-B ID (其是ENC.FM-B 904的散列)。CFS客户端模块再次使用用户不可知确定性加密密钥(“FM-B ENC-KEY")来对FM-B 903加密,诸如FM-B903中数据的散列。CFS客户端模块将ENC.FM-B 904本地存储并且将其存储在云存储系统935中,以使得其可用于稍后使用FM-B ID的检索。
[0128]CFS客户端模块将包括文件B在CFS 902中的文件夹层级中所处的位置的条目添加到与文件B相对应的CFS 902清单910。文件B条目还包含FM-B ID和FM-B ENC-KEY0这样,一旦用户或客户端设备具有包含带有FM-B ID和对应FM-B ENC-KEY的条目的CFS清单,则用户就可以检索ENC.FM-B 904并对其解密,即使用户或客户端设备先前不具有文件B的副本。
[0129]利用用户生成的密钥或密码来对云文件系统902清单910加密。例如,可以使用稍后参考图7描述的用户相关快照加密或多用户文件系统清单加密来对云文件系统902清单910加密。加密文件系统清单(“ENC-FSM”)被传送到云存储系统935以便被存储用于该用户或其他用户进行检索。
[0130]已经参考生成取代现有文件夹或者作为另一存储位置被添加到客户端设备的CFS描述了文件到CFS的添加。然而,可以采用相同的原理来允许CFS客户端模块管理客户端设备上本地存储中的一些或所有数据的自动备份。例如,一旦将CFS客户端模块加载到客户端设备上,CFS客户端模块就可以开始生成本地存储系统的备份,它们被存储在标记为对运行CFS客户端模块的客户端设备的备份的CFS中。因此,CFS客户端模块可以在标识本地存储系统中的文件的背景中工作,从而将那些文件添加到云存储系统并且生成列出所有备份文件(其包括该客户端设备的本地存储系统的备份)的文件系统清单。不必从本地存储系统移除本地存储系统上的文件,但是文件被列出在备份文件系统清单中以供将来灾难恢复。
[0131]在客户端设备执行CFS客户端模块的整个寿命期间,CFS客户端模块可以保持文件的备份,因为不管潜在文件夹是否被虚拟成云存储系统他们都会被更新。此外,CFS客户端模块可以保持存储在云存储系统中的每个文件的所有版本的列表连同标识信息;即版本号或修改日期。以这种方式,当客户端设备上的用户指示希望从由CFS客户端模块保持的备份恢复文件时,CFS客户端模块可以向该用户呈现文件的所有可用版本的列表。此外,CFS客户端模块可以追踪其所存在于的客户端设备的唯一标识符并且标记备份文件系统清单内的每个备份文件的文件清单或根据客户端设备的唯一标识符来标记文件系统清单自身。使用该唯一标识符,CFS客户端模块可以向用户呈现从该客户端设备的备份恢复文件的选项或允许用户选择从其来恢复备份文件的另一客户端设备。
[0132]在一个实施例中,由CFS客户端模块来自动管理本地存储系统的备份。在另一实施例中,CFS客户端模块向用户呈现关于哪些文件应该被备份到云存储系统或者是否根本不应该执行备份的配置选项。
[0133]在整个本地存储系统被备份到云存储系统中的情况下,“云化”操作可以被等同为生成具有所选文件夹的内容的文件系统清单,移除文件夹的本地副本,以及将所生成的文件系统清单安装在该文件夹的位置处。该操作不需要重新上传每个文件的所有加密区块因为根据备份程序加密区块已经在云存储系统中,尽管“云化”操作将确定必须在备份文件以及当前在所选文件中的文件之间发生的任何更新。
[0134]在另一实施例中,CFS客户端模块被配置成自动虚拟化客户端设备的本地存储系统中的文件、文件夹和驱动。如上所述,本地存储系统的自动备份不会从本地存储系统移除文件。然而,文件、文件夹或驱动的自动虚拟化将从本地存储系统内移除文件和文件夹并且将所述文件和文件夹存储在云存储系统中。实质上,CFS客户端模块将自动对它确定为自动虚拟化候选的文件、文件夹和/或驱动进行云化。CFS客户端模块可以利用多种技术确定哪些文件、文件夹或驱动是自动虚拟化的候选。CFS客户端模块可以查看文件夹或驱动内的一个或多个文件的修改日期或访问日期以确定用户最近是否使用该文件。因为该虚拟化是自动的,所以如果必须从云存储系统检索文件的话,CFS客户端模块可以偏爱最近没有被使用的文件,因为用户很少受到将来访问中的任何延迟的影响。用于为虚拟化确定候选的其他技术包括随着时间追踪文件使用模式,并且生成成为虚拟化的良好候选的文件、文件夹和驱动的列表。
[0135]CFS客户端模块还可以被配置成提供包含在CFS内的文件/文件夹以及包含在本地存储系统中的文件/文件夹的混合文件夹。例如,如果用户指示CFS客户端模块将CFS安装在包含文件和文件夹的本地存储系统中的安装点处,则CFS客户端模块可以合并本地存储系统中的文件以及被安装的CFS。CFS客户端模块将采取本地存储中文件的管理并且将文件移动到本地存储系统的管理部分。CFS客户端模块然后将虚拟文件夹安装在所选文件夹的位置处并且负责向用户呈现该文件夹的内容。CFS客户端模块将向客户端设备提供本地存储系统中的现在处于本地存储系统的管理部分中的文件/子文件夹的列表以及来自在任何时候安装的CFS的文件/子文件夹的列表、对混合/虚拟文件夹执行的目录列表。将以上文参考在虚拟化转变期间通过读取描述的方式来处理读取操作。CFS客户端模块将具有把新文件和/或旧文件的修改保存到本地存储系统的管理部分或云存储系统的选项。该选项可以由CFS客户端模块通过呈现给用户的设置来预先配置,或者当CFS客户端模块给予混合文件夹写入操作时该选项就可以被呈现给用户。CFS客户端模块还向用户通知如果用户选择将CFS安装在本地存储系统中的包含文件或文件夹的位置处则存在冲突,并且允许用户选择解决程序;例如选取将所有文件移动到CFS中,选取混合文件夹方法,或者选取什么都不做那么用户可以自己管理冲突。
[0136]图10图示根据本发明实施例的文件的用户不可知加密和压缩的视觉化。在图10中,客户端设备1001对单个文件1010进行加密,该单个文件1010碰巧包含两个数据块1030和1040,该两个数据块1030和1040碰巧包括相同的数据。在本发明的一个实施例中,客户端设备开始在步骤a和步骤b分别通过根据每个对应的数据块1030和1040 ("D1030"和“D1040”)生成加密密钥1032和1042 (“K1030”和“K1040”)来处理每个块。因此,在实施例中利用数据的散列函数来生成加密密钥,K—zhastKD—)。此外,因为Dltl3tl与D_相同,所以Kltl3tl将与Kiq4q相同。在步骤c和步骤d中,客户端设备可选地压缩块1030和1040以生成压缩块 1031 和 1041 (“CD誦”和 “cD_”);即 CD麵=comp (D1040)o 压缩块 1031 和 1041再次相同,因为客户端设备1001使用同样的数据和相同的压缩算法,或者没有压缩(如果情况可能的话)。
[0137]在步骤e和步骤f处,客户端设备1001使用相应的加密密钥1032和1042对压缩块 1031 和 1041 加密以生成加密块 1033 和 1043 CeD1030"和 “eD麵”);即 eD1030=encryptCcD1030, K1030)ο加密块1033将与加密数据1043相同,因为压缩块1031和1041相同,加密密钥1032和1042也相同。此外,客户端设备对每个块采用相同的加密算法。
[0138]在步骤g和步骤h处,客户端设备1001从加密数据1033和1043导出块ID 1034和块ID 1044 (“ID誦”和“ID_”);即ID1(l3(l=hash CeD1030)?因为在每个步骤中使用的散列函数是相同的算法并且加密数据1033和1044相同,所以块ID 1034和1044也将相同。
[0139]在步骤i和步骤j处,客户端设备1001将尝试基于块ID 1034和1044把加密数据1033和1043存储在云存储系统1035中。假设步骤i在步骤j之前发生,联合块ID1034把加密数据1033上传到云存储系统1035。云存储系统将加密数据1033存储在与块ID 1034相对应的位置中;因此云存储系统将包含所存储的加密数据1063和所存储的块ID1064。当客户端设备1001尝试存储加密数据1043时,客户端设备将确定云存储系统1035已具有相同的加密数据,因为它包含相同的存储块ID 1064。客户端设备1001将不需要与块ID 1044联合地传送加密数据1043 ;因此,客户端设备1001将通过不传送已经存在于云存储系统1035中的数据来减小上传带宽的利用。
[0140]图11图示根据本发明实施例的两个文件的用户不可知加密和压缩的视觉化。在图11中,第一客户端设备1101A加密文件1110,而第二客户端设备1101B加密文件1120。当这发生时,文件1110和1120包含两个数据块1130和1140,它们包含相同的数据。甚至可能是,所有文件1110和1120包括完全相同的数据,如同文件是彼此的副本。
[0141]在本发明的一个实施例中,每个客户端设备1101A和1101B开始通过压缩对应的块来对每个块1130和1140进行处理。因此,在步骤a和步骤b中,对应的客户端设备可选地压缩块 1130 或 1140 以生成压缩块 1131 或 1141 (“CD1130” 或“CD1140”);即 cD1140=comp(D1140)o压缩块1131和1141相同,因为客户端设备1101A和1101B使用同样的数据和相同的压缩算法,或者没有压缩(如果情况可能的话)。
[0142]客户端设备1101A和1101B在步骤c和步骤d处分别通过根据每个对应的数据块 1130 和 1140 (“D113Q”和“D114Q”)生成加密密钥 1132 和 1142 (“K113Q”和“K114(l”)来继续。因此,在实施例中利用数据的散列函数来生成加密密钥,K114(l=hash (D1140)o此外,因为D113tl与D114tl相同且客户端设备1101A和110IB使用相同的算法来生成加密密钥,所以K113tl将与K1140相同。
[0143]在步骤e和步骤f处,客户端设备1101A和1101B使用相应的加密密钥1132和1142对压缩块1131和1141加密以生成加密数据1133和1143 (“eD1130”和“eD1140”);即eD1130=encrypt (cD1130,K1130)。加密数据1133将与加密数据1143相同,因为压缩块1131和1141相同,加密密钥1132和1142也相同。此外,客户端设备对每个对应块采用相同的加密算法。
[0144]在步骤g和步骤h处,客户端设备1101A和1101B从加密数据1133和1143导出块 ID 1134 和块 ID 1144 (“ID113。” 和 “ID114。”);即 ID113(l=hash (eD1130)。因为在每个步骤中使用的散列函数是相同的算法并且加密数据1133和1144相同,所以块ID 1134和1144也将相同。
[0145]在步骤i和步骤j处,客户端设备1101A和1101B将尝试基于块ID 1134和1144把加密数据1133和1143存储在云存储系统1135中。假设步骤j在步骤i之前发生,联合块ID 1144把加密数据1143上传到云存储系统1135。云存储系统将加密数据1143存储在与块ID 1144相对应的位置中;因此云存储系统将包含所存储的加密数据1163和所存储的块ID 1164。当客户端设备IlOlA尝试存储加密数据1133时,客户端设备1101A将确定云存储系统1135已具有相同的加密数据,因为它包含相同的存储块ID 1164。客户端设备1001A将不需要与块ID 1134联合地传送加密数据1133 ;因此,客户端设备IIOlA将通过不传送已经存在于云存储系统1135中的数据来减小上传带宽的利用。
[0146]参考图12、13、14和15,云存储网关耦合有云存储池并通过通信网络与一个或多个客户端设备进行通信,如图2所述。
[0147]图12图示根据本发明实施例的用于使云存储网关从云文件池返回文件块的方法的流程图。在框1200中,云存储网关接收到对文件块的请求。例如,云存储网关可以利用GET (获得)命令和块ID从客户端设备接收消息;此外,GET命令可以伴随有块ID列表。参考单个块ID,云存储网关在框1210处确定该文件块是否存在于位于云存储网关中的云存储池的远程缓存中。在一个实施例中,云存储网关搜索块ID的数据库以确定文件块是否存在于远程缓存中。该数据库可以是布鲁姆过滤器、散列表、链接表、关系数据库或任何其他适合的数据库。在另一实施例中,云存储网关检查文件块是否位于与块ID相关联的位置中。如果文件块不存在于远程缓存中,则云存储网关在框1215处从存储组群检索文件块。在框1290处,云存储网关将文件块返回到客户端设备。一个可能的场景是云存储网关不具有所请求的块ID。在该场景中,云存储网关将向客户端设备返回指示块ID不存在于云存储系统中的消息。
[0148]图13图示根据本发明实施例的用于使云存储网关从云存储池预取文件块的方法的流程图。在框1300中,云存储网关接收预取命令。例如,云存储网关可以从客户端设备接收具有PRE命令和块ID的消息;此外,PRE命令可以伴随有块ID列表。参考单个块ID,云存储网关在框1310处确定该文件块是否存在于位于云存储网关中的云存储池的远程缓存中。如果文件块存在于远程缓存中,则在框1320中完成该方法。如果文件块不存在于远程缓存中,则云存储网关在框1315处从存储组群检索文件块。一个可能的场景是云存储网关不具有块ID。在该场景中,云存储网关可以向客户端设备返回指示块ID不存在于云存储系统中的消息。
[0149]图14图示根据本发明实施例的用于使云存储网关检查云存储系统中的文件块的方法的流程图。在框1400中,云存储网关接收检查块ID是否存在于云存储系统中的命令。例如,云存储网关可以从客户端设备接收具有HAS命令和块ID的消息;此外,HAS命令可以伴随有块ID列表。参考单个块ID,云存储网关在框1410处确定该文件块是否存在于位于云存储网关中的云存储池的远程缓存中。如果文件块存在于远程缓存中,则该方法继续到框1420并且向客户端设备指示块ID存在于云存储系统中。如果文件块不存在于远程缓存中,则该方法继续到框1425并且确定块ID是否存在于云存储池中。例如,在一个实施例中,5存储网关保持存在于5存储池中的所有块ID列表,而另外在另一实施例中,5存储网关询问云存储池以确定该云存储池是否包含所请求的块ID。如果块ID存在,则云存储网关继续到框1420并且向客户端设备指示块ID存在于云存储系统中。如果块ID不存在,则云存储网关继续到框1430并且向客户端设备指示块ID不存在于云存储系统中。
[0150]图15图示根据本发明实施例的用于使云存储网关将文件块添加到云存储系统的方法的流程图。在框1500中,云存储网关接收将文件块存储在云存储系统中的请求,该请求包括文件块和块ID 二者。例如,云存储网关可以从客户端设备接收具有PUT命令、文件块、块ID的消息;此外,PUT命令可以伴随有文件块和块ID列表。参考单个文件块和块ID对,云存储网关在框1510处确定该文件块是否存在于云存储系统中。如果文件块已经存在于云存储系统中,则在框1550处完成该方法。如果文件块不存在于云存储系统中,则该方法继续到框1520并且验证文件块。因为文件块将可用于请求具有对应块ID的文件块的所有客户端设备,所以确保文件块中的数据有效是重要的。因此,云存储网关根据文件块生成块ID并且将生成的块ID与接收的块ID进行比较。如果生成的块ID与接收的块ID相匹配,则文件块有效并且该方法继续到框1530,否则该方法被完成并且返回到框1550。在框1530中,云存储网关将数据存储在云存储池中。该数据被存储在与块ID相关联的位置处。例如,文件块可以被存储在文件块的数据库中或者可以被存储在文件块的文件系统中。在一个实施例中,云存储系统在框1540处将文件块拷贝到云存储池的远程缓存中,以使得文件块将可用于更迅速地服务于对于该文件块的将来请求。在一些实施例中,该方法向客户端设备返回数据被存储还是没有被存储的指示。
[0151]图16图示根据本发明实施例的从云存储系统请求文件块的数据流图。客户端设备1601A通过网络1630与云存储系统1635耦合。该云存储系统1635包括与云存储池1660耦合的云存储网关1645。该云存储网关1645充当云存储池的远程缓存并且云存储池充当云存储系统数据的主要存储装置。在步骤I处,客户端设备1601A将请求一个或多个文件块的消息传送到云存储网关1645。例如,该消息可以是具有一个或多个块ID的GET消息。在步骤2处,如果文件块不存在于远程缓存中则云存储网关1645从云存储池1660取得文件块。例如,云存储网关1645向云存储池1660发出伴随有块ID列表的GET消息以便返回。在步骤3处,云存储池1660返回存在于云存储池1660中的每个所请求的文件块。否则,云存储池1660针对不存在于云存储池1660中的那些块返回指示。在步骤4处,如果那些文件块存在于云存储系统1635中则云存储网关1645向客户端设备1601A返回所请求的文件块,否则云存储网关1645针对不存在于云存储系统1635中的那些文件块返回指示。在步骤5处,客户端设备1601A从云存储系统1635接收文件块或指示。
[0152]图17图示根据本发明实施例的请求云存储池预取文件块的数据流图。客户端设备1701A通过网络1730与云存储系统1735耦合。该云存储系统1735包括与云存储池1760耦合的云存储网关1745。该云存储网关1745充当云存储池的远程缓存并且云存储池充当云存储系统数据的主要存储装置。在步骤I处,客户端设备170IA将请求由云存储网关1745从云存储池1760预取一个或多个文件块的消息传送到云存储网关1745。在步骤2处,云存储网关1745利用GET命令和已经不存在于位于云存储网关1745上的云存储池1760的远程缓存中的那些块的块ID列表来取得文件块。在步骤3处,云存储池1760返回存在于云存储池1760中的每个所请求的文件块。否则,云存储池1760针对不存在于云存储池1760中的那些块返回指示。在步骤4处,云存储网关1745将返回的块存储在云存储池的远程缓存中以使得文件块将可用于将来请求的更迅速访问。
[0153]图18图示根据本发明实施例的请求云存储系统是否具有一个或多个文件块的指示的数据流图。客户端设备1801A通过网络1830与云存储系统1835耦合。该云存储系统1835包括与云存储池1860耦合的云存储网关1845。该云存储网关1845充当云存储池的远程缓存并且云存储池I860充当云存储系统1835数据的主要存储装置。在步骤I处,客户端设备1801A将请求一个或多个文件块是否存在于云存储系统1835中的指示的消息传送到云存储网关1845。在步骤2处,云存储网关1845确定该块存在于云存储池的远程缓存中还是云存储池1860自身中。在步骤3处,对于云存储网关1845向云存储池1860询问该云存储池I860是否具有的那些块,云存储池1860返回该块是否存在于云存储池1860中的指示。在步骤4处,云存储网关1845返回每个文件块是否存在于云存储系统1835中的指
/Jn ο
[0154]图19图示根据本发明实施例的将一个或多个文件块存储在云存储系统中的数据流图。客户端设备1901A通过网络1930与云存储系统1935耦合。该云存储系统1935包括与云存储池I960耦合的云存储网关1945。该云存储网关1945充当云存储池的远程缓存并且云存储池I960充当云存储系统1935数据的主要存储装置。在步骤I处,客户端设备1901A将把一个或多个文件块存储在云存储系统1935中的消息传送到云存储网关1945。在步骤2处,云存储网关1945确定该块存在于云存储池的远程缓存中还是云存储池1960自身中。在步骤3处,对于云存储网关1945向云存储池1960询问该云存储池1960是否具有的那些块,云存储池I960返回该块是否存在于云存储池1960中的指示。在步骤4处,云存储网关1945验证不存在于云存储系统1935中的那些块。在步骤5处,云存储网关1945通过将经过验证的块传送到云存储池I960来存储该块。在步骤6处,云存储池1960将块保存在基于每个块的ID的位置处的数据存储中。
[0155]参考图20-24,每个图是示出根据一个实施例由CFS客户端模块提供的用户界面的(一个或多个)元素的屏幕截图。这些屏幕截图来自于运行Mac OS X操作系统的客户端设备。本领域技术人员将会认识到,客户端设备运行不同于Mac OS X的操作系统会提供相似的界面。
[0156]图20图示根据本发明实施例的列出存储在云存储系统中的文件的用户界面。图20是显示文件夹(例如“Common Movies”)的内容的文件浏览器窗口(例如Mac OSX FinderWindow或Windows File Explorer)的屏幕截图。文件夹“Common Movies”是安装在安装点/Users/bitcasacommon/Bitcasa/commons处的云文件系统。该用户界面示出存储在云文件系统中并且在客户端设备上可用于访问的文件集合。图20的特别有趣的方面是显示文件夹中可用的空间量。在图20底部,文件浏览器界面指示文件夹具有“17.59TB可用”的自由空间。当浏览该文件夹时,客户端设备上的操作系统为该文件夹所位于的文件系统请求可用空间。因为“Common Movies”文件夹存在于CFS中(即是安装的CFS),所以CFS客户端模块操作CFS以及操作系统之间的界面。由此,操作系统从CFS客户端模块请求可用空间。CFS客户端模块基于该请求向操作系统返回作为可用于CFS客户端模块进行返回的最大数目的自由空间的指示。由此,在图20中,CFS客户端模块没有返回基于云存储系统中剩余多少空间的可用空间量,而是作为代替返回可用于操作系统显示的最大值,其恰好是244或17.59千兆字节。当用户将文件添加到CFS时,呈现给用户和客户端设备的可用于CFS的空间量保持恒定。
[0157]图21图示根据本发明实施例的用于访问由云文件系统客户端模块提供的特征的用户界面。图21是由CFS客户端模块提供的上下文菜单的屏幕截图。用户界面向安装在客户端设备上的两个云文件系统提供快捷方式,例如“Common Movies”和“My Files”。当用户点击该快捷方式时,文件浏览器将打开并且导航以示出该CFS的内容。该上下文菜单中提供另外的选项,具体为 “Manage Mounted Files”、“Configure Bitcasa”、“BitcasaWebsite”、“0pen Bitcasa Folder”、“About Bitcasa”、以及“Exit Bitcasa”。“ManageMounted Files”命令打开诸如参考图22所述的用户界面元素。“Configure Bitcasa”命令打开诸如参考图23所述的用户界面元素。“Open Bitcasa Folder”命令允许用户查看可用于该用户在安装点处安装的一个或多个云文件系统的列表。用户然后可以选择要安装的CFS以及安装CFS的安装点。这样,用户可以具有可用于访问的多个云文件系统,而不用经常安装每个CFS。在一个实施例中,该命令打开将链接提供给可用云文件系统的网页界面。在另一实施例中,该命令打开用于选择的用户界面应用程序。在一个实施例中“AboutBitcasa”命令显示关于命名为“Bitcasa”的CFS客户端模块的信息。“Exit Bitcasa”命令指引CFS客户端模块退出CFS客户端模块。在退出之前,CFS客户端模块可以执行许多清理功能,诸如完成还没有被上传的任何文件块的上传以及卸载所有安装的云文件系统。
[0158]图22图示根据本发明实施例的由云文件系统客户端模块提供的用于管理客户端设备上的云文件系统访问的用户界面。该用户界面向客户端设备示出已知的(即当前安装或先前安装的)云文件系统的列表。该用户界面还在连接列中提供指示哪些云文件系统当前被安装以及哪些没有被安装的按钮元素。该按钮向客户端设备的用户提供迅速切换每个CFS的安装的机制。
[0159]图23图示根据本发明实施例的由云文件系统客户端模块提供的用于管理客户端设备上的本地缓存的用户界面。该用户界面为客户端设备上的用户提供设置应该向云存储系统的本地缓存分配多少客户端设备的存储系统的机制。具体来说,该用户界面提供将本地缓存存储阈值设置为客户端设备的存储系统的百分比(其被转换成存储量)的滑动条。还为用户提供保存改变、清除缓存(即从本地缓存移除文件块)、或者取消改变的按钮。
[0160]图24图示根据本发明实施例的由云文件系统客户端模块提供的用于将本地文件系统中的文件夹转换成云文件系统中的文件夹的用户界面。图24是显示文件夹(例如“bitcasacommon”)的内容的文件浏览器窗口(例如Finder Window)的屏幕截图。用户已选择被称为“Documents”的文件夹并且调用该文件夹上的上下文菜单。目前,用户悬留在被称为“Cloudify (云化)”的命令处,当该命令被激活时将促使CFS客户端模块将来自本地存储系统中的文件夹的Documents文件夹转换成如上述云存储系统中的文件夹。
[0161]图25图示根据本发明实施例的示例性计算机系统的框图。图25中的示例性计算机系统2500可以被用来实施客户端设备101A-101D、云存储网关245或者云存储池260中的条目。本领域技术人员将会认识到用于实施这些设备的其他计算机系统可以具有差不多的部件并且可以被用在本发明的实施例中。
[0162]计算机系统2500包括(一根或多根)总线2550,其与处理系统2515、电源2520、易失性存储器2525 (例如双数据率随机存取存储器(DDR-RAM)、单数据率(SDR) RAM)、非易失性存储器2530 (例如硬盘驱动器、闪速存储器、相变存储器(PCM))耦合。处理系统2515还可以耦合到处理系统缓存2510。处理系统2515可用从易失性存储器2525和/或非易失性存储器2530检索(一个或多个)指令,并且执行该指令以便实施上述操作。(一根或多根)总线2550将上述部件耦合到一起并且还耦合显示控制器2570、一个或多个输入/输出设备2580 (例如网络接口卡、光标控制(例如鼠标、跟踪球、触摸屏、触摸板等等)、键盘等等)、以及可选地一个或多个无线收发器(例如蓝牙、WiF1、红外线等等)。在一个实施例中,显示控制器2570还耦合到显示设备2575。
[0163]图26图示了示出根据本发明实施例的在转换成云文件系统中的存储之前和之后的文件系统元素的子集的用户界面。该图在框2600和框2650中示出文件系统元素(例如文件夹)的相同子集。区别是在框2600中所有文件系统元素被存储在正被操作的客户端设备的本地存储系统中。在框2650中,五个文件夹已经如参考图9所述的那样被“云化”。这些文件夹(例如Documents、Movies、Music、Pictures和Source Code)已经从本地存储系统中的存储转换成云存储系统中的存储。如所述,向用户呈现这些文件夹处于云存储系统中的指示(例如图标已经被修改以便向用户呈现指示)。此外,文件夹存在于到客户端设备的操作系统以及到用户的同一逻辑路径中。因此,需要该信息的任何程序通过如之前那样从相同位置处的文件请求数据来访问该文件,但是现在客户端模块充当访问被存储在云存储系统中的文件的中介。
[0164]图27图示根据本发明实施例的用于将文件保存在云文件系统中(包括生成文件系统清单)的方法的流程图。图27的实施例与图7的实施例类似。如关于图7所述的那样在框2700、2710、2715和2720中执行块的用户不可知加密以及文件清单的生成。此外,根据图7中所述的方法在框2725和2730中执行将文件清单ID和文件清单加密密钥存储在文件系统清单中。此外,以与参考图7所述的相同的方式在框2735中将文件清单存储在云存储系统中。
[0165]在框2740中,CFS客户端模块生成文件系统清单加密密钥、加密文件系统清单以及文件系统清单ID。在一个实施例中,利用诸如参考图5所述的用户不可知加密方法来生成这些。此外,在用户不可知去重的情况下,CFS客户端模块将加密文件系统清单存储在云存储系统中。在框2745处,CFS客户端模块生成用户清单,或者如果用户清单已经存在则添加到该用户清单。CFS客户端模块将文件系统清单加密密钥和文件系统清单ID添加到用户清单。
[0166]在一个实施例中,CFS客户端模块还将与文件系统清单相关联的元数据信息添加到用户清单。该元数据信息可以在用户清单中被存储为明文或加密文本。该元数据包括由CFS客户端模块用来实现云文件系统的使用的任何信息。例如,包括由CFS客户端模块为了备份目的而生成的文件清单的文件系统清单可以包括从其生成文件的计算机的唯一标识符。此外,元数据可以包括针对该文件系统清单的索引信息或者标识存储在云存储系统中的索引的信息。元数据还可以包括标识用户已安装云文件系统的安装点的信息。元数据允许另一 CFS客户端模块了解如何以及在哪里生成云文件系统,以使得当用户登录进入另一客户端设备时该客户端设备上的CFS客户端模块将理解如何安装用户清单中列出的云文件系统。
[0167]在框2750处,CFS客户端模块生成加密用户清单以便存储在云存储系统中。CFS客户端模块利用用户专用密钥或密码对用户清单加密。CFS客户端模块在框2760处将加密的用户清单存储在云存储系统中。将加密的用户清单联合用户存储在云存储系统中。
[0168]图28图示根据本发明实施例的由云文件系统客户端模块提供的用于在云存储系统中生成新用户的用户界面。用户界面2800示出有要由用户填充的多个信息字段。例如,用户界面2800呈现以下字段:名2805、姓2810、电子邮件地址2815、以及确认电子邮件地址2820、密码2825、以及确认密码2830、口令问题2835、口令问题答案2840、客户端设备的名称2850、以及许可协议检验栏2855。在另一实施例中,用户界面2800呈现一个或多个附加口令问题以及口令问题答案字段对。此外,用户界面2800呈现“创建新账户”按钮2860和“取消”按钮2865。
[0169]当用户填充用户界面2800中所呈现的字段并且用户点击“创建新账户”按钮2860时,CFS客户端模块利用云存储系统生成新用户。CFS客户端模块生成与新用户相关联的用户密钥。例如,CFS客户端模块可以使用日期和时间、用户界面输入、文件系统信息、或其他数据、或这些输入的组合来生成随机用户密钥。利用用户的密码对该用户密钥加密以便存储在云存储系统中。还利用一个或多个口令答案对该用户密钥加密以便存储在云存储系统中。CFS客户端模块将新用户信息传送到云存储系统以生成新用户。由此,多个加密用户密钥、一个或多个口令问题以及用户的信息(电子邮件、名以及姓)被传送到云存储系统。在另一实施例中,还传送用户的口令的散列。
[0170]在生成新用户时,云存储系统可以传送共同文件系统清单以及该共同文件系统清单的加密密钥。例如,云存储系统可以包括能够被添加到共同文件系统清单的多个公众域电影、音乐文件、图片、书或网站。CFS客户端模块接收共同文件系统清单以及共同文件系统清单加密密钥,并且将该信息添加到为该用户生成的新用户清单。CFS客户端模块利用用户的密钥加密该用户清单并且将信息上传到云存储系统。
[0171]当用户创建新云文件系统、虚拟化文件夹或者改变现有云文件系统中的数据时,用户清单将改变。当用户清单改变时,在CFS客户端模块上传该用户清单之前利用用户的密钥对其加密。此外,如果用户希望与另一用户共享文件系统,则CFS客户端模块可以生成具有文件系统清单条目的临时用户清单并且利用其他用户已知的密钥或者将要提供给其他用户的密钥对该临时用户清单加密。
[0172]图29图示根据本发明实施例的由云文件系统客户端模块提供的用于管理虚拟文件夹的用户界面。图29具有列出五个虚拟文件夹2905A-E的用户界面2900。每个虚拟文件夹都是基于存储在云存储系统中的数据(例如FSM)的文件夹。当用户登录进入CFS客户端模块时,云存储系统向CFS客户端模块提供该用户的以加密形式存在于云存储系统中的用户清单。如上所述,在用户登录进入CFS客户端模块之后利用CFS客户端模块可用的用户的密钥对用户清单加密。因此,CFS客户端模块利用用户的密钥对用户清单解密并且检索用户的云文件系统的列表,例如包括在用户清单中的FSM。在一个实施例中,每个FSM与包括专用于该FSM的一个或多个安装点以及与该FSM相关联的名称的元数据相关联。对于具有每一个都安装同一 FSM的多个客户端设备的用户,该FSM可以具有所列出的每个客户端设备共用的一个安装点或者可以包含每个客户端设备专用的安装点。
[0173]此外,与每个FSM相关联的元数据可以指示在启动时是否安装FSM。当发起FSM的安装时,CFS客户端模块可以因为数据存在于安装点位置处而确定该安装点不可用。CFS客户端模块可以以多种方式来调解该冲突。首先,CFS客户端模块可以将FSM安装在自动或由用户选择而确定的不同位置处。此外,CFS客户端模块可以自动将冲突位置处的内容添加到FSM,并且云存储系统然后从冲突位置移除数据。在这之后,CFS客户端模块可以将FSM安装到现在完全可用的冲突位置。此外,参考上述技术,CFS客户端模块可以接管文件夹的管理并且将文件夹提供为包含在CFS中的文件/文件夹以及包含在本地存储系统中的文件/文件夹的混合文件夹。[0174]用户界面2900允许用户管理这些虚拟文件夹以及对应的配置选项。用户可以选择虚拟文件夹2905A-E中的一个并且管理对于该虚拟文件夹的选项。用户可以检查框2910以选择在启动时安装所选虚拟文件夹。按钮2915允许用户移动文件夹的安装点,而文本框2920示出所选虚拟文件夹要被安装到的安装点。按钮2925允许用户标记虚拟文件夹以便本地存储。如上所述,当该按钮被按下时CFS客户端模块将标记虚拟文件夹内的文件以便进行本地缓存;即确保构成该虚拟文件夹中的文件的文件块被本地缓存并且固定该文件以防止缓存逐出。按钮2929允许用户从他的用户清单移除所选虚拟文件夹。文本区2935显示与所选FSM相关联的多个信息,诸如所有者、访问许可、文件夹大小(虚拟文件夹内的数据量)、来自本地缓存中虚拟文件夹的数据量、以及添加到用户的清单的数据。按钮2940允许用户连接和断开虚拟文件夹,即安装和卸载FSM。
[0175]图30图示根据本发明实施例的由云文件系统客户端模块执行的用于向客户端设备的操作系统提供大量可用空间的方法。图30示出两个客户端设备3001A和3001B。每个客户端设备300IA和300IB正运行操作系统3005和3015。根据客户端设备300IA和300IB,这些操作系统可以是相同的操作系统、相同操作系统的不同版本、或者不同操作系统。图30图示每个操作系统3001A和3001B确定安装的CFS中的可用空间量。操作系统3005发出对安装在客户端设备3001A上的CFS中可用空间量的请求3012。该请求由运行在客户端设备3001A上的CFS客户端模块3010处理。CFS客户端模块3010在框3030处确定操作系统使用什么数据类型来请求可用空间。例如,操作系统可以使用无符号32位整数(有时被称为长整数)来请求可用空间量。在该情况下,CFS客户端模块3035将在框3035中生成32位整数(其中的所有位都被设置成1),从而指示4,295,967,295字节的最大32位无符号值可用。在一个实施例中,已经特别针对操作系统3005来编译CFS客户端模块3010,并且因此CFS客户端模块3010已知基于以该操作系统为目标的编译的预期数据类型。在本发明的其他实施例中,CFS客户端模块3010可以根据请求3012来确定数据类型。一旦在框3035中生成最大值,就将该值返回3024到操作系统3005。
[0176]假设客户端设备3001B正运行与图20中示出的文件浏览器相对应的操作系统3015,则该操作系统已发出对“Common Movies” CFS的可用空间3022的请求。运行在客户端设备300IB上的客户端模块3020在框3030和3035中已确定数据类型并且生成最大值。在图20中,(在图20底部)示出的可用空间是17.59千兆字节,其是17,592,186,044,416字节或者2的44次幂。因此,CFS客户端模块3020已返回至少17.59千兆字节的最大值。例如,CFS客户端模块可能已返回由操作系统示出给用户的17.59千兆字节的最大值,或者CFS客户端模块可能已生成大于17.59千兆字节的最大值,在显示给用户之前操作系统将该最大值缩短。
[0177]根据本发明实施例的用于将可用空间量提供给客户端设备的操作系统的另一这种方法是确定CFS客户端模块可以返回给操作系统的最大区块大小以及最大可用区块数目。因此,在请求确定可用空间量时,CFS客户端模块返回最大区块大小允许的最大区块数目的指示以便指示可用空间。
[0178]如果用户将他们的密码输入到安全网络表单中并且服务器即时对所需数据解密以便在网络会话期间显示,则可以临时允许基于服务器的数据解密和访问。图31图示根据本发明实施例的由网络文件访问门户和客户端设备访问的云存储系统。在图31中,云存储系统3135与网络3130耦合。网络3130向具有多个设备(诸如客户端设备3101A-3101B和网络文件访问门户3170)的云存储系统提供连接性。
[0179]客户端设备3101B被示为如这里所述的那样运行CFS客户端模块。假设客户端设备的操作系统提供预览功能,则客户端设备3101B能够预览安装在客户端设备3101B上的CFS中存储的文件。此外,客户端设备3101B可以打开来自所安装的CFS的文件并且将文件从CFS拷贝到本地存储系统。如上所述,CFS客户端模块通过向云存储系统3135发出一系列命令(被示为消息E)来向客户端设备3101B提供该功能。消息E包括用户请求的获得(get),即基于所述用户访问的数据而发出的从云存储系统获得块的命令。在客户端设备3101B上运行的CFS客户端模块还可以发出预测性获得(get)命令,即基于CFS客户端模块预测用户很快将访问的数据而发出的从云存储系统获得块的命令。CFS客户端模块还可以向云存储系统发出预取命令,其通知云存储系统应该准备向客户端设备3101B发送特定的一个或多个块。消息F被示为从云存储系统到客户端设备,该消息F包括由运行在客户端设备3101B上的CFS客户端模块发出的(用户请求的或预测性)获得命令所请求的加密块。
[0180]网络文件访问门户3170为用户提供在安装或不安装CFS客户端模块的情况下访问客户端设备3101A上的他的云文件系统中的文件的机制。例如,用户可以到达公共终端或者共享计算机并且希望在不登陆进入CFS客户端模块或者可能不安装CFS客户端模块的情况下从他的CFS访问一个或多个文件。网络文件访问门户3170向用户提供通过经由网络界面呈现的网络文件管理访问他的数据的选项,代价是将他的密码和用户密钥暴露给网络文件访问门户3170。
[0181]由此,用户开始客户端设备3101A上的网络浏览器会话并且导航到由网络文件访问门户3170提供的登陆页面。向用户呈现利用他的登陆信息(即用户姓名/电子邮件和密码)登陆的认证页面。此外,可以向用户呈现他们必须同意的服务条款,诸如同意网络门户的使用需要将他们的用户密钥和密码暴露给网络文件访问门户3170以便允许网络文件访问门户3170访问用户的加密用户清单。
[0182]在利用网络文件访问门户3170进行认证时,网络文件访问门户3170从云存储系统3135检索用户的用户清单和用户的加密用户密钥。网络文件访问门户3170使用用户的密码来对用户的密钥解密。网络文件访问门户3170现在可以利用用户的密钥对用户的用户清单解密。如上所述,用户清单包括可用云文件系统的列表,例如FSM和对应元数据连同解密每个FSM的对应加密密钥的列表。使用CFS的列表,网络文件访问门户3170可以生成基于网络的用户界面,其允许用户研究他的CFS并且定位用户希望访问的文件。
[0183]网络文件访问门户3170通过充当通过缓冲区、中介来向用户提供安全性,但是不保持云存储系统3135的未加密本地缓存。根据当前的安全性关注,网络文件访问门户3170甚至可能不会提供来自云存储系统3135的加密块的本地缓存。因此,网络文件访问门户3170运行CFS网络访问模块,其在许多方面是修改的CFS客户端模块。CFS网络访问模块向云存储系统3135发出消息A,其包括用户请求的获得以及可选的预取命令。根据安全性模块,CFS网络访问模块甚至不会向云存储系统发出预测性获得,企图使位于网络文件访问门户3170上的用户数据量最小化。就与客户端设备3101B的通信来说,云存储系统3135将加密块传达给网络文件访问门户3170。
[0184]当用户浏览CFS内的文件夹时,用户最终将到达他希望访问或下载的文件。当选择网络文件浏览器中的文件时,网络文件访问门户将从该CFS的FSM检索对应的文件清单并且利用存储在FSM中的加密密钥对FM解密。如上所述,这将把包括该文件、对应元数据以及加密密钥的文件块列表给予网络文件访问门户3170。使用该信息,网络文件访问门户3170生成网络文件访问门户3170上的文件的解密版本并且生成信息屏幕,该信息屏幕可以包括根据要访问的文件类型的嵌入预览。该信息屏幕还向用户提供下载文件的机会。因此,客户端设备3101A向网络文件访问门户3170发出具有对文件夹和文件数据的请求的多个消息C。网络文件访问门户3170向网络文件管理器发送包括解密文件夹和文件信息的消息D。重要的是要注意,对消息D中的解密文件夹和文件信息的参考指的是没有根据本发明实施例中描述的加密原理来对从网络文件访问门户3170传送到客户端设备3101A的信息进行加密的事实。然而,网络浏览器和服务器采用传统技术,例如安全超文本传输协议(“ HTTPS ”),其根据这些技术提供安全通信。
[0185]图32图示根据本发明实施例的由访问云存储系统的网络文件访问门户提供的网络文件浏览器界面。网络文件访问门户向用户呈现界面3200。当网络文件访问门户以云存储系统成功认证用户时,向用户呈现该用户界面3200。如参考图31所述的那样,网络文件访问门户使用用户的用户密钥来检索和解密包含在用户的用户清单内的信息。界面3200包括多个用户界面元素,诸如帮助图标、邮件图标、用户管理图标和设置图标。此外,网络文件访问门户向用户呈现搜索框3230。在将文本输入到搜索框3230中时,网络文件访问门户递归地遍历文件和子文件夹以找出与输入在框3230中的搜索准则相匹配的文件。搜索结果被作为网络文件浏览器3240呈现给用户。当用户登录进入用户界面3200时,向用户呈现网络文件浏览器3240中的云文件系统的列表。当用户选择CFS时,网络文件访问门户确定包含在CFS中的文件和文件夹并且在网络文件浏览器3240中以层级方式将那些呈现给用户。当用户选择网络文件浏览器3240中的文件时,网络文件访问门户从云存储系统检索对应FM并且使用位于FSM内的加密密钥对FM解密。使用FM内的信息,网络文件访问门户能够从云存储系统检索构成所选文件的加密文件块并且使用位于FM中的加密密钥来对那些块解密。使用该信息,网络文件访问门户重构该文件,生成与文件类型相对应的预览区3220、文件信息区3250、以及下载按钮3260。
[0186]图33图示了示出根据本发明实施例的各数据结构之间的关系的框图。以由水平虚线分开的两个部分示出图33。图33的上半部(A半部)示出存储在云存储系统3310上的示例性数据块,而图33的下半部(B半部)示出那些块包括的数据结构以及这些数据结构的关系。
[0187]在A半部中,在用户3302登陆并且安装三个CFS的情况下,客户端设备330IA运行CFS客户端模块。第一 CFS被示为安装在/home/docs的安装点处的FSM A。第二 CFS被示为安装在/home/movies的安装点处的FSM B。第三CFS被示为安装在/home/music的安装点处的FSM C0用户清单3320被示为与三个FSM块(FSM块A 3335A、FSM块B 3335B和FSM 块 C 3335C)有关。FSM 块 A 3335A 与三个 FM 块(FM 块 A 3340A、FM 块 B 3340C 和 FM块B 3340C)有关。FSM块B 3335B与两个FM块(FM块B 3340C和FM块D 3340D)有关。FSM块C 3335C与两个FM块(FM块E 3340E和FM块F 3340F)有关。FM块A 3340A与三个文件块(文件块A 3345A、文件块B 3345B和文件块C 3345C)有关。FM块B 3340B与两个文件块(文件块C 3345C和文件块E 3345E)有关。FM块C 3340C与一个文件块(文件块D3345D)有关。FM块D 3340D与两个文件块(文件块E 3345E和文件块G 3345G)有关。FM块E 3340E与三个文件块(文件块G 3345G、文件块H 3345H和文件块I 33451)有关。FM块F 3340F与一个文件块(文件块F 3345F)有关。
[0188]如图33的半部A中所示,一些FM块(例如FM块C 3340C)与多于一个FSM有关。此外,一些文件块(例如文件块C、文件块E和文件块G)与多于一个FM块有关。这可以被解释成:由FSM表示的CFS可以包含由FSM中的FM表示的同一文件,作为另一 CFS。在这种情况下,CFS A和CFS B 二者包含由FM C表示的文件。在同一个中,如果多于一个文件包括共同数据块,则这些文件可以包含相同的文件块。在图33中,由FM块A 3340A和FM块B 3340B表示的文件包括由文件块C 3345C表示的共同数据块。由FM块B 3340B和FM块D 3340D表示的文件包括由文件块E 3345E表示的共同数据块。由FM块D 3340D和FM块E 3340E表示的文件包括由文件块G 3345G表示的共同数据块。
[0189]在半部A示出存储在云存储系统中的块以及这些块彼此如何相关的同时,半部B示出这些块包括的数据结构以及这些数据结构的关系。在半部B中,示出在同一用户3302登陆进入CFS客户端模块并且将相同的CFS安装在相同位置处的情况下的同一客户端设备3301A。用户清单3320包括与客户端设备3301A相关联的简档,其指示该特定客户端设备330IA上的CFS客户端模块应该如何处理由FSM表示的CFS。在这种情况下,指示FSM A被安装在/home/docs处,FSM B被安装在/home/movies处,以及FSM C被安装在/home/music处。
[0190]图33 的半部 B 示出与三个 FSM (FSM A 3355A、FSM B 3355B 以及 FSM C 3355C)有关的用户清单 3320。FSM A 3355A 与三个 FM (FM A 3360A、FM B 3360B 和 FM C 3360C)有关。FSM B 33558与两个?]?斤]\1 C 3360C 和 FM D 3360D)有关。FSM C 3355C 与两个 FM(FM E 3360E 和 FM F 3360F)有关。每个 FM A-F 3360A-F 与文件 A-F 3365A-F 有关。
[0191]图34图示示出根据本发明实施例的在两个客户端设备上使用的单个用户清单的各数据结构之间的关系的框图。如图33中所示,图34示出在同一用户3402登陆进入CFS客户端模块中的情况下的同一客户端设备3401A,并且示出相同的CFS被安装在相同的位置处。用户清单3430包括与客户端设备3401A相关联的简档(简档3401A),其指示该特定客户端设备340IA上的CFS客户端模块应该如何处理由FSM表示的CFS。在这种情况下,指7]\ FSM A被安装在/home/docs处,FSM B被安装在/home/movies处,以及FSM C被安装在/home/music处。在图34中图示了图34中示出的用户清单、FSM、FM以及文件之间的相同示例性关系。
[0192]图34还示出同一用户3402登陆进入的第二客户端设备3401B。用户清单3430还包括指示客户端设备3401B被如何配置成利用用户3402的用户清单3430的简档信息(简档340IB)。在图34中,客户端设备340IB被示为将FSM B安装在与客户端设备340IA所使用的相似的/home/movies的安装点处。客户端设备3401B被示为将FSM C安装在与客户端设备3401A不同的安装点处;具体来说,FSM C被安装在/share/music的安装点处。如图34中所示,用户3402已经以使得FSM A不安装在客户端设备3401B上的这种方式来选择或配置用户清单3430。如参考图29所示,用户3402可以在稍后的时间利用管理屏幕将FSM A安装在期望安装点处。
[0193] 图35图示了示出根据本发明实施例的在两个客户端设备上使用的两个用户清单的各数据结构之间的关系的框图。
[0194]如图33中那样,图35示出在同一用户3502登陆进入CFS客户端模块中的情况下的同一客户端设备3501A,并且示出相同的CFS被安装在相同的位置处。用户清单3530包括与客户端设备3501A相关联的简档(简档3401A),其指示该特定客户端设备3501A上的CFS客户端模块应该如何处理由FSM表示的CFS。在这种情况下,指示FSM A被安装在/home/docs处,FSM B被安装在/home/movies处,以及FSM C被安装在/home/music处。在图33中图示了图35中示出的用户清单、FSM、FM以及文件之间的相同示例性关系。
[0195]图35还图示出用户3503登陆进入的第二客户端设备3501B。用户3503具有用户清单3521,其指示用户具有应该基于简档3501B安装在C:\PICTURES的安装点处的FSM D3525D。该 FSM D 3525D 与四个 FM (FM D 3530D、FM G 3530G、FM H 3530H 和 FM I 35301)有关。FM D、G-1 3530D、G-1分别与文件D、G-1 3535D、G-1有关。如图35中所示,用户3502具有还与FMD 3530D相关联的FSM B 3525B。由此,很显然的是,尽管两个用户可能具有独立的FSM,但这些FSM可以包括同样的文件;例如在两个用户保存来自同一源的同一文件或者独立地生成同一同样的文件(这样的可能性很小)的情况下。应该注意到,FM基于文件的内容而不是文件的名称或位置,因此两个用户可以具有在他们对应的FSM中带有不同名称和/或位置但是解析到同一 FM的相同文件。
[0196]图35在点A处图示FSM B 3525B已经由用户3502和用户3503共享。当多用户(即直播)以与参考图7所述的相类似的方式共享时,用户3502已选择共享FSM B 3525B。因此,由FSM B 3525B中的用户3502或3503做出的改变将在两个客户端设备3301A和3301B中反应。用户3503已将FSM B 3525B添加到他的用户清单3521,其中简档3503指示FSMB 3525B应该被安装在C: \M0VIES处。
[0197]点B示出用户3502与用户3503共享FSM C 3525C的快照。如果FSM C 3525C是包括基础FSM以及多个改变(其包括FSM的当前版本)的直播FSM,则客户端设备3501A上的CFS客户端模块生成FSM C 3525C的当前副本并且将该副本存储在云存储系统中。客户端设备350IA上运行的CFS客户端模块生成包括用于客户端设备350IB上运行的CFS客户端模块的标识信息和加密信息的信息以便利用与用户3503共享的FSM C 3525C的副本。
[0198]由此,用户3503接收标识FSM C 3525C的快照的信息并且将CFS安装在C: \MUSIC的安装点处。因为FSM是FSM C 3525C的快照并且不是FSM的直播共享,所以由用户3502或用户3503做出的任何改变不会在其他用户的客户端设备上反映;即改变创建相异的FSM。由此,FSM C 3525C的快照被示为添加有与文件J 3535J相关联的FM J 3530J的FSM E3525E。如先前所提到的,因为这是快照共享,当其中的任何数据改变时,FM J 3530J的添加没有被反映在FSM C 3525C中,因为两个FSM C和E是相异的。本领域技术人员将显而易见的是,文件的添加、文件的删除和对文件的修改所有都产生相异的FSM。
[0199]快照共享允许用户容易地与另一云存储系统用户共享文件。例如,用于共享文件的现有网络服务的用户需要用户打开网络浏览器会话或者其他客户端应用程序。然后用户必须发起文件上传过程并且导航到用户的客户端设备上的期望文件夹。然后用户选择期望文件并且发起上传。一旦上传完成,用户就可以选择与接收链接以导航到上传文件的另一用户共享所选文件,并且可以选择查看和/或下载那些文件。
[0200]在快照共享的情况下,用户打开他们的操作系统的文件浏览器并且导航包含他们希望共享的文件的文件夹。用户发起期望文件夹上的上下文菜单并且发起与另一用户共享该文件夹的命令;例如图24中图示的上下文菜单中示出的“Share with...”命令。然后用户选择云存储系统的另一用户来共享文件夹。如果文件夹是CFS的安装点,则CFS客户端模块与其他用户共享FSM ID和FSM加密密钥。如果文件夹不是CFS的安装点,则CFS客户端模块可以生成包括所选文件夹内包含的文件和文件夹的FSM。在一个实施例中,CFS客户端模块利用共享文件夹的用户已知或者生成的密钥对FSM ID和FSM加密密钥加密。因此,共享文件夹的接收会接收到在他的方向上添加到该用户的用户清单的FSM ID和FSM加密密钥。该接收然后可以选择将共享FSM安装在他们的客户端设备上并且通过访问他们的操作系统内的文件和文件夹的正常方式来访问共享文件和文件夹。
[0201]图36图示根据本发明实施例的由用于向用户提供文件、文件夹和文件系统的恢复选项的CFS客户端模块提供的界面。图36包含文件夹X 3600,在用户登录进入CFS客户端模块中的情况下该文件夹X 3600包括存在于客户端设备中的文件A 3605。CFS客户端模块被配置成当客户端设备的用户保存对文件夹X和文件A的改变时保持文件夹X 3600的版本以及文件A 3605的版本的备份。用户发起选择文件夹或文件上的上下文菜单3610并且选择恢复命令。该恢复命令可以提出单独的恢复命令屏幕并且呈现版本菜单3615。图36被分成两半,其中顶部A示出根据本发明实施例的版本化文件的集合,并且底部B示出根据本发明实施例的版本化文件夹的集合。
[0202]在半部A中,图36示出与文件夹X FSM A 3625A相关联的用户清单3620。FSM A3625A包括与文件A相关联的条目以及将文件A与该文件的保存版本相链接的元数据。在图36中,版本1-G与FM A-FM G 3630A-G相关联。每个FM A-G 3630A-G与存储在云存储系统中的文件的版本(即文件A版本1-G 3635A-G)相关联。
[0203]在半部B中,图36示出与文件夹X 3600相关联的用户清单3620。文件夹X是由在用户清单3620中链接的FSM表示的CFS。用户清单3620包括到文件夹X 3600的链接以及与文件夹X 3600相关联的元数据,其包括表示文件夹X的保存版本的多个FSM。这被示为文件夹X版本1-C FSM A-B 3625A-C。每个FSM 3625A-C被链接到当保存文件夹X的版本时文件夹X 3600中存在的FM。文件夹X版本I FSM A 3625A被链接到三个文件:FMA 3630A、FM H 3630H以及FM I 36301 ;每个都与对应文件(文件A版本I 3635A、文件B版本I 3635H以及文件C版本3 36351)相关联。文件夹X版本2 FSM B 3625B被链接到两个文件:FM I 36301和FM B 3630B ;每个都与对应文件(文件C版本3 36351以及文件A版本2 3635B)相关联。文件夹X版本C FSM C 3625C被链接到三个文件:FM I 36301、FM B3630B, FM G 3630G ;每个都与对应文件(文件C版本3 36351、文件A版本2 3635B、文件A版本G 3635G)相关联。
[0204]因此,同一文件夹和文件的多个版本可以被列出在FSM中并且将版本与每个所保存的文件和文件夹相关联;此外CFS客户端模块可以关联从其保存文件或文件夹的客户端设备的标识符以供将来恢复。
[0205]图37图示了示出存储在本地存储系统中的数据到存储在云存储系统中的数据的转变的框图。该图被分成两半,顶部半部A示出存储在本地存储系统中的两个文件夹二者并且底部半部B示出存储在本地存储系统中的一个文件夹和存储在云存储系统中的一个文件夹。[0206]在这两个半部中,图37示出在客户端设备上提供本地存储系统的本地驱动3700,并且在那里存在向用户呈现具有用户可以访问的文件夹和文件的客户端设备的本地文件系统3710。在这两个半部中,用户访问文件夹A中的文件和文件夹B中的文件。
[0207]在顶部半部A中,来自文件夹A和B的数据被存储在本地驱动3700上的本地存储系统中。客户端设备上的CFS客户端模块保持包括备份FSM 3720的用户清单3715。CFS客户端模块创建本地存储系统中的所有文件的自动备份,并且因此将文件夹A和B的文件和文件夹添加到云存储系统3705。因此,用户清单3715与备份FSM 3720相关联,该备份FSM3720与多个FM、文件夹A文件清单3730以及文件夹B文件清单3735相关联;每个文件清单与对应文件文件Al-AX 3740和Bl-BX 3750相关联。
[0208]在底部半部B中,CFS客户端模块将文件夹B从具有自动备份的本地存储系统中的存储转变到不具有本地存储的云存储系统3705中的存储;文件夹B的转变可以是响应于本地驱动3700用完驱动空间而自动的或者可以由用户发起。本地驱动3700具有包括本地存储系统的区段和包括云存储系统的本地缓存的区段。因为文件夹A仍在本地存储系统中,所以文件夹A的所有数据存在于本地驱动3700上。然而,因为文件夹B现在存储在云存储系统中,所以仅包括文件BI和文件B7的缓存数据的一部分存在于云存储系统的本地缓存中。文件夹B数据的本地副本已经被移除并且CFS客户端模块已经安装云FSM 3760,在其地方包括文件夹B条目。云FSM 3760包括所有文件夹B文件清单3735 ;其已经存在于云存储系统中。该转变极其迅速并且对客户端设备的用户是透明的,因为包括文件夹B的信息已经作为自动备份的一部分存在于云存储系统3705中。
[0209]图38图示根据本发明实施例的从本地存储系统中的存储到云存储系统中的存储的转变的方法的框图。在框3800中,CFS客户端模块备份云存储系统中的本地存储系统。在框3810中,CFS客户端模块发起文件夹到云存储系统中的存储的转变。例如,CFS客户端模块可以识别由于磁盘空间的原因客户端设备运行很慢或者没有理由将它们存储在客户端设备上的某些文件或一些频繁访问的文件。在框3820中,CFS客户端模块确定允许用户选择虚拟化选择(即文件夹)或驱动到云存储系统的转变,或者生成所选的虚拟化本身。在框3840中,CFS客户端模块从提供给用户的浏览器用户界面元素接收虚拟化选择。在框3840中,CFS客户端模块为本地存储系统中的文件夹和驱动自动确定虚拟化选择。在框3850中,CFS客户端模块为虚拟化选择生成FSM并且在框3860中将该FSM添加到用户的用户清单。在框3870中,CFS客户端模块从本地存储系统移除虚拟化选择并且在框3880中将FSM安装在虚拟化选择在虚拟文件系统中所位于的位置处。
[0210]图39图示了示出根据本发明实施例的从云存储系统访问数据的多个用户和机器的框图。图39示出包括多个云文件系统的云存储系统3900。图39示出四个客户端设备3905,3910,3915和3920。每个客户端设备包括本地驱动和OS文件浏览器;每个本地驱动包括用于本地存储系统的一部分和用于云存储系统的本地缓存的一部分。
[0211]客户端设备3905是与用户X相关联的第一机器,OS文件浏览器示出OS文件浏览器A-D中的四个文件夹。文件夹A没有被存储在云存储系统中并且该文件夹的所有数据被示出在本地存储系统中。文件夹B-D被存储在云存储系统3900中并且每一部分B’、C’和D’被示出在云存储系统的本地缓存中。文件夹B和文件夹C源自客户端设备3905处并且从该设备推入到云存储系统中。文件夹D是由云存储系统3900的服务供应商提供给该供应商的所有用户的共同数据。因此,从云存储系统3900推入文件夹D,此外包含在文件夹D中的所有数据总计为大小D。
[0212]客户端设备3910是与用户X相关联的第二机器,OS文件浏览器示出OS文件浏览器中的两个文件夹:文件夹F和文件夹B。文件夹F没有被存储在云存储系统中,并且该文件夹中的所有数据被示出在本地存储系统中。文件夹B源自客户端设备3905处并且因此从云存储系统3900推入该文件夹B,并且该数据的一部分位于云存储系统的本地缓存中。客户端设备3910还可以将信息添加到文件夹B并且因此将必须把该数据推送到云存储系统3900,其将改变的FSM推送到客户端设备3905。本地驱动能够存储数据量大小X2。
[0213]客户端设备3915是仅与用户Y相关联的机器。用户Y以某种方式与用户X相关联。OS文件浏览器示出OS文件浏览器中的三个文件夹:文件夹G、文件夹D和文件夹C。在图39中的点D处,用户X与用户Y共享文件夹C。因此,已经将文件夹C从云存储系统3900推送到客户端设备3915 ;仅文件夹C的部分C’存在于客户端设备3915上的云存储系统的本地缓存中。文件夹G仅包括在客户端设备3915的本地存储系统中,而从云存储系统3900推送作为所有用户可用的共同数据的文件夹D。本地驱动能够存储数据量大小Y1。
[0214]客户端设备3920是仅与用户Z相关联的机器。用户Z与用户X和用户Y无关。OS文件浏览器示出OS文件浏览器中的两个文件夹:文件夹H和文件夹D。文件夹H被存储在具有云存储系统3900中的备份的客户端设备3920的本地存储系统中。从云存储系统3900推送作为所有用户可用的共同数据的文件夹D。因此,客户端设备3920将文件夹H的数据推送到云存储系统并且从云推送文件夹D的数据。本地驱动能够存储数据量大小Zl。
[0215]客户端设备的本地驱动能够存储数据的指定数据量大小X1、大小X2、大小Yl和大小Z1。因为在任何给定时间仅需要来自文件夹D、文件夹C和文件夹B的数据的一部分,所以客户端设备不需要能够将所包括的所有数据存储在云存储系统内。由此,大小D可以比该大小Xl更大,即使用户X可以在不手动移除文件以为附加数据腾出地方的情况下访问文件夹D中的所有数据。事实上,大小D可以是大小Xl的100倍,是大小Xl的1000倍,或者甚至是大小Xl的1,000, 000倍。大小D可以比客户端设备3905上的操作系统所支持的更大。
[0216]图40图示了示出根据本发明实施例的要被检索的文件块的优先级队列的框图。在图40中,客户端设备与云存储系统4015耦合。客户端设备正访问存储在CFS中的两个文件,文件A 4001和文件B 4002。文件A 4001包括加密文件块4003A-4003N的集合。而文件B 4002包括加密文件块4004A-4004F的集合。在图40中,客户端设备具有本地驱动4000,其包括用于本地存储系统的一部分和用于云存储系统的本地缓存的一部分。云存储系统的本地缓存具有来自4001的缓存加密文件块,具体来说块4003A、4003B、4003C、4003E、4003G、和 4003N。
[0217]以缩编形式图示文件A的4001的加密文件块4003A-4003N的集合(示出块4003A-4003G以及4003N),然而,块4003D和4003F被阴影化以指示那些块不存在于云存储系统的本地缓存中。文件B的4002的加密文件块4004A-4004F的集合中的每一个被图示为阴影框以指示所有这些块不存在于云存储系统的本地缓存中。云存储系统被图示为包括文件A 4001和文件B的4002的加密文件块4003A-4003N以及4004A-4004F的集合。
[0218]图40图示两个文件访问时间线,文件访问A 4020A和文件访问B 4020B。在两个时间线之间,加密文件块检索队列4035被示出有与时间线上的时间点相对应的队列内容。点I 4041在文件访问A 4020A上被图示为对加密块4003D的访问。因为云存储系统的本地缓存不包含加密块4003D,所以在客户端设备上执行的CFS客户端模块将在加密文件块检索队列4035中对加密块4003D的检索排队。作为排队的一部分,CFS客户端模块将如参考图8所述的那样确定加密块4003D的优先级水平。例如,如图40中所示,可以确定被排队的加密块和被访问的加密块之间的距离Λ,并且该距离可以被用来确定优先级水平。在这种情况下,被访问的块4003D与被排队的块4003D相同,并且因此Λ是零且加密块4003D被给予高优先级。
[0219]点2 4042在文件访问A 4020Α上被图示为将在未来某一时间发生对块4003E-4003G的访问的预测,并且由此CFS客户端模块确定缓存那些加密块。因为加密块4003Ε和4003G已经在云存储系统的本地缓存中,所以CFS客户端模块仅需要将对加密文件块4003F的检索放置在加密文件块检索队列4035中。块4003F的优先级水平基于它们两个距离被访问的块4003D的其Λ。
[0220]点3 4043在文件访问B 4020Β上被图示为对加密块4004Α的访问。因为云存储系统的本地缓存不包含加密块4004Α,所以客户端设备上执行的CFS客户端模块将在加密文件块检索队列4035中对加密块4004Α的检索排队。向对加密块4004Α的检索给予比块4003F的优先级水平更高的优先级水平,因为4004Α的Λ为O而4003F的Λ为2。
[0221]点4 4044在文件访问B 4020Β上被图示为将在未来某一时间发生对块4004Β-4004Ε的访问的预测,并且由此CFS客户端模块确定缓存那些加密块。因为加密文件块4004Β-4004Ε都不在云存储系统的本地缓存中,所以CFS客户端模块根据那些加密块4004Β-4004Ε的优先级水平与剩余块的优先级水平的比较将对每个加密块4004Β-4004Ε的检索放置在加密文件块检索队列4035中。因此,加密文件块检索队列4035具有以下面的检索优先级顺序列出的块:4003D (Λ=0)、4004Α (Λ =0)、4004Β (Λ =1)、4003F (Λ =2)、4004C (A=2)、4004D (Λ =3)、以及 4004Ε (Λ =4)。
[0222]在预测性地检索加密文件块的同时对加密文件块的检索进行优先级排序具有在确保很快需要的数据将在稍后需要的数据之前可用的同时允许CFS客户端模块获得可能很快被访问的数据的优点。如上文参考图8所述的那样,其他优先级系统可以被实施,诸如基于先前的文件块访问而在追踪下一文件块访问时对优先级打基础。
[0223]图41图示根据本发明实施例的地理上分布的云存储池。图41图示通过网络4130与云存储系统4150耦合的客户端设备4101Α。该云存储系统4150包括通过网络4132与两个云存储池4160Α和4160Β耦合的云存储网关4155,网络4130和网络4132方式二者是公用网络(诸如因特网)或者私用网络的一些集合。每个云存储池4160Α和4160Β被设计成主要服务特定地理区域,在这种情况下,云存储池4160Α对区域A服务而云存储池4160Β对区域B服务。在图41中,客户端设备4101Α可以被认为位于区域A中,其中云存储网关4155是区域A客户端设备访问云存储系统4150的访问点。因此,当客户端设备将数据保存在云存储系统4150中时,云存储网关4155将该数据保存到区域A云存储池4160Α。
[0224]在图41中,客户端设备4101Α正访问与文件A相对应的加密文件块集合。文件A包括在文件A清单(FM-A)4170中列出的三个文件块。FM-A 4170对于作为文件A的一部分的每个加密文件块保持块标识符(CHUNK-1D列)、块加密密钥(CHUNK-ENC-KEY列)、以及原始区域(OR1-REGION)的列表。如先前图中所述的那样,CHUNK-1D和CHUNK-ENC-KEY字段保持数据。0R1-REG10N字段保持在其中对应文件块被存储在云存储系统中的区域的标识符,因此当客户端设备4101A将云存储系统4150中还没有存在的数据添加到云存储系统4150时,对于该数据的0R1-REG10N将是区域A,而将利用区域B的0R1-REG10N来标记来自位于区域B中的另一客户端设备的数据。
[0225]在这种情况下,客户端设备4101A在步骤4180处检索块ID-1直到ID_3。请求从云存储网关4155返回那些块ID-1直到ID-3是必要的,该请求包括每个块的0R1-REG10N。云存储网关4155具有区域A云存储池4156中的块的列表。因此,云存储网关4155可以确定块ID-1和ID-2在区域A云存储池4160A中,而块ID-3不在。云存储网关4155然后可以在步骤4181中从区域A云存储池4160A检索块ID-1和ID2。使用包括在对块ID-3的请求中的0R1-REG10N,云存储网关4155然后可以在步骤4182中从区域B云存储池4160B检索块ID-3。块ID-3然后可以在步骤4183中被存储在区域A云存储池4160A中。块ID-1直到ID-3可以被返回到客户端设备4101A,尽管不是所有的块都原始存储在对于该客户端设备的区域云存储池中。这呈现出以下优点:将客户端设备的数据存储在单独存储池中的不同区域中以使得可能被访问的数据、由客户端设备添加到该区域中的数据位于对于区域的云存储网关附近。同时,启用云存储网关以便从该云存储网关区域中的客户端设备应该请求那些块的其他区域检索块。由此,对于各个区域的云存储池不需要持续地使彼此之间的数据同步。
[0226]图42图示根据本发明实施例的由云文件系统客户端模块提供的用于访问虚拟文件夹的快照的用户界面。图42示出用于显示虚拟文件夹的内容的相同用户界面窗口 4200A和4200B的两个显示。在4200A中,用户界面窗口正示出包括虚拟文件夹的示例性内容(SP命名为Taxes 2010和Taxes 2011的两个子文件夹)的虚拟文件夹的最当前快照(D)。沿着用户界面4200A的底部是时间线4210,其呈现用户可以选择被安装和访问的虚拟文件夹的四个快照(A-D)。例如,CFS客户端模块可以如上所述周期性地创建虚拟文件夹的快照。在另一实施例中,可以在多个用户之间共享虚拟文件夹并且一个用户的改变会创建所有其他用户可访问的快照。用户界面4200B的第二显示示出用户何时选择虚拟文件夹的快照B。在这种情况下,CFS客户端模块安装与快照B相对应的虚拟文件夹的FSM并且向操作系统通知已发生对虚拟文件夹的修改以使得向用户更新虚拟文件夹的内容。在这种情况下,虚拟文件夹的快照B不包含子文件夹Taxes 2011,所以仅关于快照B示出子文件夹Taxes2010。该特征允许用户容易地在虚拟文件夹的快照之间导航以访问文件和文件夹的过去版本。
[0227]图43图示根据本发明实施例的由云文件系统客户端模块提供的用于将本地文件系统中的文件夹转换成云文件系统中的文件夹的用户界面。用户界面窗口 4305是显示文件夹(包括子文件夹“Music”4300)的内容的文件浏览器窗口(即Finder Window)。用户界面窗口 4310是CFS客户端模块界面窗口,其示出虚拟文件夹的列表和“Movies”和“Documents”连同将位于本地存储系统中的文件夹拖到4310界面窗口以云化该文件夹的指令4315。图43图示用户将子文件夹4300从用户界面窗口 4305拖动到CFS客户端模块界面窗口 4310。在将子文件夹4300释放在用户界面窗口 4305上时,CFS客户端模块云化子文件夹4300,从而创建安装在子文件夹4300所位于的同一位置中的“Music”虚拟文件夹4320。因此,“Music”虚拟文件夹4320被示出在用户界面窗口 4305和CFS客户端模块界面窗口 4310中,从而指示在子文件夹4300被云化之后“Music”虚拟文件夹4320在那些界面窗口中的存在。
[0228]图44图示根据本发明实施例的与其他安装的文件系统相比的所安装的云文件系统的前述方面。图44被示为分成三个部分,在每个部分中,文件夹(文件夹X)在文件浏览器中被呈现给用户,并且文件夹X包含两个文件文件A和文件B。在顶部部分中,文件夹X被存储在客户端设备上的本地存储系统中。在中间部分中,文件夹X被存储在安装于客户端设备上的网络文件系统中。在底部部分中,文件夹X被存储在云文件系统中。
[0229]顶部部分不出包括根文件系统4405A的本地存储系统4405,该根文件系统4405A包括用于访问客户端设备上的文件和文件夹的文件系统层级。文件系统层级被包括在描述到达各种文件和文件夹的路径的文件系统条目集合4406中,该文件系统条目集合4406包括对于文件夹X、文件A和文件B的条目。此外,根文件系统4405A包括文件A和文件B的数据。
[0230]与顶部部分一样,中间部分不出包括根文件系统4415A的本地存储系统4415,该根文件系统4415A包括用于访问客户端设备上的文件和文件夹的文件系统层级。文件系统条目4416中的一个是指示文件夹X是安装的网络文件系统的条目。为了访问文件夹X,NFS模块4410传达包括指示包括文件A和文件的NFS的内容的文件系统条目的网络附接的存储4420。NFS模块4410被示为与FS条目4416耦合以指示当文件夹X被访问时,NFS模块4410处理该访问。因此,当客户端设备浏览文件夹X时,NFS模块4410与NAS 4420通信以确定文件夹X的内容。此外,NAS 4420包含包括文件A和文件的数据,因此当用户访问中间部分中的文件A或文件B时,NFS客户端模块4410从NAS 4420检索适当数据。
[0231]与顶部部分一样,底部部分不出包括根文件系统4430A的本地存储系统4430,该根文件系统4430A包括用于访问客户端设备上的文件和文件夹的文件系统层级。文件系统条目4431中的一个是指示文件夹X是安装的网络文件系统的条目。为了访问文件夹X,CFS客户端模块4425访问位于本地存储系统4430的一部分中的数据以用于云存储系统4435的本地缓存,并且与云存储系统4435通信以访问不在云存储系统4435的本地缓存中的所需数据。在图44中,云存储系统4435的本地缓存包括文件系统清单4432,其包含与文件夹X相对应的条目。当CFS客户端模块4425通过在用户浏览文件夹X时从FSM 4432读取信息来负责提供对文件夹X的访问时,CFS客户端模块被示为与FSM 4432耦合。FSM 4432中的信息识别文件夹X中的文件和文件夹连同用于访问这些文件的信息,比如与每个文件相对应的文件清单。
[0232]此外,云存储系统4435的本地缓存包括多个缓存加密文件块4440D、4440A和4445N。例如,假设文件A包括加密文件块4440A-4440F的集合并且文件B包括加密文件块4445A-4445N的集合,则云存储系统的本地缓存包括文件A和文件B 二者的部分。云存储系统4435被示为包括文件A的所有加密块和文件B的所有加密块。因此,CFS客户端模块可以利用云存储系统的本地缓存来访问文件A和文件B的部分,如果CFS客户端模块需要访问不位于云存储系统的本地缓存的数据的部分,则CFS客户端模块可以从云存储系统4435检索该信息。因此,CFS客户端模块具有分配在本地存储系统中的空间以用于存储来自云存储系统的数据。[0233]此外,CFS客户端模块可以接收将存储在本地存储系统中的文件夹(与顶部部分中的文件夹X类似)转换成存储在云存储系统中的指示。这可以使用存在文件浏览器以及对应上下文菜单或具有提供给用户的第二用户界面的客户端设备来完成。CFS客户端模块可以接收文件夹的指不(诸如存储在z?存储系统中的文件夹的路径),并且如上述那样将该文件夹云化(包括传送)到云存储系统4435,那些加密文件块已经不存在于云存储系统4435中。CFS客户端模块能够在与被云化的文件夹相同的逻辑路径、相同位置向用户保持经过转换的文件夹的表示,以使得就关心的客户端设备的操作系统而言用户的数据位于的相同逻辑地方。CFS客户端模块然后负责提供对云化文件夹中的数据的访问,每当操作系统从文件或文件夹请求数据时。
[0234]此外,CFS客户端模块4425处以及云存储系统4435中的优化允许CFS客户端模块4425减小与访问云文件系统中的文件相关联的等待时间。例如,缓存云存储系统的本地缓存中的加密文件块意味着在这些文件块的后续访问中CFS客户端模块4425不需要与云存储系统4435通信。通过使得CFS客户端模块4425能够如上所述预测性地从云存储系统4435检索加密文件块来使这些增加更进一步。云存储系统4435可以被进一步优化成对预取命令做出响应以便确保指定的加密文件块可用于后续检索。
[0235]如这里所述,指令可以指代被配置成执行某些操作或具有存储在嵌入非暂时性计算机可读介质内的存储器中的预定功能或软件指令的硬件(诸如专用集成电路(ASIC))的特定配置。因此,图中示出的技术可以使用存储在一个或多个电子设备(例如终端站、网络元件)上并且在其上执行的数据和代码来实施。这样的电子设备使用计算机可读介质来存储代码和数据和(内部地和/或通过网络与其他电子设备)传达代码和数据,所述计算机可读介质诸如非暂时性计算机可读存储介质(例如磁盘;光盘;随机存取存储器;只读存储器、闪速存储器设备;相变存储器)以及暂时性计算机可读通信介质(例如传播信号的电、光、声或其他形式,诸如载波、红外信号、数字信号)。此外,这样的电子设备通常包括耦合到一个或多个其他部件(诸如一个或多个存储设备(非暂时性计算机可读存储介质)、用户输入/输出设备(例如键盘、触摸屏和/或显示器)、以及网络连接)的一个或多个处理器集合。处理器集合与其他部件的耦合通常通过一个或多个总线和桥接(也被称为总线控制器)。因此,给定电子设备的存储设备通常存储代码和/或数据以便在该电子设备的一个或多个处理器集合上执行。当然,本发明实施例的一个或多个部分可以使用软件、固件和/或硬件的不同组合来实施。
[0236]尽管图中的流程图示出由本发明的某些实施例执行的操作的特定顺序,但是应该理解这样的顺序是示例性的(例如替换实施例可以以不同顺序执行操作,组合某些操作,重叠某些操作等等)。
[0237]尽管已经就若干实施例描述了本发明,但是本领域技术人员将会认识到本发明不限于所述实施例,可以利用所附权利要求的精神和范围内的修改和替换来实行本发明。因此,该描述被视为说明性而不是限制性的。
【权利要求】
1.一种由客户端设备中的云存储客户端执行的用于将多个文件保存到云文件系统的方法,其中所述云文件系统至少部分存在于云存储系统中,所述方法包括以下步骤: 对于所述多个文件中的每一个,执行以下内容: 将该文件分成多个块, 对于所述多个块中的每一个,执行以下内容: 利用该块生成基于数据的加密密钥, 使用所生成的加密密钥来对该块进行加密, 基于加密块内的数据来生成块标识符, 将加密密钥和块标识符包括在文件清单中, 确定云存储系统是否包括加密块,以及 只要确定云存储系统不包含所述加密块就将所述加密块和块标识符传送到云存储系统, 其中所述文件清单包括对于所述多个块的加密密钥和对应块标识符的列表, 基于所述文件清单内的数据来生成文件清单加密密钥, 使用所述文件清单加密密钥来对所述文件清单进行加密, 基于加密文件清单内的数据来生成文件清单标识符, 将所述文件清单加密密钥和文件清单标识符包括在文件系统清单中, 确定云存储系统是否包括加密文件清单,以及 只要确定云存储系统不包括所述加密文件清单就将所述加密文件清单和文件清单标识符传送到云存储系统; 其中所述文件系统清单包括对于多个文件中的每一个的文件清单和多个文件的路径的列表; 对所述文件系统清单进行加密;以及 将加密文件系统清单传送到云存储系统。
2.根据权利要求1的方法,其中针对每个块生成的加密密钥基于对该块进行散列的结果。
3.根据权利要求1的方法,其中针对每个块的所生成的块标识符基于对加密块进行散列的结果。
4.根据权利要求1的方法,其中使用对客户端设备或客户端设备的用户来说唯一的加密密钥来对文件系统清单进行加密。
5.根据权利要求1的方法,还包括: 在将所述多个文件保存到所述云文件系统之后从客户端设备的本地存储系统移除那些文件。
6.根据权利要求1的方法,其中确定云存储系统是否包括加密块包括: 将请求指示与加密块相对应的块标识符是否存在于云存储系统中的信息的询问传送到云存储系统;以及 接收指示块标识符是否存在于云存储系统中的响应。
7.提供指令的至少一种非暂时性机器可读存储介质,如果所述指令由客户端设备的处理器执行则将促使所述处理器实行根据权利要求1-6中的任一项的方法。
8.—种被配置成将多个文件保存到云文件系统的客户端设备,所述客户端设备包括: 执行指令的处理器,以及 与所述处理器耦合的至少一个非暂时性机器可读存储介质,所述介质存储一个或多个指令,当所述一个或多个指令被执行时促使所述处理器实行根据权利要求1-6中的任一项的方法。
9.一种在客户端设备的云存储客户端中用于读取存储在云文件系统中的文件的方法,其中所述云文件系统至少部分存在于云存储系统中,该方法包括以下步骤: 从客户端设备的操作系统接收读取文件的指令,其中所述文件被存储在云文件系统中; 确定与所述文件相对应的文件清单标识符,其中所述文件清单标识符标识文件清单,该文件清单包括与所述文件的多个块相对应的多个块标识符和多个加密密钥的列表,其中确定与所述文件相对应的文件清单标识符包括访问文件系统清单,该文件系统清单包括存储在所述云文件系统中的文件的文件清单和这些文件的路径的列表; 响应于确定与所述文件清单标识符相对应的解密文件清单和与所述文件清单标识符相对应的加密文件清单不存在于用于所述云文件系统的客户端设备的本地缓存中,从所述云存储系统下载加密文件清单; 检索对加密文件清单进行解密所使用的密钥; 使用所检索的密钥对加密文件清单进行解密; 根据解密的文件清单来确定多个块标识符; 对于所述多个块标识符中的每一个,确定与该块标识符相对应的解密块或加密块是否存在于用于云文件系统的客户端设备的本地缓存中; 对于其中对应解密块或加密块不存在于用于所述云文件系统的客户端设备的本地缓存中的所述多个块标识符中的每一个,执行以下内容: 从所述云存储系统下载该加密块, 从解密文件清单检索使该加密块解密的密钥,以及 使用所检索的密钥来对加密块进行解密; 对于其中对应加密块存在于用于所述云文件系统的客户端设备的本地缓存中的所述多个块标识符中的每一个,执行以下内容: 从所述本地缓存检索加密块, 从解密文件清单检索对该加密块进行解密的密钥,以及 使用所检索的密钥对加密块进行解密; 对于其中解密块存在于用于所述云文件系统的客户端设备的本地缓存中的所述多个块标识符中的每一个,从所述本地缓存检索该解密块;以及将所请求的文件返回到所述云存储系统。
10.根据权利要求9的方法,还包括:将每个解密块存储在用于所述云文件系统的客户端设备的本地缓存中。
11.根据权利要求9的方法,其中从所述云存储系统下载每个加密块包括执行以下内容: 将与该加密块相对应的块标识符包括在下载队列中;访问解密文件清单以确定其对应块位于解密文件清单中的该加密块附近的一个或多个其他块标识符集合; 将其他块标识符集合包括在下载队列中;以及 根据下载队列从所述云存储系统下载加密块。
12.根据权利要求9的方法,还包括: 对于从所述云存储系统下载的加密块的每一个,从所述云存储系统下载一个或多个附加加密块集合。
13.根据权利要求12的方法,还包括: 对于从所述云存储系统下载的加密块的每一个,当访问加密块时使用指示将可能访问附加加密块集合的分析模型。
14.根据权利要求9的方法,还包括: 指示所述云存储系统将一个或多个块预取到云存储池。
15.提供指令的至少一种非暂时性机器可读存储介质,如果所述指令由客户端设备的处理器执行则将促使所述处理器实行根据权利要求9-14中的任一项的方法。
16.一种被配置 成读取存储在云文件系统中的文件的客户端设备,所述客户端设备包括: 执行指令的处理器,以及 与所述处理器耦合的至少一个非暂时性机器可读存储介质,所述介质存储一个或多个指令,当所述一个或多个指令被执行时促使所述处理器实行根据权利要求9-14中的任一项的方法。
17.—种由客户端设备中的云存储客户端执行的用于将多个文件保存到云文件系统的方法,其中所述云文件系统至少部分存在于云存储系统中,该方法包括以下步骤: 对于所述多个文件中的每一个,执行以下内容: 将该文件分成多个块, 对于所述多个块中的每一个,执行以下内容: 利用该块生成基于数据的加密密钥, 使用所生成的加密密钥来对该块进行加密, 基于加密块内的数据来生成块标识符, 将加密密钥和块标识符包括在文件清单中, 确定云存储系统是否包括加密块,以及 只要确定云存储系统不包含所述加密块就将所述加密块和块标识符传送到云存储系统, 其中所述文件清单包括对于所述多个块的加密密钥和对应块标识符的列表, 基于所述文件清单内的数据来生成文件清单加密密钥, 使用所述文件清单加密密钥来对所述文件清单进行加密, 基于加密文件清单内的数据来生成文件清单标识符, 将所述文件清单加密密钥和文件清单标识符包括在文件系统清单中, 确定云存储系统是否包括加密文件清单,以及 只要确定云存储系统不包括所述加密文件清单就将所述加密文件清单和文件清单标识符传送到云存储系统; 其中,所述文件系统清单包括文件清单的列表; 基于所述文件系统清单内的数据来生成文件系统清单加密密钥; 利用所生成的文件系统清单加密密钥对所述文件系统清单进行加密; 基于加密文件系统清单内的数据来生成文件系统清单标识符; 将所述文件系统清单密钥和文件系统清单标识符包括在与客户端设备的用户相关联的用户清单中,其中所述用户清单包括指示用户安装所述云文件系统的安装点的信息; 利用专用于用户的密钥对所述用户清单进行加密;以及 将加密的用户清单存储在云存储系统中。
18.根据权利要求17的方法,其中针对每个块生成的加密密钥基于对该块进行散列的结果。
19.根据权利要求17的方法,其中针对每个块的所生成的块标识符基于对加密块进行散列的结果。
20.根据权利要求17的方法,其中使用对客户端设备或客户端设备的用户来说唯一的加密密钥来对文件系统清单进行加密。
21.根据权利要求17的方法,还包括: 在将所述多个文件保存到所述云文件系统之后从客户端设备的本地存储系统移除那些文件。
22.根据权利要求17的方法,其中确定云存储系统是否包括加密块包括: 将请求指示与加密块相对应的块标识符是否存在于云存储系统中的信息的询问传送到云存储系统;以及 接收指示块标识符是否存在于云存储系统中的响应。
23.根据权利要求17的方法,其中所述用户清单还包括标识索引的信息。
24.提供指令的至少一种非暂时性机器可读存储介质,如果所述指令由客户端设备的处理器执行则将促使所述处理器实行根据权利要求17-23中的任一项的方法。
25.一种被配置成将多个文件保存到云文件系统的客户端设备,所述客户端设备包括: 执行指令的处理器,以及 与所述处理器耦合的至少一个非暂时性机器可读存储介质,所述介质存储一个或多个指令,当所述一个或多个指令被执行时促使所述处理器实行根据权利要求17-23中的任一项的方法。
26.一种在客户端设备的云存储客户端中用于向用户提供对云文件系统的访问的方法,其中所述云文件系统至少部分存在于云存储系统中,该方法包括: 检索加密文件系统清单和文件系统清单加密密钥,其中加密文件系统清单与已经由另一用户共享的文件系统清单相对应; 使用文件系统清单加密密钥对文件系统清单进行解密,其中解密文件系统清单包括一个或多个加密文件清单集合以及一个或多个文件清单密钥集合的列表; 使用文件清单密钥集合对加密文件清单集合进行解密,其中每个解密文件清单包括文件的加密密钥集合以及对应的块标识符集合,其中以用户不可知方式对文件加密以允许跨越云存储系统处的多个用户加密文件块被去重;以及将解密文件系统清单添加到用户的用户清单。
27.根据权利要求26的方法,还包括: 利用专用于用户的密钥对用户清单进行加密;以及 将加密用户清单传送到云存储系统。
28.根据权利要求26的方法,其中解密文件系统清单与为该文件系统清单指示安装点的元数据相关联。
29.根据权利要求28的方法,其中将解密文件系统清单添加到用户的用户清单包括: 响应于确定该数据当前存在于所指示的安装点的位置处,将解密文件系统清单安装到不同位置。
30.根据权利要求29的方法,其中由云存储客户端自动选择不同位置。
31.根据权利要求29的方法,其中由客户端设备的用户选择不同位置。
32.根据权利要求26的方法,其中文件系统清单密钥对云存储系统来说是通用唯一标识符。
33.根据权利要求26的方法,其中由所述另一用户提供文件系统清单密钥,并且其中从所述另一用户接收文件系统清单密钥。
34.提供指令的至少一种非暂时性机器可读存储介质,如果所述指令由客户端设备的处理器执行则将促使所述处理器实行根据权利要求26-33中的任一项的方法。
35.一种被配置成向用户提供对云文件系统的访问的客户端设备,所述客户端设备包括: 执行指令的处理器,以及 与所述处理器耦合的至少一个非暂时性机器可读存储介质,所述介质存储一个或多个指令,当所述一个或多个指令被执行时促使所述处理器实行根据权利要求26-33中的任一项的方法。
36.一种用于使用客户端设备上的云文件系统(CFS)的方法,其中所述CFS至少部分存在于远离客户端设备的云存储系统中,该方法包括: 在客户端设备的本地存储系统中分配用于存储数据以充当CFS的本地缓存的空间, 在执行于客户端设备中的文件浏览器界面中,接收将存储在本地文件系统中的文件夹以及其下方的多个文件转换成CFS的指示,其中所述文件夹以及多个文件被存储在本地存储系统中,并且其中在本地文件系统中的位置处标识所述文件夹, 将包括所述多个文件的文件夹从本地存储系统中的存储转换成CFS的云存储系统中的存储,其中使用以用户不可知方式加密的多个加密文件块将所述多个文件存储在云存储系统中,以允许跨越云存储系统处的多个用户加密文件块被去重, 将所述多个加密文件块中的一个或多个传送到云存储系统,其中所述多个加密文件块中的一个或多个是不存在于云存储系统中的多个加密文件块中的那些, 将文件系统清单存储在CFS的本地缓存中,其中所述文件系统清单标识所述文件夹和多个文件, 将所述文件夹的表示保持在本地文件系统的位置处,以使得能够通过先前可访问所述多个文件中的每一个的逻辑路径来访问该文件,从本地文件系统的位置移除所述多个文件,以及 将对所述文件夹的访问指引到在客户端设备上执行的CFS客户端模块以便提供经由先前可访问所述多个文件中的每一个的逻辑路径对现在位于云存储系统中的该文件的访问。
37.根据权利要求36的方法,还包括: 将多个文件块中的一个或多个缓存到CFS的本地缓存中; 响应于接收到访问多个文件块之一的请求,执行以下内容: 如果该文件块没有被缓存到CFS的本地缓存中则从云存储系统检索该文件块,以及 从云存储系统预测性地检索不在CFS的本地缓存中的多个文件块中的其他一些。
38.根据权利要求37的方法,其中从云存储系统预测性地检索多个文件块中的其他一些的步骤包括:访问文件系统清单以确定哪些块位于所请求的块附近以及从云存储系统请求那些块中的至少一些。
39.根据权利要求37的方法,其中从云存储系统预测性地检索多个文件块中的其他一些的步骤包括:当所请求的块被访问时使用指示将可能访问的一个或多个块集合的分析模型,以及从云存储系统请求那些块集合中的至少一些。
40.根据权利要求37的方法,还包括: 将标识所述多个块中的其他一些的预取命令传达给云存储系统。
41.根据权利要求37的方法,还包括: 接收对存储在云存储系统中的文件夹中可用的空间量的请求;以及 生成作为存储在云存储系统中的文件夹中可用的空间量而呈现给用户的值,所述值大于本地存储系统上可用的量。
42.根据权利要求41的方法,其中所述值是该操作系统所支持的用于存储的最大值。
43.根据权利要求37的方法,还包括: 向客户端设备的用户提供用于设置充当CFS中的本地缓存的空间量的界面;以及 经由用于设置充当CFS中的本地缓存的空间量的界面,接收充当CFS中的本地缓存的空间量的指示。
44.根据权利要求37的方法,还包括: 提供用于将文件夹转换到CFS的界面,其允许用户拖动和放弃文件夹以指示它要被转换到CFS。
45.根据权利要求37的方法,其中经由与所述文件夹相关联的上下文菜单中的选择来接收文件夹的指示。
46.提供指令的至少一种非暂时性机器可读存储介质,如果所述指令由客户端设备的处理器执行则将促使所述处理器实行根据权利要求36-45中的任一项的方法。
47.一种被配置成使用云文件系统的客户端设备,所述客户端设备包括: 执行指令的处理器,以及 与所述处理器耦合的至少一个非暂时性机器可读存储介质,所述介质存储一个或多个指令,当所述一个或多个指令被执行时促使所述处理器实行根据权利要求36-45中的任一项的方法。
48.—种包括云存储网关和一个或多个云存储池集合的云存储系统中的方法,所述云存储系统提供用于多个客户端设备的云文件系统的至少一部分,该方法包括: 以用户不可知去重方式存储多个加密文件块和多个文件块标识符,其中以用户不可知方式对所述加密文件块中的每一个去重以使得通过相同的文件块标识符来识别相同的未加密文件块的存在; 通过传送在来自多个客户端设备中的一个的检索请求中标识的多个加密文件块中的一个或多个,来对所述检索请求做出响应;以及 通过至少临时地将加密文件块存储在云存储网关处的云文件系统的远程缓存中来对来自多个客户端设备中的一个的预取命令做出响应,其中云存储网关比云存储池集合更靠近于多个客户端设备中的一个。
49.根据权利要求48的方法,其中云存储池集合包括在地理上分布的多个云存储池,并且其中云存储网关通过将包括区域的指示的检索请求指引到与该地理区域相对应的云存储池中的一个来对所述检索请求做出响应。
50.根据权利要求48的方法,还包括: 提供网络文件访问门户以便允许用户访问存储在云存储系统中的多个文件中的一个或多个; 经由网络文件访问门户接收用户的加密信息; 利用用户的加密信息来访问用户的云文件系统; 经由网络文件访问门户呈现用户的云文件系统中可用的文件的列表; 经由网络文件访问门户从用户接收对访问文件列表中的文件的请求; 生成文件的解密副本,以及 将文件的解密副本传送给用户。
51.根据权利要求50的方法,其中网络文件访问门户通过执行以下内容来生成文件的解密副本: 检索与构成该文件的一个或多个加密文件块集合相对应的一个或多个加密文件块标识符集合; 检索与一个或多个加密文件块集合相对应的一个或多个加密密钥集合; 检索一个或多个加密文件块集合;以及 利用一个或多个加密密钥中的对应一个对一个或多个加密文件块集合中的每一个进行解密。
52.提供指令的至少一种非暂时性机器可读存储介质,如果所述指令由处理器执行则将促使所述处理器实行根据权利要求48-51中的任一项的方法。
53.一种提供对存储在作为多个云文件系统(CFS)的一部分的云存储系统中的多个文件的访问的云存储系统,其中云存储系统包括: 云存储网关,其被配置成执行以下内容: 接收与CFS相对应的数据以存储在云存储系统中, 通过至少临时地将一个或多个加密文件块存储在云存储网关的远程缓存中以减小向对预取命令中标识的那些加密文件块的检索请求做出响应的等待时间来对来自客户端设备的预取命令做出响应,以及 通过传送来自客户端设备的每个检索请求中标识的一个或多个加密文件块来对所述检索请求做出响应;以及 云存储池,其被配置成存储多个加密文件块和对应的多个块标识符,其中每个加密文件块包括存储在云存储系统中的多个文件的一个或多个的至少一部分,其中以用户不可知方式对所述多个加密文件块中的每一个去重以使得通过相同的文件块标识符来识别相同的未加密文件块的存在,并且其中所述云存储池还被配置成检索多个加密文件块中的每一个并且将多个加密文件块中的每一个传送到云存储网关。
54.根据权利要求53的云存储系统,还包括: 其中所述云存储网关还被配置成通过接收每一个都与CFS相对应的一个或多个文件系统清单来接收与CFS相对应的存储在云存储系统中的数据,其中文件系统清单包括CFS中的多个文件连同标识对于多个文件中的每一个的文件清单的信息的列表; 其中所述云存储网关还被配置成接收每一个都与多个文件中的文件相对应且每一个都包括标识构成对应文件的一个或多个加密文件块集合的信息连同用于解密对应文件的加密信息的一个或多个文件清单,其中云存储网关还被配置成接收与多个文件中的一个或多个相对应的多个加密文件块。
55.根据权利要求53的云存储系统,还包括: 网络文件访问门户,其被配置成向用户提供用于通过以下内容来访问存储在云存储系统中的多个文件中的一个或多个的界面:检索用户的加密信息,利用用户的加密信息来访问用户的云文件系统,呈现用户的云文件系统中可用的文件的列表,从用户接收访问该文件的列表中的文件的请求,生成该文件的解密副本,以及向用户呈现该文件的解密副本。
56.根据权利要求55的云存储系统,其中所述网络文件访问门户还被配置成通过以下内容来生成文件的解密副本:检索与构成该文件的一个或多个加密文件块集合相对应的一个或多个加密文件块标识符集合,检索与一个或多个加密文件块集合相对应的一个或多个加密密钥集合,检索一个或多个加密文件块集合,以及利用一个或多个加密密钥中的对应一个对一个或多个加密文件块集合中的每一个进行解密。
57.一种用于内容供应商将内容分发给作为云存储系统的用户的订户的方法,其中云存储系统经由广域网耦合到充当云存储系统的客户端设备的多个计算设备,所述方法包括: 通过内容供应商的计算设备为每一个订户生成包含其内容的云文件系统(CFS),其中所述云存储系统充当云文件系统(CFS)的数据的主要存储装置,其中多个计算设备中的每一个被配置成运行云文件系统(CFS)模块,其管理该客户端设备所利用的CFS的本地缓存,其中使用用户不可知加密来对CFS的文件进行加密以使得具有由不同用户加密的同一数据的两个文件将产生具有相同的加密数据的文件,其中所述用户不可知文件加密需要CFS: 对于去到CFS的每个文件执行以下内容: 将文件分成块: 根据来自该块内的数据来生成对于每个块的加密密钥, 利用其相应的加密密钥来对每个块进行加密, 为每个块生成块标识符,以及 为每个文件生 成文件清单,其中每个文件的文件清单包括对于文件的加密块中的每一个的解密密钥和块标识符, 根据该文件清单内的数据为每个文件清单生成加密密钥, 为每个文件清单生成文件清单标识符, 利用为文件清单生成的加密密钥对文件清单进行加密; 上传已经不存储在云存储系统中的加密文件清单和加密块中的任一个; 生成具有为文件清单生成的加密密钥和文件清单标识符的文件系统清单;以及 利用加密密钥对文件系统清单进行加密;以及 与相应用户共享CFS。
58.根据权利要求57的方法,其中由内容供应商生成的CFS中的每一个都包含同一内容,并且内容供应商仅将内容上传到云存储系统一次。
59.根据权利要求57的方法,其中共享包括向每个用户传送他们的加密文件系统清单中的相应一个和用于对该文件系统清单进行加密的加密密钥。
60.根据权利要求57的方法,其中所述共享包括: 将加密文件系统清单上传到云存储系统;以及 与每个用户共享他们的 加密文件系统清单的标识符中的相应一个和用于对该文件系统清单加密的加密密钥。
61.提供指令的至少一种非暂时性机器可读存储介质,如果所述指令由云存储系统的处理器执行则将促使所述处理器实行根据权利要求57-60中的任一项的方法。
62.—种云存储系统包括: 执行指令的处理器,以及 与所述处理器耦合的至少一个非暂时性机器可读存储介质,所述介质存储一个或多个指令,当所述一个或多个指令被执行时促使所述处理器实行根据权利要求57-60中的任一项的方法。
63.一种经由广域网耦合到充当云存储系统的客户端设备的多个计算设备的云存储系统,所述多个计算设备中的每一个被配置成运行云文件系统(CFS)模块,其管理该客户端设备所利用的CFS的本地缓存,其中所述云存储系统充当云文件系统(CFS)的数据的主要存储装置,其中所述云存储系统包括: 云存储池,其存储:由内容供应商生成的CFS以便通过生成包含其内容的CFS并且与相应订户共享CFS来向订户分发内容;对于每一个CFS的以下内容: 加密文件系统清单; 多个加密文件清单;以及 多个加密文件块,其中加密文件系统清单标识多个文件清单中的每一个,并且文件清单中的每一个表示CFS的一个文件并且标识加密文件块FSM中的包括该文件的那些,其中由CFS模块利用用户不可知加密对多个加密文件清单和加密文件块进行加密,其中用户不可知加密需要根据要被加密的数据而生成的加密密钥、由所生成的密钥加密的该数据、以及针对该数据而生成的标识符;以及 云存储网关,其被耦合到广域网和云存储池以便将来自客户端设备的请求转换成针对云存储池的云存储系统应用程序编程接口(“API”)调用。
64.根据权利要求63的云存储系统,其中所述云存储网关被配置成对来自CFS模块的预取命令做出响应,所述CFS模块指示云存储网关将所述预取命令标识的加密文件块从云存储池移动到云存储网关中的远程缓存中。
65.根据权利要求63或64的云存储系统,其中由内容供应商生成的CFS中的每一个都包含同一内容并且该 内容仅上传一次。
【文档编号】H04L29/06GK103931156SQ201280034603
【公开日】2014年7月16日 申请日期:2012年5月14日 优先权日:2011年5月14日
【发明者】A.F.高达 申请人:比特卡萨公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1