Delayed Parity in RAID 5

Some controllers, like HP SmartArray, use nonstandard scheme of striping called delayed parity.

Effectively, two different block sizes are used, one for parity and the other for data. A parity block size is an integral multiple of data block size. Thus, two additional parameters appear in the RAID configuration - delay and firstdelay. Delay parameter indicates multiplicity, namely how many data blocks fit into one parity block; firstdelay shows how many data blocks are contained in the first parity block. The possible delay values are 1, 2, 4, 8, 16, 32, and firstdelay can be from 1 to delay value.

If both parameters are equal to 1 then we get a usual RAID 5 array with no delay.

RAID 5 with delayed parity

Recover array with delayed parity

ReclaiMe Free RAID Recovery, starting with build 301, automatically detects and recovers arrays utilizing delayed parity. It will produce correct output if you write array either to an image file or directly to the disk. Also, it will transfer the parameters to our ReclaiMe data recovery software, starting with ReclaiMe build 1103.

More details on delayed parity

Recovery of a RAID with delayed parity is a bit more complex than the above simple model. The complete model includes start offset, which is less than one data block. Therefore, along with the disk order, there are seven more array parameters:

  1. Start offset.
  2. Data block size (corresponding to the typical block size in RAID without delay).
  3. Delay (the number of data blocks in one delayed parity block).
  4. Firstdelay (the number of data blocks in the first delayed parity block).
  5. Position of parity in the first block.
  6. Rotation, which determines the change in the position of parity block through the array.
  7. Type of data placement (synchronous or asynchronous).
RAID 5 with delayed parity

In different tools these parameters are set in different ways. In some tools, it is impossible to set all parameters for example you cannot set firstdelay in UFS Explorer and in Winhex.

In some cases, it is possible to convert array parameters to exclude firstdelay. For example if it is possible to specify the disk where parity blocks start, but it is impossible to specify firstdelay, converted set of parameters will look like this:

RAID 5 with delayed parity

Note that offset and the disk where parity block starts have changed. The offset has changed from 2 to 5 and the disk with first parity block has become Disk 1 rather than Disk 2.

If it is impossible to specify the disk with first parity, offset increases so that to cut off the first full revolution of parity. In this example, the offset that should be used is 13.

Theoretically, such a conversion can lead to the fact that some user data, which was in the first rows, cannot be read by the tool (due to negative addresses). In this example, data blocks marked in gray, from 0 to 5, are lost. If it were impossible to set the disk where parity starts, we would have to use offset of 13. In this case, blocks from 1 to 21 inclusive would be lost.

In practice, controller metadata rather than user data is often placed in these blocks, so that all the user data remains accessible.