Data storage array employing block checksums and dynamic striping
First Claim
1. A storage system, comprising:
- a plurality of storage devices, wherein each of the storage devices comprises a plurality of addressable locations for storing data, each addressable location having a physical address;
a storage controller coupled to said plurality of storage devices, wherein said storage controller is configured to store data to and retrieve data from said plurality of storage devices;
a storage configured to store an indirection map comprising a plurality of map entries, wherein each of said map entries maps a virtual address to one of said physical addresses, and wherein each map entry stores a checksum for data stored at the physical address indicated by that map entry; and
wherein said storage controller is further configured to receive storage requests specifying a virtual address, and wherein said storage controller is configured to access said indirection map for each storage request to obtain the corresponding physical address and to obtain or update the corresponding checksum.
2 Assignments
0 Petitions
Accused Products
Abstract
A storage system may include a plurality of storage devices each having a plurality of addressable locations for storing data. A storage controller may be coupled to the storage devices and configured to store and retrieve data from the storage devices. An indirection map may be stored within the system having a plurality of map entries each configured to map a virtual address to a physical address on the storage devices. Each map entry may also store a checksum for data stored at the physical address indicated by the map entry. The storage controller may receive storage requests specifying a virtual address and may access the indirection map for each storage request to obtain the corresponding physical address and checksum. Dynamic striping may be employed so that new writes form new parity groups. Thus, stripes of various sizes may be supported by the storage system.
183 Citations
28 Claims
-
1. A storage system, comprising:
-
a plurality of storage devices, wherein each of the storage devices comprises a plurality of addressable locations for storing data, each addressable location having a physical address;
a storage controller coupled to said plurality of storage devices, wherein said storage controller is configured to store data to and retrieve data from said plurality of storage devices;
a storage configured to store an indirection map comprising a plurality of map entries, wherein each of said map entries maps a virtual address to one of said physical addresses, and wherein each map entry stores a checksum for data stored at the physical address indicated by that map entry; and
wherein said storage controller is further configured to receive storage requests specifying a virtual address, and wherein said storage controller is configured to access said indirection map for each storage request to obtain the corresponding physical address and to obtain or update the corresponding checksum. - View Dependent Claims (2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 20, 21, 22, 23, 24, 25, 27, 28)
-
-
12. A system, comprising:
-
a plurality of storage devices configured in an array; and
an array controller coupled to said plurality of storage devices, wherein said array controller is configured to store a first stripe of data as a first parity group comprising a first plurality of data stripe units across ones of said plurality of storage devices, and wherein said array controller is further configured to store a checksum for each of said first plurality of data stripe units;
wherein said first plurality of data stripe units includes a first plurality of data blocks and a first parity block which is calculated for said first plurality of data blocks;
wherein said array controller is configured to receive a write transaction modifying a subset of said first plurality of data blocks;
wherein said array controller is configured to calculate a new parity block for said subset of said first plurality of data blocks modified by the write transaction;
wherein, in response to the write transaction, said array controller is configured to store only said subset of said first plurality of data blocks modified by the write transaction and said new parity block as a new parity group to new locations across ones of said plurality of storage devices; and
wherein said array controller is configured to store a new checksum for each block of said new parity group.
-
-
19. A method for storing data in a data storage subsystem, comprising:
-
storing a first stripe of data as a first plurality of data stripe units across a plurality of storage devices;
wherein said first plurality of data stripe units includes a first plurality of data blocks and a first parity block which is calculated for said first plurality of data blocks;
storing entries in an indirection map for each data stripe unit, wherein each entry maps a virtual address to a physical address for one of the data stripe units, and wherein each entry further stores a checksum for the data stripe unit corresponding to that entry;
receiving a write transaction specifying the virtual addresses of a subset of said first plurality of data blocks;
calculating a new parity block for said subset of said first plurality of data blocks;
storing only said subset of said first plurality of data blocks modified by the write transaction and said new parity block as a new parity group to new physical addresses across ones of said plurality of storage devices; and
updating the entries in the indirection map for the data blocks modified by the write transaction to indicate the new physical address and checksum for each modified data block.
-
-
26. A method for storing data in a data storage subsystem, comprising:
-
storing a first plurality of data stripe units across a plurality of storage devices, wherein said first plurality of data stripe units includes a first plurality of data blocks;
storing entries in an indirection map for each data block, wherein each entry maps a virtual address to a physical address for one of the data blocks, and wherein each entry further stores a checksum for the data block corresponding to that entry;
receiving a read request specifying the virtual addresses one of said first plurality of data blocks;
accessing said indirection map to obtain the physical address mapped to the specified virtual address and to obtain the corresponding checksum; and
in response to the read request, returning the data block at the physical address mapped to the specified virtual address and returning the corresponding checksum.
-
Specification