Страница 1 из 1

RAID массивы в Linux

Добавлено: 29 апр 2010, 13:43
Gen1us2k
Что такое RAID?

В переводе с английского «RAID» (Redundant Arrays of Inexpensive Disks) означает «избыточный массив независимых дисков». Этот перевод не совсем дословный, но именно содержащийся в нем смысл является правильным.

Впервые термин RAID появился в 1987 году, когда исследователям из Калифорнийского Университета в Беркли удалось создать действующий массив из нескольких жестких дисков.

Первоначальное предназначение RAID – создание на базе нескольких винчестеров диска большого объема с увеличенной скоростью доступа. Но затем к двум основным целям добавилась третья – сохранение данных в случае отказа части оборудования. Именно эти три кита сделали RAID-массивы столь востребованными бизнесом и военными. Впрочем, за объем, скорость и надежность пришлось платить повышением стоимости и сложности систем хранения данных.

Со временем оборудование для построения RAID массивов стало более доступным, особенно с появлением дешевых решений для IDE/ATA и SATA дисков. Теперь уже не только специалисты по СХД, но и обычные пользователи столкнулись с хитростями построения дисковых массивов.

Оказывается, не так просто найти оптимальное решение одновременно по надежности, емкости и цене. Надо быть готовым к тому, что придется купить не один, а несколько жестких дисков, и емкость как минимум одного из них не будет использоваться. Если речь идет о построении более-менее серьезной системы, потребуется отдельный (лучше специальный) корпус с отдельным (а то и двумя) блоком питания, плата контроллера и соответствующее программное обеспечение.

Не испугались? Значит, пора знакомиться с RAID более подробно.
Пять таинственных слов

В основе теории RAID лежат пять основных принципов – пять таинственных слов. Это Массив (Array), Зеркалирование (Mirroring), Дуплекс (Duplexing), Чередование (Striping) и Четность (Parity).

Массивом называют несколько накопителей, которые централизованно настраиваются, форматируются и управляются. Логический массив – это уже более высокий уровень представления, на котором не учитываются физические характеристики системы. Соответственно, логические диски могут по количеству и объему не совпадать с физическими. Но лучше все-таки соблюдать соответствие: физический диск – логический диск. Наконец, для операционной системы вообще весь массив является одним большим диском.

Зеркалирование – технология, позволяющая повысить надежность системы. В RAID массиве с зеркалированием все данные одновременно пишутся не на один, а на два жестких диска. То есть создается «зеркало» данных. При выходе из строя одного из дисков вся информация остается сохраненной на втором.

Изображение
За такую стопроцентную защиту приходится дорого платить: считайте, что один винчестер у вас работает просто так, не увеличивая доступную емкость ни на Мегабайт. При этом нет никакого выигрыша в производительности.

Дуплекс – развитие идеи зеркалирования. В этом случае так же высок уровень надежности и требуется в два раза больше жестких дисков. Но появляются дополнительные затраты: для повышения надежности в систему устанавливаются два независимых RAID контроллера. Выход из строя одного диска или контроллера не сказывается на работоспособности системы.

duplexing

Изображение

Столь дорогое решение используется только во внешних RAID-массивах, предназначенных для ответственных приложений.

Чередование – отличная возможность повысить быстродействие системы. Очевидно, если чтение и запись вести параллельно на нескольких жестких дисках, можно получить выигрыш в скорости. Как это делается? Записываемый файл разбивается на части определенного размера и посылается одновременно на все имеющиеся накопители. В таком фрагментированном виде файл и хранится. Считывается он тоже «по кусочкам».
Изображение
Размер «кусочка» может быть минимальным – 1 байт, но чаще используют более крупное дробление – по 512 байт (размер сектора).

Четность является альтернативным решением, соединяющим в себе достоинства зеркалирования (высокая надежность) и чередования (высокая скорость работы). Используется тот же принцип, что и в контроле четности оперативной памяти.

Если имеется I блоков данных и на их основе вычисляется еще один дополнительный экстраблок, из получившихся (I+1) блоков всегда можно восстановить информацию даже при повреждении одного из них. Соответственно, для создания нормального RAID-массива в этом случае требуется (I+1) жесткий диск.

Распределение блоков по дискам точно такое же, как при чередовании. Экстраблок может записываться на отдельный накопитель, либо раскидываться по дискам.

Что же хранится в экстраблоке? Обычно каждый бит экстраблока состоит из суммы бит всех I блоков, точнее из результата выполнения логической операции XOR. Многие помнят со школы, что XOR – удивительный оператор, при его повторном наложении мы можем получить первоначальный результат. То есть (A XOR B) XOR B = A. Это правило распространяется на любое количество операндов.

Плюсы четности очевидны. За счет использования чередования повышается скорость работы. При зеркалировании надежность сохраняется, но при этом «нерабочий» объем массива заметно уменьшается, он одинаков при любом количестве дисков и составляет емкость одного диска, то есть при 5 дисках в массиве пропадает всего 20% емкости.

Но у четности есть весомый минус. Для формирования экстраблоков требуются вычисления! Их надо делать на лету, причем с миллионами, миллиардами бит! Если это дело поручить центральному процессору, мы получим очень «тормознутую» систему. Необходимо использовать довольно дорогие платы с RAID-контроллерами, которые «берут все вычисления на себя». В случае выхода из строя одного из дисков, процесс восстановления будет не столь быстрым, как при зеркалировании.

Уровни RAID

Кто додумался назвать различные модификации уровнями? По идее, именно исследователи из Беркли в 1988 году придумали такую классификацию, совершенно не думая о том, что у нормальных людей уровни четко связаны с иерархией.

В RAID уровнях нет преемственности. RAID 3 не есть улучшенная модификация RAID 4, так же как RAID 5 не лучше RAID 1. Они разные.

Сразу оговоримся, что есть простые (single) и составные (multiple) RAID массивы. Составные являются сочетанием двух простых, так что начнем с основных 8 уровней.
RAID 0
Изображение
Простейший массив, использующий чередование без четности. Вся входящая информация разбивается на блоки фиксированной длины (например, 16 кбайт) и раскидывается на все имеющиеся диски.

Изображение
На рисунке приведен пример, как в RAID 0 массиве на 4 дисках хранятся данные разного размера. Размер блока – 16 кбайт. Красный – файл размером 4 кбайт, синий – 20 кбайт, зеленый – 100 кбайт, пурпурный – 500 кбайт.

При наличии двух-четырех дисков RAID 0 дает ощутимый выигрыш в скорости передачи данных, но совершенно не обеспечивает надежность. Для его построения подойдет любой дешевый и даже программный RAID-контроллер. Подходит для тех, кому нужно выжать максимум производительности от файловой системы при минимальных затратах.
RAID 1
Изображение
Этот уровень является обычным зеркалированием. На два жестких диска пишутся две одинаковые копии данных. При этом можно использовать дешевый RAID контроллер или даже его программную реализацию
Изображение
RAID 1 позволяет надежно защитить данные и обеспечить работу системы даже при поломке одного из дисков. Вот почему он получил широкое распространение среди пользователей, желающих защитить от потери личные данные. Выигрыша в скорости при использовании RAID 1 нет.
RAID 2
Изображение
Второй уровень RAID умер, так и не родившись. Все те же умельцы из Беркли предложили использовать одновременно две технологии – побитовое чередование и код Хамминга для восстановления ошибок. В теории это должен быть неплохой по надежности и рабочей емкости массив, построенный из 14 или 39 дисков (!). Часть дисков (10 или 32) используется для хранения данных с чередованием, остальные – для хранения высчитанных контрольных сумм. Реализация таких систем требовала специальных дорогостоящих контроллеров, которые так и не прижились на рынке. В итоге RAID 2 сейчас не используется. Но идея красивая.
RAID 3
Изображение
Третий уровень использует чередование и выделенный диск для контроля четности. Блоки данных обычно имеют длину меньше 1024 байт. Информация распределяется на несколько дисков, а высчитанное значение по четности сохраняется на отдельный диск.
Изображение
Все скоростные преимущества чередования сводятся на нет необходимостью записывать контрольную сумму на выделенный диск, а больше всех страдает скорость случайной записи. К достоинствам отнесем возможность работы массива при отказе одного из дисков.
RAID 4
Изображение
Отличается от RAID 3 только размером блока данных при чередовании. Это несколько улучшает работу массива при случайном чтении, но запись все равно довольно медленная. Диск с контрольными суммами является ярко выраженным «узким местом» в системе.
Изображение
Так как является компромиссным вариантом между RAID 3 и RAID 5, не нашел своего места на рынке и редко используется. Это держит цены на соответствующие контроллеры на высоком уровне.
RAID 5
Изображение
Наиболее распространенный в системах хранения данных – пятый уровень. Он характеризуется применением чередования и четности. В отличие от RAID 3, контрольные суммы не хранятся на одном диске, а разбрасываются по всем, что позволяет значительно поднять скорость записи. Главный принцип распределения экстраблоков: они не должны располагаться на том же диске, с которого была зашифрована информация.
Изображение
Надежность и скорость работы такой системы оказываются очень даже высокими. При восстановлении информации всю работу на себя берет RAID контроллер, так что операция проходит довольно быстро.
RAID 6

Для некоторых особо критичных приложений требуется повышенная надежность. Например, чтобы при выходе из строя даже двух дисков массив сохранил данные и даже остался работоспособным. Можно ли это сделать? Конечно, решение лежит на поверхности.
Изображение
Используются все те же технологии чередования и четности. Но контрольная сумма вычисляется два раза и копируется на два разных диска. В итоге данные окажутся потерянными только в случае выхода из строя сразу трех жестких дисков. По сравнению с RAID 5 это более дорогое и медленное решение, которое может показать себя разве что при случайном чтении. На практике RAID 6 почти не используется, так как выход из строя сразу двух дисков – слишком редкий случай, а повысить надежность можно другими способами.
RAID 7

В отличие от остальных уровней, RAID 7 не является открытым стандартом, столь звучное и выгодное название выбрала для своей модификации RAID 3 компания Storage Computer Corporation. Улучшения заключаются в использовании асинхронного чередования, применении кэш-памяти и специального высокопроизводительного микропроцессора.

Обеспечивая такой же, как в RAID 3, уровень надежности, RAID 7 значительно выигрывает в скорости. Недостаток у него один, но очень серьезный – огромная цена, обусловленная монополией на изготовление контроллеров.

Составные RAID массивы

У основных уровней RAID есть свои достоинства и недостатки. И вполне понятно, почему инженеры стали мечтать о таком RAID, который бы объединял достоинства нескольких уровней. Составной RAID массив – это чаще всего сочетание быстрого RAID 0 с надежным RAID 1, 3 или 5. Итоговый массив действительно обладает улучшенными характеристиками, но и платить за это приходится повышением стоимости и сложностью решения.

Составной RAID строится так: сначала диски разделяются на наборы (set). Затем на основе каждого из наборов строятся простые массивы. А завершается все объединением этих массивов в один мегамассив. Запись типа X+Y означает, что сначала диски объединены в RAID уровня X, а затем несколько RAID X массивов объединены в RAID уровня Y.
RAID 0+1 (01) и 1+0 (10)

RAID 0+1 часто называют «зеркалом страйпов», а RAID 1+0 – «страйпом зеркал» (нормальное русское «чередование» практически не используется, сменившись американизмом). В обоих случаях используются две технологии – чередование и зеркалирование, но результаты разные.
Изображение
RAID 0+1 обладает высокой скоростью работы и повышенной надежностью, поддерживается даже дешевыми RAID контроллерами и является недорогим решением. Но по надежности несколько лучше RAID 1+0. Так, массив из 10 дисков (5 по 2) может остаться работоспособным пи отказе до 5 жестких дисков!
Изображение
Основной недостаток этих массивов – низкий процент использования емкости накопителей – всего 50%. Но для домашних систем именно RAID 01 или 10 может оказаться оптимальным решением.
RAID 0+3 (03) и 3+0 (30)

С этими массивами у производителей наблюдается путаница. Довольно часто вместо 0+3 или 3+0 указывают более привлекательное число 5+3 (53). Не верьте!

По идее сочетание чередования и RAID 3 дает выигрыш в скорости, но он довольно мал. Зато система заметно усложняется. Наиболее простой уровень 3+0. Из двух массивов RAID 3 строится страйп, и минимальное количество требуемых дисков – 6. Получившийся RAID 3+0 с точки зрения надежности лучше, чем 0+3.

Достоинства этих комбинаций в довольно высоком проценте использования емкости дисков и высокой скорости чтения данных. Недостатки – высокая цена, сложность системы.
RAID 0+5 (05) и 5+0 (50)

Что будет, если объединить чередование с распределенной четностью с обыкновенным чередованием? Получится быстрая и надежная система. RAID 0+5 представляет собой набор страйпов, на основе которых построен RAID 5. Такая комбинация используется редко, так как практически не дает выигрыша ни в чем. Широкое распространение получил составной RAID массив 5+0.
Изображение
Чаще всего это два массива RAID 5, объединенных в страйп. Такая конфигурация позволяет получить высокую производительность при работе с файлами малого размера. Типичный пример – использование в качестве WEB-сервера.
RAID 1+5 (15) и 5+1 (51)

Этот уровень построен на сочетании зеркалирования или дуплекса и чередования с распределенной четностью. Основная цель RAID 15 и 51 – значительное повышение надежности. Массив 1+5 продолжает работать при отказе трех накопителей, а 5+1 - даже при потере пяти из восьми жестких дисков! Платить приходится большим количеством неиспользуемой емкости дисков и общим удорожанием системы.

Чаще всего для построения RAID 5+1 используют два контроллера RAID 5, которые зеркалируют на программном уровне, что позволяет снизить затраты.
JBOD

А что делать, если нужен просто один логический диск гигантского размера? Без всяких зеркалирований, чередования и четности? Тогда это уже не RAID, а JBOD – Just A Bunch Of Disks. Реализовать этот режим способен простейший контроллер или даже программная реализация контроллера
Изображение
Есть ли у него преимущества, если JBOD не повышает ни быстродействия, ни надежности? Есть. По крайней мере, для работы используется все доступное пространство жестких дисков. И еще: в случае выхода из строя одного из жестких дисков, информация на других не повреждается.

Сведем основные характеристики наиболее распространенных уровней в таблицы.

Распространенные single RAID массивы

Создание программного RAID в gentoo-linux
Для начала ядро должно поддерживать рейд массивы

Код: Выделить всё

gentoo etc # cd /usr/src/linux
gentoo linux # make menuconfig

(Configure your kernel as usual and make sure the raid and lvm modules you need are
compiled in, i.e. not as modules. The same applies to the disk drivers and filesystems.)
Multi-device support (RAID and LVM)  --->
[*] Multiple devices driver support (RAID and LVM)
  <*>   RAID support
  < >     Linear (append) mode (NEW)
  <*>     RAID-0 (striping) mode
  <*>     RAID-1 (mirroring) mode
  < >     RAID-10 (mirrored striping) mode (EXPERIMENTAL) (NEW)
  < >     RAID-4/RAID-5 mode (NEW)
  < >     RAID-6 mode (NEW)
  < >     Multipath I/O support (NEW)
  < >     Faulty test module for MD (NEW)
  <*>   Device mapper support
  < >     Crypt target support (NEW)
  < >     Snapshot target (EXPERIMENTAL) (NEW)
  < >     Mirror target (EXPERIMENTAL) (NEW)
  < >     Zero target (EXPERIMENTAL) (NEW)
  < >     Multipath target (EXPERIMENTAL) (NEW)
  < >     Bad Block Relocation Device Target (EXPERIMENTAL) (NEW)

gentoo linux # make && make modules && make modules_install
gentoo linux # cp arch/i386/boot/bzImage /boot/kernel
// если у вас отдельный /boot раздел, то его надо сначала смонтировать

Теперь, до начала создания массивов RAID, нам потребуется создать узлы метаустройств:

Код: Выделить всё

# mknod /dev/md1 b 9 1
# mknod /dev/md2 b 9 2
# mknod /dev/md3 b 9 3
Ставим mdadm

Код: Выделить всё

emerge -av mdadm
Создание RAID-массива выполняется с помощью программы mdadm (ключ --create). Мы воспользуемся опцией --level, для того чтобы создать RAID-массив 1 уровня. С помощью ключа --raid-devices укажем устройства, поверх которых будет собираться RAID-массив.

Код: Выделить всё

# mdadm --create --verbose /dev/md1 --level=1 --raid-devices=2 /dev/sda1 /dev/sdb1
# mdadm --create --verbose /dev/md2 --level=1 --raid-devices=2 /dev/sda2 /dev/sdb2
Если вы хотите сразу создать массив, где диска не хватает (degraded) просто укажите слово missing вместо имени устройства. Для RAID5 это может быть только один диск; для RAID6 — не более двух; для RAID1 — сколько угодно, но должен быть как минимум один рабочий.
Проверка правильности сборки

Убедиться, что RAID-массив проинициализирован корректно можно просмотрев файл /proc/mdstat. В этом файле отражается текущее состояние RAID-массива.

Код: Выделить всё

# cat /proc/mdstat 
Personalities : [linear] [raid0] [raid1] [raid10] [multipath] [faulty] 
md2 : active raid1 sdc2[1] sdb2[0]
      488383936 blocks [2/2] [UU]
      
md1 : active raid1 sdc1[1] sdb1[0]
      488375872 blocks [2/2] [UU]
      
unused devices: <none>
Обратите внимание на то, как называется новый RAID-массив. В нашем случае он называется /dev/md0. Мы будем обращаться к массиву по этому имени.
Создание файловой системы поверх RAID-массива

Новый RAID-раздел нужно отформатировать, т.е. создать на нём файловую систему. Сделать это можно при помощи программы из семейства mkfs. Если мы будем создавать файловую систему ext3, воспользуемся программой mkfs.ext3:

Код: Выделить всё

# mkfs.ext3 /dev/md0
Создание конфигурационного файла mdadm.conf

Система сама не запоминает какие RAID-массивы ей нужно создать и какие компоненты в них входят. Эта информация находится в файле mdadm.conf.

Строки, которые следует добавить в этот файл, можно получить при помощи команды

Код: Выделить всё

 mdadm --detail --scan --verbose
Вот пример её использования:

Код: Выделить всё

# mdadm --detail --scan --verbose
ARRAY /dev/md1level=raid1 num-devices=2 metadata=0.90 UUID=37c84bd6:b935b163:68147ff7:77e6d0fd
   devices=/dev/sdb1,/dev/sdc1
ARRAY /dev/md2level=raid1 num-devices=2 metadata=0.90 UUID=7c10ff2a:9b8ef0a1:68147ff7:77e6d0fd
   devices=/dev/sdb2,/dev/sdc2
Если файла mdadm.conf ещё нет, можно его создать:

Код: Выделить всё

# mdadm --detail --scan --verbose | awk '/ARRAY/ {print}' >> /etc/mdadm/mdadm.conf
Ну а дальше создаем точки монтирования и редактируем /etc/fstab

Re: RAID массивы в Linux

Добавлено: 30 апр 2010, 08:21
Gen1us2k
фух... закончил %)

Re: RAID массивы в Linux

Добавлено: 16 дек 2010, 10:21
zaka
раз живал на все 100% *THUMBS UP*