分布式存储系统的制作方法

文档序号:13145721阅读:166来源:国知局
引入参考本申请主张2014年9月30日提交的国际申请PCT/JP2014/076105的优先权,并通过参考来将其内容引入本申请。
技术领域
本发明涉及分布式存储系统。
背景技术
:虽然IT投资额趋于平稳,但数据量的增大化仍在不断发展。存储的成本降低变得越来越重要了。例如,作为分布式存储系统之一,认为通过网络连接多个通用服务器来生成存储池的ServerSAN(服务器存储区域网)式存储系统会在将来得到普及。尤其是,在为了大规模的大数据分析等而在服务器节点上搭载高速的SSD而想要实现高性能的分析的系统中,认为ServerSAN式存储系统是一种有效的解决方案。作为本
技术领域

背景技术
,有美国专利7546342号(专利文献1)。在该公报中,记载了“计算与网站相关联的各文件的相对重要度。利用该相对重要度,计算被分配给服务器阵列、对等网络等计算机集群内的多个设备中的内容的多个子集。该子集能够包括通过对包含一个或多个文件的一部分的数据包(packet)使用擦除编码方式而创建的已编码信息。在获取文件时,基于该方式从设备获取固定数量的能够明确识别的已编码信息。文件通过使用该信息而被重新创建。通过多个设备的内容保持,能显著地高速获取网站,任何计算设备都无需大量的存储区域或带宽,可靠性提高。”(参照摘要)。现有技术文献专利文献专利文献1:美国专利7546342号技术实现要素:以往的ServerSAN式存储系统将分别与服务器节点直连的本地存储设备用作最终保存场所,并通过使写入数据及其冗余数据分布到多个服务器节点来保护数据。具体地,将来自主机的写入数据分割成多个数据块,通过擦除码(ErasureCode)从所分割的数据块中生成冗余码,然后使所分割的数据块和冗余码均匀分布到多个服务器节点。这样,以往的ServerSAN式存储系统使从主机接收到的写入数据分布到多个服务器节点。因此,当应用程序从ServerSAN式存储系统中读取数据时,将数据块在服务器节点之间的网络上传送。因此,网络的吞吐量成为瓶颈,存在对数据的访问延迟比不经由网络时增加的情况。本发明的代表性的一例是一种分布式存储系统,其包括经由网络进行通信的多个节点,所述分布式存储系统还包括多个存储设备,预先定义了至少包括三个以上节点的第一节点组,所述第一节点组的节点分别将在各自管理的存储设备内保存的数据发送至属于所述第一节点组的其他节点,所述第一节点组的第一节点使用从所述第一节点组的两个以上的其他节点接收到的数据组合来生成冗余码,所述第一节点将生成的所述冗余码保存到与保存生成了所述冗余码的数据的存储设备不同的存储设备中,所述第一节点所生成的冗余码中的至少两个冗余码的数据组合在所构成的数据的逻辑地址的组合中不同。发明效果根据本发明的一种方式,能够在存储系统中同时实现高容量效率和高可靠性。附图说明图1表示分布式存储系统的写处理的概要。图2表示分布式存储系统中的多个保护层的映射图像例。图3表示分布式存储系统的系统结构例。图4表示用于分布式存储系统的控制的信息。图5A表示虚拟卷管理表的结构例。图5B表示池卷管理表的结构例。图5C表示驱动管理表的结构例。图5D表示驱动状态管理表的结构例。图5E表示节点状态管理表的结构例。图5F表示站点状态管理表的结构例。图6A表示页面映射表的结构例。图6B表示页面负载频率表的结构例。图6C表示页面负载分布表的结构例。图7A表示静态映射表的结构例。图7B表示地理(GEO)静态映射表的结构例。图7C表示一致性哈希表(consistenthashingtable)的结构例。图8表示日志构造化映射表的结构例。图9表示本地区域控制表214的结构例。图10表示缓存信息的例子。图11表示站点保护层的映射图像。图12A表示分布式存储系统中的节点的状态转换。图12B表示分布式存储系统中的站点的状态转换。图13表示分布式存储系统的一个节点中的虚拟配置(provisioning)层的逻辑结构例。图14表示分布式存储系统中的多个节点的页面映射的例子。图15表示分布式存储系统的读处理的流程图。图16表示同步写处理的流程图。图17表示异步写处理的流程图。图18表示转储(destage)处理的流程图。图19表示容量耗尽管理的处理的流程图。图20表示容量耗尽管理的处理的概念。图21表示保存重建处理的流程图。图22表示数据再同步处理的流程图。图23表示再配置及再平衡处理的流程图。图24A表示再配置中的自身阈值的决定方法的一例。图24B表示再配置中的自身阈值的决定方法的一例。图25A表示结构变更处理的流程图。图25B表示追加了节点的情况下的条带类型的追加以及条带的再配置的一例。图26表示指令行的管理I/F的一例。图27表示分布式存储系统的GUI的管理I/F的例子。图28表示分布式存储系统的硬件结构例。图29表示在实施方式2中将用于冗余化的节点间的传送高效化的方法。图30表示在实施方式2中将参照图29说明的用于冗余化的节点间的传送高效化的方法中的、数据复原方法。图31表示在实施方式3中分布式存储系统的硬件结构例。图32表示实施方式3的概要。图33表示在实施方式3中为了存储系统的控制而以驱动进行管理的表构造。图34表示在实施方式3中计算机节点与闪存驱动之间的通信接口。图35表示在实施方式3中计算机节点从D驱动中读取最新数据的处理的流程图。图36表示在实施方式3中旧数据的读处理。图37表示在实施方式3中计算机节点向D驱动写入数据的处理的流程图。图38表示在实施方式3中在同步写处理中向各驱动并行地实施了数据的写处理的情况下的处理流程。图39表示在实施方式3中垃圾回收(garbagecollection)处理的流程图。图40表示在实施方式4中分布式存储系统的硬件结构例。图41表示实施方式4的概要。图42表示在实施方式4中计算机节点与驱动之间的通信接口。图43表示实施方式4中的同步写处理的流程图。图44表示实施方式4中的异步写处理的流程图。图45表示实施方式4中的垃圾回收处理的流程图。具体实施方式参照附图对本发明的实施方式进行说明。此外,以下说明的实施方式并不限定于权利要求书中涉及的发明,另外,在实施方式中说明的特征的组合也并不一定全都是发明的解决方案所必需的。在以下说明中,有时用“表”、“列表”、“队列”等表达来说明各种信息,但各种信息还可以由除这些之外的数据结构来表达。为了表示并不依赖于数据结构,有时将“XX表”、“XX列表”等称为“XX信息”。在对各信息的内容进行说明时,使用“标识信息”、“标识符”、“名称”、“ID”、“编号”等表达,但可以对这些表达进行相互替换。<实施方式1>概要本实施方式公开一种分布式存储系统。分布式存储系统构成为通过网络来连接分别包括存储设备的多个计算机节点。分布式存储系统提供一种通过多个计算机节点的存储设备来实现存储池的虚拟存储系统。在作为一例的分布式存储系统中,计算机节点将来自主机的写入数据保存到自身系统的存储设备中,而且,为了在计算机节点故障时保护数据,将该写入数据传送到其他计算机节点。在此,将该其他计算机节点称为传送目的地计算机节点。传送目的地计算机节点根据从多个不同计算机节点传送来的写入数据来生成冗余码。传送目的地计算机节点将所生成的冗余码保存到自身系统的存储设备中。这样,通过尽量将数据配置到接收了写请求的节点内,不再需要在读取时进行节点之间的通信,从而能够实现高速读取。另一方面,通过在与接收了写请求的节点不同的节点生成计算机节点之间的冗余码,而以很少的开销(overhead)实现数据保护。尤其是,在由可靠性低的多个节点构建分布式存储系统的情况下,维持读取性能且同时确保冗余性的本申请结构是有效的。另外,尤其在使分析系统的应用程序在本发明的分布式存储系统中运行的情况下,大多情况下,各计算机节点能够将分析对象数据整理保存到自身节点的存储区域内。由此,削减了用于数据分析的加载时间,业务敏捷性提高,且存储成本降低。在一个例子中,分布式存储系统向主机提供虚拟卷。分布式存储系统对于已有写访问的虚拟页面从池卷分配逻辑页面。池卷是逻辑卷,对于池卷的逻辑存储区域分配有存储设备的物理存储区域。计算机节点基于分布式存储系统的网络频带和从主机针对每个虚拟页面而向该计算机节点访问的访问频率,选择从自身系统的存储设备中分配逻辑页面的虚拟页面。例如,计算机节点基于分布式存储系统的网络频带来决定阈值,并将与该阈值相比访问频率更高的逻辑页面配置到自身系统的存储设备。由此,能够避免网络瓶颈并能够实现可快速访问页面的页面配置。在一个例子中,计算机节点具有供应用程序或用户指定虚拟页面的位置(location)的接口。虚拟页面例如由虚拟卷的逻辑地址指定。虚拟页面的位置用保存有该虚拟页面的数据的计算机节点来表示。通过设置用于指定虚拟页面的位置的接口,能够实施最适合虚拟页面提供目的地的页面配置。在本实施方式中,分布式存储系统能够同时包括上述多个结构例全部,另外,也可以仅包括一部分结构。术语说明在本公开内容中,存储设备包括具有1台HDD或SSD等1台存储驱动及多台存储驱动在内的RAID(磁盘阵列)装置,并包括多个RAID装置。条带或条带数据是成为用于数据保护的冗余码的生成来源的数据单元。为了区别于冗余码,有时将条带称为用户数据。条带保存在计算机节点内的存储设备中,并且用于其他计算机节点中的冗余码的生成。条带类型是生成冗余码的条带的类别。条带所属的条带类型例如通过该条带的逻辑地址和保存该条带的计算机节点来决定。条带类型的标识符即条带类型编号表示对应的计算机节点的组。一个条带能够属于不同保护层各自的条带类型。主机是访问存储系统的计算机、在该计算机内运行的处理器或者该处理器执行的程序。图1表示本实施方式的一例的分布式存储系统的写处理的概要。计算机节点101A、101B及101C包括在同一计算机域(以下也称为域)内。在以下说明的例子中,域与站点对应关联。计算机节点101D、计算机节点101E配置在与其他计算机节点不同的站点。计算机节点101A~101E经由网络进行通信。以下,也将计算机节点简称为节点。节点101A~101E这些计算机节点包括缓存(高速缓冲存储器)181及存储驱动113。节点101A~101E这些节点提供卷1303。节点101A将从主机接收到的写入数据DATA1(1501A)保存到自身系统的缓存181,并进一步保存到自身系统的存储驱动113。写入数据DATA1是条带。节点101A根据写入数据DATA1生成节点冗余码P,并将其保存到自身系统的存储驱动113。节点冗余码是由自身系统的存储设备内保存的数据单元生成的冗余码,由附图标记P表示。节点101A将自身系统的缓存181内的写入数据DATA1传送到其他节点101B的缓存181。节点101C将从外部装置接收到的写入数据DATA2(1501B)保存到自身系统的缓存181,并进一步保存到自身系统的存储驱动113。写入数据DATA2是条带。节点101C根据写入数据DATA2生成节点内冗余码P,并将其保存到自身系统的存储驱动113。节点101C将自身系统的缓存181内的写入数据DATA2传送到另一节点101B的缓存181。为了在节点故障时保护数据,节点101B根据自身系统的缓存181内保存的数据DATA1、DATA2而生成站点冗余码Q(1502B),并将其保存到自身系统的存储驱动113。站点冗余码是站点内的节点间冗余码,由附图标记Q表示。站点冗余码Q与节点冗余码P属于不同的保护层。节点101E将从主机接收到的写入数据DATA3(1501C)保存到自身系统的缓存181,并进一步保存到自身系统的存储驱动113。写入数据DATA3是条带。节点101E从写入数据DATA3中生成节点冗余码P,并将其保存到自身系统的存储驱动113。节点101A将自身系统的缓存181内的写入数据DATA1传送到另一节点101D的缓存181。节点101E将自身系统的缓存181内的写入数据DATA3传送到另一节点101D的缓存181。为了在节点故障时保护数据,节点101D根据自身系统的缓存181内保存的数据DATA1、DATA3而生成地理冗余码R(1502C),并将其保存到自身系统的存储驱动113。地理冗余码是不同站点的节点之间的冗余码,由附图标记R表示。地理冗余码R与节点冗余码P及站点冗余码Q属于不同的保护层。图2表示分布式存储系统中的多个保护层的映射图像的例子。图2示出了一边在同一站点的节点之间进行冗余化一边在站点之间实施冗余化的图像。例如,通过在数据中心内的节点之间实现第一冗余化,而且还谋求与其他据点之间的冗余化,能够以多重的层来保护数据,使系统的可靠性提高。图2中仅用附图标记示出了一部分要素,同一种类要素的附图标记有一部分被省略。在图2中,四棱柱表示节点,虚线矩形表示站点(域),节点内的矩形表示条带或条带的地址(数据位置)。图2示出了四个站点102,在各个站点配置有四个节点。图2并未示出从多个条带生成的冗余码。条带103中的数字(X_Y)表示该条带103所属的条带类型的标识符。X是站点内的节点之间的条带类型(站点条带类型)的标识符,Y是站点之间的条带类型(地理条带类型)的标识符。一个条带103属于一个站点条带类型及一个地理条带类型。例如,节点101A1保存的条带1_A属于站点条带类型1001及地理条带类型1002。属于站点条带类型1001的条带是节点101A1的条带1_A、节点101A2的条带1_D、节点101A3的条带1_C。不具有这些条带的同一站点内的节点101A4生成并保存这些条带的冗余码。属于地理条带类型1002的条带是节点101A1的条带1_A、节点101B1的条带1_A、节点101B2的条带2_A。与这些节点为不同站点的节点101D4生成并保存这些条带的冗余码。在上述结构中,多个节点分别将接收并保存的条带(数据单元)传送到一个传送目的地节点,该传送目的地节点由所传送来的数据单元生成冗余码并保存。条带与冗余码保存在不同的节点内,实现针对节点故障的数据保护。接收到主机指令的节点将所接收到的写入数据发送至其他节点,而无需为了生成站点冗余码或地理冗余码去读取旧数据。因此,针对写入指令的响应性能提高。另外,用于冗余码生成的条带移动在缓存之间进行,而驱动113并未介入,因此在驱动113使用闪存介质的情况下,能够减小写入量从而能够提高寿命。由于节点不将从主机接收到的条带分割地保存到自身系统的存储设备,所以减少读出过程中的响应时间及网络流量。另外,无需传送冗余码,减少网络流量。而且,在上述结构中,由于一个条带属于多个保护层,所以能够提高系统的耐故障性。此外,分布式存储系统还可以由仅生成站点内或站点之间的节点间冗余码的单一保护层构成。图3表示分布式存储系统的系统结构例。节点101例如具有一般服务器计算机的结构。节点101的硬件结构并不特别限定。节点101经由网络103与其他节点101通过端口106连接。网络103例如通过InfiniBand(无线宽带技术)或以太网等构成。多个节点101形成域102。域102例如可以与地理区域对应,也可以与虚拟的或物理的网络103的拓扑结构对应。网络104连接多个域102。以下,域与地理上分离的站点对应关联。节点101的内部结构为经由内部网络112连接端口106、处理器封装111、磁盘驱动(以下也称为驱动)113。处理器封装111包括存储器118、处理器119。存储器118在处理器119处理读出或写入指令并执行存储功能的基础上,保存必要的控制用信息以及存储装置的缓存数据。另外,存储器118例如保存通过处理器119执行的程序。存储器118可以是易失性的DRAM,也可以使用非易失性的SCM(StorageClassMemory,存储级存储器)等。驱动113例如通过具有FC(FibreChannel,光纤通道)、SAS(SerialAttachedSCSI,串行SCSI)、SATA(SerialAdvancedTechnologyAttachment,串行高级技术附件)等接口的硬盘驱动或者SSD(SolidStateDrive,固态驱动)等构成。也可以使用NAND、PRAM、ReRAM等SCM,也可以使用易失性存储器。在使用易失性存储器的情况下,还可以使用电池将存储设备非易失化。前述的各种类型的驱动性能不同。例如,与HDD相比,SSD的吞吐性能更高。节点101包括多种驱动113。本例的节点101将不同种类的驱动113分类成具有相近性能的驱动组,形成层级115、116。层级之间的关系通过层级的性能来定义。性能包括访问性能和耐故障性能。在以下说明的例子中,层级的访问性按照Tier1至Tier2、Tier3的顺序依次降低。另外,在以下说明的例子中,各层级中的驱动组分别构成RAID。此外,图3例示的层级数为2,但层级数依赖于设计。另外,还可以将高访问性能的层级作为缓存使用。驱动、RAID、层级和它们的集合分别都是存储设备。图4表示用于控制分布式存储系统的信息。除了图4所示的信息之外,存储器118还保存包括实现存储功能的存储程序、OS、接口程序在内的各种程序。存储器118有时还保存执行业务的应用程序。保护层信息201是与数据保护有关的信息。虚拟化配置信息202是与虚拟卷的配置有关的信息。缓存信息204是与缓存181有关的信息。结构信息203是与分布式存储系统的结构有关的信息。保护层信息201包括保护层编号1、编号2、编号3各自的静态映射表210、211、212。保护层信息201还包括日志构造化映射表213和本地区域控制表214。虚拟化配置信息202包括页面映射表215、页面负载频率表216、和页面负载分布表217。结构信息203包括虚拟卷管理表218、池卷管理表219、和驱动管理表220。结构信息203还包括驱动状态管理表221、节点状态管理表222、和站点状态管理表223。上述的全部或一部分信息的副本可以同步或异步地保存在驱动113内。节点101例如还可以在每个池内保存上述信息。一个池由一个或多个逻辑卷构成。将该逻辑卷也称为池卷。一个池由一个或多个层级构成。在以下说明的例子中,池由三个层级构成,也就是说由三个层级的池卷构成。池卷的实体是驱动113的存储区域。池卷还能被分配其他节点101的驱动的存储区域。以下,对表示节点101所保持的信息的表的结构例进行说明。各表中仅示出了一部分条目。在各表中,空白单元格是省略了数据记载的单元格。在表的单元格中,“0x”表示十六进制的数字。驱动编号在节点内是唯一的,节点编号在站点内是唯一的。站点编号在系统内是唯一的。图5A~图5F示出了表示结构信息203中所含信息的表的结构例。图5A~图5C表示不同的存储资源类别的管理信息。图5A表示虚拟卷管理表218的结构例。虚拟卷管理表218表示虚拟卷的信息。在本例中,虚拟卷管理表218表示具有该信息218的节点101所提供的虚拟卷的信息。节点101接受对所提供的虚拟卷的访问。虚拟卷管理表218还可以防备故障发生,保存自身节点并非所有者的虚拟卷的信息。虚拟卷管理表218包括各虚拟卷的大小(容量)、提供各虚拟卷的节点(所有者节点(ownernode))的节点编号的列表。而且,还包括表示保护层各自的冗余码的生成及写入与写入数据向自身系统的存储设备的写入是同步还是异步的信息。虚拟卷的大小表示虚拟卷的虚拟容量(最大容量),而不是被分配的逻辑页面的总量。针对每个保护层赋予同步/异步的信息。图5B表示池卷管理表219的结构例。池卷管理表219表示池卷的信息。在本例中,池卷管理表219表示由保持该信息219的节点101以及该节点101所属的池中的其他节点101所提供的池卷的信息。池卷管理表219包括各池卷的大小(容量)、提供各池卷的节点的节点编号的信息。图5C表示驱动管理表220的结构例。驱动管理表220表示分配给各池卷的驱动。在本例中,驱动管理表220表示存储该信息220的节点101所包含的自身系统的驱动113的信息。驱动管理表220针对每个池卷具有驱动的种类(SSD和NL-SAS驱动等)、条带化的驱动编号的组合(构成RAID的驱动编号的组合)、驱动的大小(容量)的信息。在不实施条带化的情况下,对于池卷仅分配一个驱动。此外,一个驱动的不同区域能够分配给不同的池卷。图5D~图5F表示各个节点101存储的、分布式存储系统中的故障管理信息。图5D表示驱动状态管理表221的结构例。驱动状态管理表221表示节点101内的自身系统的驱动113各自的状态及错误计数。图5E表示节点状态管理表222的结构例。节点状态管理表222表示自身系统站点102中的其他节点101各自的状态及错误计数。节点101的自身系统站点10c是该节点101所属的站点102。节点101若在与其他节点101的通信过程中检测到错误,则使错误计数递增。图5F表示站点状态管理表223的结构例。站点状态管理表223表示每个站点的状态及错误计数。在本例中,节点101能够仅与其他站点102的代表节点通信。因此,代表节点101的错误意味着该站点的错误。节点101的处理器119若在与自身系统的驱动113或其他节点101的通信过程中检测到错误,则在所存储的管理信息221~223中使错误计数递增。当某一硬件资源(驱动、节点或站点)中的错误计数达到第一阈值时,处理器119使该资源的状态从正常状态变成警告状态。而且,当错误计数达到第一阈值时,处理器119使该资源的状态从警告状态变成闭塞状态。警告状态与闭塞状态是异常状态。各节点101在检测到某一硬件资源的异常状态时,将该信息通知其他节点101。具体地,节点101通知所属站点102内的所有节点101及其他站点102的代表节点101。代表节点101向所属站点102内的其他节点通知该信息。由此,能够在节点之间共用异常状态硬件资源的信息。异常状态驱动的信息也可以不在节点之间共用。节点101还可以共用错误计数的信息。例如,各节点101在检测到与其他节点或其他站点的通信错误时,更新自身系统的管理信息,并将该更新信息广播(broadcast)至其他节点101。节点101除了根据自身节点的错误计数之外,也可以根据其他节点101得到的错误计数来进行异常状态的判断。在节点101与其他站点102的各节点101通信的结构中,节点101还可以统计与其他站点102的节点101之间的通信错误。站点错误计数例如是对该站点102中的所有节点101的错误计数的总计。图6A~图6C表示虚拟化配置信息202中包含的信息。图6A表示页面映射表215的结构例。页面映射表215保存虚拟卷的虚拟页面与池卷的逻辑页面之间的对应关系。在本例中,页面映射表215保存有具有该信息215的节点101提供的虚拟卷的信息。虚拟页面有时经由后述的自身系统的池卷1303C或者直接被分配给其他节点101的池卷1303B的逻辑页面。页面映射表215表示虚拟页面与自身系统池卷1303C或其他节点101的池卷1303B之间的关系。页面映射表215保存虚拟卷的虚拟页面的开头LBA(LogicalBlockAddress,逻辑区块地址)和地址范围、以及与虚拟页面的开头LBA对应的池卷的逻辑页面的开头LBA。图6B表示页面负载频率表216的结构例。页面负载频率表216保存每个虚拟页面的I/O频率(访问频率)的历史记录。具体地,保存虚拟卷的虚拟页面的开头LBA和地址范围、以及对该区域的访问频率。页面负载频率表216保存从池卷分配有保存用户数据(写入数据)的逻辑页面的虚拟页面的信息。因此,页面负载频率表216也表示被分配给虚拟页面的逻辑页面的访问频率。页面负载频率表216保存具有该表216的节点101所提供的虚拟卷的信息。另外,页面负载频率表216保存具有该表216的节点从自身节点及其他节点接受到的访问的信息。访问频率的信息可以针对作为访问来源的每个节点获取并进行管理,也可以分成读访问和写访问来获取并进行管理。节点101可以将时序访问和随机访问分开来获取并管理访问频率的信息,也可以通过多个测量周期来获取并管理访问频率的信息。图6C表示页面负载分布表217的结构例。页面负载分布表217将针对每个虚拟页面的访问频率划分成多个等级,并示出每个等级的页面量。也就是说,页面负载分布表217表示相对于访问频率(I/O频率)的页面量的分布。页面负载分布表217表示页面负载分布的历史记录。节点101保存多个保护层各自的页面负载分布表217。例如,页面负载分布表217除了节点内的每个页面的访问频率的信息之外,还可以保存站点内的所有节点中的每个页面的访问频率的信息、跨越多个站点的系统内的所有节点中的每个页面的访问频率的信息。节点101能够根据从自身节点及其他节点获取到的页面负载频率表216来生成页面负载分布表217。例如,在多个节点101提供一个虚拟卷的情况下,多个节点101分别接收对同一虚拟页面的访问。因此,在虚拟卷的全部所有者节点中对一个虚拟页面的访问的总计表示对该虚拟页面的所有访问。与页面负载频率表216相比页面负载分布表217的信息量很少,页面负载分布表217基本上不依赖于节点101的存储容量(逻辑页面量)。因此,页面负载分布表217能够在多个节点101之间共用。而且,通过将多个节点101内的每个访问频率等级的页面数量相加,能够生成站点整体或系统整体的页面负载分布信息等跨越多个节点101的页面负载分布。也可以针对作为访问来源的每个节点101创建页面负载分布表217。页面负载频率表216利用高访问频率(高负载)的页面的上位列表(例如使用有损计数法(LossyCountMethod))和针对将节点或节点组的存储区域以规定区间数划分得到的每个分割区域的访问频率(页面负载)的列表这两种列表来构成是高效的。若仅利用高负载页面的上位列表,则在OLTP数据库中常见的随机负载范围宽的情况下,有上位列表会饱和而导致应包含在列表中的页面却未被包含的情况。另一方面,若仅利用存储区域的每个分割区域的页面负载的列表,则在特定页面的负载非常高、且由于存储器限制而使得区域数很少的情况下,有区域的宽度过宽而使页面负载被平滑化,导致失去了每个页面的负载的特征的情况。因此,同时具有上述两种列表是高效的。节点101也可以具有针对每个规定周期(例如一周)的历史记录表216、217。本例记载了块存储装置中的映射表(由LBA管理),但在普遍已知的文件存储(例如NFS/CIFS:NetworkFileSystem/CommonInternetFileSystem,网络文件系统/网络文件共用系统)和对象存储(例如REST:RepresentationalStateTransfer,表述性状态传递)中,节点101也能保存同样的信息。在文件存储中,管理信息可以使文件与页面对应,也可以使分割文件后得到的小区域与页面对应。另外,在对象存储中,管理信息可以使对象与页面对应,也可以使分割对象后得到的小区域与页面对应。图7A~图7C表示数据保护层信息201中的静态映射表的例子。保护层编号1是节点101内的保护层,各节点101保存有自身节点的节点静态映射表210。节点静态映射表210的图省略。图7A~图7C的表由例如属于站点编号为0的站点且节点编号为0的节点101保持。图7A表示保护层编号2(站点)的静态映射表211的结构例。站点静态映射表211是在站点102内的节点101之间共用的信息。站点静态映射表211针对每个站点条带类型编号保持保存对应条带(用户数据/写入数据)的数据节点的节点编号与保存从条带中生成的冗余码的冗余码节点的节点编号的关系。站点条带类型编号是站点内的条带类型的标识信息。条带类型是条带的类别,从条带类型内的多个条带生成一个或多个冗余码。条带是具有预先确定的大小的数据单元。各个条带所属的条带类型的决定方法以及冗余码的生成方法详见后述。条带类型编号也表示保存条带类型所包含的用户数据及冗余码的节点101的组。根据来自属于站点条带的不同数据节点的多个条带生成冗余码。在图7A的例子中,生成有两个冗余码,且分别保存在不同的节点101内。冗余码的数量依赖于设计。多个冗余码例如通过ErasureCoding(擦除码)来生成。若没有存储器上的限制或安全性上的限制,站点静态映射表211可以在站点之间共用。在本例中,一个条带属于单一的站点条带类型。如图7A的例子所示,一个节点所保存的条带可以属于不同的条带类型。例如,在图7A的例子中,节点0x00所保存的某个条带属于站点条带类型0x0000,而另一条带属于站点条带类型0x0001。图7B、图7C表示保护层编号3(GEO、地理)的静态映射表212中所包含的、地理静态映射表212A及一致性哈希表212B的结构例。地理静态映射表212A基本上具有与站点静态映射表211相同的结构。地理静态映射表212A在站点之间共用。地理静态映射表212A针对每个地理条带类型编号保存配置有对应条带的数据站点的站点编号与配置有冗余码的冗余码站点的站点编号的关系。每个数据站点的一个节点101保存条带。另外,冗余码站点各自的一个节点101保存冗余码。一致性哈希表212B表示用于对在冗余码站点内保存冗余码的节点101进行特定的信息。各站点102分别保存特有的一致性哈希表212B。一致性哈希表212B的信息根据每个站点而不同。一致性哈希表212B表示该冗余码站点内的节点101的节点编号、在节点101保存冗余码(1)的情况下的哈希值、与在节点101保存冗余码(2)的情况下的哈希值之间的关系。哈希值基于从其他站点102与条带一起被传送来的与传送源的相关信息来计算出。该条带被传送到与计算出的哈希值对应关联的节点101,该传送目的地节点101生成并保存冗余码。当节点/站点发生故障时,在将用户数据(条带)及冗余码的保存目标变更为备用区域的情况下,参照图7A~图7C说明了的静态映射表发生改变。而且,在增设/减少节点或站点时发生改变。节点101还可以共用同一计算逻辑,以能够根据发生了故障的节点/站点的信息而唯一地改变静态映射表。由此,节点101在改变了所保存的静态映射表之后,无需再组播(Multicast)发送该静态映射表,能够降低网络的负载。通过根据静态映射表预先定义属于条带类型的节点,能够从数据恢复这方面来实现恰当的冗余结构。通过将一个节点的数据包含到不同的条带类型中,并规定一个节点所属的条带类型的数量,能够提高节点闭塞时的数据恢复可能性。此外,站点静态映射表211的使用方法参照图11且详见后述。图8表示数据保护层信息201中的日志构造化映射表213的结构例。图8中的箭头表示指针。日志构造化映射表213包括数据映射表701、地理/站点/节点代码映射表702、以及反向映射表703。数据映射表701管理具有该表701的节点101在各自身系统的存储设备(驱动113)中保存的用户数据(条带)。节点101能够从条带的池卷的保存地址(逻辑地址)中得知保存该条带的驱动113(物理存储设备)的保存地址(物理地址)。数据映射表701将池卷中的用户数据(条带)的保存地址(逻辑地址)与驱动113的物理存储区域中的保存地址(物理地址)对应关联。条带的池卷的保存地址用池卷的LDEV编号、条带的条带编号来指定,而且,条带内的各个块(block)由LBA的偏移量来指定。条带大小是固定的。条带编号例如通过floor(层级)(LBA/条带长度)来计算。物理存储区域的保存地址用驱动编号、LBA、以及数据长度来指定。在图8的例子中,将一个条带分成了两个物理区域(块)来保存。数据映射表701表示在驱动编号为0x43、LBA为0x0003且数据长度为8的区域内保存有LDEV编号为0、条带编号为0且条带内LBA偏移量为0的数据。而且,还表示在驱动编号为0x42、LBA为0x0007且数据长度为8的区域内保存有LDEV编号为0、条带编号为0且条带内LBA偏移量为1的数据。物理存储区域进一步保存表示所保存的数据的状态的信息。状态信息表示数据是否已向对应的冗余码节点复制完毕(传送完毕)。如后所述,为了生成冗余码,根据Sync/Async(同步/异步)的设定,与写入数据(条带)的主机写处理同步或异步地将写入数据(条带)传送到冗余码节点。冗余码映射表702管理保持该表702的节点101在自身系统的存储设备(驱动113)中保存的冗余码。被管理的冗余码包括站点间冗余码(地理冗余码R)、站点内冗余码(站点冗余码Q)以及节点内冗余码(节点冗余码Q)。节点101能够从保存条带的池卷的逻辑地址中得知该条带的冗余码的物理地址。冗余码映射表702将用于生成冗余码的条带的池卷的逻辑地址与驱动113(自身系统的存储设备)的物理存储区域的物理地址建立对应关联。冗余码是通过基于多个条带的运算(例如异或(xor))来生成的。因此,对于冗余码的物理地址可以关联多个条带的逻辑地址。图8表示根据两个条带生成一个冗余码的例子。在图8的例子中,冗余码映射表702表示一个地理冗余码的物理地址与用于生成该地理冗余码的两个条带的逻辑地址之间的关系。条带的逻辑地址用站点、节点、池卷的标识符及卷内地址来表示。在物理存储区域内,将地理冗余码分成了两个地址区域(块)来保存。例如,根据站点编号为4、节点编号为3、LDEV编号为7、条带编号为8且该条带中的LBA偏移量为0的块以及站点编号为6、节点编号为5、LDEV编号为4、条带编号为13且该条带中的LBA偏移量为0的块而生成的地理冗余码的块保存在驱动编号为0x40、LBA为0x0020且数据长度为8的区域内。本例的分布式存储系统以日志构造化形式来保存数据。日志构造化形式在逻辑地址的数据被新的数据更新的情况下,无需将物理地址的数据更新成新的数据,而是将新的数据追加至新的物理地址。不必要的数据则被适当擦除。通过日志构造化形式,将不再需要进行用于更新节点冗余码P的读取,能够缩短向驱动113进行写处理的时间。分布式存储系统也可以不安装日志构造化形式。因此,作为逻辑地址的数据,能够在物理存储区域内保存旧数据和新数据。日志构造化映射表213除了保存逻辑地址与最新数据的物理地址的关系之外,还保存逻辑地址与旧数据的物理地址的关系的信息、数据的世代管理信息。从多个条带中生成的冗余码的世代管理的信息表示用于生成冗余码的各个条带的世代信息。另外,还可以在数据映射表701和冗余码映射表702中附加数据保证代码(写入序号、CRC等)。通过附加该信息,在地址转换时仅参照一次该映射表的信息就能校验数据的一致性。反向映射表703是上述表701、702的反向转换表。也就是说,反向映射表为了在从物理区域的地址向池卷的地址转换而参照的。反向映射表703包括表732,其表示与在物理区域内保存数据的各地址区域731分别对应的逻辑地址。各表732分别包含数据的类型(条带/地理代码/站点代码/节点代码)、索引数量(参考值的个数)、更新时间、参考值(对应的池卷区域、站点编号、节点编号等)。例如,作为一例,图8表示与保存地理冗余码的物理地址对应的逻辑地址的信息。本例与图8中的冗余码映射表702的例子一致。数据类型是地理冗余码,索引数量是2。这表示为了地理冗余码的生成而使用了两个条带。参考值表示用于生成地理冗余码的条带的保存目标逻辑地址。逻辑地址用站点编号、节点编号、LDEV编号、条带编号以及偏移量来表示。如上所述,通过对成为冗余码来源的每个条带的传送源地址与冗余码的物理地址进行关联地来管理,能够适当地管理各种条带组合的冗余码。在驱动113包括非易失性介质的情况下,节点也可以在进行用户数据的驱动写入时同步地向反向映射表703内追加更新信息。由此,能够在意外断电时修复数据。节点101也可以与用户数据的驱动写入异步地更新驱动113内的反向映射表703并保存到存储器118。为了能够在意外断电时修复数据,反向映射表703中还可以保存写入序号。反向映射表703除了保存最新数据的信息之外还可以保存旧数据的信息。图9表示本地区域控制表214的结构例。图9中的箭头表示指针。本地区域控制表214包括有效列表801A、无效列表801B、空闲列表801C以及本地区域量表802。本地区域控制表214管理位于节点101内的驱动113的区域。列表801A~801C内的箭头为指针。在列表801A~801C中,各区域均用驱动编号及驱动内的LBA来表示。有效列表801A是有效区域的列表。有效区域是保存最新的用户数据或最新的冗余码的区域。在图9的例子中,在驱动编号为0的驱动113中,LBA为0、4、5的块分别保存有有效数据。无效列表801B是无效区域的列表。无效区域是保存旧的用户数据或旧的冗余码的区域。陈旧无效的冗余码是用于生成该冗余码的所有条带均无效的冗余码。在图9的例子中,LBA为1、3、7的块在驱动编号为0的驱动113中分别保存有无效数据。空闲列表801C是未使用区域的列表。本地区域量表802管理各条带类型、节点冗余码、站点冗余码、地理冗余码、备份区域的目标使用量和实际使用量、以及有效区域的量。节点101针对每个层级保存本地区域量表802。本地区域量表802的各个条目也可以示出所有层级的总量。通过分别单独管理条带类型及冗余码各自的量,能够适当地控制用于各种数据的量。处理器119与主机I/O同步或异步地更新本地区域控制表214。例如,本地区域量表802仅保存自身节点101所属的条带类型的条目。本地区域量表802由于管理从其他节点101传送来的数据的使用量,所以还可以包括用于自身节点101不属于的条带类型的数据的条目。图10表示缓存信息204的例子。节点101分别保存特有的缓存信息204。缓存信息204包括数据脏队列900、代码脏队列901、干净队列902、空闲队列903以及中间脏队列904。脏队列900、901、904表示未反映至驱动113的缓存181上的数据。队列中的单元格表示条目,条目的信息与缓存位图表905内的信息相对应,保存从缓存位图表905中选择出的信息。队列内的箭头表示将条目间连接的指针。黑色圆点是起点。数据脏队列900表示来自保存在自身系统的驱动113中的主机的写入数据(条带)。写入数据属于某一站点条带类型。数据脏队列900包括该节点101作为数据节点所属的每个站点条带类型的队列。代码脏队列901表示未反映至驱动113的缓存181上的、用于冗余码生成的条带。该条带及从该条带生成的冗余码是脏数据。代码脏队列901包括用于为了冗余码生成而从其他节点接收到的条带的队列。由于节点101属于多个保护层,所以可以准备不同保护层的条带类型的队列。在图10的例子中,示出了站点条带类型及地理条带类型的队列。使用条带类型与数据位置(节点)组成的的每个组的脏队列。各个队列表示属于对应条带类型且保存在对应节点的物理区域内的数据的列表。“SITESTRIPETYPE(站点条带类型)#0,0”的队列是属于站点条带类型编号为0的站点条带、且保存在节点编号为0的节点内的数据的队列。中间脏队列904表示未反映至驱动113的缓存181上的中间代码。中间代码是根据新条带与旧条带生成的数据,例如为新条带与旧条带的异或(异或结果)。中间代码是新条带与旧条带的差值数据,节点101能够使用中间代码将驱动113中保存的旧条带的冗余码更新成新条带的冗余码。中间代码的使用方法详见后述。中间脏队列904的结构与脏队列901中的冗余码用的队列相同。也就是说,在本例中,使用每个条带类型与数据位置(节点)的组合的队列。由于节点101属于多个保护层,所以可以准备不同保护层的条带类型的队列。在图10的例子中,示出了站点条带类型和地理条带类型的队列。干净队列902表示已反映至驱动113的缓存181上的数据。空闲队列903表示尚未使用的缓存181的区域。缓存位图表905包括数据的逻辑地址、缓存地址(存储器上的位置)、大小、脏位图(dirtybitmap)以及分段位图(stagingbitmap)。例如,一个条目表示缓存181内的规定大小的一插槽(slot)的信息。逻辑地址与参照图8说明的条带的逻辑地址对应。从其他节点101传送来的条带的逻辑地址例如包括站点编号、节点编号、LDEV编号以及LBA偏移量。脏位图表示该区域的哪个部分是脏状态。分段位图表示该区域的哪个部分已暂存在缓存181上了。例如,1位对应驱动113的1块。图11表示站点保护层(层编号为2)的映射图像。基本上,节点保护层(层编号为1)和地理保护层(层编号为3)的映射图像也一样。以下,条带类型的周期(cycle)数用c表示,冗余码数量(奇偶校验码数量)用p表示,条带数量(数据个数)用d表示。在图11的例子中,周期数为5,冗余码数量为1,条带数量为3。具体地,在一个站点条带类型中,根据最多三个条带生成一个冗余码,并将其保存到站点条带类型内的节点中。如后所述,冗余码根据3以下的任一数量的条带来生成。若生成多个冗余码,则分布保存到不同的冗余码节点。表621表示条带类型的数据节点与冗余码节点。列分别与节点编号为0~8的节点对应。表示节点编号为0~8的节点的物理存储区域的圆柱622各自的容量用圆柱的高度来表示。在表621中,单元格内的数字表示条带类型编号。D区域内的单元格表示数据节点所属的条带类型编号。Q区域内的单元格表示冗余码节点所属的条带类型编号。S区域的单元格表示备用节点所属的条带类型编号及所保存的数据类型(条带/冗余码)。在节点中发生了故障的情况下,备用节点是临时保存该节点的数据的节点。由此,在节点故障时能够恢复冗余度。写入数据的条带类型编号是通过该写入数据的条带编号及接收并保存该写入数据的节点的节点编号来决定的。具体地,节点101通过(写入数据的逻辑地址的值÷条带大小)来决定条带编号。在本例中,逻辑地址是池卷内的逻辑地址。也可以使用虚拟卷内的逻辑地址。而且,节点101通过(条带编号modc)来计算该写入数据的行号。节点101参照层编号为2的站点静态映射表211,并根据自身装置的节点编号和算出的行号来决定条带类型编号。例如,节点101在站点静态映射表211中选择包含自身节点编号的条目来作为数据节点,并将行号示出的顺序的条目的站点条带类型编号决定为该写入数据的站点条带类型编号。而且,节点101参照层编号为2的站点静态映射表211来决定条带所属的写入条带类型的冗余码节点。关于这点,在后述的写处理的说明中再进行说明。在图11中,例如,节点编号为0、5、7的节点中的行号为0的条带属于条带类型编号为0的条带类型。节点编号为1、3、8的节点中的行号为4的条带属于条带类型编号为13的条带类型。而且,属于条带类型编号为0的条带类型的冗余码节点的节点编号为1,属于条带类型编号为13的条带类型的冗余码节点的节点编号为4。有几个节点保存多个条带类型的冗余码。在图11的例子中,D区域内的条带分布均匀。也可以根据节点的存储容量,使条带类型的数据节点数变化。另外,在节点的总数很少或者产生零数的情况下,还可以减去一部分条带类型的冗余码数。不同的条带类型可以通过不同的算法来进行冗余化。条带类型内的冗余码节点选自与该条带类型的数据节点不同的节点。针对冗余码节点,集中来自数据节点的数据写入。因此,以尽可能均匀地配置冗余码的方式来选择冗余码节点。由此,节点101的寿命平均化。当驱动113为SSD时尤为有效。而在节点之间的寿命不平均的情况下,还可以改变冗余码Q的配置以实现平均化。备用节点是在发生节点故障时用于恢复冗余度的临时的保存目标。保存冗余码的备用节点选自与同一条带类型的数据节点不同的节点。在图10的例子中,节点编号为6的节点发生了故障。与条带或冗余码的条带类型编号对应关联的备用节点临时保存对应的条带或冗余码。例如,节点编号为0的节点保存节点编号为6的节点所保存的条带类型编号为2的条带。节点编号为7的节点保存节点编号为6的节点所保存的条带类型编号为3的冗余码Q。数据的恢复由保存该数据的节点或不同的节点来执行。保存在备用节点中的数据(条带及冗余码)在节点恢复时或增设节点时从备用节点返回到一个节点。在上述例子中,条带类型并不依赖于池卷的LDEV编号,而是通过池卷内的地址来决定。不同池卷的同一卷内地址的数据属于同一条带类型。一个池卷的地址区域分为多种条带类型。如后所述,冗余码节点不依赖于条带的卷内地址,而是从同一条带类型内的条带中选择任意数量的任意条带,并根据所选的条带生成冗余码。图12A示出分布式存储系统中的节点101的状态转换。图12B示出分布式存储系统中的站点102的状态转换。基本上,状态转换在各个保护层都一样。正常状态表示初始状态及运行中的正常状态。状态在发生驱动故障之后过渡至重建中的状态。节点101能够在重建过程中通过汇集读写(collectionread/write)来接受应用程序的I/O。在闭塞状态下,节点101故障停机,无法执行I/O。但有驱动113并未发生故障的情况。在这种情况下,通过仅向引起闭塞的节点101反映在闭塞发生后新写入的数据的数据再同步,能够修复数据,并使闭塞状态变成正常状态。图13表示分布式存储系统的一个节点101中的虚拟配置层的逻辑结构例。虚拟卷1301A、1301B是从主机(同一节点或其他节点)中识别出的虚拟的存储区域,是在从主机发出读出或写入指令时成为对象的卷。池1306由一个以上的池卷构成。在图13的例子中,池1306包括池卷1303A~1303F。池1306还可以包括其他节点的池卷。池卷1303A~1303F由驱动113的存储区域构成。具体地,处理器119通过对池卷的逻辑地址与驱动113的物理地址的对应关系进行管理来构成逻辑性的池卷。详见后述。存储管理员能够根据经由输入输出设备发给处理器119的指示,在池1306上创建多个虚拟卷。处理器119仅针对在虚拟卷中被发出了写入指令的存储区域从池1306分配实际存储区域。在图13的例子中,虚拟卷1301A包含虚拟页面1302A、1302B、1302C,并且分别分配有逻辑页面1304A、1304E、1304C。虚拟卷1301B包含虚拟页面1302D、1302E,并且分别分配有逻辑页面1304D、1304F。逻辑页面被动态地分配给虚拟页面。例如,在向虚拟卷1301A的虚拟页面1302A首次发出写入指令之后,处理器119将该虚拟页面1302A与池卷1303A的未使用区域(逻辑页面1304A)建立对应关联(对应关联1305A)。对于第二次向同一页面发出的读出/写入指令,处理器119也根据对应关联1305A来执行相对于池卷1303A的逻辑页面1304A的I/O处理。通过上述动作,从主机来看能够像是节点101对虚拟卷执行I/O处理(访问处理)那样。通过用虚拟卷仅向要使用的区域分配池卷的区域,能够有效地利用有限的存储区域。当分配给虚拟页面的逻辑页面的所有数据均被擦除时,处理器119解除该虚拟页面与逻辑页面的对应关联,并将该逻辑页面作为未使用页面来管理。由此,能够更有效地利用有限的存储区域。池1306由多个层级115、116、117构成。在本例中,池1306具有SSD层级115(TIER1)、SAS层级116(TIER2)和SATA层级117(TIER3)这三个层级。SSD层级115的性能最高,SATA层级117的性能最低。池卷分为层级115、116、117这三类,池卷属于某一个层级。池卷1303A属于层级115,池卷1303B、1303C属于层级116,池卷1303D、1303E属于层级117。各虚拟页面具有来自主机的I/O处理的特性。例如,存在I/O频率(访问频率)高的虚拟页面和I/O频率低的虚拟页面。该特性称为访问局部性(accesslocality)。将I/O频率高的虚拟页面配置在上位层级,也就是将I/O频率高的虚拟页面分配给上位层级的逻辑页面。由此,能够提高系统整体的性能。此外,当虚拟页面被分配给了某一层级的逻辑页面时,还表现为该虚拟页面被分配给了层级或被分配给了池卷。例如,池1306中存在能够处理100IOPS的SSD层级115和能够处理10IOPS的SAS层级116,具有具备20IOPS特性的虚拟页面1302A和具备50IOPS特性的虚拟页面1302C。页面1302A被分配给了SSD层级115,页面1302C被分配给了SAS层级116。由于SAS层级116最大只能发挥10IOPS的性能,所以节点101作为整体只能发挥10+20=30IOPS的性能。将该状态称为瓶颈状态。若能将虚拟页面1302C的分配从SAS层级116提升(promotion)至SSD层级115,则节点101作为整体能够发挥50+20=70IOPS的性能。如上所述,通过将I/O频率高的虚拟页面分配给上位层级,能够提高系统整体的性能。上述提升将逻辑页面1304C的数据复制到未使用的逻辑页面1304B,并将虚拟页面1302C与逻辑页面1304C的对应关联(1305C)变更为虚拟页面1302C与逻辑页面1304B的对应关联(1305B)。页面的降级(demotion)也能同样地来执行。图表271示出页面的I/O频率(I/O负载)的分布。处理器119能够根据页面负载分布表217创建表示该图表271的负载分布数据。分布曲线1309是示出在按照I/O频率从高到低的顺序排列页面时的各页面的I/O数的线。也就是说,I/O数多的页面位于左侧,I/O频率低的页面位于右侧。层级分配阈值1308A、1308B是决定将哪个I/O频率的页面分配给哪个层级的阈值。如前所述,通过将I/O频率高的页面分配给上位层级,能够提高系统整体的性能。因此,能够以I/O频率从高到低的顺序从上位层级分配虚拟页面。在启动存储系统之后,在尚未创建页面负载分布271的阶段,层级分配阈值1308A、1308B的初始值例如可以为0。例如,处理器119将从层级分配阈值1308A与分布曲线1309的交点起属于I/O频率最高的页面范围1310A内的页面分配给SSD层115。处理器119将属于从层级分配阈值1308A与分布曲线1309的交点至层级分配阈值1308B与分布曲线1309的交点的范围210B内的页面分配给SAS层116。处理器119将从层级分配阈值1308B与分布曲线1309的交点到I/O频率最低的页面为止都分配给SATA层117。可以由存储管理员指定层级分配阈值1308A、1308B的值,也可以由处理器119计算层级分配阈值1308A、1308B的值。例如,处理器119还可以基于虚拟页面的I/O频率分布、层级的容量以及该层级的驱动性能来决定定义该层级的层级分配阈值。层级的驱动性能例如通过该层级内的每单位时间内的I/O数据量来预先定义。图14表示分布式存储系统中的多个节点的页面映射的例子。在图14中,分布式存储系统提供虚拟卷1301A~1301C。节点101A提供虚拟卷1301A。节点101B提供虚拟卷1301A、1301B。节点101N提供虚拟卷1301C。节点101(节点101A~101N中的任意节点)能够保存两种卷。一种是由自身系统的驱动113的存储区域构成的池卷1303A。池卷1303A所保存的数据配置到自身系统的驱动113。另一种是将其他节点101的池卷1303B直接映射(straightmapping)的卷1303C。卷1303C被作为池卷来管理。节点101能够经由池卷1303C来进行其他系统的池卷1303B的I/O处理。该功能被认为是存储外部连接功能。节点101将卷1303C的访问目的地地址转换成其他系统的池卷1303B的地址,并向该其他系统的节点101发送指令。节点101保存自身系统的池卷1303C与其他系统的池卷1303B之间的未图示的地址映射表。处理器119将自身系统内的主机访问量多的虚拟页面映射到自身的池卷1303A,并将其他系统内的主机访问量多的虚拟页面映射到该其他系统的池卷1303B。由此,将会缩短到主机的响应时间。被分配给其他系统的池卷1303B的虚拟页面的数据保存在其他系统的驱动113中。各节点101基于网络性能及各层级的自身系统的驱动性能来选择进行映射的其他系统的池卷的数量、或分配给其他系统的池卷的虚拟页面,并以网络不会成为瓶颈的方式配置逻辑页面。该配置的详细情况参照图23、24A、24B在后面进行叙述。分布式存储系统还可以以系统整体来管理存储容量,使各节点101的池卷的数量根据虚拟卷的页面使用容量而增减。节点101还可以通过直接映射而将池卷1303A用作虚拟卷。由此,能够减少映射表的存储器使用量,并能提高性能及可用性。图15是表示分布式存储系统的读处理的流程图。处理器119参照页面映射表215,针对接收到的读出指令的指定地址判断访问目的地虚拟页面是否尚未分配给池卷(S501)。指定地址例如是用虚拟卷编号及逻辑地址来指定的。LBA用开始LBA及块的长度来表示。在虚拟页面尚未分配的情况下(S501:是),处理器119判断是否需要排他(S506)。处理器119参照虚拟卷管理表218在虚拟卷的所有者节点仅为自身节点的情况下判断为不需要排他。在需要排他的情况下(S506:是),处理器119取得排他(S507),并再次判断虚拟页面是否尚未分配给池卷(S508)。在排他方法的一例中,处理器119使用哈希函数来从读出地址中特定唯一决定的代表节点,并向代表节点委托调解,然后代表节点进行调解。在虚拟页面已分配完毕的情况下(S508:否),处理器119解除排他(S512),并进入步骤S502。在虚拟页面尚未分配给逻辑页面的情况下(S508:是),处理器119返回零数据(S509),并与步骤S506的判断同样地判断是否需要排他(S510)。在需要排他的情况下(S510:是),由于已取得了排他,所以处理器119解除排他(S511)。在步骤S501中虚拟页面已分配完毕(S501:否)、且虚拟页面被分配给了池卷的情况下(S502:是),处理器119确保自身系统的缓存区域,从该池卷中读出数据,并返回该读出数据(S504)。处理器119参照池卷管理表219及未图示的外部连接管理信息,来判断虚拟页面是否被分配给了自身系统的池卷。在虚拟页面经由自身系统的池卷1303C被分配给其他节点101的池卷1303B的情况下,该虚拟页面被判断为已分配给了其他系统的池卷。在确保缓存区域时,处理器119参照缓存信息204来特定与对象逻辑地址建立了对应关联的缓存区域。在对应的缓存区域并不存在的情况下,处理器119从空闲队列903中确保新的区域。在空闲队列903为空的情况下,处理器119从干净队列902中确保新的区域。在干净队列902为空的情况下,处理器119转储脏队列900、901或904内的区域并使其变成空闲区域。在访问目的地虚拟页面被分配给了其他系统的池卷的情况下(S502:否),处理器119向该其他节点101传送读出指令(S505)。处理器119在自身系统内并不缓存读出数据。也就是说,若虚拟页面的分配目的地为其他节点,则处理器119并不将读出数据缓存到自身系统的存储器118(readthrough),而是由其他节点101缓存读出数据。图16是表示同步写处理的流程图。本处理是在从主机(例如应用程序)发出写入指令的情况下执行的。本处理除了向自身系统的池卷内保存写入数据之外,为了生成站点冗余码(节点间冗余码)和地理冗余码(站点间冗余码),还向其他节点101传送写入数据。接收到写入指令的节点101的处理器119判断页面是否尚未分配(S601)。具体地,处理器119参照页面映射表215从写入指令的指定地址(虚拟卷编号及LBA)中检索对应的池卷编号和LBA。处理器119根据有无对应的地址信息来判断虚拟页面是否尚未分配。在本例的系统中,启动了多个应用程序,系统内的至少一个节点使各个应用程序动作。在此,认为数据的读出请求就是大多是对接收到该数据的写入指令的节点发出的。因此,在本申请中,节点在接收到写请求之后会将该写请求的数据优先保存到该节点的存储区域内。由此,针对读出请求能够从该节点读出的概率提高,能够快速地响应读出请求。但在与节点101连接的驱动113的性能相对于网络103的性能较低的情况下,有时将数据向多个节点分布更能提高作为系统的吞吐量。考虑到以上情况,根据网络103的性能或与节点101连接的驱动113的性能,还可以使用轮转调度(roundrobin)等技术来改变分配目的地的存储区域。另外,上述的分配方案并不仅是基于性能这一指标,在将闪存用作驱动113的情况下,还可以考虑使用寿命等指标来有效提高性价比。在虚拟页面尚未分配的情况下(S601:是),处理器119执行将虚拟页面分配给池卷的处理。处理器119首先判断是否需要页面映射表215的更新的排他(S611)。取得排他的理由是因为,在由其他节点101同时分配虚拟页面的情况下,防止相对于虚拟页面分配多个不同的池卷的区域。处理器119参照虚拟卷管理表218,在所有者节点包括除自身节点之外的节点的情况下判断为需要排他,在所有者节点仅为自身节点的情况下判断为不需要排他。在判断为需要排他的情况下(S611:是),处理器119取得排他(S612)。排他的取得方法与图16所说明的读处理中示出的方法相同。接着,处理器119再次判断虚拟页面是否尚未分配(S613)。这是因为,在步骤S601中判断了虚拟页面是否已分配完毕之后、且在步骤S612中取得排他之前,有通过其他节点取得排他的可能性。在页面尚未分配的情况下(S613:是),处理器119决定分配虚拟页面的池卷(S614)。处理器119首先检查自身系统的池卷中有无空闲页面。具体地,参照本地区域量表802的目标量和使用量,判断在写入数据的条带类型的条目中使用量是否比目标量少。在使用量比目标量少的情况下,处理器119将该虚拟页面分配给自身系统的池卷。例如,节点101保存未图示的本地区域层级管理信息,并选择包含空闲页面的最上位层级的池卷。在空闲区域不存在于自身系统中的情况下,处理器119将其他系统(其他节点)的池卷挂载(mount)到本地,并向该区域分配页面。当决定池卷时,处理器119向该池卷分配虚拟页面(S615)。具体地,处理器119更新页面映射表215的对应关系。根据本步骤,在接收到写请求的节点已占用了很多存储容量的情况下,或者在节点的驱动113的性能不足的情况下,通过利用其他节点的存储区域,来防止接收到写请求的节点的性能劣化,以谋求系统整体的容量效率和性能维持。接着,处理器119判断是否需要排他(S616)。该判断与步骤S611相同。在需要排他的情况下(S616:是),处理器119解除已取得的排他(S618)。在不需要排他的情况下(S616:否),处理器119进入步骤S602。处理器119参照页面映射表215判断写入指令在虚拟卷中的逻辑地址(虚拟页面)是否被分配给了自身系统池卷(步骤S602)。在未分配给自身系统池卷的情况下(S602:否),处理器119向其他节点101传送写入指令(S603)。其他节点101依照本流程图执行写处理。为了维持数据一致性,处理器119在自身系统内不缓存写入数据。在虚拟页面被分配给了自身系统池卷的情况下(S602:是),处理器119开始每个保护层的写处理(S604~S610)。例如,分布式存储系统由三个保护层构成。这些保护层例如是节点保护层、站点保护层、地理保护层。处理器119在三个保护层共计重复进行三次处理。此外,在本例中,节点保护层设定为同步写入。处理器119判断该保护层是否为同步写入对象(S604)。具体地,处理器119在虚拟卷管理表218中参照与写入对象的虚拟卷对应的Sync/Async(同步/异步)字段进行判断。在不是同步写入对象的情况下(S604:否),处理器119无需将写入数据(条带)向其他节点101传送,而是在数据映射表701的区域的状态字段内记录“未完成”。状态字段表示各保护层的状态。状态字段表示“未完成”的缓存181上的数据一直维持到进行传送为止。处理器119判断所有保护层是否已完成(S608),若完成了则结束本处理。在尚未完成的情况下(S608:否),处理器119从步骤S604开始重复下一个保护层的处理。在同步写入对象的情况下(S604:是),处理器119在自身系统的缓存区域181内实施缓存确保(S605)。该方法与参照图15说明的方法相同。接着,处理器119判断是否传送中间代码(S606)。中间代码表示旧数据(至今为止的最新数据)与新数据(本次写入的数据)的更新差值。例如,在为相当于RAID5的冗余数据的情况下,中间代码是旧数据与新数据的异或值。另外,在使用擦除码(ErasureCoding)的情况下,处理器119还可以生成将行列的系数相乘得到的多个异或结果。作为是否需要传送中间代码的判断基准,能够使用几个基准。例如,处理器119在传送目的地节点101的冗余码区域的剩余量比阈值少时判断为需要传送中间代码。由此,能够由传送目的地节点可靠地保存必需的冗余码。处理器119从传送目的地节点101获取传送目的地节点101的本地区域量的信息。处理器119还可以在自身系统内进行缓存命中时的响应减少效果很小的情况下生成中间代码。例如,当设定为在自身系统内写入的模式时、当在自身系统内使用了规定的低延迟驱动时、当自身系统处于比阈值高的负载状态时、或者在节点间通信距离比阈值长时,处理器119传送中间代码。或者,处理器119在驱动113的写入寿命充足的情况下传送中间代码。此外,在写入模式下,处理器119在将写入数据从缓存181转储到驱动113之后,向主机返回完成响应。在判断为需要传送中间代码的情况下(S606:是),处理器119从缓存181上的条带(写入数据)和从驱动113读出的旧条带中生成中间代码(S609),并向对象节点(传送目的地节点)的缓存181内写入中间代码(S610)。处理器119使用以下方法来特定中间代码的对象节点(传送目的地节点)。处理器119通过下述式来计算行号(图11中的D区域的纵轴的值)。行号的计算方法与参照图11的条带的行号的计算方法相同。(地址值/条带大小)modc处理器119参照该保护层的静态映射表,根据计算出的行号与自身节点编号来决定条带类型编号(图11中的单元格内的数字)。处理器119参照该保护层的静态映射表,根据条带类型编号来决定传送目的地节点101。处理器119将中间代码与自身地址信息(站点编号、节点编号、LDEV编号、LBA、TL(传送长度、TransferLength))和表示为中间代码的标识符一起向传送目的地节点101的地址传送。LDEV编号是池卷的标识符。处理器119例如参照保护层编号为2的静态映射表211将最终保存站点冗余码Q的冗余码节点决定为传送目的地节点。处理器119例如参照保护层编号为3的静态映射表212A决定传送目的地站点(地理冗余码R的保存站点)。例如,预先设定了站点的代表节点101,处理器119将中间代码与上述附带的数据一起向该代表节点101传送。代表节点101使用哈希函数根据传送源地址信息来计算哈希值。代表节点101参照一致性哈希表212B根据计算出的哈希值来决定传送目的地节点101。该节点101是地理冗余码R的最终保存节点(冗余码节点)。经由代表节点101的数据传送方法存在如下的问题:需要两次数据传送、向代表节点101的访问集中、以及代表节点101的故障会造成可用性降低。因此,也可以准备多个代表节点101并通过轮转调度来选择传送目的地代表节点101。处理器119也可以代替代表节点101决定直接保存地理冗余码R的其他站点节点。具体地,传送源节点101预先保存传送目的地站点的一致性哈希表212B,处理器119依照该表来决定传送目的地节点101。在各节点101保存其他站点的一致性哈希表212B的情况下,一致性哈希表212B的站点间的同步成为开销。因此,分布式存储系统也可以不进行由排他更新实现的严密的同步,而是定期进行更新。在这种情况下,可以参照自身站点的一致性哈希表212B来判断从其他站点接收到中间代码的传送目的地节点101是否为正确的目的地,在传送目的地错误的情况下,向正确的节点101传送接收到的数据。在传送目的地节点101中,在存在与中间代码为同一传送源地址的脏数据的情况下,传送目的地节点101的处理器119计算中间代码与该脏数据的异或,并更新缓存181上的数据。传送目的地节点101的处理器119将与该中间代码相关的缓存信息连接到中间脏队列904。传送目的地节点101还可以计算从作为同一冗余码的基础的不同传送源传送来的中间代码的异或,并更新缓存181上的数据。在步骤S606中判断为不传送中间代码的情况下(S606:否),处理器119将写入数据向对象节点(传送目的地)的缓存181写入(S607)。本例将写入数据主要优先保存到接收了访问的节点。如上所述,通过向不同于写入目的地的对象节点(传送目的地)传送数据,而在缓存上形成确保了冗余性的状态。而且,通过另外生成节点间的冗余码,在维持着冗余性的状态下减少用于冗余码的存储容量,提高效率。传送目的地节点101的决定方法及数据传送方法与步骤S610中的方法相同。传送源节点101将写入数据与传送数据的自身地址信息(站点编号、节点编号、LDEV编号、LBA、TL)和表示为正常数据的标识符一起向传送目的地节点传送。在传送目的地节点101中,处理器119将与写入数据对应的缓存信息连接到对应的冗余码的脏队列901。以减少写入流量为目的,也可以在向其他系统的池卷而非自身系统的池卷写入写入数据时,采用以往的擦除码(ErasureCoding)方式。以往的擦除码(ErasureCoding)方式将写入数据进行条带分割,用分割后的数据生成冗余数据,并将分割数据与冗余数据分布式保存到多个节点。也可以在冗余码中包含编码方式的信息,从而能够判断使用了哪种冗余码生成方法。以往的擦除码(ErasureCoding)方式的适用对象也可以仅限定为通过来自其他系统的读出而不会使网络成为瓶颈的数据。图17表示异步写处理的流程图。本处理与主机I/O异步执行,在指定了Async(异或)的保护层内传送尚未传送到其他系统的数据。图17中的步骤S702~S708与图16中的步骤S605~S608相同。在此,仅对差别进行说明。在各节点101中,处理器119参照页面映射表215对已登记的所有虚拟卷执行本处理。处理器119判断作为对象的虚拟页面是否为异步写入的对象(S701)。具体地,处理器119在数据映射表701中检查与虚拟页面对应的池卷上的区域的状态。在该保护层中,若是“未完成”的状态,则处理器119判断为异步写入对象(S701:是),进入步骤S702。在所有虚拟页面的处理结束之后(S709:是),处理器119结束本流程。处理器119可以周期性地执行异步写处理,也可以连续地执行。处理器119还可以根据“未完成”状态的页面量来动态地改变本处理的执行频率和数据传送速度。图18表示转储处理的流程图。本处理在缓存181上有脏数据、也就是存在未反映到驱动113的数据的情况下,与主机I/O异步执行。由于冗余数据的生成处理基本上在各节点内完成(在节点内在与来自另一发送方的数据彼此之间生成冗余数据),所以能够减少用于生成冗余数据的节点之间的通信量。另外,冗余数据的发送目的地根据静态映射表211而分布在多个节点之间,所以能够有效地分布式处理转储。在缓存181中存在两种脏数据。一种是保存在自身系统的驱动113中的写入数据。另一种是为了生成冗余数据而从其他节点101传送来的数据。在此,从其他节点传送来的数据包括中间代码。脏数据由数据脏队列900、代码脏队列901及中间脏队列904进行管理。图18的流程图表示利用数据脏队列900及代码脏队列901管理的脏数据的转储。当本处理开始时,处理器119参照数据脏队列900及代码脏队列901查找作为对象的脏数据。处理器119判断对象数据是否为保存在自身系统的驱动113中的写入数据(S801)。在对象数据由数据脏队列900示出了的情况下,对象数据为写入数据。在对象数据为写入数据的情况下(S801:是),处理器119将该写入数据写入自身系统的驱动113(S808)。数据以日志构造化形式保存。在将写入数据以日志构造化形式保存到驱动113时,如图8所示,处理器119将池卷中的逻辑地址与驱动113中的物理地址的对应关系以及数据的状态记录到数据映射表701。而且,处理器119在反向映射表703中记录池卷中的逻辑地址与驱动113中的物理地址的对应关系。在驱动113中无空闲区域的情况下,处理器119还可以在执行参照图19说明的容量耗尽管理处理之后,执行向驱动113的数据写入。处理器119判断是否处理了所有的脏数据(S806)。在所有脏数据的处理均已结束的情况下(S806:是),处理器119结束本流程。在对象数据不是写入数据的情况下,也就是说,在对象数据是用于生成冗余码的条带的情况下(S801:否),处理器119查找同一条带类型的脏数据(S802)。具体地,处理器119在代码脏队列901中的对象数据的队列中,获取包含对象数据在内的、从不同节点101传送来的多个条带。处理器119依照用户指定的数据保护方针(XDYP:相对于最大数据(Data)量X设冗余数据量Y)尽可能地获取X个条带。关于数据保护方针的用户指定,参照图27详见后述。具体地,处理器119在不超过站点静态映射表211或地理静态映射表212A所示的数据节点的ID数的范围内,尽可能多地选择条带。由此,进行尽可能满足用户指定的冗余化。所选择的条带的传送源节点均不相同。在对象数据的队列示出来自属于该条带类型的所有数据节点各自的条带的情况下,处理器119选择来自所有数据节点的条带。在条带的选择过程中,不询问传送源的逻辑地址。像这样,作为冗余码生成的要素的条带的数量并未固定,是不定的。另外,作为冗余码生成的要素的条带的逻辑地址的组也是不定的。由此,能够仅利用传送来的条带高效地生成冗余码。在代码脏队列901中,在不存在来自同一条带类型的其他节点101的条带的情况下,处理器119也可以将单一的对象数据作为冗余码而保存到驱动113。另外,在进行同步写处理时向冗余码生成目标的节点传送写入数据的情况下,若在当时对应的写入数据尚未被转储到传送源节点的驱动的时间点重新发生同步写处理,则有可能在缓存上将写入数据重新覆盖,而无法再复原数据。因此,在冗余数据保存目标节点中,必须仅使用传送源节点完成了转储的数据来用于冗余数据的生成。为了实现这点,也可以将传送源节点进行了转储的意思通知给冗余数据保存目标节点,并只在接收到该通知的情况下作为冗余数据保存目标节点内的转储对象。另外,也可以设为在进行传送源节点的转储的时间点向冗余数据保存目标节点传送数据。另外,也可以设为在进行缓存上的数据更新时不覆盖(例如以日志缓冲区的方式保存)。处理器119也可以从中间脏队列904的同一条带类型的队列中查找脏数据。处理器119计算保存在驱动113内的对应冗余码与中间代码的异或结果并更新冗余码。在更新的冗余码仅是根据与对象数据的传送源节点101不同的节点101的条带生成的情况下,处理器119根据对象数据和更新冗余码而生成新的冗余码。处理器119还可以以使旧数据(旧条带)的比率尽可能变大的方式来选择生成冗余码的条带。处理器119在仅利用旧条带就能够生成冗余码的情况下如上述那样选择条带。通过增大冗余码生成中的旧数据的比率,能够将该冗余码变成无效数据的时间提前,并有效地使冗余码保存区域的空闲容量增加。处理器119从所选的条带中计算冗余码,并将其写入驱动113(S803)。向驱动113的写入是与步骤S808基本同样地通过日志构造化形式进行的追加。由此,省略旧数据的读出,实现快速且高效的冗余码的生成及驱动写处理。处理器119不是数据映射表701中而是在冗余码映射表702中记录算出的冗余码的保存目标的物理区域与池卷的页面的对应关系。处理器119还在反向映射表703中记录池卷中的逻辑地址与驱动113中的物理地址的对应关系。由于冗余码是根据多个条带生成的,所以映射表对于一个物理地址具有多个参照。处理器119在将冗余码写入驱动113之后通知传送源节点101(S805)。传送源节点101使数据映射表701中的对象数据的对象层的状态变成“完成”。状态字段是为了在节点故障时判断是否将该数据作为再传送对象而参照的。在处理完所有脏数据之后(S806:是),处理器119结束本流程。另外,在使用擦除码(ErasureCoding)等具有两个以上的冗余码的编码时,若在生成各自的冗余码的多个节点中独立地以各个数据组合来生成冗余码,则有数据复原变得很困难(失去MDS性、用于复原的计算量增大等)的情况。于是,在生成第一个冗余码的节点内生成了冗余码之后,参照静态映射表211来特定生成第二个及之后的冗余码的节点,并将在生成第一个冗余码的节点内生成了冗余码的数据的地址组合通知给生成第二个及之后的冗余码的节点。生成第二个及之后的冗余码的节点通过用所通知的数据的地址组来生成第二个及之后的冗余码,能够保持MDS性并实现数据复原。另外,作为其他方法,也可以考虑以生成第一个冗余码的节点生成第二个及之后的冗余码并将冗余码传送到对应的节点的方式来实现的方法。在中间代码的转储过程中,处理器119根据保存在驱动113内的旧冗余码和中间代码生成新的冗余码,并覆写到驱动113内的旧冗余码中。由于是覆写,所以映射表不变。基于中间代码的冗余码更新虽需要读出旧数据,但能够减少冗余码节点中的本地区域使用量。在中间脏队列904中存在与一个冗余码相对的多个中间代码的情况下,处理器119计算所有中间代码的异或来生成新的中间代码,并通过该新的中间代码更新冗余码。与同一冗余码对应的中间代码包括同一逻辑地址的不同世代的数据以及不同节点101的中间代码。例如,将旧冗余码设为Axor(异或)B。与同一冗余码对应的中间代码的例子是中间代码AxorA‘、中间代码BxorB‘、中间代码A‘xorA‘‘。在此,A‘‘是最新数据,A‘是最旧数据。另外,数据B是新数据,数据B‘是旧数据。处理器119能够使用冗余码映射表702来得知从中间脏队列904中选择的中间代码的冗余码的物理地址。而且,处理器119能够使用反向映射表703来特定与该冗余码对应的中间代码的逻辑地址。冗余码更新的具体例子如下所示。以下,列举使用RS码(Reed-Solomoncode:里德-所罗门码)的RAID6(伽罗瓦系数:A1~A3)为例。(1)代码脏队列901处理器119从脏队列901中选择X1~X3的脏数据,并用下述式计算冗余码P1或P2。P1=X1xorX2xorX3P2=(X1*A1)xor(X2*A2)xor(X3*A3)冗余码P1、P2分别被写入自身系统的存储设备的新区域内。(2)中间脏队列904处理器119从中间脏队列904中提取与已写入自身系统的驱动113内的旧冗余数据P1’或P2’对应的新的中间脏数据M1、M2。中间脏数据的个数并不限于2。处理器119用下述式计算新中间代码MP1或MP2。MP1=M1xorM2MP2=(M1*A1)xor(M2*A2)处理器119用下述式计算新的冗余码P1或P2。P1=P1’xorMP1P2=P2’xorMP2新冗余码P1、P2被覆写至旧区域(P1’、P2’)内。如上所述,冗余码节点101从一个条带类型内的条带中动态地选择条带,并从所选的条带中生成冗余码。由此,无需读取现有的冗余码,就能从传送来的条带中有效地生成冗余码。本例中的条带的动态选择是如下的选择:所选的条带的组合与条带数中的至少一方不确定。上述例子中,相对于条带数及地址组合这两者独立地选择条带,但其中一方也可以是固定的。在此,地址组合中的地址是由节点、卷及卷内地址指定的地址。冗余码的驱动写入也可以不适用日志构造化形式。也就是说,节点101也可以不将根据与旧冗余码同一地址组合而生成的新冗余码追加至本地区域内,而是将新冗余码覆盖旧冗余码。在不采用日志构造化形式的结构中,将与现有的所有冗余码不同地址的组合的冗余码追加到本地区域内。上述例子是仅从预先定义的条带类型内的条带中生成冗余码。与此不同地,系统还可以从任意条带的组合中生成冗余码,而无需定义条带类型。图19表示容量耗尽管理的处理的流程图。本处理在驱动113上的数据量超过了设定的目标量的情况下尝试擦除数据。由此,能够在有限的区域内保存必要的数据。擦除的数据的种类是写入数据(条带)和冗余码。本处理还可以与主机I/O异步实施。使用量和目标量的关系由本地区域量表802示出。此外,图19的流程图适用于冗余码区域及数据条带区域的数据擦除,而不适用于备用区域内的数据擦除。在每个层级中均使用了本地区域量表802的情况下,在每个层级都执行本处理。处理器119参照本地区域量表802,检查所选的对象数据类型的使用量是否超过了目标量(S901)。在对象数据类型的使用量超过了的情况下(S901:是),处理器119判断对象数据类型是否为冗余码类型(S902)。在本例中,如本地区域量表802所示,数据类型分为冗余码类型、写入数据类型(条带类型)以及备用区域上的数据类型。而且,冗余码类型分为节点冗余码、站点冗余码、地理冗余码的各个类型,写入数据类型分为各个站点条带类型。在超过了使用量的数据类型为某一种冗余码类型的情况下(S902:是),处理器119参照无效列表801B及日志构造化映射表213来检索该冗余码类型的冗余码(S907)。无效冗余码是作为计算源的所有条带均无效的冗余码。作为计算源的所有条带是已更新的旧数据,该冗余码能够擦除。在对象冗余码类型中有无效冗余码的情况下(S907:是),处理器119开放该区域(S908)。区域开放是将冗余码映射表702中的对象区域的物理地址与池卷的逻辑地址之间的关系删除,将对象区域从无效列表801B中删除并与空闲列表801C再连接,然后在本地区域量表802中减少对应的冗余码类型的区域使用量。在没有对象冗余码类型的无效冗余码的情况下(S907:否),处理器119执行冗余码的合并处理(S909)。通过本处理,能够减少冗余码的使用量。例如,在为存在冗余码P1=X’xorY’xorZ(’表示无效数据)和冗余码P2=JxorKxorL’、且J、K、Z分别存在于不同节点内的条带的情况下,处理器119能够通过P1xorP2xorX’xorY’xorL’来计算新的冗余码P3=JxorKxorZ。处理器119参照日志构造化映射表213获取构成冗余码的条带的逻辑地址及世代信息。处理器119从其他节点101获取X’、Y’、L’。处理器119通过开放上述冗余码P1、P2的区域并将新的冗余码P3写入驱动113,能够削减冗余码的使用量。还可以优先选择冗余码来实施,以使冗余码的使用量的削减量变大。在合并处理之后,处理器119再次检查对象冗余码类型的使用量是否超过了目标量(S901)。在使用量超过了目标量的情况下(S910:是),处理器119执行再平衡处理(S906)。如后所述,再平衡处理在池卷之间调节页面使用量。例如,将数据向其他层级的池卷或其他节点101的池卷(其他系统的池卷)移动。在执行过再平衡之后,处理器119进入步骤S901。在对象冗余码类型的使用量尚未超过目标量的情况下(S910:否),处理器119进入步骤S901。在对象数据类型不是冗余码类型也就是说是某一种条带类型的情况下(S902:否),处理器119判断在对象条带类型中有无能够擦除的写入数据(条带)(S903)。能够擦除的条带是已更新的旧条带,是无效条带。处理器119参照无效列表801B及日志构造化映射表213来检索该条带类型的无效条带。在有能够擦除的条带的情况下(S903:是),处理器119实施冗余码的清理处理(S904)。该处理实施与想要擦除的条带对应的冗余码的清理。实施站点冗余码及地理冗余码这两者的清理。具体地,在各保护层中执行以下步骤。(1)处理器119向擦除对象条带的冗余码节点101询问有无包含擦除对象条带在内的冗余码。对象条带例如通过站点编号、节点编号、LDEV编号及LBA来指定。(2)在作为询问目标的冗余码节点101中有包含擦除对象条带的冗余码的情况下,处理器119将擦除对象条带发送至该冗余码节点101。在无冗余码存在的情况下,该处理结束。(3)冗余码节点101根据接收到的擦除对象条带从当前冗余码中将擦除对象条带擦除,从而生成新的冗余码。例如,冗余码节点101计算擦除对象条带与旧冗余码的异或,并生成新冗余码。冗余码节点101用新冗余码覆写保存在驱动113内的旧冗余码。通过伴随上述条带擦除进行的冗余码更新,擦除了作为冗余码生成源的条带,由此,防止除该冗余码以外的条带的冗余度减少。在冗余码节点擦除冗余码的情况下,也可以询问与该冗余码节点对应的条带是否为最新版本。条带由反向映射表703所示的逻辑地址指定。在对应条带为最新版本的情况下,冗余码节点重新生成该条带的新的冗余码。接着,处理器119开放对象区域(S905)。这与步骤S908相同。之后,处理器119返回步骤S901。在备用区域的使用量超过了目标量的情况下,例如,处理器119在进行了图19的流程图中的条带的擦除之后,执行冗余码的擦除,并进一步执行再平衡。条带擦除与冗余码擦除的顺序可以颠倒。在某一步骤中使用量均变为目标量以下的情况下,不需要进行之后的步骤。图20示出容量耗尽管理的处理的概念。本图示出了冗余码的清理处理。节点101A将写入的条带781传送到节点101B(T212)。节点101C和101D也同样将条带782、783传送到节点101B。传送条带781~783分别用Z、D、J表示。在此,在节点101A的驱动113耗尽的情况下,也就是说,在节点101A的驱动113中的使用量超过了阈值的情况下,节点101A擦除旧的数据。旧的条带设为X”。X’和X”等表示历史数据(无效数据),X表示当前数据。仅通过历史条带(过去条带)生成的冗余码已经不再具有保存的意义,能够擦除。但是,从包含当前条带在内的条带集生成的冗余码无法擦除。另外,在存在这种冗余码的情况下,用于生成该冗余码的历史条带无法从驱动中擦除。这是因为条带无法复原的缘故。因此,节点在擦除历史条带之前会将条带发送至保存有该条带的冗余码的节点并进行清理。例如,在图20中,节点101B中有X”xorCxorH这一冗余码存在。节点101A在擦除历史条带X”之前将历史条带X’’发送至节点101B(T202)。节点101B根据历史条带X’’和冗余码X’’xorCxorH通过X’’xorCxorHxorX’’来计算CxorH。之后,节点101A擦除驱动113的历史条带X’’。图21表示保存重建处理的流程图。本处理在分布式存储系统内发生异常时,通过应与异常对应的各节点101来执行。各节点101的处理器119通过参照每个保护层的状态控制表,具体为参照驱动状态管理表221、节点状态管理表222、站点状态管理表223,能够检测异常的发生。如上所述,与某一节点101检测到的异常有关的信息在系统内共用。在图21中,节点101判断异常资源(驱动、节点、站点等)是否闭塞(S211)。资源的状态有三种:“正常”状态、“闭塞”状态和“警告”状态。节点101通过参照每个保护层的状态管理表能够判断异常资源的状态。如参照图11所说明的那样,预先设定有在节点或站点等某一资源中发生了故障的情况下对该资源具有的数据进行重建的节点(备用节点)。各节点101保存有表示自身节点成为备用节点的资源及应重建的数据的信息,处理器119在检测到自身节点对应的资源的闭塞状态时,重建必要的数据。在状态管理表中的状态为“闭塞”的情况下,处理器119判断异常资源的状态为闭塞(S211:是),执行优先重建(S212)。优先重建是在该保护层内从冗余度低的条带类型的数据开始按顺序执行重建。重建是根据剩余的条带及冗余数据恢复消失的数据。节点101参照各保护层的静态映射表210~212来得知由于保存有错误资源的数据消失而导致冗余度降低的条带类型及其冗余度的量。节点101彼此之间通知执行的处理及该处理的进展,等待由其他节点101进行的针对更低的冗余度的优先重建的完成。例如,节点101等待其他节点101完成冗余度为0的条带类型的重建,然后开始冗余度为1的条带类型的重建。由此,能够避免冗余度为0的条带类型的重建时间由于冗余度为1的条带类型的重建而延长。通常已知:若使用具有MDS(MaximumDistanceSeparable、最大距离可分)性的擦除码(ErasureCoding)技术,则对于任意冗余度个数的数据的消失都能修复数据。基本上,在自身系统的存储设备中保存所重建的数据的备用节点读出冗余码和条带,并重建该数据。在备用节点为高负载的情况下,其他节点也可以重建数据并向备用节点传送。另外,在故障节点的数据作废的情况下,例如,在没有虚拟卷的所有者的情况下,无需在备用节点进行重建,仅进行冗余码的变更即可。例如,备用节点写入零数据,冗余码节点通过旧冗余码的除擦除条带以外的条带和零数据来生成新的冗余码。通过闭塞资源来重新生成已消失的上位保护层的冗余码。例如,在某节点的驱动发生了故障的情况下,该节点101重新生成该节点101内的站点冗余码和地理冗余码。该节点101请求向其他节点101传送各个站点冗余码和地理冗余码生成时所需的条带。节点101能够从冗余码映射表702及反向映射表703中特定具有条带的节点。在节点内,还可以使站点冗余码和地理冗余码冗余化。虽然因冗余化造成的开销(处理器处理时间、存储容量、闪存介质的寿命消耗等)增加,但在驱动故障时不再需要进行节点间通信。另外,就节点而言,在执行优先重建之后通过备用节点来更新静态映射表210~212中的符合条件的条带类型的登记节点。另外,关于旧数据(被写入了新数据的数据),在使用该数据生成了冗余码的情况下,通过在奇偶校验码保存节点仅使与该冗余码对应的多个数据中的新数据成为脏数据,需要重新生成冗余码。各节点101检查该保护层的所有条带类型的冗余度是否已恢复(S213)。节点101相互通知数据恢复的完成。当该保护层中的所有条带类型的冗余度恢复时,处理进入步骤S214。在处理尚未在所有保护层中都完成的情况下(S214:否),分布式存储系统从步骤S211开始对更上位的保护层再次执行处理。当所有保护层的处理完成时(S214:是),分布式存储系统实施虚拟卷的所有者的重新检查(S215)。具体地,在某节点101闭塞了的情况下,预先确定的其他节点101接管该节点101具有的虚拟卷。在由步骤S211判断为并非闭塞的情况下(S211:否),也就是在状态为“警告”的情况下,节点101判断是否需要数据保存(S216)。该必要性是基于在分布式存储系统内发生数据消失的风险的程度来判断的。通常,已知变成“警告”状态的驱动与“正常”的驱动相比发生故障的概率变高。但是,即使变成了“警告”状态,也有该驱动未发生故障的情况。因此,变成存储系统的负载上升与通过保存处理来避免数据消失的风险的权衡(Trade-off)。例如,在系统冗余度为2的情况下,在两个以上的驱动变成了“警告”状态的情况下,若从警告状态的条带很多的条带类型的数据开始优先进行保存,则能够减少用于保存的移动数据量,提高效率。此处的系统冗余度在系统整体中是最小冗余度的量。在一例中,节点101在N个以上的资源变成了“警告”状态的情况下由步骤S216判断是否需要保存。N是基于系统冗余度预先设定的整数。在判断为需要保存的情况下(S216:是),节点101执行优先保存(S217)。优先保存是在变成警告状态的资源所保存的数据中将冗余度低的数据复制到预先确定的备用区域。数据的保存目的地与重建相同。在保存目的地的数据区域(备用区域)内,也可以像LRU缓存一样每当警告发生时就覆写保存数据。上述例子是基于条带类型的冗余度的量来决定执行的优先程度,但节点101也可以基于条带及冗余码的冗余度的量来决定执行的优先程度。条带及冗余码属于多个保护层,它们的冗余度的总量是该数据的冗余度的量。由此,能够在进行重建/保存处理的同时提高系统冗余度。如上所述,在节点(站点)成了闭塞的情况下,为了利用其他节点(站点)继续进行处理而预先分配了虚拟卷的所有者。例如,站点内的不同节点以及其他站点的节点分别设定为同一虚拟卷的所有者。为了实现重建和保存的高速化,还可以跨越保护层来执行重建处理和保存处理。例如,在某个驱动发生故障并执行重建处理的情况下,除了在节点内执行重建处理之外,与此同时,还利用节点间的冗余码来修复驱动的数据。由此,能够同时从更多的驱动中读取数据,并能高速执行重建。关于是否跨越保护层进行恢复,只要根据网络负载、容许负载等来调整执行程度即可。图22表示数据再同步处理的流程图。本处理作为断电时的恢复处理或复制备份处理来执行。复制备份处理是指,在重建之后,从资源更换后的备用区域的数据向新资源的复制处理。本处理的执行完成之后,资源的状态变成正常状态。正在执行本处理的节点101的处理器119判断应执行的处理是否为恢复处理(S221)。具体地,处理器119判断自身节点是否为新的节点、或者是否为正在从断电等故障中修复的状态。在正从故障中修复的情况下,处理器119判断为恢复处理(S221:是)。更具体地,处理器119作为分布式存储系统内的共用信息而保存像LAN控制器的mac地址那样在每个节点上唯一决定的标识符与节点编号的对应表,并参照该对应表判断有无自身节点向存储系统的登记。在恢复处理的情况下(S221:是),处理器119检查需要恢复的区域。检查需要恢复的区域的具体方法是,关于冗余码,参照其他节点101的数据映射表701的状态,从其他节点101中获取未反映状态的冗余码的条带。当在备用区域内重建了冗余码时,处理器119获取该冗余码。关于写入数据(条带),其他节点101用位图来管理在发生故障后写入的差值。处理器119通过从备用区域内仅复制备份该差值来进行恢复。另外,处理器119也可以参照自身系统的反向映射表703来特定最终的更新时间,并向其他节点101请求在该最终更新时间之后写入的有效数据。这样,处理器119决定恢复对象的写入数据(条带)及冗余码,并执行区域恢复处理(S225)。在应执行的处理并非恢复处理的情况下(S221:否),处理器119执行复制备份处理。处理器119对备用区域内重建的写入数据(条带)及冗余码进行复制备份。处理器119对于保护层的每层执行该处理。对于上位的保护层仅执行冗余码的复制。当处理在所有保护层中都完成之后(S277:是),本流程结束。图23表示再配置处理的流程图。本处理使分布式存储系统的页面配置最优化。本处理在如下情况下通过各关联节点101执行:向分布式存储系统中重新追加资源的情况、减少资源的情况、一部分池卷的容量耗尽了的情况、或每隔重新检查负载的变化的固定周期等。若开始本处理,则处理器119基于示出各虚拟页面的所有I/O负载的页面负载分布表217,来计算池的整体阈值(S231)。虚拟页面的所有I/O负载是该虚拟页面的所有所有者节点主机访问而产生的负载的总计。另一方面,将各所有者节点向虚拟页面进行的主机访问所产生的I/O负载称为自身系统负载。虚拟页面的I/O负载例如用I/O频率表示。整体阈值能够用与图13的说明中的层级分配阈值相同的方法来计算。各整体阈值表示层级间的边界页面I/O频率。池中的各层级的容量及I/O性能根据各层级的所有池卷的容量及I/O性能来决定。根据未图示的管理信息来管理池卷的层级、容量及I/O性能。接着,处理器119基于示出各虚拟页面的所有I/O负载的页面负载分布表217以及示出自身节点的自身系统负载的页面负载分布表217,来计算各层级中的自身系统阈值(S232)。自身系统阈值示出在利用整体阈值决定的层级内的虚拟页面中,向自身节点配置该数据的虚拟页面的边界I/O频率。图24A及图24B分别示出自身阈值的决定方法的例子。图24A及图24B的图表的观察方法与图13中的图表271相同。纵轴表示由页面的I/O频率示出的页面I/O负载,横轴表示按照自身系统I/O负载的高低顺序排列的虚拟页面。图24A、24B分别示出一个层级中的所有I/O负载曲线241及自身系统I/O负载曲线242。如上所述,分配给各层级的虚拟页面根据虚拟页面的所有I/O负载和整体阈值来决定。图24A、24B分别示出在自身节点101为所有者的虚拟页面中,分配给一个虚拟页面的虚拟页面的I/O负载分布。自身节点为所有者的虚拟页面除了包括分配给自身系统池卷的虚拟页面之外,还能包括分配给其他系统池卷的虚拟页面。图24A、24B分别示出自身系统阈值246。自身系统I/O负载比自身系统阈值246高的虚拟页面被分配给自身系统池卷。当前分配给了其他系统池卷的虚拟页面的数据被移动到自身系统驱动113。自身系统I/O负载在自身系统阈值246以下的虚拟页面被分配给自身系统池卷或其他系统池卷。具体地,处理器119判断将当前分配给了其他系统池卷的虚拟页面直接分配给其他系统池卷。处理器119判断当前分配给了自身系统池卷的虚拟页面是否根据自身系统池卷的空闲容量而将该数据移动到其他节点101(再平衡)。详见后述。图24A、24B分别示出容量极限243、驱动性能极限244以及容许网络极限245。处理器119以使分配给自身系统池卷的虚拟页面在这些极限值的范围之内的方式决定自身系统阈值246。在本例中,处理器119将容量极限243、驱动性能极限244以及容许网络极限245的最小值与自身系统I/O负载曲线242的交点处的页面I/O负载决定为自身系统阈值246。在图24A中,驱动性能极限244为最小值,在图24B中,容许网络极限245为最小值。容量极限243表示自身系统可配置的容量极限。容量极限243利用节点101的自身系统池卷容量和页面大小通过预先确定的式子来决定。以使分配给自身系统池卷的所有虚拟页面的大小在该自身系统池卷容量的范围之内的方式决定驱动性能极限244。自身系统池卷容量是由自身系统驱动113形成的池卷的容量。驱动性能极限244利用自身系统池卷的访问性能和所有I/O负载曲线241通过预先确定的式子来决定。池卷的访问性能例如用每单位时间内的I/O量来表示。以使分配给自身系统池卷的虚拟页面的所有I/O负载的总和在该自身系统池卷的访问性能的范围之内的方式决定驱动性能极限244。图24A中的剖面线区域表示分配给自身系统池卷的虚拟页面的所有I/O负载的总和。另一方面,在图24B中,剖面线区域表示其他系统I/O负载的总和,即(所有I/O负载-自身系统I/O负载)。容许网络极限245利用该其他系统I/O负载的总和与自身系统网络性能通过预先确定的式子来决定。网络性能例如用每单位时间内的I/O量表示。在将虚拟页面分配给自身系统池卷的情况下,节点101经由网络接收该虚拟页面的其他系统的访问。因此,处理器119以使其他系统I/O负载在自身系统网络性能的范围之内的方式决定网络极限245。如上所述,通过基于驱动性能及网络性能决定自身系统阈值,能够抑制在主机I/O中数据传送的过程中出现瓶颈。尤其是,通过使用驱动性能极限244,能够有效地抑制出现因配置在其他节点中的数据造成的网络上的瓶颈。此外,容量极限243是必须的,但可以不使用驱动性能极限244及容许网络极限245。接着,处理器119重新检查池中的池卷结构(S233)。处理器119在步骤S232的自身系统阈值的决定过程中,计算在各个层级中分配给自身系统池卷的虚拟页面(自身系统虚拟页面)的总容量及总I/O负载。处理器119基于这些值和各个层级中的自身系统驱动113的容量及性能来决定向其他系统的池卷1303B映射的池卷1303C的数量。在自身系统驱动113的容量或性能相对于自身系统虚拟页面总容量或总I/O负载不足的情况下,处理器119使池卷1303C的数量增加。接着,处理器119依次选择自身节点101为所有者的虚拟卷的虚拟页面,并反复执行以下步骤。首先,处理器119判断是否需要将该虚拟页面的数据从其他系统池卷移动到自身系统池卷(S234)。具体地,处理器根据整体阈值来决定该虚拟卷的层级,而且,根据自身系统阈值判断是否将该虚拟页面分配给自身系统池卷。如上所述,处理器119判断I/O负载比自身系统阈值大的虚拟页面被分配给自身系统池卷。处理器119判断是否需要将I/O负载在自身系统阈值以下的虚拟页面分配给自身系统池卷。在判断为要将该虚拟页面分配给自身系统池卷、且该虚拟页面当前被分配给了其他系统池卷的情况下,处理器119判断是否需要将该虚拟页面的数据从其他系统池卷移动到自身系统池卷。在判断为无需将该虚拟页面分配给自身系统池卷的情况下,或者,在该虚拟页面当前被分配给了自身系统池卷的情况下,处理器119判断无需将该虚拟页面的数据移动到自身系统池卷。在判断为需要数据移动的情况下(S234:是),处理器119将该虚拟页面的数据移动到自身系统池卷(自身系统驱动113)(S235)。该移动包括虚拟页面必要的层级移动。具体的程序包括以下步骤。步骤1是将数据暂存到自身系统的缓存181。步骤2是将页面映射表215的该虚拟页面所对应的池卷区域变更为自身系统的池卷。步骤3是将数据转储到自身系统池卷。步骤4是开放缓存区域。步骤5是将原本分配到的其他系统池卷的页面区域清空(例如写入零数据)使之空闲。也就是说,在该步骤中,将该区域与本地区域控制表214的空闲列表801C连接,减少本地区域量表802的使用量和有效量。像这样,由于各节点101使用自身阈值来决定向自身系统池卷移动的虚拟页面,所以在该虚拟页面被多个节点101所有的情况下,决定一个保存该虚拟页面的数据的节点。例如,在判断为当前保存有虚拟页面的数据的节点101和其他节点101分别将该虚拟页面分配给自身系统池卷的情况下,将数据移动到其他节点101。因此,与保存虚拟页面的数据的节点101为不同的节点、且最后判断为将该当前虚拟页面分配给自身系统池卷的节点101保存该虚拟页面的数据。在判断为无需将该虚拟页面的数据移动到自身系统池卷的情况下(S234:否),处理器119判断是否需要层级移动(S236)。在该虚拟页面被判断为需要分配给自身系统池卷、当前已分配给了自身系统池卷、而且当前的层级与利用整体阈值决定的层级不同的情况下,处理器119判断为需要层级移动。在判断为需要层级移动的情况下(S236:是),处理器119执行层级移动(S237)。层级移动的具体方法由与步骤S235基本相同的方法来实现。在判断为不需要层级移动的情况下(S236:否),处理器119判断是否需要对该虚拟页面进行再平衡(S238)。在本例中,虚拟页面的再平衡是指,将该虚拟页面的数据从当前池卷移动到其他系统的池卷。处理器119在判断为该虚拟页面无需分配给自身系统池卷、且当前分配有该虚拟页面的自身系统池卷已耗尽的情况下,判断需要进行将该虚拟页面分配给其他系统池卷的再平衡。处理器119参照该层级的本地区域量表802来判断该虚拟页面的条目区域是否已耗尽(不足)。例如,在从目标量减去有效量后得到的值少于阈值的情况下,判断该区域已耗尽。在判断为需要再平衡的情况下(S238:是),处理器119将该虚拟页面的数据从自身系统池卷(自身节点)移动到其他系统池卷(其他节点)(S239)。再平衡的页面移动的具体方法由与步骤S235基本相同的方法来实现。处理器119向其他节点101进行询问,或者从其他节点获取本地区域量表802的信息,选择具有保存该虚拟页面的数据且尚未耗尽的区域的其他节点101。某个节点101是否具有尚未耗尽的区域的判断是基于该节点101中的该层级的本地区域量表802来进行的。移动目的地节点101例如从该虚拟页面的所有者节点以及属于该虚拟页面的条带类型的节点之中选择。在有未处理的虚拟页面剩余的情况下(S240:否),处理器119返回步骤S234。若所有虚拟页面的处理都结束了(S240:是),则处理器119结束本处理。图25A示出结构变更处理的流程图。本处理是在变更分布式存储系统的结构时执行的。例如,在向分布式存储系统中追加新资源的情况下,由各个节点执行。若开始本处理,则处理器119变更该保护层的静态映射表(S251)。例如,在追加节点的情况下,站点保护层的各个节点101增加条带类型数,并变更多个条带类型各自的数据节点及冗余码节点。例如,一个节点101决定条带类型的新的节点结构,随之,各个节点101更新静态映射表。节点101将与当前的映射表211的一部分条带类型对应的条带节点的一部分变更成新增设的节点,并选择多个上述一部分节点将其包含至新的条带类型中。图25B示出在追加了节点的情况下的条带类型的追加以及条带的再配置的一例。节点101A~101D是现有节点,节点101E是追加的节点。各节点内的矩形表示条带的数据位置(地址),矩形内的数字表示条带类型编号。条带类型1~条带类型5是现有的条带类型,条带类型6是追加的条带类型。在追加之前,节点101E的条带地址不属于任何一个条带类型,矩形内是空的。现有节点的一部分即节点101A、101C、101D的一部分的条带地址所属的条带类型变更成条带类型6。所追加的节点101E的条带地址的一部分被分配给在现有节点中被变更了的条带类型2、3、4。像这样,将一个条带类型的条带分布给不同的节点,由此提高针对节点故障的耐受性。在所追加的节点与现有节点之间,以站点冗余码Q的使用量尽可能平均的方式重新决定冗余码节点。在上述例子中说明了节点增设,但在驱动增设和站点增设中,也同样能够执行结构变更处理。接着,各节点101执行本地区域量表802中的目标量的再计算(S252)。例如,如图9的本地区域量表802所示,目标量的再计算决定各站点条带类型、各保护层的冗余码、以及备用区域的目标容量。各保护层的冗余码的目标容量例如根据用户指定的(由图27说明)数据保护的方针(XDYP:最大数据(Data)量X、冗余码数量Y)例如通过下式来决定。目标容量=整体容量×Max(Y÷资源量,Y÷(X+Y))(其中,资源量>Y)整体容量是节点101的本地区域的整体容量,Max(A,B)是A和B中的最大值,资源量是保护层中的资源的数量。在节点保护层中,资源量是节点内的驱动数量;在站点保护层中,资源量是站点内的节点数量。例如,备用区域的目标量是固定值,各个站点条带类型的目标量是所有容量的剩余量的等分。接着,执行冗余码的再平衡(S253)。这是相对于变更前和变更后的保护层的静态映射表的差值,执行冗余码的替换处理。具体地,将差值数据(中间代码)发送至冗余码节点,冗余码节点通过中间数据更新旧冗余码。此外,也可以代替实施冗余码的再平衡,而是记录以前的保护层的静态映射表,并保存冗余码的对应关系。最后,处理器119执行页面的再平衡、再配置(S254)。本处理是相对于新追加的节点或驱动执行页面的再配置。具体方法如参照图23进行的说明那样。此外,在冗余码及备用区域的设定目标无法达成的情况下,也可以通过反馈控制等已知方法来逐渐削减目标量。根据本结构,能够在考虑系统整体的性能的同时,控制在构成系统的各个节点应配置的数据。图26示出指令行的管理I/F的一例。在同一节点101上,应用程序2601、API2603、以及由软件实现的存储装置2602进行动作。应用程序2601通过API2603对存储装置2602指定分配给自身系统逻辑页面的虚拟卷内的虚拟页面。应用程序2601例如通过虚拟卷编号、LBA、数据长度来指定虚拟页面。由此,能够以页面为单位进行指定。存储装置2602参照页面映射表215来决定被分配给所指定的虚拟页面的逻辑页面的节点。在将其他节点的池卷的逻辑页面分配给指定虚拟页面、且其他节点的驱动内保存有符合条件的数据的情况下,存储装置2602从该其他节点中读取符合条件的数据,向自身系统的池卷的逻辑页面分配指定虚拟页面,并将数据保存到自身系统的驱动。另外,在页面未被分配给通过上述AIP2603指定的存储区域的情况下,当与写请求对应地实施页面的新分配时,将数据保存到自身系统的驱动。根据本结构,能够将应用程序2601接下来在自身系统中使用的逻辑页面事先配置到自身系统,能够实现应用上最佳的页面配置。节点101还可以经由用户接口从用户那里接受分配给自身系统逻辑页面(自身系统的存储设备)的虚拟卷内的虚拟页面的指定。如上所述,虚拟页面用虚拟卷的标识符及该虚拟卷内的逻辑地址来表示。而且,节点101还可以接受虚拟页面向其他节点的逻辑页面分配的指示。图27表示分布式存储系统的GUI的管理I/F的例子。GUI2701是用于供用户实施本分布式存储系统的各种设定的I/F。节点101经由输入输出设备接受来自用户的各种设定。GUI2701接受每个保护层的资源指定(2702A~C),能够进行层级性的设定。例如,在指定了站点2702A的情况下,GUI2701接受所指定的站点的各个节点(2702B)的选择。在指定了节点的情况下,GUI2701接受与所指定的节点内的卷(2702C)有关的设定。对在站点间、节点间、卷中共同设定的项目进行说明。网络性能是网络频带的信息。在指定了自动(AUTO)的情况下,各节点101根据测量网络频带得到的结果来自动决定网络频带。在指定了用户的情况下,各节点在页面配置的决定中使用所指定的网络频带。故障阈值表示在发生了向资源的通信错误等的情况下将该资源判断为闭塞的错误次数。接管者指定在资源发生了故障的情况下的接管目的地的资源。能够选择多个接管目的地。在用户未指定接管目的地的情况下,还可以自动选择存储系统。作为能够针对每个保护层进行指定的设定,有保护方针。能够指定每个保护层的数据保护方针(XDYP:最大数据(Data)量X、冗余码数量Y)。在节点数量不满足X+Y、资源的存储容量不同等情况下,存储系统在实际结构内使用与它们接近的数值。作为能够针对每个虚拟卷进行指定的设定,有同步/异步信息。能够针对每个虚拟卷指定是与每个保护层同步复制还是异步复制。各保护层的复制无效化能够指定。例如,进行将地理保护层的复制设为无效的设定。在这种情况下,当站点故障时,虚拟卷的重建将无法进行,站点故障时的重建被跳过。如上所述,能够实现如下运用:重要数据在站点之间进行异步复制,而且,重要数据进行同步复制。缓存模式能够选择“写入”及“回写”。写入模式是在将写入数据保存到缓存的同时,在实施了向驱动的反映的基础上,向主机(应用程序)通知写入完成。回写模式是一旦将写入数据保存到缓存之后,就向主机(应用程序)通知写入完成。通过指定使用节点,设定了挂载虚拟卷的节点。本设定反映在虚拟卷管理表218中。图28示出分布式存储系统的硬件结构例。与图1所示的结构例的区别是在多个节点101之间共用后端交换机(back-endswitch)2801的这一点。经由后端交换机2801共用的驱动113能够供共用后端交换机2801的各节点101访问而无需经由其他节点,是各节点101管理的本地驱动。这样,一个驱动113能够经由后端交换机2801而包含在多个节点101内。在共用后端结构的情况下,还可以将共用范围定义为域,并在域内和域之间使数据保护多维化。另外,还可以根据传送的带宽而在带宽比较宽的区间内定义域。<实施方式2>图29示出使用于冗余化的节点间的传送高效化的方法。在上述的方法中,相对于针对节点的写入量,传送量与冗余度成比例地增加。例如,在图1的例子中,在两个节点发生故障时,为了恢复数据,而从一个节点向两个节点的缓存181传送写入数据。例如,写入节点101A的写入数据DATA1(1501A)被传送到节点101B和节点101D的缓存181。也就是说,在该例子中,产生向节点的写入量两倍的网络传送。以下,说明对用于在其他节点内生成冗余码的传送量进行削减的方法。图29示出了在节点101A至101D的四个节点内以2D2P冗余结构来保护数据的例子。也就是说,本系统具有能够在两个节点发生故障时恢复所有数据的冗余性。例如,节点101A将接收到的数据长度较长的写入数据分割成两个块(d1、d2块)2901、2902,而且,生成两个奇偶校验码(p、q奇偶校验码)2903、2904作为节点内冗余码。奇偶校验码也是数据块。另外,数据块是包括数据单元在内的上位词。p奇偶校验码2901及q奇偶校验码2902是一级冗余码(Class1code)。接着,节点101A将写入数据及奇偶校验码分布式复制到节点101B~101D的缓存(缓冲区)。一个或多个数据块的组合为数据块。本例是将一个写入数据块(d2块)2902及两个奇偶校验码(p、q奇偶校验码)2903、2904分布式复制到三个节点101B~101D。在复制完成的时间点,得到了必要的冗余性(能够实现两个节点发生故障时的数据恢复),因此同步的写处理完成。同样地,节点101B~101D分别将接收到的写入数据分割成两个块(d1、d2块),并进一步生成p、q奇偶校验码。节点101B~101D分别将一个写入数据块(d2数据块)及两个奇偶校验码(p、q奇偶校验码)分布式复制到其他三个节点的缓存(缓冲区)。各节点将分别来自其他三个节点的数据块(写入数据或奇偶校验码)保存到缓存。节点101A~101D分别异步地根据从其他三个节点汇集的数据块(分别为写入数据或奇偶校验码)来生成二级冗余码(x1、y1奇偶校验码),并将其写入本地驱动,释放缓存。将该冗余码(x1、y1奇偶校验码)称为二级冗余码(Class2code)。二级冗余码与图1中说明的冗余附图标记对应。例如,节点101C从节点101A接收p奇偶校验码2903,从节点101B接收p奇偶校验码2905,以及从节点101D接收q奇偶校验码2906。节点101C根据这些奇偶校验码而生成x1奇偶校验码2908及y1奇偶校验码2909并写入本地驱动,释放缓存。另外,节点101A~101D分别将写入数据(d1+d2)写入本地驱动,并释放缓存。例如,节点101A将d1块2901及d2块2902写入本地驱动,并释放缓存。图1的例子是为了在两个节点发生故障时能够恢复数据,而将写入数据(d1+d2)传送到其他两个节点。与此相对地,本例是将写入数据的一部分(d2)和根据写入数据生成的一级冗余码(p、q奇偶校验码)传送到其他节点。因此,能够在维持所要求的冗余性的同时,使节点间的数据传送高效化。另外,条带的数据(d1+d2)全部保存到本地驱动。图29示出2D2P冗余结构的例子,但本例的方法能够适用于任意的mDnP结构(m、n为自然数)。写入数据(mD)被保存到本地驱动,而冗余度减1后的状态(冗余度为n-1)下的数据被传送到其他节点。例如,在3D2P结构(d1、d2、d3、p、q)中,写入数据(d1+d2+d3)被保存到本地驱动,数据块d2、d3、p、q被分别传送到不同的节点。所传送的数据块的组合并不限定于此,例如,也可以是数据块d1、d2、d3、p被传送到其他节点。在实施方式1中说明了如下的方法为:从一个条带类型内的条带动态地选择条带,从所选的条带中生成冗余码,并将与这些有关的信息作为元数据(例如日志构造化映射表213)进行保存,通过将本例的方法与在该实施方式1中说明的方法进行组合,能够减少读出-修改-写入及网络的传送量,并能实现写处理的高性能。另外,本例的方法能够适用于在本例之前说明的具有多个保护层的系统。另外,在接收到的写入数据的数据长度很短的情况下(例如随机写入),用于冗余化的数据传送对网络的带宽的影响很小。因此,还可以仅在数据长度比阈值大的情况下(时序写入),执行本例的冗余化处理。在数据长度为阈值以下的情况下,例如适用图1所示的方法。由此,能够提高处理器处理和网络频带的利用率。在这种情况下,系统还可以对元数据(例如日志构造化映射表213)赋予表示是否适用了二级冗余码的生成方法的信息,可以根据该信息来切换数据的处理。另外,还可以将一级冗余码作为节点内的奇偶校验码写入本地驱动,以使奇偶校验码生成的处理高效化。图30示出参照图29说明了的将用于冗余化的节点间的传送高效化的方法中的、数据复原方法。图30示出节点101A及101B发生故障并复原写入数据的例子。节点101C及101D分别从二级冗余码中复原一级冗余码,而且,从一级冗余码中复原节点101A及101B的用户数据。具体地,节点101C根据获取自节点101D的节点101D的q奇偶校验码与本地的x1、y1奇偶校验码复原节点101A及101B的p奇偶校验码。节点101D根据节点101D的用户数据(本地用户数据)生成节点101D的q奇偶校验码(若是在本地保存有奇偶校验码,也可以用其替代)。节点101D根据获取自节点101C的节点101C的q奇偶校验码与本地的x1、y1奇偶校验码复原节点101A及101B的q奇偶校验码。节点101C根据节点101C的写入数据生成节点101C的q奇偶校验码。而且,节点101C根据从节点101D获取的节点101A的q奇偶校验码和所复原的节点101A的p奇偶校验码来复原节点101A的用户数据d1、d2。节点101D根据从节点101C获取的节点101B的p奇偶校验码和所复原的节点101B的q奇偶校验码来复原节点101B的用户数据d1、d2。如上所述,通过两个阶段的复原处理,能够恢复写入数据。<实施方式3>(日志构造(驱动)+奇偶校验码生成(驱动)的无负载(offload)方式)图31示出分布式存储系统的硬件结构例。与图3所示的结构例的主要区别是通过网络104连接的计算机节点101的后端端口经由虚拟或物理的网络103与多个闪存驱动3105连接这一点。在一个站点内设置有一个或多个计算机节点101。计算机节点101能够经由网络103与闪存驱动3105分别通信,而无需经由其他计算机节点,能够作为本地驱动来使用。一个闪存驱动3105仅与一个计算机节点101通信。后端网络103还可以将多个计算机节点101彼此连接,连接有后端网络103的计算机节点101之间使用后端网络103来进行通信。未由后端网络103连接的节点之间的通信例如使用外部网络104。存储驱动的一例即闪存驱动3105构成为包括用于与计算机节点101连接的I/F3101、临时保存数据的缓冲存储器3102、控制闪存驱动3105的内部处理器3103、以及保存数据的多个闪存3104。(概要)图32示出本例的概要。本例由闪存驱动来实施奇偶校验码生成处理以及日志构造化形式的数据保存处理。由此,计算机节点能够没有意识到冗余码的生成及日志构造化形式地实施写处理,因此能够缩短写处理的时间。计算机节点101例如使用实施方式1中说明的静态映射表(例如站点静态映射表211)来决定分别保存写入数据和冗余码的驱动。代替实施方式1的计算机节点来决定驱动。例如,图32所示的两台D驱动3219、P1驱动3220及P2驱动3221与一个条带类型的数据驱动及冗余码驱动对应。例如,计算机节点101基于来自主机的写入数据的访问目的地(例如卷标识符及卷内地址)选择静态映射表的条目,并将该条目所示的多个驱动决定为保存写入数据及冗余码的驱动。在存在站点间保护层的情况下,计算机节点101向其他站点的计算机节点101传送写入数据。主机程序例如在计算机节点101内执行。例如,计算机节点101在将写入数据向驱动写入时,向保存写入数据的一个驱动(D驱动)3219和保存主奇偶校验码的一个驱动(P1驱动)3220写入数据(双重写入)。这时,计算机节点101相对于D驱动3219进行基于通常的写入指令(D_WRITE)的写入(3210),并经由D驱动3219的数据缓冲区3202向介质(LBA区域)3204写入数据。计算机节点101相对于P1驱动3220发出奇偶校验码写入指令(P_WRITE),并以与保存在D驱动3219内的数据的保存目的地信息组合的方式写入数据(3211)。在向奇偶校验码生成缓冲区3203写入数据之后,P1驱动3220在驱动内部生成P1奇偶校验码3207,并向介质3204写入P1奇偶校验码3207。如实施方式1的关于条带类型的冗余码生成的说明那样,P1驱动3220将写入奇偶校验码生成缓冲区3203内的数据块动态地组合,从而生成P1奇偶校验码3227。P1驱动3220将生成了P1奇偶校验码3207的数据的保存目标的信息作为元数据3209并写入元数据保存区域3205。例如,在奇偶校验码的数量为2的情况下,计算机节点101除了D驱动3219和P1驱动3220之外,还向保存第二个及之后的奇偶校验码即副奇偶校验码(P2奇偶校验码)的驱动(P2驱动)3221写入数据(三重写入)。P2驱动3221与P1驱动3220相同地将数据保存到奇偶校验码生成缓冲区3203,并将写入奇偶校验码生成缓冲区3203内的数据块动态地组合来生成P2奇偶校验码3227。在生成P2奇偶校验码时,由P1驱动3220和P2驱动3221生成的奇偶校验码的数据块组合必须是相同的。在P1驱动3220生成P1奇偶校验码之后,P1驱动3220将生成了P1奇偶校验码的数据块的组合经由计算机节点101(P_GET、P_PUSH)向P2驱动3221通知(3215)。之后,P2驱动3221用所通知到的数据块的组合来生成P2奇偶校验码。计算机节点101在读出最新数据时以通常的读出指令(D_READ)从D驱动3219中读取最新数据3206(3212)。另外,计算机节点101通过读取旧数据3208的读出指令(OLD_D_READ)从D驱动3219中读取旧数据3208(3213)。计算机节点101为了确保用于以日志构造化形式进行写入的区域,监视驱动3219~3221的使用量(空闲容量),并根据需要实施垃圾回收处理。计算机节点101的容量管理作业3201在写入完成之后或定期地发出获取驱动使用量(空闲容量)的指令(STAT_GET),监视并检测驱动使用量(驱动空闲容量)(3214)。在使用量比阈值大(空闲容量比阈值小)且检测到驱动空闲容量耗尽的情况下,计算机节点101实施垃圾回收处理。垃圾回收处理是向P2驱动3221发出搜索删除对象奇偶校验码的指令(SEARCH)(3218),并从驱动3221中获取删除对象奇偶校验码的保存目的地信息和构成删除对象奇偶校验码的数据的信息。接着,根据奇偶校验码构成数据来判断构成奇偶校验码的数据是否为最新数据,将最新数据传送到P1驱动3220并重新进行脏化。奇偶校验码结构数据信息表示在奇偶校验码的生成过程中使用的数据块各自的信息。在将构成奇偶校验码的所有最新数据重新脏化之后,发出删除奇偶校验码使旧数据无效化的指令(INVALID)(3217),并删除旧数据。(驱动内的数据管理结构)图33示出为了控制存储系统而利用驱动3105进行管理的表构造。闪存3104保存与日志构造有关的信息即逻辑物理转换表3301、日志转换表3302、与数据保护有关的信息即奇偶校验码-数据转换表3307、数据-奇偶校验码转换表3308、以及地址标识符空闲队列3309。逻辑物理转换表3301示出驱动3105向计算机节点101提供的逻辑地址3302与保存在物理存储区域内的数据的物理地址3303的对应关系。日志转换表3304示出用于唯一地识别数据的地址标识符3305与保存有逻辑物理转换表的日志信息3306的对应关系。驱动3105在每次写入数据时,将更新后的逻辑物理转换表作为日志信息来赋予地址标识符并进行管理。构成其他驱动保存的奇偶校验码的数据的信息由地址标识符来保存。由此,通过驱动3105进行的垃圾回收处理和耗损平衡(wearleveling)处理,即使保存在自身驱动的数据的物理地址发生变更,但由于可以不向其他驱动通知变更后的物理地址,所以也能削减驱动之间的通信开销。奇偶校验码-数据转换表3307示出自身驱动的保存有奇偶校验码的物理存储区域的地址(LBA、数据长度)与生成了奇偶校验码的其他驱动的数据的物理存储区域的地址(驱动编号、LBA、数据长度、地址标识符)的对应关系。奇偶校验码由于是通过以多个数据为基础的运算来生成的,所以相对于一个奇偶校验码,对应有多个其他驱动上的数据保存目的地的逻辑地址。另外,由于以日志构造化形式保存数据,所以逻辑地址的数据还能包括旧数据的地址。因此,为了能够唯一地辨别生成了奇偶校验码的数据的保存目的地,而同时保存地址标识符。数据-奇偶校验码转换表3308是上述的奇偶校验码-数据转换表的反向转换表,示出保存了其他驱动的数据的物理存储区域的地址(LBA、驱动编号)与保存了自身驱动的奇偶校验码的物理存储区域的地址的对应关系。在其他驱动发生故障而需要修复数据的情况下,驱动3105通过数据-奇偶校验码转换表3308来特定保存有修复其他驱动上的数据所需的奇偶校验码的物理存储区域的地址。另外,根据奇偶校验码-数据转换表3307,能够特定保存有数据修复所需的其他驱动的数据的物理存储区域的地址。地址标识符空闲队列3309是在并列执行后述的写处理时使用的队列,保存有未使用的地址标识符。计算机节点101在写入数据时从地址标识符空闲队列3309的开头获取地址标识符(出队),并与地址标识符一起向驱动3105发出数据的写处理。驱动3105用所指定的地址标识符向日志转换表3304内保存日志信息。另外,计算机节点101以旧数据被无效(invalidate)为契机将无效后的地址标识符登记到地址标识符空闲队列3309的末尾(入队)。(I/F一览)图34示出了计算机节点101与闪存驱动3105之间的通信接口。D_WRITE指令3401以D驱动3219的驱动编号、LBA、数据传送长度作为自变量向D驱动3219进行写入。之后,输出日志构造的元数据即地址标识符。地址标识符是与保存在驱动内的数据对应关联的不变的标识符。具体地,地址标识符是对驱动内的逻辑地址与物理地址的映射信息赋予的、驱动内唯一的标识符。P_WRITE指令3402以保存奇偶校验码的P1驱动3220或P2驱动3221的驱动编号、数据传送长度、数据保存信息作为自变量向驱动进行写入。数据保存信息由D驱动的驱动编号、LBA、地址标识符构成。D_READ指令3403以驱动编号、LBA、数据传送长度作为自变量从D驱动3219中读取最新数据。OLD_D_READ指令3404是以驱动编号、地址标识符、数据传送长度作为自变量从D驱动3219中读取旧数据的指令。P_GET指令3405以D驱动的驱动编号作为自变量,从由自变量指定的P1驱动3220中通过异步转储处理生成奇偶校验码,并以该奇偶校验码输出未向P2驱动3221通知的奇偶校验码结构数据信息。奇偶校验码结构数据信息由奇偶校验码生成过程中所使用的数据块各自的D驱动的驱动编号、LBA、地址标识符构成。P_PUSH指令3406以P1驱动3220的驱动编号和奇偶校验码结构数据信息作为自变量向P2驱动3221通知奇偶校验码结构数据信息。奇偶校验码结构数据信息由D驱动的驱动编号、LBA、地址标识符构成。STAT_GET指令3407以驱动编号作为自变量输出由自变量指定的驱动的使用量的信息。STAT_GET指令3407用于监视驱动的容量耗尽。INVALID指令3408在进行垃圾回收处理时,以D驱动3219的驱动编号、地址标识符作为自变量使不再需要的旧数据无效化。SEARCH指令3409在进行垃圾回收处理时委托P1驱动3220搜索删除对象奇偶校验码,作为搜索结果,输出删除对象奇偶校验码的信息和删除对象奇偶校验码的奇偶校验码结构数据信息。删除对象奇偶校验码信息由P1驱动3220的驱动编号和LBA构成,删除对象奇偶校验码结构数据信息由D驱动的驱动编号、LBA、地址标识符、以及是否为最新数据的信息构成。通过以上的指令,在计算机节点101与驱动3105之间进行通信,并实现处理。(读处理)(最新数据的读出)图35表示计算机节点101从D驱动3219中读取最新数据的处理的流程图。本处理在从主机接收到读出指令后的情况下执行(S3501)。首先,从主机接收到读出指令的计算机节点101的处理器119确认缓存上是否存在数据(S3502)。在缓存上有数据存在的情况下(S3502:是),处理器119将缓存上的数据返回主机(S3510)。在缓存上不存在数据的情况下(S3502:否),处理器119在确保了缓存(S3503)之后,向D驱动3219发出D_READ指令(S3504)。D驱动3219在接收到D_READ指令后(S3505),参照逻辑物理转换表3301获取保存有数据的物理地址(S3506)。接着,D驱动3219从闪存(介质)3104中读出数据(S3507),并将结果返回计算机节点101(S3508)。计算机节点101在从D驱动3219接收到D_READ的结果后(S3509),将结果返回主机(S3510)。(旧数据的读出)图36示出了旧数据的读处理。在旧数据的读处理中,首先,计算机节点101向D驱动3219发出OLD_D_READ指令(S3601)。D驱动3219在接收到OLD_D_READ指令后(S3602),从日志转换表3304中获取保存有与所指定的地址标识符对应的旧数据的物理地址(S3603)。然后,D驱动3219从闪存(介质)3104中读出旧数据(S3604),并将结果返回计算机节点101(S3605)。计算机节点101从D驱动3219接收OLD_D_READ的结果(S3606)。(写处理)图37示出计算机节点101向D驱动3219写入数据的处理的流程图。写处理包括两个处理。一个处理是直到向主机返回写入结果为止的同步写处理。另一个处理是根据累积在驱动内的奇偶校验码生成缓冲区内的数据来生成奇偶校验码并保存到介质的异步写处理。首先,对同步写处理进行说明。本处理在从主机接收到写入指令后的情况下执行。本处理向D驱动3219保存写入数据,并向生成奇偶校验码的驱动(P1驱动3220和P2驱动3221)以与地址标识符组合的方式写入数据。计算机节点101的处理器119在从主机接收到写入指令后(S3701),向D驱动3219发出D_WRITE指令(S3702)。D_WRITE指令包括写入数据。D驱动3219在接收到D_WRITE指令后(S3703),将写入数据以日志构造形式向闪存(介质)3104写入(S3704),而且,D驱动3219更新元数据(逻辑物理转换表3301和日志转换表3304)(S3705)。D驱动3219将数据保存目的地的地址标识符返回计算机节点101(S3706)。计算机节点101当从D驱动3219接收到D_WRITE的结果时(S3707),以与向D驱动3219的数据保存信息组合的方式向P1驱动3220发出P_WRITE指令(S3708)。P1驱动3220在接收到P_WRITE指令时(S3709),将写入数据保存到驱动的奇偶校验码生成缓冲区3203(S3710),并将结果返回计算机节点101(S3711)。计算机节点101当从P1驱动3220接收到P_WRITE指令的结果时(S3712),以与向D驱动3219的数据保存信息组合的方式向P2驱动3221发出P_WRITE指令(S3713)。P2驱动3221当接收到P_WRITE指令时(S3714),将写入数据向奇偶校验码生成缓冲区3203写入(S3715),并将结果返回计算机节点101(S3716)。计算机节点101当从P2驱动3221接收到P_WRITE指令的结果时(S3717),将结果返回主机(S3718)。反复执行上述同步写处理的结果是,当在P1驱动3220的奇偶校验码生成缓冲区3203内累积了规定数量的数据时、或者当经过了规定时间后,P1驱动3220在内部实施异步写处理(S3719)。首先,P1驱动3220根据累积在奇偶校验码生成缓冲区3203内的数据动态地选择数据块,并生成P1奇偶校验码(S3720)。然后,更新元数据(奇偶校验码-数据转换表3307及数据-奇偶校验码转换表3308)(S3721),并将P1奇偶校验码写入闪存(介质)3104(S3722)。接着,计算机节点101根据P_GET指令从P1驱动3220中获取P1奇偶校验码的奇偶校验码结构数据信息(S3723、S3724)。计算机节点101根据P_PUSH指令向P2驱动3221通知从P1驱动3220中获取的奇偶校验码结构数据信息(S3725)。P2驱动3221在从计算机节点101接收到P_PUSH指令后,基于接收到的奇偶校验码结构数据信息来生成P2奇偶校验码(S3726),更新元数据(P2奇偶校验码的奇偶校验码-数据转换表3307及数据-奇偶校验码转换表3308)(S3727),并将P2奇偶校验码写入闪存(介质)3104(S3728)。图38示出了在同步写处理中向各驱动同时实施了数据的写处理的情况的处理流程。与图37的区别是,通过计算机节点101向驱动3219~3221指定所使用的地址标识符,不等待D驱动3219的响应就向生成奇偶校验码的驱动3220、3221发出写入指令这一点。另外,向D驱动3219的写入使用用于指定并写入地址标识符的D_WRITE2指令3805,而不是D_WRITE指令3401。D_WRITE2指令3805是以D驱动3219的驱动编号、LBA、数据传送长度、地址标识符作为自变量,用于向D驱动3219进行写入的指令。计算机节点101当从主机接收到写入指令时(S3701),从地址标识符空闲队列3309的开头获取地址标识符(S3801),并更新地址标识符空闲队列3309的开头指针(S3802)。接着,计算机节点101以所获取的地址标识符作为自变量向D驱动3219发出D_WRITE2指令(S3803)。计算机节点101对所获取的地址标识符指定数据保存信息,并向P1驱动3220和P2驱动3221发出P_WRITE指令(S3708、S3713)。D驱动3219使用所指定的地址标识符向日志转换表3304内保存日志信息。P1驱动3220及P2驱动3221在与图37相同地执行了各个处理之后,将结果返回计算机节点101(S3703~S3706、S3709~S3711、S3714~S3716)。计算机节点101直到从所有驱动3219~3221接收到结果为止待机(S3804)。在从所有驱动3219~3221接收到结果后,计算机节点101将结果返回主机(S3718)。与图37的S3719~S3728所说明的处理相同地,P1驱动3220和P2驱动3221异步地生成奇偶校验码,并将其保存到闪存(介质)3104。如上所述,通过在各驱动中同时进行写处理,能够缩短向主机的响应时间。(垃圾回收处理)图39示出垃圾回收处理的流程图。本处理在驱动中保存的数据量超过了预先设定的目标容量(阈值)的情况下,擦除不需要的数据。由此,能够在有限的区域内保存必要的数据。被擦除的数据的种类是写入数据和奇偶校验码。本处理可以与主机I/O同步地执行,也可以与主机I/O异步地执行。计算机节点101检查D驱动3219的使用量是否超过了目标量(S3901)。具体地,计算机节点101根据在容量管理作业3201的监视结果使用量是否超过了目标容量来进行判断。此外,容量管理作业3201的监视结果还可以通过本地区域量表802来管理。在驱动使用量超过了目标容量的情况下(S3901:是),计算机节点101开始垃圾回收处理。在垃圾回收处理中,计算机节点101相对于对根据检测容量耗尽的D驱动3219的数据而生成的P1奇偶校验码进行保存的P1驱动3220,发出搜索删除对象P1奇偶校验码的SERCH指令。P1驱动3220当接收到SERCH指令时,参照奇偶校验码-数据转换表3307来搜索具有由自变量指定的驱动编号作为奇偶校验码结构数据信息的P1奇偶校验码。当发现对象P1奇偶校验码时,P1驱动3220接下来参照数据-奇偶校验码转换表3308确认搜索结果的数据是否为旧数据。在确认结果是数据为旧数据的情况下,P1驱动3220将该P1奇偶校验码判断为删除对象奇偶校验码。接着,P1驱动3220参照数据-奇偶校验码转换表3308确认构成该P1奇偶校验码的所有数据的新旧,并将结果(删除对象奇偶校验码和删除对象奇偶校验码结构数据信息)返回计算机节点101(S3902)。接着,计算机节点101根据所返回的删除对象奇偶校验码结构数据信息来确认构成P1奇偶校验码的各数据的新旧信息,并判断删除对象P1奇偶校验码能否立即删除(S3903)。在构成P1奇偶校验码的数据全部为旧数据的情况下(S3903:是),计算机节点101删除该P1奇偶校验码(S3906),而且,根据INVALID指令将构成该P1奇偶校验码的数据从数据保存目标的D驱动3219中删除(S3907)。在进行着写处理的并行化的情况下,计算机节点101当接收到INVALID指令的结果时,向地址标识符空闲队列3309的末尾登记无效后的地址标识符(入队)。另外,计算机节点101也对P2驱动3221指示删除由同一数据组合构成的P2奇偶校验码。接着,在构成P1奇偶校验码的数据中包含最新数据的情况下(S3903:否),计算机节点101根据D_READ指令从D驱动3219中读出最新数据,并根据P_WRITE指令将其以与数据保存信息组合的方式写入P1驱动3220和P2驱动3221(S3905、S3908)。写入后,计算机节点101从P1驱动3220和P2驱动3221中删除旧P1奇偶校验码、旧P2奇偶校验码(S3906、S3909),另外,根据INVALID指令从D驱动3219中删除旧数据(S3907)。反复进行以上处理,进行奇偶校验码和数据的删除。另外,P1驱动3220通过由图37说明的异步写处理生成新P1奇偶校验码,更新元数据,并将新P1奇偶校验码保存到闪存(介质)3104。P2驱动3221也同样通过异步写处理生成新P2奇偶校验码,更新元数据,并将新P2奇偶校验码保存到闪存(介质)3104。<实施方式4>(日志构造(驱动)+奇偶校验码生成(控制器)的无负载方式)图40示出分布式存储系统的硬件结构例。与实施方式3的区别是在计算机节点101内部安装有奇偶校验码生成处理部这一点。奇偶校验码生成处理部能够由硬件或软件安装。存储系统以包括多个计算机节点101的方式构成,各计算机节点101的内部包括具有生成奇偶校验码的功能的奇偶校验码生成处理部4006。另外,各计算机节点101通过前端网络4002连接到主计算机4001,计算机节点101之间由内部网络4003连接,计算机节点101与驱动3105由后端网络4004连接。多个计算机节点101能够访问一个驱动3105。(概要)图41示出本例的概要。与实施方式3的区别是,由于计算机节点实施奇偶校验码生成处理,所以P1驱动3220和P2驱动3221无需以I/O异步的方式生成奇偶校验码的这一点。因此,在奇偶校验码数量为2以上的情况下,无需向P2驱动3221通知P1奇偶校验码的奇偶校验码结构数据信息,就能削减计算机节点101和驱动3219~3221的处理负载,并能缩短写处理时间。具体地,写处理将从主机接收到的数据保存到计算机节点101内的奇偶校验码生成缓冲区4101,并从奇偶校验码生成缓冲区4101向奇偶校验码生成处理部4006委托奇偶校验码生成处理(4101)。接着,奇偶校验码生成处理部4006生成奇偶校验码,并将生成的奇偶校验码写入保存奇偶校验码的驱动(4102)。另外,在垃圾回收处理中与实施方式3的区别是,在构成删除对象奇偶校验码的数据中包含最新数据的情况下,从D驱动3219中读取到最新数据之后,将数据传送到奇偶校验码生成处理部4006,并生成新奇偶校验码的这一点。读处理与实施方式3相同。(I/F一览)图42示出了计算机节点101与驱动3219~3221之间的通信接口。代替实施方式3中的P_WRITE指令3402,有P_WRITE2指令4201。P_WRITE2指令4201以驱动编号、LBA、数据传送长度、奇偶校验码结构数据信息的排列作为自变量向驱动写入奇偶校验码。奇偶校验码结构数据信息由驱动编号、LBA、地址标识符构成。也就是说,P_WRITE2指令4201将多个数据保存目的地作为奇偶校验码结构数据信息与奇偶校验码一起写入驱动。(写处理)(同步写处理)本例的写处理与实施方式3同样地包括同步写处理和异步写处理。图43示出了本例中的同步写处理的流程图。首先,当从主机接收到写入指令时(S4301),计算机节点101向D驱动3219发出D_WRITE指令(S4302)。D驱动3219在接收到D_WRITE指令后(S4303),将数据写入闪存(介质)3104(S4304),更新元数据(逻辑物理转换表3301和日志转换表3304)(S4305),并将结果(地址标识符)返回计算机节点101(S4306)。接着,计算机节点101当从D驱动3219接收到结果时(S4307),将数据保存到位于计算机节点101内的奇偶校验码生成缓冲区4101(S4308),并将结果返回主机(S4309)。此外,如图38的说明所述,同步写处理还可以通过使用地址标识符空闲队列3309和D_WRITE2指令3805,并列执行向D驱动3219的数据写入、和向奇偶校验码生成缓冲区4101的数据保存。(异步写处理)图44示出了本例中的异步写处理的流程图。反复执行同步写处理的结果是,当在奇偶校验码生成缓冲区4101内累积了规定数量的数据、或者经过了规定时间后,计算机节点101实施异步写处理(S4401)。计算机节点101的主处理部4405从累积在奇偶校验码生成缓冲区4101内的数据中将奇偶校验码生成对象的数据传送到奇偶校验码生成处理部4006(S4402)。主处理部4405例如通过依照程序运行的处理器119来实现。奇偶校验码生成处理部4006在接收到数据后(S4403),将所接收到的数据保存到其内部缓冲区(S4404)。接着,奇偶校验码生成处理部4006用所接收到的数据生成P1奇偶校验码和P2奇偶校验码(S4405),并将所生成的奇偶校验码传送到主处理部4405(S4406)。主处理部4405在从奇偶校验码生成处理部4006接收到P1奇偶校验码和P2奇偶校验码时(S4407),根据P_WRITE指令将其与构成奇偶校验码的数据信息一起写入P1驱动3220和P2驱动3221(S4408)。P1驱动3220在接收到P_WRITE指令后(S4409),将奇偶校验码写入闪存(介质)(S4410),更新元数据(奇偶校验码-数据转换表3307和数据-奇偶校验码转换表3308)(S4411),并将结果返回计算机节点101(S4412)。另一方面,P2驱动3221也进行与P1驱动3220相同的处理,并将结果返回计算机节点101(S4413~S4416)。主处理部4405在从P1驱动3220和P2驱动3221接收到结果后,结束处理(S4417)。(垃圾回收处理)图45示出了本实施方式的垃圾回收处理的流程图。步骤S4201~S4204、S4207与步骤S3901~S3904、S3907对应。与实施方式3的主要区别是,将构成删除对象奇偶校验码的数据中的最新数据保存到计算机节点101的奇偶校验码生成缓冲区4101的这一点(S4501)。由此,无需像实施方式3那样再次向驱动写入数据,就能提高垃圾回收的处理性能。另外,步骤S4501、S4206相对于P1奇偶校验码保存驱动及P2奇偶校验码保存驱动来执行。当在奇偶校验码生成缓冲区4101内累积了规定数量的数据、或者经过了规定时间后,计算机节点101实施由图44说明的异步写处理,并在生成了新奇偶校验码之后将奇偶校验码写入驱动。以上的例子在各节点内管理冗余码与数据的寻址(addressing)的对应关系。在其他例子中,也可以准备两种虚拟空间,并通过动态地改变该虚拟空间的对应关系来实施数据保护技术。具体地,系统准备提供给上位逻辑装置的第一虚拟空间、和将物理存储区域上的冗余码与数据的存储地址静态地对应关联的第二虚拟空间。系统通过将第一虚拟空间与第二虚拟空间动态地建立对应关联,能够根据来自多个节点的数据生成冗余码数据。在这种情况下,系统在构成条带类型的多个节点之间共用写入目的地指针等。写入目的地指针是通过在多个节点之间假设相对于第二虚拟空间以日志形式增量地进行追加,来表示其写入的当前位置的指针。而且,系统以使该写入目的地指针一致的方式,也就是以由来自多个节点的各数据和与这些数据对应的冗余码构成的多个数据与第二虚拟空间上的规定区域对应关联并写入其中的方式,控制第一虚拟空间与第二虚拟空间之间的对应关联。本公布的数据保护技术及数据配置技术是根据缓存上的多个不同节点传送来的数据单元(数据块)的组合而动态地生成冗余码。也就是说,任意选择利用代码脏队列901管理的数据中的、相同的条带类型数据(图18的S802)的结果是,构成一个节点生成的节点间冗余码组合的数据块的逻辑地址并不固定为一个组合中,而是容许两个以上的组合。另一方面,在本公开中,如图8所示对各数据块与其传送源地址进行关联并管理,由此,容许根据动态的逻辑地址的组合来生成冗余码。而且,用于生成冗余码的数据的量也并不限定为特定的值,而是能够动态地变更。通过以上结构,在实现很小开销的数据保护的同时,避免网络瓶颈,并实现能够高速进行本地访问的数据配置。另外,在驱动为SSD的情况下,能够削减写入量,并能实现延长寿命。通过本公开的数据保护技术和数据配置技术,能够同时实现适于本地读出的数据配置和数据保护,并能避免由网络造成的瓶颈。而且,由于保存在本地存储设备中的数据的管理信息能够保存在自身系统内,所以能够将虚拟卷和池卷的信息限制为少数节点的共用,从而减少共用的信息。由此,能够实现不依赖于节点数量的高扩展性。另外,通过高扩展性,能够降低系统构建的网络成本。此外,分布式存储系统中的上述多个功能能够独立实现。例如,也可以不在分布式存储系统中仅安装实现冗余码的生成功能、再配置功能以及接受页面配置节点的指定的功能中的一个。节点结构并不限定于上述的计算机结构。还可以省略上述的节点保护层。而且,还可以仅安装站点保护层或节点保护层中的一方。此外,本发明并不限定于上述的实施例,还包括各种变形例。例如,图3所示的驱动113无需存在于计算机节点101的框体内,只要各处理器识别出作为自身系统的存储设备的管理对象即可。上述实施例是为了易于理解本发明而进行了具体说明,并不限定于具备说明了的全部结构。另外,可以将某个实施例的结构的一部分置换成其他实施例的结构,而且,还可以在某个实施例的结构中增加其他实施例的结构。另外,关于各实施例的结构的一部分,可以进行其他结构的追加、删除、置换。另外,上述的各个结构/功能/处理部等还可以例如通过以集成电路进行设计等,而用硬件来实现其中的一部分或全部。另外,上述的各个结构、功能等还可以通过处理器编译并执行实现各个功能的程序,而用软件来实现。实现各功能的程序、表、文件等信息能够置于存储器和硬盘、SSD等记录装置、或者IC卡、SD卡等记录介质中。另外,控制线和信息线表示在说明上认为有必要的内容,而在产品上未必一定示出了所有的控制线和信息线。实际上,也可以认为几乎所有结构都是彼此连接的。除了权利要求书中记载的结构之外,将本公布的特征概要记载如下。(1)存储系统包括一个以上的计算机和多个存储驱动,所述一个以上的计算机决定将写入数据块保存的数据驱动和将所述写入数据块的冗余码保存的第一冗余码驱动,所述一个以上的计算机将所述写入数据块分别发送至所述数据驱动和所述第一冗余码驱动,所述数据驱动将所述写入数据块保存到存储介质内,所述第一冗余码驱动使用从所述一个以上的计算机接收到的多个写入数据块来生成冗余码,并保存到存储介质内。(2)所述第一冗余码驱动基于接收到的写入数据块各自的写入目的地,决定所述接收到的写入数据块各自所属的条带类型,并从包含在同一条带类型内的多个写入数据块生成冗余码。(3)所述第一冗余码驱动还从所述一个以上的计算机接收所述写入数据块的保存目的地信息,管理所述冗余码的保存目的地与所述写入数据块的保存目的地的关系。(4)所述一个以上的计算机还将所述写入数据块与所述写入数据块的保存目的地信息一起发送至第二冗余码驱动,所述第二冗余码驱动获取表示在所述第一冗余码驱动中用于生成冗余码的数据块的信息的结构信息,并使用根据所述结构信息而选择出的数据块来生成冗余码。(5)存储系统包括计算机和多个存储设备,所述计算机决定将写入数据块保存的数据驱动和将所述写入数据块的冗余码保存的冗余码驱动,所述计算机将所述写入数据块发送至所述数据驱动,所述数据驱动将所述写入数据块保存到存储介质内,所述计算机使用所述写入数据来生成冗余码,所述计算机将所述冗余码、和表示用于生成所述冗余码的数据块的信息的结构信息发送至所述冗余码驱动,所述冗余码驱动将所述冗余码保存到存储介质内,所述冗余码驱动管理所述冗余码的保存目的地与所述写入数据块的保存目的地的关系。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1