APPARATUS AND METHOD TO CHECK DATA INTEGRITY WHEN HANDLING DATA
An apparatus and method to check integrity when handling data. The method provides a storage array which includes a plurality of sectors. The method defines (N) data state identifiers and (N) parity state identifiers. The method receives a command to handle data, where that command designates a target sector. The method determines the data state identifier assigned to the target sector, determines the parity state identifier assigned to the target sector, and compares the data state identifier and the parity state identifier. If the method determines that the data state identifier and the parity state identifier are the same, the method performs the command to handle data. Alternatively, if the method determines that the data state identifier and the parity state identifier differ, the method generates an error message.
Latest IBM Patents:
This application is a Continuation application claiming priority from the Application having Ser. No. 10/995,873 filed Nov. 23, 2004.
FIELD OF THE INVENTIONThe invention relates to an apparatus and method to check data integrity when handling data. More specifically, the invention relates to an apparatus and method to check data states and parity states when handling data. In certain embodiments, the invention relates to an apparatus and method to check data states and parity states when writing data. In certain embodiments, the invention relates to an apparatus and method to check data states and parity states when reading data.
BACKGROUND OF THE INVENTIONInformation storage and retrieval systems are used to store information provided by one or more host computer systems. Such information storage and retrieval systems receive requests to write information to one or more information storage devices, and requests to read information from those one or more information storage devices. The system is continuously moving information to and from storage devices.
Data storage devices, such as hard disk drives, can “drop write,” i.e. fail to write data to a designated sector of the storage medium, and/or perform off-track writes to that designated sector. A subsequent read of this sector would receive old, i.e. “stale,” data instead of the data last written. In a RAID-5 encoded array, if a subsequent write to the parity stripe that causes the invalidly written sector to be read in calculating the new parity, the parity will become corrupt with the previous data because the read used to update the parity will get stale data instead of the data that was used when creating the parity.
In order to identify such dropped writes/off-track writes, the prior art teaches reading back data after every write. Such a read back verifies that the data is written correctly. Such read backs necessarily require, however, an additional read operation for every write operation. The prior art also teaches regularly checking the parity of the entire storage array. This approach is cumbersome and requires an inordinate amount of time. Moreover, while such a parity check is in progress, parity corruption can occur at a different part of the storage medium.
What is needed is a method to identify dropped writes and/or off-track writes without reading back every write, and without checking the parity of the entire storage array. Applicants' method identifies dropped writes and off-track writes by checking the data state and the parity state of a sector when handling data.
SUMMARY OF THE INVENTIONApplicants' invention includes an apparatus and method to check data states and parity states when handling data. The method provides an information storage array which includes an information storage array comprising a plurality of sectors. The method defines (N) data state identifiers and (N) parity state identifiers. The method receives a command to handle data, where that command designates a target sector.
The method determines the data state identifier assigned to the target sector, determines the parity state identifier assigned to the target sector, and compares the data state identifier and the parity state identifier.
If the method determines that the data state identifier and the parity state identifier are the same, the method performs the command to handle data. Alternatively, if the method determines that the data state identifier and the parity state identifier differ, the method generates an error message.
The invention will be better understood from a reading of the following detailed description taken in conjunction with the drawings in which like reference designators are used to designate like elements, and in which:
Referring to the illustrations, like numerals correspond to like parts depicted in the Figures. The invention will be described as embodied in a data storage and retrieval system comprising two or more clusters, where each of those clusters includes one or more processors, one or more data caches, and one or more non-volatile storage devices. The following description of Applicants' method to assign data states and parity states when writing data is not meant, however, to limit Applicants' invention to data processing systems in general, or to data processing system which include a plurality of clusters, as the invention herein can be applied to writing data to a plurality of storage media in general.
In the illustrated embodiment of
In the illustrated embodiment of
Information storage and retrieval system 100 further includes a plurality of host adapters 102-105, 107-110, 112-115, and 117-120, disposed in four host bays 101, 106, 111, and 116. Each host adapter may comprise one or more Fibre Channel ports, one or more FICON ports, one or more ESCON ports, or one or more SCSI ports. Each host adapter is connected to both clusters through one or more Common Platform Interconnect bus 121 such that each cluster can handle I/O from any host adapter.
Processor portion 130 includes processor 132 and cache 134. In certain embodiments, processor portion 130 further include memory 133. In certain embodiments, memory device 133 comprises random access memory. In certain embodiments, memory device 133 comprises non-volatile memory.
Processor portion 140 includes processor 142 and cache 144. In certain embodiments, processor portion 140 further include memory 143. In certain embodiments, memory device 143 comprises random access memory. In certain embodiments, memory device 143 comprises non-volatile memory.
I/O portion 160 includes non-volatile storage (“NVS”) 162 and NVS batteries 164. I/O portion 170 includes NVS 172 and NVS batteries 174.
I/O portion 160 further comprises a plurality of device adapters, such as device adapters 165, 166, 167, and 168, and information storage media organized into two arrays, namely array “A” and array “B”. The illustrated embodiment of
In certain embodiments, Applicants' information storage media comprise magnetic media, such as for example hard disks disposed in individual hard disk drive units. In certain embodiments, Applicants' information storage media comprise optical media, such as for example CDs, DVDs, and the like. In certain embodiments, Applicants' information storage media comprise electronic storage media, such as PROMs, EPROMS, EEPROMs, Flash PROMs, compactflash, smartmedia, and the like.
In certain embodiments, arrays “A” and “B” utilize a RAID protocol. In certain embodiments, arrays “A” and “B” comprise what is sometimes called a JBOD array, i.e. “Just a Bunch Of Disks” where the array is not configured according to RAID. As those skilled in the art will appreciate, a RAID (Redundant Array of Independent Disks) rank comprises independent information storage media configured in an array to obtain performance, capacity and reliability that exceeds that of a single large storage medium.
In the certain embodiments, array “A” includes hard disk drives 181, 182, 183, 191, 192, 193, and 194, and array “B” includes hard disk drives 185, 186, 187, 188, 196, 197, and 198.
Applicants' information storage and retrieval system, such as system 100 (
Applicants' information storage and retrieval system receives new data, and writes that new data to one or more designated sectors on one or more information storage media. A number of failure modes exist wherein that new data may not be encoded to the storage media. For example, data storage devices sometimes fail to properly write data to the information storage medium. In addition, data storage devices sometimes perform offtrack writes to a sector. Regardless of the failure mode, a subsequent attempt to read the new data instead returns old data. Using a RAID 5 protocol, if a single sector write is unsuccessful a subsequent write to the parity stripe that causes the invalidly written sector to be read in calculating the new parity, the parity will become corrupt with the previous data because the read used to update the parity will get stale data instead of the data that was used when creating the parity.
In certain embodiments, Applicants' method writes information to a designated sector using a RAID 5 protocol. A RAID (Redundant Array of Independent Disks) combines two protocols: parallelism and redundancy. A RAID uses multiple information storage media in parallel to provide much higher bandwidth than a single storage medium. A RAID can also perform multiple operations in parallel. Redundancy in the form of parity is used to maintain reliability. By storing parity, data can be fully recovered after a single storage device failure.
Using a RAID 5 protocol, data is striped across multiple storage media as blocks. With (R) storage media, a group of (R−1) data blocks is striped across (R−1) media. A parity block is computed by exclusive-oring (“XORing”) these (R−1) blocks, and the parity block is stored on the remaining storage medium. Parity is distributed meaning that successive parity blocks are stored on different storage media to avoid the bottleneck of a dedicated parity medium. Each individual block is called a stripe unit, and a collection of (R−1) data blocks and a parity block is called a parity stripe.
For peak efficiency, a full parity stripe should be written at once. In this case, the data and the parity can be written out in parallel. If only part of the parity stripe is modified, parity must be recomputed from the data already on disk. The old data and parity must be read, and then the new data and the recomputed parity are written.
Each information storage medium in Applicants' one or more storage arrays comprises a plurality of sectors, such as for example sector 300 (
In a storage system comprising (R) storage media, Applicants' method maintains (R) State Addresses for data written to sector 300, where (R) is greater than or equal to 2. A Data State Identifier is maintained in one of those (R) State Addresses.
As a general matter, Applicants' method writes both the data and the corresponding Data State Identifier to the same sector. In the event sector 300 is written to (i)th storage medium, then Applicants' method utilizes the (i)th State Address to store the Data State Identifier for the data written to sector 300.
As an example and referring to
In the illustrated embodiment of
In the illustrated embodiment of
As those skilled in the art will appreciate, an information storage medium may comprise many thousands, or more, of sectors. Using Applicants' method, the data state for any one of those sectors can be determined by examining the Data State Identifier written one of the State Addresses disposed in the metadata portion of that sector.
Referring to
Applicants' method maintains a corresponding parity sector for each information sector. As a general matter, if Applicants' method writes information to the (m)th sector on the (i)th storage medium, then Applicants' method maintains a Data State Identifier for that information at the (i)th State Address portion of the (m)th sector on (i)th storage medium, and maintains a Parity State Identifier for the information at the (i)th State Address portion of the (m)th sector on the (j)th storage medium, where (i) and (j) differ. As a further general matter, where a parity sector is written to the (m)th sector on the (j)th storage medium, then the (j)th State Address portion of that (m)th sector on the (j)th storage medium will not be used.
For example in the illustrated embodiment of
In the illustrated embodiment of
In the illustrated embodiment of
Referring again to
Applicants' invention includes a method to check data integrity when handling data. The steps of an embodiment of that method to write data are summarized in
In certain embodiments, step 510 includes defining 4 First States. In certain embodiments, those 4 First States correspond to States 210 (
In certain embodiments, the (N) First States of step 510 are defined by the manufacturer of the information storage and retrieval system, such as for example system 100 (
In step 520, Applicants' information storage and retrieval system receives data and a WRITE command to write that data to a target sector, i.e. a designated Logical Block Address. In certain embodiments, step 520 is performed by a processor disposed in Applicants' information storage and retrieval system, such as for example processor 132 (
In step 530, Applicants' method determines if the WRITE command of step 520 includes a full array wide WRITE, i.e. a full parity stripe. In certain embodiments, step 530 is performed by a processor disposed in Applicants' information storage and retrieval system, such as for example processor 132 (
Applicants' method transitions from step 532 to step 534 wherein the method writes the data received in step 520, and writes the Data State Identifier assigned in step 532 to the designated information storage array. In certain embodiments, step 534 is performed by a processor disposed in Applicants' information storage and retrieval system, such as for example processor 132 (
In step 536, Applicants' method writes the Parity State Identifier assigned in step 532 to the corresponding parity block disposed in Applicants' information storage array. In certain embodiments, step 536 is performed by a processor disposed in Applicants' information storage and retrieval system, such as for example processor 132 (
If Applicants' method determines in step 530 that the WRITE command of step 520 does not comprises a full array wide WRITE, then the method transitions from step 530 to step 540 wherein the method reads the last assigned Data State Identifier for each target sector. References herein to writing “a target sector” or “the target sector” include writes to more than one target sector where that write operation comprises less than a full stride write. In certain embodiments, step 540 is performed by a processor disposed in Applicants' information storage and retrieval system, such as for example processor 132 (
Applicant's' method transitions from step 540 to step 550 wherein the method reads the last assigned Parity State Identifier for each target sector. In certain embodiments, step 550 is performed by a processor disposed in Applicants' information storage and retrieval system, such as for example processor 132 (
Applicants' method transitions from step 550 to step 560 wherein the method compares the Data State Identifier read in step 540 for each target sector with the Parity State Identifier read in step 550 for each target sector. In certain embodiments, step 560 is performed by a processor disposed in Applicants' information storage and retrieval system, such as for example processor 132 (
If Applicants' method determines in step 560 that the Data State Identifier and the Parity State Identifier differ for any of the target sectors, then a dropped write has been detected. For example, in the illustrated embodiment of
Alternatively, if Applicants' method determines in step 560 that the Data State Identifier and the Parity State Identifier for each target sector are the same, then Applicants' method transitions from step 560 to step 570. For example, in the illustrated embodiment of
In step 570, Applicants' method increments the Data State Identifier for each target sector, and saves that incremented Data State Identifier(s). In certain embodiments, step 570 is performed by a processor disposed in Applicants' information storage and retrieval system, such as for example processor 132 (
In step 580, Applicants' method calculates a new parity for each target sector, and increments the Parity State Identifier for each target sector. In certain embodiments, step 580 is performed by a processor disposed in Applicants' information storage and retrieval system, such as for example processor 132 (
In step 590, Applicants' method writes the data received in step 520 to the data portion of the target sector(s), and writes the incremented Data State Identifier for each target sector to the metadata portion(s) of the target sector(s). In certain embodiments, step 590 is performed by a processor disposed in Applicants' information storage and retrieval system, such as for example processor 132 (
In step 595, Applicants' method writes the new parity for each target sector and the incremented Parity State Identifier for each target sector to the parity block for each target sector. In certain embodiments, step 595 is performed by a processor disposed in Applicants' information storage and retrieval system, such as for example processor 132 (
Referring now to
Applicants' method further includes embodiments to read data. Referring now to
In step 720, Applicants' method reads the last assigned Data State Identifier for each target sector. In certain embodiments, step 720 is performed by a processor disposed in Applicants' information storage and retrieval system, such as for example processor 132 (
Applicant's' method transitions from step 720 to step 730 wherein the method reads the last assigned Parity State Identifier for each target sector. In certain embodiments, step 730 is performed by a processor disposed in Applicants' information storage and retrieval system, such as for example processor 132 (
Applicants' method transitions from step 730 to step 740 wherein the method compares the Data State Identifier for each target sector with the Parity State Identifier for each target sector. In certain embodiments, step 740 is performed by a processor disposed in Applicants' information storage and retrieval system, such as for example processor 132 (
If Applicants' method determines in step 740 that the Data State Identifier and the Parity State Identifier for any target sector differs, then a dropped write has been detected. If the Data State Identifier and the Parity State Identifier for any target sector differs, then Applicants' method transitions from step 740 to step 750 wherein the method generates an error log. In certain embodiments, step 740 is performed by a processor disposed in Applicants' information storage and retrieval system, such as for example processor 132 (
Alternatively, if Applicants' method determines in step 740 that the Data State Identifier and the Parity State Identifier are the same for all target sectors, then Applicants' method transitions from step 740 to step 760 wherein the method provides the requested information. In certain embodiments, step 760 is performed by a processor disposed in Applicants' information storage and retrieval system, such as for example processor 132 (
The method of
In certain embodiments, Applicants' invention includes instructions residing in memory 133 (
While the preferred embodiments of the present invention have been illustrated in detail, it should be apparent that modifications and adaptations to those embodiments may occur to one skilled in the art without departing from the scope of the present invention as set forth in the following claims.
Claims
1. An article of manufacture comprising an information storage array which includes a plurality of sectors and an information storage medium having computer readable program code stored therein to check data integrity when handling data, the computer readable program code comprising a series of computer readable program steps to effect:
- receiving a command to handle data, wherein said command designates a target sector, and wherein said target sector comprises one of said plurality of sectors;
- determining the data state identifier assigned to said target sector;
- determining the parity state identifier assigned to said target sector;
- comparing said data state identifier and said parity state identifier;
- when said data state identifier and said parity state identifier are the same, performing said command;
- when said data state identifier and said parity state identifier differ, generating an error message.
2. The article of manufacture of claim 1, said computer readable program code further comprising a series of computer readable program steps to effect:
- receiving a WRITE command to write data to a target sector;
- receiving said data;
- when said data state identifier and said parity state identifier are the same:
- incrementing said data state identifier for said target sector, wherein said incremented data state identifier comprises one of (N) predetermined data state identifiers, wherein N is greater than or equal to 1;
- calculating a new parity for said target sector;
- writing said data and said incremented data state identifier to said target sector;
- incrementing said parity state identifier, wherein said incremented parity state identifier comprises one of (N) predetermined parity state identifiers;
- writing said new parity and said incremented parity state identifier to said information storage array.
3. The article of manufacture of claim 2, wherein said data state identifier comprises a set of two checkbits.
4. The article of manufacture of claim 2, wherein said data state identifier comprises a set of more than two checkbits.
5. The article of manufacture of claim 2, wherein said target sector comprises a metadata portion and a data portion, said computer readable program code further comprising a series of computer readable program steps to effect:
- writing said data to said data portion; and
- writing said incremented data state identifier to said metadata portion.
6. The article of manufacture of claim 5, wherein said information storage array comprises (R) storage medium, and wherein metadata portion comprises (R) Data State Addresses, said computer readable program code further comprising a series of computer readable program steps to effect writing said incremented data state identifier to one of said (R) data state addresses.
7. The article of manufacture of claim 2, wherein said information storage array comprises (R) storage media and a plurality of parity blocks, wherein one or more of said plurality of parity blocks are written to each of said (R) storage media, said computer readable program code further comprising a series of computer readable program steps to effect writing said new parity and said incremented parity state identifier to one or more of said plurality of parity blocks.
8. The article of manufacture of claim 2, wherein said information storage array comprises (R) storage media, said computer readable program code further comprising a series of computer readable program steps to effect writing said data and said incremented data state identifier to (R-1) of said (R) storage media.
9. The article of manufacture of claim 8, said computer readable program code further comprising a series of computer readable program steps to effect writing said new parity and said incremented parity state identifier to the remaining information storage medium.
10. The article of manufacture of claim 1, said computer readable program code further comprising a series of computer readable program steps to effect:
- receiving a READ command designating a target sector;
- operative if said data state identifier and said parity state identifier are the same, providing information read from said target sector.
11. A computer program product encoded in an information storage medium and usable with a programmable computer processor to check data integrity when handling data using an information storage and retrieval system comprising (N) predetermined data state identifiers, (N) predetermined parity state identifiers, and an information storage array comprising a plurality of sectors, said computer program product comprising:
- computer readable program code which causes said programmable computer processor to receive a command to handle data, wherein said command designates a target sector, and wherein said target sector comprises one of said plurality of sectors;
- computer readable program code which causes said programmable computer processor to determine the data state identifier assigned to said target sector, wherein said data state identifier comprises one of said (N) data state identifiers, wherein N is greater than or equal to 1;
- computer readable program code which causes said programmable computer processor to determine the parity state identifier assigned to said target sector, wherein said parity state identifier comprises one of said (N) parity state identifiers;
- computer readable program code which causes said programmable computer processor to compare said data state identifier and said parity state identifier;
- computer readable program code which, if said data state identifier and said parity state identifier are the same, causes said programmable computer processor to perform said command;
- computer readable program code which, if said data state identifier and said parity state identifier differ, causes said programmable computer processor to generate an error message.
12. The computer program product of claim 11, wherein said computer readable program code to receive a command further comprises computer readable program code which causes said programmable computer processor to receive a WRITE command to write data to a target sector, further comprising:
- computer readable program code which causes said programmable computer processor to receive said data;
- computer readable program code which, if said data state identifier and said parity state identifier are the same, causes said programmable computer processor to:
- increment said data state identifier for said target sector, wherein said incremented data state identifier comprises one of said (N) data state identifiers;
- calculate a new parity for said target sector;
- write said data and said incremented data state identifier to said target sector;
- increment said parity state identifier, wherein said incremented parity state identifier comprises one of said (N) parity state identifiers;
- write said new parity and said incremented parity state identifier to said information storage array.
13. The computer program product of claim 11, wherein said target sector comprises a data portion and a metadata portion, further comprising:
- computer readable program code which causes said programmable computer processor to write said data to said data portion; and
- computer readable program code which causes said programmable computer processor to write said incremented data state identifier to said metadata portion.
14. The computer program product of claim 13, further comprising computer readable program code which causes said programmable computer processor to generate an incremented data state identifier comprising a set of two checkbits.
15. The computer program product of claim 13, further comprising computer readable program code which causes said programmable computer processor to generate an incremented data state identifier comprising a set of more than two checkbits.
16. The computer program product of claim 13, wherein said information storage array comprises (R) storage media, and wherein said metadata portion comprises (R) data state addresses, further comprising computer readable program code which causes said programmable computer processor to write said incremented data state identifier to one of said (R) data state addresses.
17. The computer program product of claim 12, wherein said information storage array comprises (R) information storage media and a plurality of parity blocks written to each of said (R) information storage media, further comprising computer readable program code which causes said programmable computer processor to write said new parity and said incremented parity state identifier to one or more of said plurality of parity blocks.
18. The computer program product of claim 12, wherein said information storage array comprises (R) information storage media, further comprising computer readable program code which causes said programmable computer processor to write said data and said incremented data state identifier to (R-1) of said (R) information storage media.
19. The computer program product of claim 18, further comprising computer readable program code which causes said programmable computer processor to write said new parity and said incremented parity state identifier to the remaining information storage medium.
20. The computer program product of claim 11, further comprising:
- computer readable program code which causes said programmable computer processor to receive a READ command designating a target sector;
- computer readable program code which, if said data state identifier and said parity state identifier are the same, causes said programmable computer processor to provide information read from said target sector.
Type: Application
Filed: Sep 4, 2008
Publication Date: Jan 1, 2009
Applicant: INTERNATIONAL BUSINESS MACHINES CORPORATION (ARMONK, NY)
Inventors: STEVEN T. BROADBENT (TUCSON, AZ), MICHAEL H. HARTUNG (TUCSON, AZ), CARL E. JONES (TUCSON, AZ), KARL A. NIELSEN (TUCSON, AZ), JEREMY M. PINSON (TUCSON, AZ)
Application Number: 12/204,673
International Classification: G06F 11/07 (20060101);