1. A method of protecting against T storage device failures in a collection of N storage devices, wherein T and N are positive integers and 2<=T<N the method comprising: setting an integer number K between 2 and T inclusive; logically partitioning a portion of each of the N storage devices into at least one strip on each of the N storage devices; partitioning the at least one strip on each of the N storage devices into at least one data element and at least one parity element; organizing the strips of the partitioned portions on the N storage devices into a corresponding stripe wherein each of the N storage devices stores data elements and parity elements in the organized strips of the corresponding stripe; for each of the stored parity elements, selecting a set of K data elements from the corresponding stripe so that: (a) the selected set of K data elements has not already been selected for another parity element; (b) the selected K data elements are located on K different storage devices; (c) the K storage devices of the selected K data elements are different from the storage device of the corresponding parity element; (d) each data element of the selected K data elements is selected for T different parity elements; and generating a parity value from data values stored in the K data elements in the selected set of K data elements and storing the parity value in the stored parity element.