Я читал: http://community.netapp.com/t5/Tech-OnTap-Articles/Back-to-Basics-RAID-DP/ta-p/86123
Это в основном описывает RAID-DP как рейд с диагональной четностью. Но есть одна вещь, которая меня немного беспокоит - этот пример нужно упростить, потому что он описывает взятие суммы. Это достаточно справедливо - для «нормальной» четности в RAID4 и RAID5 - вы выполняете XOR, а не прямые аддитивные суммы, и это работает, потому что XOR довольно эффективны и вы можете реконструировать.
Если ваш паритет:
A xor B xor C = P
затем
P xor B xor C = A
Но есть одна вещь, которая меня немного беспокоит - сумма DP не может работать таким образом, потому что, если вы выполните двойную четность в стиле «XOR» ... вы получите неоднозначный результат. Вы создаете кучу одновременных уравнений, которые позволяют вам выяснить отношения между битами - например, вы знаете, какие биты равны и не равны друг другу. Однако в итоге вы получаете два действительных решения - одно «обратное» другому.
Я предполагаю, что поэтому рабочий пример использует дополнительные суммы ... но то, что меня беспокоит который is: ваша дополнительная сумма часто будет больше байтов, чем исходная. Если вы "суммируете" 10 значений в байтах, ваша сумма может быть больше байта. Думаю, вы можете «свернуть» свою сумму, но все равно рискуете получить неоднозначный результат.
Какой у вас паритет эффективно сообщает вам, какие биты равны друг другу, а какие нет. Но конечный результат неоднозначен - вы можете получить либо «правильный» ответ, либо инверсию «правильного» ответа.
Что мне не хватает?
(Я подозреваю, что ответ может быть похож на то, как это делает RAID-6).
Не беспокойтесь о том, что результат не годится для сложения. Просто не обращайте внимания на переполнение. Нет никакой двусмысленности. Например, представьте себе сегменты, содержащие одну десятичную цифру.
5 + 4 + 8 + 3 + 6 => 26.
Поскольку он содержит только одну цифру, мы просто напишем «6» для четности. Теперь нам нужно восстановить четвертую цифру данных. Обратное для сложения - вычитание:
6 - (5 + 4 + 8 + 6) => -17 Просто добавьте к нему «10», пока не получите положительное число, а 3 - это пропущенное значение.
Вы правы, что для двухдискового диска нельзя работать с одной строкой и восстанавливать информацию. Вы должны уметь читать несколько строк. Вот - это статья USENIX, в которой описывается алгоритм диагональной четности строк.
Может быть http://www.netapp.com/us/media/tr-3298.pdf какие дополнительные сведения и ссылки могут помочь вам понять дизайн?