专利名称:检测不准确数据的设备和方法
技术领域:
本发明涉及检测例如由数据被写入存储器设备中的地址的错误而产生的不准确数据的单元。
背景技术:
存储子系统响应读命令向主机系统返回不准确数据的问题不仅导致用户数据的损失,而且导致例如系统故障的严重故障。为此,通常存储子系统通过向每个数据增加例如奇偶检验,ECC(纠错编码)和CRC(循环冗余检查)编码的冗余数据并且在读取每个数据时检查冗余数据,来避免把不准确数据返回到主机系统的问题。
例如,当中间范围或高级RAID子系统向512字节的扇区数据增加8到16字节冗余编码时,其中512字节是在从高速缓存向盘驱动器写入(降级)时用户数据的最小单元。接着,在从盘驱动器向高速缓存读取(升级)时检查这个冗余编码。通过这种方式,在RAID控制器的后端接口之后的数据路径中执行检错。附带地,在这种情况下,冗余编码是由512字节的扇区数据唯一计算的数据,并且通常使用基于LRC(纵向冗余校验),CRC(循环冗余校验)等等的编码。
同时,在数据被写入实际盘驱动器时,在某些情况下,由于例如振动的外部原因,在头定位期间出现临时异常事件。数据可能被写入不同于写入请求所指定的LBA的LBA(逻辑块地址)。然而,在这种情况下,有时出现在存储子系统端不能通过上面描述的冗余编码检测的写入位置错误。
参照图8具体解释此情况。如该附图所示,假定扇区数据1(512字节)和LRC1(对应于扇区数据1的冗余编码)被存储在LBA1中,并且扇区数据2(512字节)和LRC2(对应于扇区数据2的冗余编码)被存储在LBA2中。在这个条件下,在过程1从LBA1读取扇区数据1和LRC1,并且在过程2校验LRC1。结果,如果扇区数据1与LRC1一致,则在过程3修改扇区数据1,在过程4计算新LRC(LRC1′),并且在过程5把校正的扇区数据1′和LRC1′写入LBA1。
然而,如该附图所示,假定要写入LBA1的数据被写入LBA2。换言之,最初应当在过程5重写的扇区数据1和LRC1仍然在LBA1中存储。
在这个条件下,如果在过程6从LBA1读取扇区数据1和LRC1并且在过程7校验LRC1,则判断扇区数据1与LRC1一致。即,虽然在过程6返回最初不应当返回的不准确数据,然而在过程7不能检测它们。此外,在这个条件下,尽管附图中未示出,但是假定从LBA2读取扇区数据1′和LRC1′。在这种情况下,读取最初要写入LBA1的数据,并且此外,由于扇区数据1′与LRC1′一致,所以不可能检测写入位置的错误。
通过这种方式,出现存储子系统响应读取命令而向主机系统返回不准确数据的问题(此后被称作(问题))。
因此,在某些情况下,针对该问题,通过把LBA信息引入到冗余编码中,能够检测到驱动器从错误地址读取数据。通过采用这个方法,可以在要写入的LBA和实际写入的LBA之间存在差异的情况下检测错误。把图8作为一个例子进行解释,它对应于过程5之后从LBA2读取数据的情况。
然而,即使采用了这种方法,由于LBA1信息被包含在对应于在过程5应当已经改写但是实际没有改写的数据的冗余编码中,所以在过程5之后从LBA1读取数据的情况下不可能检测错误。因此,即使在这种方法被采用的情况下,仍然有该问题出现的可能性。
作为检测问题的出现的现有技术,存在如下文中所描述的方法。盘驱动单元或主机系统当写入数据时在数据内并且在盘内的不同位置存储写入历史信息,并且当读取数据时比较和验证这些分别存储的写入历史信息(例如,参考日本专利待审公开Tokkai 2001-338468(5-6页,图5-6))。
然而,日本专利待审公开Tokkai 2001-338468(5-6页,图5-6)的发明存在的问题是,写入历史被存储在与扇区数据没有关系的区域,并且驱动器的容量被消耗。此外,还具有由于需要与扇区数据不同地读取写入历史,所以影响读取性能的问题。
发明内容
提出本发明以解决上述技术问题。本发明的一个目的是避免存储子系统把不准确数据返回到主机系统的问题,而无需消耗驱动器的容量。此外,本发明的另一个目的是避免存储子系统把不准确数据返回到主机系统的问题,而无需影响从驱动器读取的性能。
为了实现这些目的,基于本发明,关于某扇区数据的写入历史被加入到不同扇区数据中,并且在读取时被验证。换言之,本发明的单元是用于检测存储器中不准确数据的单元,包含添加单元,用于把结合要存储在存储器的第一扇区中的数据的更新而更新的历史信息加入到该数据上,并且加入到要存储在存储器的第二扇区中的数据上;以及验证单元,用于通过在已经被加到第一扇区中存储的该数据上的历史信息和已经被加到第二扇区中存储的该数据上的历史信息之间进行比较,来验证第一扇区中存储的该数据和第二扇区中存储的该数据。
此外,本发明也可以被视作在读取已经被加到不同扇区数据的某扇区数据的写入历史时对其进行验证的方法。在这种情况下,本发明的方法是一种用于在存储以分布方式同步处理的多个数据的多个存储器中检测不准确数据的方法,包括添加步骤,把结合多个数据中的一个数据的更新而更新的历史信息加入到该一个数据上,并且加入到该多个数据中的另一个数据上;写入步骤,把该一个数据写入到存储器的第一扇区,并且把该另一个数据写入到存储器的第二扇区;读取步骤,读取第一扇区中存储的数据和第二扇区中存储的数据;以及验证步骤,通过比较分别加入到两个读取数据的历史信息来验证该两个数据。
同时,本发明也可以被视作允许计算机实现预定功能的程序。在这种情况下,本发明的程序允许连接到存储器的计算机实现从第一数据中获得结合要存储在存储器的第一扇区的第一数据的更新而更新的第一历史信息,以及从第二数据中获得结合要存储在存储器的第二扇区的第二数据的更新而更新的第二历史信息的功能;以及通过比较第一历史信息和第二历史信息,验证第一数据或第二数据的功能。
为了更全面地理解本发明及其优点,现在参照下面结合附图的描述。
图1是基于本发明的实施例示出了用户数据,奇偶检验数据和DC值的排列的第一个例子的图例。
图2是基于本发明的实施例示出了用户数据,奇偶检验数据和DC值的排列的第二个例子的图例。
图3是基于本发明的实施例示出了冗余编码的DC值的存储方法的例子的图例。
图4是基于本发明的实施例示出了实现存储子系统的计算机的硬件结构的模块图。
图5是基于本发明的实施例示出了存储子系统的功能结构的模块图。
图6是基于本发明的实施例示出了升级(staging)处理操作的例子的流程图。
图7-1是基于本发明的实施例示出了降级(destaging)处理的操作的例子的流程图。
图7-2是基于本发明的实施例示出了降级处理的操作的例子的流程图。
图8是解释现有技术的问题的图例。
具体实施例方式
此后,将参照附图详细描述本发明的实施例的最优方面(此后,被称作″实施例的方面″)。这个实施例的一个方面是本发明被应用于通过例如RAID5的奇偶检验的使用而执行数据保护的盘阵列系统。在类似这个的盘阵列系统中,通过把从主机系统发送的数据按扇区大小分区而获得的多个扇区数据(此后被称作″用户数据″)和用于检测不准确用户数据并且恢复它的扇区数据(此后被称作″奇偶校验数据″)被以分布方式存储在多个盘中。此外,在存储用户数据的扇区(此后被称作″数据扇区″)中,伴随提供了存储用于校验用户数据的有效性的冗余编码的区域,并且在存储奇偶检验数据的扇区(此后被称作″奇偶检验扇区″)中,伴随提供了存储用于校验奇偶检验数据的有效性的冗余编码的区域。
基于本发明的实施例,通过注意盘阵列系统的这种结构,在存储用户数据的数据扇区的冗余编码区域中,和在存储用户数据的奇偶检验数据的奇偶检验扇区的冗余编码区域中,提供要结合用户数据的更新而更新的写入历史信息。
这里,作为写入历史信息,可以采用任何种类的信息,而在实施例的一个方面,采用在更新用户数据时将要加1的计数器。在这种情况下,由于写入历史信息能够作为计数器而被得到,以显示用户数据的降级的数量,所以这种计数器被称作DC(降级计数器),并且针对DC设置的值此后被称作DC值。
接着,参照图1和2详细描述在实施例的该方面假定的RAID的结构中的用户数据,奇偶检验数据,DC值等等的排列。
注意,在实施例的该方面,为了方便着想,数据扇区的冗余编码区域中提供的DC被称作DDC(数据DC),并且对DDC设置的值被称作DDC值。
此外,在与所注意的用户数据相关的奇偶检验数据中,确定第一优先奇偶检验数据(主奇偶检验数据)和第二优先奇偶检验数据(次奇偶检验数据)。接着,存储主奇偶检验数据的奇偶检验扇区的冗余编码区域中提供的DC被称作PDC(主DC),并且对PDC设置的值被称作PDC值。而且,存储次奇偶检验数据的奇偶检验扇区(次奇偶检验扇区)的冗余编码区域中提供的DC被称作SDC(次DC),并且对SDC设置的值被称作SDC值。
例如,在RAID5等等的情况下,与存储所述用户数据的数据扇区存在于相同片段(slice)的奇偶检验扇区被设置成主奇偶检验扇区,并且在扇区的冗余编码区域中维护的DC被设置成PDC。此外,假定与存储所述用户数据的数据扇区存在于不同片段的奇偶检验扇区被设置成次奇偶检验扇区,并且在扇区的冗余编码区域中维护的DC被设置成SDC。
此外,在RAID50等等的情况下,存在于镜像片段之一中的奇偶检验扇区被设置成主奇偶检验扇区,并且在扇区的冗余编码区域中维护的DC被设置成PDC。接着,假定存在于镜像片段的其它片段中的奇偶检验扇区被设置成次奇偶检验扇区,并且在扇区的冗余编码区域中维护的DC被设置成SDC。
图1是示出了RAID5的结构的图例。在图1中,准备了3个盘,并且在每个盘中提供512字节的扇区数据的区域和4到16字节的冗余编码的区域。此外,在两个任意选择的片段中,如附图所示,维护用户数据(在附图中指示为″数据″),奇偶检验数据(指示为″奇偶检验″),DDC值(指示为″DDC″),PDC值(指示为″PDC″),及SDC值(指示为″SDC″)。换言之,在存储用户数据1-1,1-2,2-1及2-2的数据扇区的冗余编码区域中,DDC 1-1,1-2,2-1及2-2被分别维护为每个用户数据的DC值。此外,奇偶检验数据1是用户数据1-1及1-2的主奇偶检验数据,以及用户数据2-1和2-2的次奇偶检验数据。因此,在存储奇偶检验数据1的奇偶检验扇区的冗余编码区域中,维护对应于DDC 1-1和1-2的PDC 1-1和1-2,同时维护对应于DDC 2-1和2-2的SDC 2-1和2-2。并且,奇偶检验数据2是用户数据2-1和2-2的主奇偶检验数据,以及用户数据1-1和1-2的次奇偶检验数据。因此,在存储奇偶检验数据2的奇偶检验扇区的冗余编码区域中,存储对应于DDC 2-1和2-2的PDC 2-1和2-2,同时维护对应于DDC 1-1和1-2的SDC 1-1和1-2。
此外,图2是示出了RAID50的结构的图例。类似于图1,在图2中,准备了3个盘并且尽管未图解,在每个盘中提供了512字节的扇区数据区域和4到16字节的冗余编码区域。此外,这个RAID50结构是镜像的RAID5的结构,并且盘1到3中存储的数据也被分别存储在盘4到6。此外,在这些镜像的片段中,如附图所示,维护用户数据(在附图中指示为″数据″),奇偶检验数据(指示为″奇偶检验″),DDC值(指示为″DDC″),PDC值(指示为″PDC″)及SDC值(指示为″SDC″)。换言之,在存储用户数据1和2的数据扇区的冗余编码区域中,DDC 1和2被维护为每个用户数据的DC值。此外,由于要存储在盘3的奇偶检验数据是用户1和2的主奇偶检验数据,所以在存储这个奇偶检验数据的奇偶检验扇区的冗余编码区域中,维护对应于DDC 1和2的PDC 1和2。并且,由于要存储在盘6的奇偶检验数据是用户1和2的次奇偶检验数据,所以在存储这个奇偶检验数据的奇偶检验扇区的冗余编码区域中,维护对应于DDC 1和2的SDC 1和2。
接着,参照图3,描述存储DC值到冗余编码区域的方法。注意,图3示出了在图1的RAID5的结构中DC值的存储方法。
如上所述,每个用户数据的DC值在每个扇区的冗余编码区域被存储为用户数据的冗余编码(RCx),以及对应于用户数据的奇偶检验数据的冗余编码(RCpx)。具体地,首先,RCG(冗余编码生成器)通过使用常规方法产生每个扇区数据的冗余编码。接着,通过如此产生的冗余编码和要存储的DC值的XOR操作获得的新冗余编码被存储在每个扇区的冗余编码区域中。
例如,在DC值被存储在用户数据2-1的冗余编码RC 2-1中的情况下,存储方法如下。
首先,RCG通过使用常规方法产生用户数据2-1的冗余编码RC2-1。接着,XOR操作器执行RC 2-1-和DC 2-1的XOR操作,从而获得新冗余编码RC 2-1。这个新冗余编码被存储在冗余编码区域中。
此外,在DC值被存储在奇偶检验数据2的冗余编码RCp2中的情况下,存储方法如下。
首先,RCG通过使用常规方法产生奇偶检验数据2的冗余编码RCp2。接着,XOR操作器执行RCp2-和DC 2-1,2-2,1-1和1-2所形成的位序列的XOR操作,从而获得新冗余编码RCp2。这个新冗余编码被存储在冗余编码区域中。
此外,类似于用户数据2-1的情况,DC值被存储到用户数据2-2的冗余编码R C2-2中。
接着,详细描述产生和验证包含这种DC值的冗余编码的存储子系统的结构和操作的例子。
图4是示意性示出最好用作这种存储子系统的计算机的硬件结构的例子的图例。
图4中示出的计算机包含作为操作装置的CPU(中央处理单元)10a;主存储器10c,也通过M/B(母板)芯片组10b和CPU总线连接到CPU 10a;视频卡10d,通过M/B芯片组10b和AGP(图形加速端口)连接到CPU 10a;及显示器10j。计算机还包含磁盘驱动器(HDD)10e,通过PCI(外设部件互连)总线及网络接口10g连接到M/B芯片组10b。计算机此外还包含软盘驱动器10h,通过桥电路10f及例如ISA(工业标准体系结构)总线的低速总线从PCI总线连接到M/B芯片组10b;及键盘/鼠标10i。
注意,图4仅仅示出了实现实施例的该方面的计算机的硬件结构的例子,并且就能够应用的本实施例的该方面而言,能够采用各种不同结构。例如,可以用这样的方式配置计算机,其中不是提供视频卡10d,而是只安装视频存储器,并且可通过CPU 10a处理图像数据。可以用这样的方式配置计算机,其中通过例如ATA(AT附件)和SCSI(小型计算机系统接口)接口提供CD-R(可记录光盘)或DVD-RAM(数字化视频光盘随机访问存储器)的驱动器以作为外部存储器设备。
图5是示出实施例的该方面的存储子系统的结构的图例。这个存储子系统包含控制器11;前端接口单元12(此后被称作″前端I/F单元″);数据路径控制器13;后端接口单元14(此后被称作″后端I/F单元″);高速缓存单元15;及盘驱动器161,162,---,16n。控制器11控制整个存储子系统。附带地,控制器11也具有根据从数据路径控制器13传递的信息指定在数据扇区,主奇偶检验扇区和次奇偶检验扇区中出现问题的扇区的功能。这个功能能够被作为″指定装置″。前端I/F单元12充当主机系统和存储子系统之间的接口。
此外,数据路径控制器13控制后端I/F单元14和高速缓存单元15之间的数据路径,并且还包含冗余编码生成器13a,冗余编码验证器13b,DDC存储器区域13c,SDC存储器区域13d和旧数据存储器区域13e。附带地,数据路径控制器13也具有把冗余编码生成器13a产生的冗余编码加入到数据中的功能。这个功能能够被作为″添加装置″。并且,冗余编码验证器13b能够被作为″验证装置″。后端I/F单元14充当存储子系统和盘驱动器161,162,…,16n之间的接口。
另外,高速缓存单元15高速缓存从盘驱动器161,162,---,16n读取的用户数据,奇偶检验数据和DC值,并且还包含高速缓存控制器15a,用户数据存储器区域15b,奇偶检验数据存储器区域和DC缓冲器15d。
盘驱动器161,162,---,16n是存储变成存储子系统要处理的对象的用户数据和奇偶检验数据的存储器,并且对应于图1中的盘1到3以及图2中的盘1到6。
接着,描述数据路径控制器13的内部结构。冗余编码生成器13a具有当响应对驱动器的写入请求用户数据被从高速缓存单元15传送到后端I/F单元14时计算冗余编码的功能。以读取DC缓冲器15d中的对应DC值,并且执行通过使用常规方法获得的冗余编码和如此读取的DC值的XOR操作的方式计算冗余编码。
此外,冗余编码验证器13b具有当响应驱动器的读取请求而将用户数据从后端I/F单元14传送到高速缓存单元15时验证冗余编码的功能。以这种方式验证冗余编码,其中通过执行使用常规方法从用户数据获得的冗余编码和从驱动器读取的冗余编码的XOR操作来获得DC值,并且把如此所获得的DC值与DC缓冲器15d中存储的DC值比较。
DDC存储器区域13c是临时存储从用户数据的冗余编码获得的DDC值的区域,而SDC存储器区域13d是临时存储从次奇偶检验数据的冗余编码获得的SDC值的区域。旧数据存储器区域13e是临时存储在降级之前已经读取的变化之前的数据(此后被称作″旧数据″)的区域。
注意,与软件资源及硬件资源协作地实现这些功能。具体地,实现存储子系统的CPU 10a把实现冗余编码生成器13a及冗余编码验证器13b的功能的程序从外部存储设备读到主存储器10c中,并且根据必要性,在访问主存储器10c中的DDC存储器区域13c,SDC存储器区域13d及旧数据存储器区域13e中存储的信息的同时执行处理。
接着,描述高速缓存单元15的内部结构。高速缓存控制器15a具有控制针对用户数据存储器区域15b,奇偶检验存储器区域15c及DC缓冲器15d的信息的读/写的功能。例如,高速缓存控制器15a控制哪些种类的信息被存储在用户数据存储器区域15b,奇偶检验数据存储器区域15c及DC缓冲器15d中,以及控制DC缓冲器15d中存储的DC值是否已经被验证。
用户数据存储器区域15b是存储从盘驱动器161,162,---,16n读取的用户数据的区域,而奇偶检验数据存储器区域15c是存储从盘驱动器161,162,---,16n读取的奇偶检验数据的区域。
DC缓冲器15d是存储从主奇偶检验数据的冗余编码获得的、作为从用户数据的冗余编码获得的DC值的比较对象的DC数据的区域。附带地,在RAID5等的情况下,在DC缓冲器15d中能够维护的DC值是在用户数据存储器区域15b中能够维护的用户数据的用户数据块的数量的两倍,并且在RAID50等的情况下,等于在用户数据存储器区域15b中能够维护的用户数据块的数量。此外,当在高速缓存单元15中分配用户数据存储器区域15b时,响应来自控制器11的请求,由高速缓存控制器15a设置DC缓冲器15d。
接着,描述基于实施例的该方面的存储子系统的操作。当从盘驱动器161,162,---,16n读取扇区数据到高速缓存单元15(升级)时,以及当从高速缓存单元15写扇区数据到盘驱动器161,162,---,16n(降级)时,执行存储子系统中的DC值的操作。因此,如下分别描述升级操作和降级操作。
首先,参照图6,描述升级操作。注意,图6示出当执行一个用户数据的升级时的操作。通常,响应来自主机系统的读命令,返回至少一个片段中包含的多个用户数据。然而,在这种情况下,可以认为是对多个用户数据的每个用户数据执行图6的操作。此外,由于奇偶检验数据保持成为由用户数据保持的DC值的核对对象的DC值,所以不对奇偶检验数据执行图6的操作。
首先,控制器11检查要执行升级的用户数据的DC值是否存在于DC缓冲器15d中(步骤101)。由于过去从主奇偶检验数据获得的DC值被存储在DC缓冲器15d中,所以检查此时必须比较的DC值是否存在。结果,当判断DC值存在于DC缓冲器15d中时,处理前进到步骤104。反之,当判断DC值不存在于DC缓冲器15d中时,控制器11指示后端I/F单元14读取对应于这个用户数据的主奇偶检验数据。在此之后,后端I/F单元14对驱动器执行主奇偶检验数据的读取请求。接着,如此读取的主奇偶检验数据通过数据路径控制器13被传送到高速缓存单元15的奇偶检验数据存储器区域15c(步骤102)。在这个数据传送时,冗余编码验证器13b从读取的主奇偶检验数据产生冗余编码。接着,通过执行如此产生的冗余编码和加入主奇偶检验数据中的冗余编码的XOR操作来获得PDC值。这个PDC值被传送到DC缓冲器15d(步骤103)。注意,此时PDC值未被定义为已验证。
接着,控制器11指示后端I/F单元14读取执行升级的用户数据。在此之后,后端I/F单元14对驱动器执行用户数据的读取请求。接着,如此读取的用户数据通过数据路径控制器13被传送到高速缓存单元15的用户数据存储器区域15b(步骤104)。在这个数据传送时,冗余编码验证器13b从如此读取的用户数据产生冗余编码。接着,通过执行如此产生的冗余编码和加入用户数据中的冗余编码的XOR操作来获得DDC值。把这个DDC值与DC缓冲器15d中的PDC值比较(步骤105)。
结果,当PDC值与DDC值一致时,PDC值被定义成已验证(步骤106)。即,指示高速缓存控制器15a以便进行控制,使得DC缓冲器15d中存储的PDC值作为第二次和后续的DDC值的比较对象是可靠的。在这种情况下,无需处理地完成升级过程。另一方面,当PDC值与DDC值不一致时,冗余编码验证器13b在DDC存储器区域13c中临时存储如此获得的DDC值,并且通知控制器11出现DC值的不一致。
在这之后,控制器11检查PDC值是否已经被验证(步骤109)。结果,当PDC值已经被验证时,控制器11检测存储在步骤104读取的用户数据的数据扇区中出现的问题,并且通过前端I/F单元12向主机系统通知问题的出现(步骤110)。注意,然后自主地或通过来自主机系统的指令执行恢复处理。然而,由于过程类似于普通RAID系统的过程,所以不在这里描述。
另一方面,如果PDC值仍没有被验证,则控制器11指示后端I/F单元14读取次奇偶检验数据。在此之后,后端I/F单元14对驱动器执行次奇偶检验数据的读取请求。接着,如此读取的次奇偶检验数据被传送到数据路径控制器13(步骤111)。当这个数据传送时,冗余编码验证器13b从如此读取的次奇偶检验数据产生冗余编码。接着,通过执行如此产生的冗余编码和加入次奇偶检验数据中的冗余编码的XOR操作来获得SDC值。这个SDC值被临时存储在SDC存储器区域13d中,同时SDC值与DC缓冲器15d中的PDC值比较(步骤112)。
结果,当PDC值与SDC值一致时,冗余编码验证器13b定义PDC值为已验证(步骤113)。接着,冗余编码验证器13b检测存储在步骤104读取的用户数据的数据扇区中出现的问题,并且通过前端I/F单元12向主机系统通知问题的出现(步骤110)。注意,然后自主地或通过来自主机系统的指令执行恢复处理,然而,由于过程类似于普通RAID系统的过程,所以不在这里描述。另一方面,当PDC值与SDC值不一致时,SDC存储器区域13d中临时存储的SDC值与DDC存储器区域13c中临时存储的DDC值比较(步骤114)。
结果,当SDC值与DDC值一致时,冗余编码验证器13b用DDC存储器区域13c中临时存储的DDC值改写DC缓冲器15d中的PDC值,并且定义PDC值为已验证(步骤115)。接着,冗余编码验证器13b检测出现在主奇偶检验扇区中的问题,并且通过前端I/F单元12向主机系统通知问题的出现(步骤116)。注意,然后自主地或通过来自主机系统的指令执行恢复处理,然而,由于过程类似于普通RAID系统的过程,所以不在这里描述。另一方面,当SDC值与DDC值不一致时,控制器11从DC缓冲器15d中删除PDC值(步骤117)。接着,控制器11检测双重故障的出现,并且通过前端I/F单元12向主机系统通知故障的出现(步骤118)。注意,然后自主地或通过来自主机系统的指令执行恢复处理,然而,由于过程类似于普通RAID系统的过程,所以不在这里描述。
接着,参照图7-1和7-2,描述降级的操作。注意,图7-1和7-2示出每个片段执行的降级操作。例如,即使在多个用户数据中只有一部分发生变化时,奇偶检验数据也根据这个变化而变化。因此,需要每个片段地执行处理。
首先,控制器11检查在作为降级对象的片段中存在的主奇偶检验数据是否存在于高速缓存单元15的奇偶检验数据存储器区域15c中(步骤201)。结果,当判断主奇偶检验数据存在于奇偶检验数据存储器区域15c时,处理前进到步骤211。
反之,当判断主奇偶检验数据不存在于奇偶检验数据存储器区域15c时,控制器11指示后端I/F单元14读取主奇偶检验数据。在此之后,后端I/F单元14指示驱动器执行主奇偶检验数据的读取请求。接着,如此读取的主奇偶检验数据通过数据路径控制器13被传送到高速缓存单元15的奇偶检验数据存储器区域15c(步骤202)。
当这个数据传送时,冗余编码验证器13b从如此读取的主奇偶检验数据产生冗余编码。接着,通过执行如此产生的冗余编码和加入主奇偶检验数据中的冗余编码的XOR操作来获得PDC值(步骤203)。
接着,控制器11检查存储这个主奇偶检验数据的主奇偶检验扇区的冗余编码区域中保持的PDC值是否已经存在于DC缓冲器15d中(步骤204)。这里,如果在冗余编码区域中保持多个PDC值,则所有它们以集中方式被当作判断对象来处理。例如,在图1的奇偶检验数据1的情况下,PDC 1-1和1-2集中地被当作判断对象。
附带地,尽管在步骤201判断奇偶检验数据不存在,但是在步骤204判断PDC值存在的情况限于RAID5等等的情况。这种情况不出现于RAID50等等的情况下。这是由于,在RAID5等的情况下,用户数据的DC值也存在于不同片段的奇偶检验扇区的冗余编码区域中,而在RAID50等的情况下,用户数据的DC值只存在于相同片段的奇偶检验扇区的冗余编码区域中。
当在步骤204判断PDC值不存在时,在步骤203获得的PDC值被简单地传送到DC缓冲器15d(步骤205),并且处理前进到步骤211。此时,PDC值没有被定义为已验证。
并且,当判断PDC值存在时,在步骤203获得的PDC值与DC缓冲器15d中对应的PDC值比较(步骤206)。
结果,当在步骤203获得的PDC值与DC缓冲器15d中的PDC值一致时,PDC值被定义成已验证(步骤207),并且处理前进到步骤211。另一方面,当在步骤203获得的PDC值与DC缓冲器15d中的PDC值不一致时,检查PDC值是否被定义成已验证(步骤208)。
结果,当发现PDC值被验证时,检测到主奇偶检验扇区中问题的出现,并且通过前端I/F单元12把此情况通知主机系统(步骤210),并且处理结束。注意,然后自主地或通过来自主机系统的指令执行恢复处理,然而,由于过程类似于普通RAID系统的过程,所以不在这里描述。
并且,当PDC值没有被定义为已验证时,用在步骤203获得的PDC值改写DC缓冲器15d中的PDC值(步骤209),并且处理前进到步骤211。此时,PDC值没有被定义为已验证。
接着,控制器11指示后端I/F单元14读取要降级的用户数据。在此之后,后端I/F单元14对驱动器执行用户数据的读取请求。接着,如此读取的用户数据被传送到数据路径控制器13的旧数据存储器区域13e(步骤211)。在这个数据传送时,冗余编码验证器13b从如此读取的用户数据产生冗余编码。接着,通过执行如此产生的冗余编码和加入用户数据中的冗余编码的XOR操作来获得DDC值。把这个DDC值与DC缓冲器15d中的PDC值比较(步骤221)。结果,当PDC值与DDC值不一致时,冗余编码验证器13b在DDC存储器区域13c中临时存储如此获得的DDC值(步骤228),并且通知控制器11存在DC值的不一致。
在这之后,控制器11检查PDC值是否被定义成已验证(步骤229)。结果,当PDC值被定义成已验证时,控制器11检测到在存储步骤104所读取的用户数据的数据扇区中出现问题,并且通过前端I/F单元12向主机系统通知问题的出现(步骤230)。注意,然后自主地或通过来自主机系统的指令执行恢复处理,然而,由于过程类似于普通RAID系统的过程,所以不在这里描述。
反之,当PDC值没有被定义为已验证时,控制器11指示后端I/F单元14读取次奇偶检验数据。在此之后,后端I/F单元14对驱动器执行次奇偶检验数据的读取请求。接着,如此读取的次奇偶检验数据被传送到数据路径控制器13(步骤231)。
在这个数据传送时,冗余编码验证器13b从如此读取的次奇偶检验数据产生冗余编码。接着,通过执行如此产生的冗余编码和加入次奇偶检验数据中的冗余编码的XOR操作来获得SDC值。这个SDC值被临时存储在SDC存储器区域13d中,并且与DC缓冲器15d中的PDC值比较(步骤232)。
结果,当PDC值与SDC值一致时,冗余编码验证器13b定义PDC值为已验证(步骤233)。接着,冗余编码验证器13b检测到在存储步骤211所读取的用户数据的数据扇区中出现问题,并且通过前端I/F单元12向主机系统通知问题的出现(步骤230)。注意,然后自主地或通过来自主机系统的指令执行恢复处理,然而,由于过程类似于普通RAID系统的过程,所以不在这里描述。
并且,当PDC值与SDC值不一致时,SDC存储器区域13d中临时存储的SDC值与DDC存储器区域13c中临时存储的DDC值比较(步骤234)。
结果,当SDC值与DDC值一致时,冗余编码验证器13b用DDC存储器区域13c中临时存储的DDC值改写DC缓冲器15d中的PDC值,并且定义PDC值为已验证(步骤235)。接着,冗余编码验证器13b检测到在主奇偶检验扇区中出现问题,并且通过前端I/F单元12向主机系统通知问题的出现(步骤236)。注意,然后自主地或通过来自主机系统的指令执行恢复处理,然而,由于过程类似于普通RAID系统的过程,所以不在这里描述。
并且,当SDC值与DDC值不一致时,控制器11从DC缓冲器15d删除PDC值(步骤237)。接着,控制器11检测到存在双重故障的问题,并且通过前端I/F单元12向主机系统通知问题的出现(步骤238)。注意,然后自主地或通过来自主机系统的指令执行恢复处理,然而,由于过程类似于普通RAID系统的过程,所以不在这里描述。
此外,当在步骤221PDC值与DDC值一致时,数据路径控制器13执行旧数据存储器区域13e中存储的旧数据,奇偶检验数据存储器区域15c中存储的奇偶检验数据和新用户数据的XOR操作,从而计算新奇偶检验数据(步骤222)。注意,新奇偶检验数据可以通过在从驱动器读取数据时的数据传送期间的XOR操作来计算(运行时XOR)。接着,数据路径控制器13把DC缓冲器15d中的用户数据的DC值加1(步骤223)。此后,检查执行降级的另一个用户数据是否存在(步骤224)。
结果,在判断存在执行降级的另一个用户数据的情况下,处理返回到步骤211并且对执行降级的所有用户数据执行相同处理。另一方面,当判断不存在其它用户数据时,控制器11指示后端I/F单元14把新用户数据和新奇偶检验数据写入到驱动器。在此之后,后端I/F单元14对驱动器执行写入请求。接着,新用户数据和新奇偶检验数据通过数据路径控制器13被传送到驱动器。
在这个数据传送时,冗余编码生成器13a从用户数据和奇偶检验数据产生用户数据和奇偶检验数据的每个的冗余编码。接着,通过执行从用户数据产生的冗余编码和DC缓冲器15d中的DC值的XOR操作而获得的值被作为新冗余编码加到用户数据上,而通过执行从奇偶检验数据产生的冗余编码和DC缓冲器15d中的DC值的XOR操作而获得的值被作为新冗余编码加到奇偶检验数据上(步骤225)。附带地,当产生要加到用户数据上的冗余编码时,只参考用户数据的DC值,并且当产生要加到奇偶检验数据上的冗余编码时,参考对应于奇偶检验数据的所有用户数据的DC值。
如上所述完成实施例的该方面的操作。附带地,基于实施例的该方面,逐个扇区地执行升级处理,并且逐个片段地执行降级处理。然而,也可以按照由相同盘中多个扇区构成的条(strip)来执行升级处理,并且按照作为多个片段的集合的条来执行降级处理。
此外,基于实施例的该方面,通过执行冗余编码和DC值的XOR操作把DC值加到扇区数据上。然而,DC值能够通过嵌入除了冗余编码之外的部分中而被加到扇区数据上。另外,作为嵌入DC值的方法,也可以采用各种方法,而不是限于XOR操作。此外,基于实施例的该方面,用户数据的DC值被加到对应于用户数据的奇偶检验数据上。然而,不必限于这个方面,并且例如可以采用加入到其它用户数据上的方面。
此外,基于实施例的该方面,当PDC值与DDC值不一致时,则检查PDC值是否与SDC值一致。然而,当PDC值与DDC值不一致时,可以作为下一步骤来检查SDC值是否与DDC值一致。在这种情况下,当SDC值与DDC值一致时,能够判断在主奇偶检验扇区中出现问题,并且当SDC值与DDC值不一致时,能够判断在数据扇区中出现问题。
此外,基于实施例的该方面,当PDC值与DDC值一致时,在假定任何地方均没有出现问题的情况下执行处理。然而,在这种情况下,可以验证次奇偶检验扇区中是否出现问题。具体地,这是在步骤221判断PDC值与DDC值一致,在步骤206判断DC缓冲器15d中的PDC值与从主奇偶检验扇区读取的PDC值不一致,及在步骤208判断PDC值未验证的情况。在这种情况下,也可以通过读取次奇偶检验数据并且比较从次奇偶检验数据获得的SDC值与DC缓冲器15d中的PDC值来检测问题的出现。此外,也可以在检测到问题出现时执行恢复处理。
此外,也可以采用同时比较PDC值,SDC值和DDC值的方面。在这种情况下,当3个值中只有一个值不同于其余两个值时,可以判断获得该值的扇区出现问题。
如上所述,基于实施例的该方面,要结合用户数据的更新而被更新的DC被加到用户数据上,并且作为比较对象的DC值被加到在存储用户数据时有必要存储的数据(例如,用户数据的奇偶检验数据)上。通过采用这种结构,无需消耗驱动器容量便可避免存储子系统返回不准确数据到主机系统的问题。
此外,作为比较对象的DC值被加到数据(例如,用户数据的奇偶检验数据)上,并且与用户数据的写/读同步地执行其写/读。通过采用这种结构,不影响从驱动器读取的性能便可避免存储子系统返回不准确数据到主机系统的问题。
基于本发明,无需消耗驱动器的容量便可以避免存储子系统把不准确数据返回到主机系统的问题。
虽然已经详细描述了本发明的优选实施例,但应当理解,在不偏离本发明如所附权利要求书定义的宗旨和范围的前提下,可以对其进行各种变化,替换和转换。
权利要求
1.一种用于检测存储器中的任何差错数据的设备,包括添加单元,用于把结合要存储在存储器的第一扇区中的数据的更新而更新的历史信息加入到该数据上,并且加入到要存储在存储器的第二扇区中的数据上;以及验证单元,用于通过在已经被加到第一扇区中存储的该数据上的历史信息和已经被加到第二扇区中存储的该数据上的历史信息之间进行比较,来验证第一扇区中存储的该数据和第二扇区中存储的该数据。
2.如权利要求1所述的单元,其中添加单元把根据要存储在第一扇区的数据的更新而更新的历史信息嵌入检测数据的错误的冗余编码中,并且嵌入检测要存储在第二扇区的数据的错误的冗余编码中。
3.如权利要求1所述的单元,其中根据对第一扇区的访问执行对第二扇区的访问。
4.如权利要求1所述的单元,其中检测要存储在第一扇区的数据的错误的奇偶检验被存储在第二扇区中。
5.如权利要求1所述的单元,其中添加单元把根据要存储在第一扇区的数据的更新而更新的历史信息加入到要存储在存储器的第三扇区的数据上;并且验证单元通过比较加入到分别存储在第一扇区,第二扇区和第三扇区的数据上的每个历史信息,验证分别被存储在第一扇区,第二扇区和第三扇区中的数据。
6.如权利要求5所述的单元,还包括指定单元,用于将被加到第一扇区,第二扇区和第三扇区中分别存储的数据上的历史信息中唯一一个不同于其它历史信息的历史信息所被加入到的数据,指定为不准确数据。
7.一种用于在存储以分布方式同步处理的多个数据的多个存储器中检测不准确数据的方法,包括步骤把结合多个数据中的一个数据的更新而更新的历史信息加入到该一个数据上,并且加入到该多个数据中的另一个数据上;把该一个数据写入到存储器的第一扇区,并且把该另一个数据写入到存储器的第二扇区;读取第一扇区中存储的数据和第二扇区中存储的数据;以及通过比较分别加入到两个读取数据的历史信息来验证该两个数据。
8.如权利要求7所述的方法,其中在加入步骤中,将根据要存储在第一扇区的数据的更新而更新的历史信息嵌入检测该一个数据的错误的冗余编码中,并且嵌入检测该另一个数据的错误的冗余编码。
9.如权利要求7所述的方法,其中检测要存储在第一扇区的数据的错误的奇偶检验被存储在第二扇区中。
10.如权利要求7所述的方法,其中在加入步骤,历史信息被加到该多个数据中的又一个数据上;在写入步骤,该又一个数据被写入存储器的第三扇区中;以及在读取步骤,读取被存储在第三扇区的数据;当加入到第一扇区中存储的数据上的历史信息与加入到第二扇区中存储的数据上的历史信息不一致时,通过比较加入到第一和第二扇区中存储的数据上的任何一个历史信息和加入到第三扇区中存储的数据上的历史信息,验证分别被存储在第一扇区,第二扇区和第三扇区中的数据。
11.一种程序产品,用于允许连接到存储器的计算机实现从第一数据中获得结合要存储在存储器的第一扇区的第一数据的更新而更新的第一历史信息,以及从第二数据中获得结合要存储在存储器的第二扇区的第二数据的更新而更新的第二历史信息的功能;以及通过比较第一历史信息和第二历史信息,验证第一数据或第二数据的功能。
12.如权利要求11所述的程序产品,用于允许计算机进一步实现当第一数据或第二数据被更新时,如果第一历史信息与第二历史信息一致,则更新第一历史信息并且把它加入到第一数据的功能,以及更新第二历史信息并且把它加入到第二数据的功能。
13.如权利要求11所述的程序产品,其中通过获得第一历史信息的功能,从检测第一数据的错误的冗余编码中获得第一历史信息;并且通过获得第二历史信息的功能,从检测第二数据的错误的冗余编码中获得第二历史信息。
14.如权利要求11所述的程序产品,其中第二数据是检测第一数据的错误的奇偶检验。
15.如权利要求11所述的程序产品,用于允许计算机进一步实现从第三数据中获得根据存储器的第三扇区中存储的第三数据的更新而更新的第三历史信息的功能;以及当第一历史信息与第二历史信息不一致时,通过比较第一历史信息或第二历史信息和第三历史信息,验证第一数据,第二数据和第三数据的功能。
全文摘要
当数据通过后端I/F单元从盘驱动器传送到一个高速缓存时,数据路径控制器的冗余编码验证器比较嵌入数据的冗余编码的写入历史信息(DC值)和嵌入对应奇偶检验的冗余编码的DC值,从而验证数据是否不准确。另外,在数据被更新的情况下,冗余编码验证器在要用于产生奇偶检验的旧数据被读取时进行类似验证。当数据不是不准确时,数据路径控制器的冗余编码生成器向新数据和奇偶检验加入已经嵌入新DC值的冗余编码。并且,当数据不准确时,控制器通过前端I/F单元向主机系统通知问题的出现。
文档编号G06F11/00GK1808611SQ200510127040
公开日2006年7月26日 申请日期2005年11月29日 优先权日2004年12月2日
发明者寺下善彦, 住吉彻, 三好浩之 申请人:国际商业机器公司