In this section, we briefly explain RAID systems and introduce
problems with Diff-RAID. Figure 1 shows an example of
a RAID-5 and Diff-RAID system with four disks. In RAID-5,
three of them are used to store user data (i.e., data chunks)
while the other one is for keeping parity data. According to
the specification of RAID-5, the parity is distributed across
the four disks [1]. For example, in Figure 1(a), A0, B1, and
C2 are data chunks and Ap and Bp are parity chunks. Since a
parity chunk is calculated by xoring all the data chunks in the
same stripe, it should be updated when at least one data page
in the same stripe is updated.
There are two methods for writing a stripe in RAID-5
depending on the size of the write request. When the size of a
write request fits to the size of a stripe (i.e., a full stripe write),
the parity can be directly calculated by data to be written
without reading existing one. Therefore, data and parity of
the stripe can be written together. On the other hand, when
the size of a write request is smaller than the size of a stripe
(i.e., a partial stripe write), existing data and parity in the stripe
should be read so that the new parity can be calculated.