1. A method for storing data in an array of storage devices, including processor and memory comprising the steps of: (A) logically arranging a plurality of block locations on the storage devices as a plurality of parity groups wherein a parity block stored in a block location as part of a parity group is logically derived from the combination of data blocks stored in the block locations of the parity group, and each parity and data block in a parity group is stored on a different storage device; (B) grouping a set of the plurality of parity groups into a parity group set; and (C) when writing a new data block to a data block location on a storage device: (i) reading an old data block stored at the data block location; (ii) writing the new data block to the data block location; (iii) identifying a parity group and a parity group set to which the block location belongs; (iv) only when the identified parity group set is in an unmodified state prior to writing the new data block, writing to the storage device an indicator that the identified parity group set is in a modified state indicating that during a recovery process, all parity groups in the identified parity group set will be checked for inconsistent parity; and (D) using a parity group set counter to track whether the parity group set is in an unmodified state and when there are no longer any write operations currently modifying the parity group set, an indicator is set that the parity group set is in an unmodified state.