Decent overview, however a couple items should be mentioned:

- RAID is for hardware failures, no raid level will protect you against a software/logical failure (ie, deleting a file, or formatting the array, et al) Always keep backups regardless to what you're doing on a raid

- In my searches no raid (hardware/software) does parity checking on READ (please correct if you know of something that does). This basically means that there is a chance (and that chance increases with the size of the array) of the disk sending out bad data that is not caught which is then sent to the host. In situations which need to read data/update/and write back this will corrupt data with NO ERROR on a raid (as it assumes it's always good). Ie, request blocks 0-100, block 98 has a transient data glitch from the drive (bits flipped, random error that gets past the ~10^15 ecc check or happens at the controller interface). Since the drive does not report it as an error as it was not noticed, and the controller does not check the data, this gets to the host. the host may update data from block 1 say and write the whole stripe back. The raid card will then re-calculate the parity on that 'new' stripe (with the original error) and now you have a parity checked error stripe on your array which will be there for all future accesses.

- RAID6 provides over raid-5 in error correction. With RAID-5 you have only TWO sources of correct data (what is read from the stripe and what is it's calculated parity data to re-construct). If they do not match, which is the 'wrong' one. Flip a coin basically and you'll be right 50% of the time. With RAID6 you have THREE sources of data so if it's wrong you have a tie-breaker.