Компьютерная документация на каждый день

О RAID

Некомариный RAID

О том, как построить дисковый массив


Это произошло в 1987 году, когда трое работников Калифорнийского университета - Гибсон (Gibson), Катц (Katz) и Паттэрсон (Patterson) - объявили миру об изобретенной ими технологии Redundant Array of Independent/Inexpensive Disks (Избыточный Массив Независимых/Недорогих Дисков), или RAID. Спустя год они же представили несколько способов реализации этих массивов - уровней RAID. На сегодняшний день существует восемь уровней дисковых массивов (от 0 до 7), а именно RAID 0, RAID 1, ... , RAID 7. В этой статье я подробно остановлюсь на самых популярных - 0-м, 1-м и 5-м уровнях, и кратко расскажу обо всех остальных. Про RAID 6 и RAID 7 скажу совсем мало, так как последний является запатентованной маркой SSC, а RAID 6 также крайне редко применяется в повседневном компьютерном мире в виду сложности его реализации.



Как положить фундамент


Существует два способа организации RAID: программный и аппаратный. Программный требует наименьших финансовых затрат, так как при помощи программного обеспечения функции RAID-контроллера (стоящего от 20$) выполняет центральный процессор. Причем если разные аппаратные RAID-контролеры поддерживают создание только некоторых уровней RAID, то программно при наличии требуемого количества винчестеров можно реализовать какой угодно массив. Хотя, мне вообще непонятна польза от использования массивов, реализованных программно. Ведь при программной реализации вся работа по подготовке информационного потока перекладывается на плечи процессора, загружая его, "благодаря" чему работа всего компьютера замедляется в принципе. Какое тут увеличение производительности дисковой подсистемы, ради чего, как правило, и строят все массивы за исключением RAID 1, скажите пожалуйста? При использовании же аппаратного контроллера всей обработкой данных перед поступлением их на винчестеры и обратно занимается микропроцессор, встроенный в этот контроллер. Тем самым CPU полностью освобождается от лишней работы. Поэтому настоятельно советую избегать программного RAID и стараться использовать аппаратные решения. К тому же в аппаратный контроллер встроена кеш-память, в которую временно помещаются последние записанные или последние считанные данные. Таким образом при запросе одних и тех же файлов часто используемые данные будут считываться из кеша, а не непосредственно с винчестера, что будет существенно разгружать дисковую подсистему.

Материнская плата, как известно, не умеет просто так записывать информацию на диск и считывать ее оттуда. Для осущесвления этих операций между матплатой и дисковым устройством должен находиться контроллер. Дисковых интерфейсов существует как минимум два - SCSI и EIDE. Первый в виду высокого быстродействия и неподъемной цены поддерживающих его устройств является прерогативой лишь серверов и, возможно, некоторых рабочих станций, требующих особо шустрого железа. Для всех остальных машин вполне достаточно пусть не таких скоростных, зато заметно менее дорогостоящих EIDE-дисков, не сильно опустошающих карман рядового пользователя при покупке нового харда. В преимущества "скази" (именно так называется SCSI на компьютерном слэнге) можно записать не только повышенное по сравнению с EIDE быстродействие, но и возможность подключать к одному шлейфу более 50 устройств (причем ими не обязательно должны быть винчестеры; можно подключить любое устройство, оснащенное SCSI-разъемом, например принтер или сканер), к тому на длину EIDE-шлейфа накладывается ограничение в 40 см. У SCSI такое ограничение отсутствует, что позволяет размещать созданные дисковые массивы вне корпуса системного блока, имеющего ограниченное для размещения массива пространство. Например, в отдельной стойке, размер которой можно сделать достаточным для размещения массива, а также обеспечить достойную вентиляцию внутри стойки для создания нормального температурного режима дисковым накопителям. К недостаткам можно отнести вышеупомянутую дороговизну. SCSI-контроллеры встраиваются разве что в какие-то эксклюзивные серверные материнки, а вообще повсеместно представляют собой PCI-карты расширения. EIDE же аналоги, напротив, встраиваются сейчас во все современные материнские платы. И хоть и ограничение на длину шлейфа накладывается (если его длина превысит 40 см, скорость обмена данными по нему резко упадет), и быстродействие EIDE-дисков невысокое относительно шустрости SCSI-собратьев, для домашнего компьютера такая дисковая подсистема интерфейса EIDE с давних времен является лучшим решением.
Дисковый массив - это все те же диски, только объединенные особым алгоритмом распределения данных по всем накопителям массива. Каждый алгоритм используется при обработке информации в своем типе массивов. Иными словами, в RAID 0 используется свой алгоритм, в RAID 1 - свой и так далее. Не важно, какие диски - SCSI или EIDE - вы используете при построении массива. Алгоритм выбранного уровня RAID не будет зависеть от интерфейса дисковых накопителей. К примеру, при построении массива RAID уровня 0 что из SCSI-, что из EIDE-винчестеров, алгоритм RAID 0 не изменится. Теперь, пожалуй, пора переходить к описанию алгоритмов распределения информации в каждом из массивов, упомянутых в начале статьи. К чему и приступим.



RAID 0


Метод, который здесь применяется, называется striping. Суть его в том, что поток данных разрезается на кусочки равного размера. Этот дисковый массив должен состоять как минимум из двух винчестеров, которые делят между собой этот поток данных. Условно представим, что поток поделен на кусочки "1", "2", "3", "4", "5" и "6". Тогда диски, составляющие RAID 0, возьмут каждый по одному кусочку этого потока. Так, если в массиве есть два харда - "C" и "D", то первый возьмет себе кусочек "1", а второй - кусочек "2". Далее "C" записывает "3", а "D" - "4". И так далее. Необходимо заметить, что я не совсем точно описал процесс записи, так как не сначала записывается "1", затем "2", а после него "3". Совсем не так! Диск "C" непрерывно пишет куски "1", "3", и "5" потока данных,а диск "D" непрерывно записывает "2", "4" и "6". Причем диски записывают эти кусочки одновременно. Чтение записанных данных диски RAID 0 производят также одновременно (параллельно). С одного харда считываются нечетные кусочки, а со второго - четные. Именно за счет параллельности производительность RAID 0 буквально удваивается по сравнению с производительностью одиночного винчестера, потому что запрос чтения или записи, теоретически предназначающийся для одного харда, выполняют сразу два (или более - смотря из скольких дисков вы построете массив) винчестера. Чем больше дисков в массиве, тем быстрее обработается запрос. Значит, в плюсы RAID 0 можно занести повышенное быстродействие. Но и без противоположного знака, как всегда, не обошлось. Этот тип дисковых массивов наверняка стал бы самым популярным для любого компьютера, если бы не нулевая защита от сбоев. То есть если сломается хотя бы один диск массива, вы потеряете информацию, которая хранилась на всех дисках этого массива. Причем чем большее число дисков составляет RAID 0, тем больше вероятность потери информации в случае отказа хотя бы одного винчестера. Самое страшное, что данные, потерянные на RAID 0, восстановить уже невозможно.



JBOD (Just a Bunch Of Disks, только объединение дисков) - в чем-то похож на RAID 0, только это вовсе не массив, а просто представление нескольких дисков в качестве одного, но большого. При поступлении с контроллера запроса операцию чтения/записи совершают не все диски такого массива, а только один из них. Поэтому ни быстродействие, ни надежность ни возрастает, ни падает. Действует эта система так: допустим, три диска (к примеру, 10, 20 и 30 Гб) объединяются и для ОС видны как один в 60 ГБ (а не 30, как это было бы в случае с RAID 0). Когда 10 Гб первого диска будут заполнены, ОС автоматически продолжит запись в 20 Гб следующего диска. Когда и они будут заполнены, файлы будут записываться в последние 30 Гб.



RAID 1


Начиная с уровня 0, для сохранности и восстановления данных в дисковых массивах стали применять избыточность. Принцип действия такого массива прямопротивоположен принципу действия "нулевого" уровня. Поток данных не раскидывается кусочками по дискам, а полностью закидываются по очереди на каждый винчестер (mirroring, или зеркалирование). Таким образом один из дисков массива можно условно назвать основным, а на остальных винчестерах, включенных в RAID 1, создается точная копия данных, хранящихся на основном жестком диске (получается 100% избыточность данных, так как данные полностью дублируются). То есть сначала кусочки "1", "2", "3", "4", "5" и "6" записываются на диск "C", а затем на "D" (и на все остальные винчестеры массива, если таковые присутствуют). Причем запись происходит последовательно, а именно пока не будет завершена запись на один винчестер, следующий будет ожидать свою очередь. Таким образом информация зеркалируется, что обеспечивает очень высокую защиту от сбоев. Для того, чтобы потерять свои данные, нужно добиться поломки вообще всех винчестеров RAID 1, а поломка одновременно всех винчестеров маловероятна (по крайней мере, без посторонней помощи : ). Если в живых останется хотя бы один хард, с него можно будет восстановить всю информацию. RAID 1 можно построить как минимум из двух HDD, причем их число обязательно должно быть четным. Достоинства и недостатки массива 1-го уровня опять-таки претерпевают инверсию относительно 0-го. Если последний мог похвастаться быстродействием, но падал на ровном месте при одном только упоминании фразы "защита от сбоев", то RAID 1 от сбоев огражден крепостью с высоким забором и тремя рвами с крокодилами, но в быстродействии отстает.. да от какого RAID 0.. даже от одиночного жесткого диска отстает. И все из-за зеркалирования данных. Ведь одна и та же информация должна быть записана на все винчестеры массива. Выигрыш в быстродействии может проявляться лишь во время операции чтения - если часть файла находится на одном харде, а часть - на другом, то эти части можно грузить с обоих дисков одновременно. К тому же, имеет место архинерациональное использование дискового пространства - объем массива будет равен объему наименьшего из его дисков.



RAID 2


Для сохранности данных также применяется избыточное копирование, но наряду с этим применяется метод Хэмминга. Он служит тем, что позволяет отслеживать возможные ошибки при операциях чтения/записи. Поток данных разбивается на страйпы, размер каждого из которых равен размеру кластера (специальной ячейки для записи информации). Данные записываются страйпами на все винчестеры, кроме одного, на который заносится информация о четности. По ней можно будет восстановить данные на одном из слетевших винчестеров. В плюсы можно записать то, что такой массив просто собрать; чем больше дисков будет в массиве, тем дешевле вам обойдется его реализация. В минусах - низкая скорость обработки информации.



RAID 3


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



RAID 4


Схож с третьим "рейдом". Отличие небольшое: для записи в RAID 3 поток данных должен быть расщеплен на байты, а для RAID 4 - на кусочки, размер каждого из которых равен размеру кластера. Также стоит упомянуть, что RAID 4 способен быстро обрабатывать интенсивные запросы чтения файлов небольшого объема.



RAID 5


Отличается от RAID 4 тем, что под хранение контрольной суммы не требуется выделять отдельный винчестер. Вместо этого сумма делится на число жестких дисков, и полученные части суммы раскидываются по всем винчестерам массива по принципу "одна часть на один диск". Это дает каждому диску возможность обрабатывать свой запрос, так как не надо "стоять в очереди" к дополнительному винчестеру для изменения контрольной суммы - все, что нужно для осуществления операций чтения/записи конкретному жесткому диску, находится на нем самом. К плюсам такого массива можно отнести высокую скорость обработки частых запросов чтения/записи. Но в тоже время предыдущий уровень RAID несколько шустрее по данному параметру. К тому же быстродействие RAID 5 при единичных операциях чтения/записи безнадежно мало.



RAID 6


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



RAID 7®


вляется зарегистрированной торговой маркой Storage Computer Corporation (SCC) и поэтому может применяться исключительно этой фирмой, в виду чего и не распространен. Если кому интересно, все же опишу его достоинства и недостатки.

Достоинства: высокая скорость передачи обработки данных (все-таки в RAID 7 применяются только SCSI-интерфейс), высокая степень масштабируемости (опять же благодаря SCSI).

В недостатки попадает то, что это собственность лишь одной SSC, а также невозможность обслуживания этого массива пользователем.



Сочетание с нулем


Если вам необходимы возможности какого-либо уровня RAID, и при этом было бы полезно быстродействие RAID 0, то вопрос достаточно просто решить: надо всего лишь объединить нужный вам массив с массивом 0-го уровня. Но учтите, что так RAID 0 предполагает соединение двух частей в одну большую, придется обзавестись двумя "комплектами" нужных вам массивов. Так, если вы хотите создать массив RAID 1+0, то вам понадобится четыре винчестера: для двух массивов 1-го уровня, каждый из которых станет частью 0-го.



2+2 не всегда 4


В этом разделе я объясню, как складываются емкости жестких дисков при объединении их в разные уровни массивов. В качестве "тестовых образцов" я буду использовать диски емкостью в 40 Гб.



RAID 0. Размер винчестера самой маленькой емкости умножается на число дисков в массиве.

RAID 1. Сколько бы дисков (2, 4, 6, 8 или более) вы не запихнули бы в RAID 1, общая емкость будет равна емкости наименьшего диска массива. Например, если вы объедините в RAID 1 два диска по 40 Гб и 60 Гб, то емкость всего массива будет равна только 40 Гб (ведь данные в RAID 1 зеркалируются, поэтому нельзя больший диск "зазеркалить" на меньший. 60 Гб в 40 Гб просто не поместятся).

RAID 3. Общая емкость равна формуле V*(N-1), где V - объем наименьшего диска, а N - число дисков в массиве.

RAID 4. Максимальный объем массива рассчитывается аналогично RAID 3.

RAID 5. В принципе, также не различается от RAID 3 по способу совмещения объемов жестких дисков.



Полезные фишки


Многие RAID-контроллеры, за исключением самых дешевых, оснащены целым букетом дополнительных функций:

- "Горячая" замена (Hot Swap). Если один из дисков массива прикажет долго жить, можно будет заменить винчестер на новый без отключения питания, что особенно актуально для сервера, работу которого не всегда возможно остановить. Впрочем, если приглянувшийся вам контроллер не оснащен такой функцией, то всегда можно докупить специальные салазки, поддерживающие горячую замену.

- "Горячая замена" (Hot Spare). Данная "примочка" осуществляет как бы автоматическую замену винчестеров. Работает это так: на ряду со всеми дисками массива RAID включается еще один, резервный HDD. И при обнаружении отказа одного из основных дисков сломавшийся диск автоматически отключается от RAIDа, и вместо сломавшегося харда также автоматически начинает работать резервный винчестер. Останется лишь заменить сломавшийся диск, что уже не требует особенной срочности.

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



Что же выбрать?


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



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



Сервер (большое количество обращений к дисковой подсистеме). Для хранения несистемной информации наиболее подойдет RAID 5. Если же нужно обеспечить защищенность системных файлов ОС, разместите их на RAID 1. Большой объем для хранения таких файлов не требуется, а степень надежности будет достаточной при 100% избыточности.



Программная сторона вопроса.


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



Если вы собираетесь строить RAID аппаратно, то во время перезагрузки компьютера в нужный момент нажмите специальную кнопку для входа в BIOS Setup RAID-контроллера (печатая эту строку, я уверен, что вы уже установили контроллер и инсталлировали драйвера для него). Обычно во время прохождения POST на монитор выводятся все нужные комбинации клавиш для входа различные меню настроек (тот же BIOS Setup, например). После нажатия нужной клавиши на экран будет выведено меню, содержащее как минимум три пункта: Create RAID Set, Delete RAID Set и Rebuild. Создание, удаление и сравнение содержимого обоих дисков на предмет идентичности. Rebuilt пригодится только для RAID 1.

Для того, чтобы создать массив, нужно зайти в Create RAID Set, выбрать уровень "рейда" (String или Mirroring, либо RAID 5, если ваш контроллер поддерживает создание такого массива) и указать диски, которые вы желаете включить в массив. Если в RAID 0 будут объединяться больше двух винчестеров, то вам могут предложить указать порядок следования хардов. Но это уже не суть как важно. Чтобы удалить ненужный массив, нажимайте Delete RAID Set, выбирайте удаляемый массив и подтверждайте свой выбор. Зачем нужна опция Rebuild? Если у вас RAID 1, то если вы возьмете один из его винчестеров и скопируете у друга фильм, то на том харде, который вы носили к другу, фильм будет, а на том, который остался в вашем компе, фильма не будет. Но каждый диск RAID 1 один должен быть точной копией другого. Нет проблем: подключаете обратно "выносной" хард и нажимаете Rebuild. Программа сравнит содержимое обоих дисков и дозапишет недостающие данные с первого винчестера на второй.



Если вы в силу определенных обстоятельств всеми руками и ногами за программный RAID, то на всякий случай опишу и его реализацию. Когда все необходимые диски подключены, идем в Панель управления -> Администрирование -> Управление компьютером -> Управление дисками. Затем делаем диски, в будущем включаемые в массив, динамическими. Для этого нажимаем на нужный физический HDD один раз левой кнопкой мыши, после чего идем в Действие -> Все задачи и выбираем Преобразовать в динамический диск. Таким макаром преобразовываем нужное количество дисков. Затем в меню Действие вместо преобразования выбираем Создание тома, после чего указываем, в массив какого уровня будут объединены только что преобразованные в динамические диски. Кстати, если не хотите встретить утреннюю зорьку за форматированием массива, лучше выбирайте быстрое форматирование.



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



Итог


В этой статье я рассказал об основных моментах RAIDостроительства. Если для вас что-то осталось непонятным, либо вы хотите узнать о дисковых массивах больше, или, что самое страшное, вы нашли техническую ошибку в тексте статьи, то, пожалуйста, не молчите, а киньте письмо с изложением проблемы на мне на мыло. Всем вашим замечаниям и упрекам буду только рад!