Method and apparatus for preserving data integrity in a multiple disk raid organized storage system
First Claim
1. A method of operating an array of storage devices, comprising the steps of:
- receiving a write request from a processor coupled to said array of storage devices, said write request containing data to be stored on said array of storage devices;
identifying, in response to said write request, a metadata unit data structure (MDU) stored on said array of storage devices to receive said data, said MDU containing a parity block and a set of data blocks, both blocks comprising of a plurality of bits, the bits of said parity block reflecting the parity of a set of corresponding bits from said data blocks when said parity block and said data blocks are consistent with respect to each other, said MDU also including parity metadata (PMD) providing information about whether said parity block and said data blocks are consistent;
setting said PMD to a value indicating that said parity block and said data blocks may be inconsistent;
writing said data to one of said data blocks after said PMD has been set to said inconsistency-indicating value;
updating said parity block to reflect the new parity of said data blocks upon the writing of said data to said one data block, said parity block being updated after said PMD has been set to said inconsistency-indicating value and either before or after said data has been written to said one data block;
determining whether the writing of said data and the updating of said parity block have both successfully completed;
if the writing of said data and the updating of said parity block have both successfully completed, setting said PMD to a value indicating that said parity block and said data blocks are consistent;
if the writing of said data and the updating of said parity block have not both successfully completed, leaving said PMD with said inconsistency-indicating value;
receiving, after said MDU has been updated in the preceding manner, a read request from said processor for one of said data blocks in said MDU;
determining whether the data block to be read is available;
if the data block to be read is available, reading the data block and returning it to said processor;
if the data block to be read is not available, carrying out the following steps;
(a) reading said PMD in said MDU to determine whether said parity block and said data blocks are consistent;
(b) if said PMD in said MDU indicates that said parity block and said data blocks are consistent, carrying out the following steps;
(i) regenerating the unavailable data block from said parity block and data blocks other than the unavailable data block in said MDU; and
(ii) returning the regenerated data block to said processor; and
(c) if said PMD in said MDU indicates that said parity block and said data blocks may be inconsistent, refraining from regenerating the unavailable data block from said parity block and said other data blocks in said MDU.
2 Assignments
0 Petitions
Accused Products
Abstract
A data storage system using a RAID array and a logging process and apparatus that identifies a parity block that may not contain the proper parity for its associated data blocks and which prevents such inconsistent parity information from being used in the regeneration of unavailable data. A small fraction of the blocks of each disk are dedicated to storing parity metadata bits. The parity metadata is associated with the parity blocks and identifies whether or not each parity block contains the proper parity information for its associated data blocks or may contain invalid information. The data integrity of the RAID array is preserved by preventing the generation of undetected corrupt data.
-
Citations
10 Claims
-
1. A method of operating an array of storage devices, comprising the steps of:
-
receiving a write request from a processor coupled to said array of storage devices, said write request containing data to be stored on said array of storage devices; identifying, in response to said write request, a metadata unit data structure (MDU) stored on said array of storage devices to receive said data, said MDU containing a parity block and a set of data blocks, both blocks comprising of a plurality of bits, the bits of said parity block reflecting the parity of a set of corresponding bits from said data blocks when said parity block and said data blocks are consistent with respect to each other, said MDU also including parity metadata (PMD) providing information about whether said parity block and said data blocks are consistent; setting said PMD to a value indicating that said parity block and said data blocks may be inconsistent; writing said data to one of said data blocks after said PMD has been set to said inconsistency-indicating value; updating said parity block to reflect the new parity of said data blocks upon the writing of said data to said one data block, said parity block being updated after said PMD has been set to said inconsistency-indicating value and either before or after said data has been written to said one data block; determining whether the writing of said data and the updating of said parity block have both successfully completed; if the writing of said data and the updating of said parity block have both successfully completed, setting said PMD to a value indicating that said parity block and said data blocks are consistent; if the writing of said data and the updating of said parity block have not both successfully completed, leaving said PMD with said inconsistency-indicating value; receiving, after said MDU has been updated in the preceding manner, a read request from said processor for one of said data blocks in said MDU; determining whether the data block to be read is available; if the data block to be read is available, reading the data block and returning it to said processor; if the data block to be read is not available, carrying out the following steps; (a) reading said PMD in said MDU to determine whether said parity block and said data blocks are consistent; (b) if said PMD in said MDU indicates that said parity block and said data blocks are consistent, carrying out the following steps; (i) regenerating the unavailable data block from said parity block and data blocks other than the unavailable data block in said MDU; and (ii) returning the regenerated data block to said processor; and (c) if said PMD in said MDU indicates that said parity block and said data blocks may be inconsistent, refraining from regenerating the unavailable data block from said parity block and said other data blocks in said MDU. - View Dependent Claims (2, 3, 4, 5, 6, 7, 8, 9, 10)
-
Specification