On disk failure, the storage system migrates only those disk blocks that included
allocated data, and treats unallocated disk blocks as being logically zero when
possible. When there is no spare disk, the source data block is logically set to
zero and parity is recalculated for the RAID stripe associated with the source
data block. When there is a spare, unallocated blocks on the spare are logically
or physically set to zero upon migration. Write operations for the failed disk
are redirected to other non-failing disks, and a record of which in-use disk blocks
have been thus "migrated" to those other non-failing disks in maintained. Unused
disk blocks are proactively set to zero. A target mirror copy is created using
information regarding allocated disk blocks, by copying those blocks including
allocated data or parity, and by clearing at the mirror those blocks not including
any allocated data or parity.