Нет. Более сложный алгоритм обработки данных. В первом рейде они просто копируются 1:1 на все винты, а в пятом — наращиваются алгоритмами избыточного кодирования и затем размазываются по всем дискам.
Но пятый рейд не советую совсем по другим причинам.
1. В деградированном состоянии нагрузка на оставшиеся винты очень большая, поэтому высока вероятность вторичной поломки с фатальным исходом.
2. Регулярно ходят слухи, что вероятность успешного восстановления данных в случае падения одного из винтов в пятом рейде ниже 100%. Правда, точной инфы никто предоставить не может.
Так что бери либо шестой (если дисков много), либо, если скорость критична, 1 или 0+1.
Кстати касательно hotspare, каким образом нужно настроить mdadm чтобы он смог автоматически подставить hotspare в случае когда откажет какой либо диск?
Не на чем сейчас проверить, но, думаю, просто указать число устройств, участвующих в массиве + указать количество устройств для hotspare, что-то типа такого:
Пусть будет 3 винта. Когда все работает (грубо) - с двух читается инфа, с третьим могут сверяться полученные данные (или могут не сверяться, тут уж не знаю). Когда один винт не работает - с оставшихся все читается так же само и с той же скоростью, просто либо не делается проверка полученных данных (если делалась раньше и в случае если на рабочих винтах куски реальных данных), либо потерянный блок высчитывается из живых блоков и контрольных сумм.
> 2. Регулярно ходят слухи, что вероятность успешного восстановления данных в случае падения одного из винтов в пятом рейде ниже 100%. Правда, точной инфы никто предоставить не может.
Само понятие рейда (если это только не страйп) не подразумевает восстановления данных. Данные никуда не деваются. У меня на софт рейде (5) сдох один винт. Естественно, массив работал в деградированном режиме. И после замены винта и одной команды в консоли - начал перестраиваться и спустя какоето время вновь стал работать на все катушку. в целях экономии дискового пространства под избыточность я бы рекомендовал пятый рейд.
В этом месте ваша теория расходится с моей практикой. Я бы может и не узнал что винт сдох, если бы система не стала весьма ощутимо тормозить на io-оперциях.
А теперь еще раз внимательно смотрим картинку по ссылке выше, обращая внимание на то, что контрольные суммы у нас размазаны по всем трем дискам.
Упрощенно - в случае, если у нас все работает - инфа так же само читается с двух дисков, для каждой операции чтения третий у нас отбрасывается - на нем информация для восстановления - и для каждой операции чтения у нас этот 3-й разный.
Если взять размер блока 64 Кб, то при чтении с 3-х дисков мы читаем 64 Кб с одного, 64 Кб с другого, а 64 Кб с третьего мы отбрасываем (или используем для контроля целостности того, что мы прочитали с первых двух). Если у нас одного диска нет (например, 2-го) - то мы читаем 64 Кб с первого, 64 Кб с третьего и из полученных данных досчитываем то, что было на втором. Но читаем / пишем мы все равно один и тот же объем данных. И так для каждого шага работы с массивом.
Ок, фиг с ним, пусть не читается, так даже проще, для примера выше:
читается | читается | не читается
не читается| читается | читается
читается | не читается| читается
читается | читается | не читается
без одного диска
читается| высчитывается| читается
читается| высчитывается| читается
читается| не требуется | читается
читается| высчитывается| читается
Итого, для первого случая для 3-х блоков получаем 6 операций чтения, для второго случая для 3-х блоков получаем тоже 6 операций чтения. > diff raid4 raid5
Разница только в способе размещения контрольных сумм - на отдельном винте в первом случае и на всех - во втором.
Последний раз: В любом состоянии рейда для чтения файла будет произведенно Х операций чтения, но распределятся они на N либо N-1 дисков. Т.о. нагрузка на каждый диск по отдельности будет разная X/N либо X/(N-1)
> распределятся они на N >> Предположим, что читается все
> Предположение ложное.
Итого имеем
X/(N-1) в случае рабочего RAID'a, где X - количество операций чтения, N - количество дисков, "-1" - в каждый момент чтения у нас не читаются контрольные суммы с одного из дисков
и
X/(N-1) в случае нерабочего RAID'a, где X - количество операций чтения, N - количество дисков, "-1" - отсутствующий диск.
А можно аргументацию почему софтворный рейд должен работать хуже?
При записи IO больше. Все же кернел для RAID5 должен записать один лишний блок инфы на каждые (N-1) блоков, а для RAID1 — вдвое больше. При наличии железного рейда лишнее IO его проблемы.
Потом io больше не на один винт, а суммарно по системе. Что ,по моим наблюдениям, абсолютно побоку если винтов немного и между северным и южным мостом приличная шина. Кроме того, линейная скорость чтения/записи вообще редко бывает критичным. По крайней мере меня интересует random io(или как это называется) ибо так работают БД, сервера с кучей мелких файлов и вообще системы с сильной фрагментацией. В таких условиях дай бог метров 50(в среднем) выжать с sas-хардов. А при таком трафике в сторону винтов точно ничего стращного не будет на swraid.
немного винчестеров - их надо минимум три, а лучше четыре. Приличная шина - это какая?
Софтверный рейд будет работать хуже. Доказано эксплуатацией. 5й рэйд в рандом сике просто съест ядро процессора и начнет тормозить. Плюс шедулер, плюс неравномерная загрузка... Кому оно надо? Если есть SAS, то под них берут нормальный Адаптек или Триварю. А софт-рейд5 это для пионеров.