According to an example, which is in no way intended to limit the invention, an erasure code protected storage system includes a set of HDDs using a N+P, RAID 5 erasure code class. Thus, for N=3 and P=1, the storage system includes a multiple of 4 HDDs (e.g., 100). Moreover, each set of 4 HDDs forms an erasure code group. Data on the disk drives may be accessible in units of blocks of 512 bytes, numbered sequentially from 0 to N as depicted. Data are written such that for each block “i” on each disk drive “j” (0, 1, 2, 3) in the erasure code group, each byte in each block of one drive is the XOR of the bytes on the corresponding bytes on the same block in the other disk drives in the same erasure code group. The specific drives that contain the original data to be stored, and those drives which include the redundancies computed as the XOR of the data drives is rotated from one stripe (or set of stripes) to the next. Although the XOR erasure code is mathematically independent on a bit by bit basis, the strip is referred to in the present example as the entire block, because an entire block is the minimum size which can fail to be read due to the block encoding on each disk drive.
According to another example, which is again in no way intended to limit the invention, the strips for an erasure code may be larger than one minimum addressable block on the storage unit. There may be additional redundancy to protect against more than one failure in a stripe, and it may not be a simple bit by bit XOR, so that the entire strip may be interdependent in the full erasure code. However, for performance and system memory size constraints, the strip size is a small fraction of the total storage unit capacity. Thus, complete failure of a single storage strip may be recoverable using some levels of the erasure code that employ a subset of the total units in an erasure code group.