On Thu, Oct 05, 2000 at 01:54:59PM +1100, Neil Brown wrote:
> For RAID5 a 'stripe' is a set of blocks, one from each underlying
> device, which are all at the same offset within their device.
> For each stripe, one of the blocks is a "parity" block - though it is
> a different block for each stripe (parity is rotated).
> 
> Content of the parity block is computed from the xor of the content of
> all the other (data) blocks.
> 
> To update a data block, you must also update the parity block to keep
> it consistant.  For example, you can read old partity block, read old
> data block, compute
>    newparity = oldparity xor olddata xor newdata
> and then write out newparity and newdata.
> 
> It is not possible (on current hardware:-) to write both newparity and
> newdata to the different devices atomically.  If the system fails
> (e.g. power failure) between writing one and writing the other, then
> you have an inconsistant stripe.

Hmm, now that I think about it, this can be brought to data corruption
even easier ... Imagine a case where a stripe isn't written completely.
One of the drives (independently whether it's the xor one or one the
other one) has thus invalid data.

Now how do you decide, after boot, which drive of the set, including the
xor drive is it the one that contains the invalid data? I think this is
not possible.

So you're out of luck at a trivial power failure with RAID ...

-- 
Vojtech Pavlik
SuSE Labs
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
Please read the FAQ at http://www.tux.org/lkml/

Reply via email to