Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #98, ФЕВРАЛЬ 2007 г.

Королевство кривых RAID-зеркал

Крис Касперски

Хакер, номер #098, стр. 158


Вся правда о RAID-массивах

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

Смачная аббревиатура RAID расшифровывается как Redundant Array of Independent/Inexpensive Disks (дисковый массив недорогих/независимых дисков). Дэвид Петтерсонон, Гарт Гибсон и Рэнди Катц предложили для борьбы с отказами винчестеров (тогда они случались намного чаще, чем сейчас) использовать избыточный массив недорогих дисков. Идея получила развитие, и очень скоро в RAID'ы стали объединять дорогие диски, поэтому слово «inexpensive» («дешевый») заменили словом «independent» («независимый») - сейчас RAID принято расшифровывать именно так.

Типы RAID'ов

Но как RAID-массивом можно распорядиться? Если объединить несколько физических дисков в один виртуальный и поблочно писать/читать со всех дисков сразу, мы получим RAID уровня 0 (Striped Set), значительно увеличивающий скорость операций ввода/вывода (а, как известно, в большинстве случаев ввод/вывод — самое узкое место в системе). В грубом приближении скорость обмена прямо пропорциональна количеству дисков, то есть два диска увеличивают производительность практически вдвое.

Однако здесь есть одно «но». Время поиска секторов (особенно при «далеких» позиционированиях) не постоянно, и винчестер нещадно гоняет магнитную головку, отыскивая нужный сектор методом вилки. При работе с одним жестким диском время поиска сектора равно X+/-n, где n – максимальное отклонение от среднего времени поиска, обусловленного конструктивными особенностями привода. При работе с массивом дисков время поиска увеличивается до X+n, поскольку контроллер вынужден дожидаться завершения операции обмена с самым медленным из дисков.

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

К тому же чем больше дисков, тем выше вероятность отказа каждого из них, а поскольку запись ведется блочным образом (то есть блок 1 записывается на диск 1, блок 2 — на диск 2, блок 3 — на диск 3 и т.д.), то при выходе одного диска из строя из данных образуется «решето», своеобразный реквием по хранящейся на RAID'е информации. RAID 0 – это крайне ненадежная штука, и пользоваться ей можно только, например, для рабочей станции, предназначенной для обработки цифрового видео, но ни в коем случае не для долговременного хранения данных!

Схема хранения данных на RAID 0

RAID-контроллер

---------------------------------------------------------------------

| диск 1 | диск 2 | диск 3 | диск 4 | диск 5 |

---------------------------------------------------------------------

| Сегмент 1 | Сегмент 2 | Сегмент 3 | Сегмент 4 | Сегмент 5 |

| Сегмент 6 | Сегмент 7 | Сегмент 8 | Сегмент 9 | Сегмент 10 |

---------------------------------------------------------------------

А можно поступить иначе и писать одни и те же данные на все диски сразу, дублируя информацию, чтобы при выходе одного жесткого диска из строя ее было возможно автоматически восстановить с другого. Такой массив называется «зеркальным» (Mirrored Set) и соответствует RAID-уровню 1. При этом надежность резко возрастает, а время поиска секторов по-прежнему равняется X+n, то есть RAID 1 не только не ускоряет, но даже замедляет обмен данными по сравнению с обычным жестким диском.

Схема хранения данных на RAID 1

RAID-контроллер

---------------------------------------------------------------------

| диск 1 | диск 2 | диск 3 | диск 4 | диск 5 |

| (данные) | (копия д.1) | (данные) | (копия д.3) | (свободный) |

---------------------------------------------------------------------

| Сегмент 1 | Сегмент 1 | Сегмент 2 | Сегмент 2 | |

| Сегмент 3 | Сегмент 3 | Сегмент 4 | Сегмент 4 | |

---------------------------------------------------------------------

RAID'ы уровней 2 и 3 обычно работают сразу с пятью дисками, храня на них не только полезные данные, но и байты четности, позволяющие восстановить вышедший из строя диск за счет остальных. Покажем, как это происходит на примере битов (тем более что восстановление данных - это битовая операция). Пусть на четыре диска пишется: 1 0 1 1. Складывая биты друг с другом, получаем 3, а 3 по модулю 2 равно 1, вот этот самый 1 мы и пишем на пятый диск. Теперь представим себе, что второй диск вышел из строя: 1 x 1 1 1. Мы вновь складываем биты, делим полученный результат по модулю 2 и получаем 0, что и требовалось доказать!

В принципе, дисков не обязательно должно быть пять, некоторые контроллеры работают и с тремя, но это неважно. Важно, что мы получаем и производительность, и надежность. Разница между RAID 2 и RAID 3 заключается в том, что RAID 2 задействует для хранения битов четности несколько дисков, в то время как RAID 3 — только один, вследствие чего RAID 2 встречается крайне редко, да и RAID 3 используется не часто.

Схема хранения данных на RAID 3

RAID-контроллер

---------------------------------------------------------------------

| диск 1 | диск 2 | диск 3 | диск 4 | диск 5 |

| (данные) | (данные) | (данные) | (данные) | (четность) |

---------------------------------------------------------------------

| байт 1 | байт 2 | байт 3 | байт 4 |байт четности

| байт 5 | байт 6 | байт 7 | байт 8 |байт четности

---------------------------------------------------------------------

RAID уровня 4 — это фактически усовершенствованный RAID 3, устраняющий проблему производительности при работе с небольшими объемами информации за счет использования только того диска, на котором эта информация хранится. Это позволяет обрабатывать несколько запросов на чтение одновременно (класс, особенно при работе с кучей мелких файлов!). Однако запросы на запись порождают блокировки, вызванные необходимостью обновления байтов четности, и в настоящее время RAID 4 используется крайне редко.

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

Схема хранения данных на RAID 5

RAID-контроллер

---------------------------------------------------------------------

| диск 1 | диск 2 | диск 3 | диск 4 | диск 5 |

---------------------------------------------------------------------

|сегмент чет.| сегмент 1 | сегмент 2 | сегмент 3 | сегмент 4 |

| сегмент 5 | сегмент чет.| сегмент 6 | сегмент 7 | сегмент 8 |

| сегмент 9 | сегмент 10 | сегмент чет.| сегмент 11 | сегмент 12 |

---------------------------------------------------------------------

Большинство дешевых контроллеров, не поддерживающих RAID 5, тем не менее, позволяют создавать гибридные дисковые массивы на основе RAID 0+RAID 1, но в этом случае нам потребуется, по меньшей мере, четыре жестких диска, а избыточность будет составлять 50%, против 30% у RAID 5, работающего всего с тремя дисками.

Помимо аппаратных, существуют также и программные RAID'ы, поддерживаемые практически всеми современными операционными системами (такими как Linux/BSD/NT/W2K/XP, а вот Windows 9x в этот список не входит). Будучи подключенными к различными IDE-каналам, они обеспечивают схожую (или чуть-чуть более низкую) производительность, зато по гораздо более дешевой цене. С точки же зрения надежности программный RAID ничем не отличается аппаратного, можно даже сказать, что он выигрывает у него, поскольку чем больше железа установлено в компьютер, тем выше риск его поломки — это закон, против которого не пойдешь.

Польза RAID-массивов

RAID'ы обеспечивают либо отказоустойчивость, либо производительность, либо и то, и другое одновременно. Причем на дисках, поддерживающих горячую замену (она же hot-plug SCSI, SATA), выключать компьютер для смены вышедшего из строя винчестера не обязательно. Это, кстати говоря, актуально не только для серверов, но и для рабочих станций, занимающихся обработкой цифрового видео или другими продолжительными расчетами, которые затрачивают десятки часов машинного времени и не могут быть прерваны. Остановка системы означает, что все придется начинать заново и отработанные часы потрачены впустую.

Также объединение нескольких дисков в один позволяет создавать разделы большого размера. Это весьма актуально на RAID 0 при работе с морально устаревшими (следовательно, дешевыми) винчестерами на несколько гектар. Объединив их вместе, мы получим здоровенный раздел, доставшийся нам практически задаром.

Вот, собственно, и все преимущества RAID'ов. Теперь проговорим об их недостатках.

Вред RAID-массивов

RAID-массив страхует только от аппаратного выхода одного (реже — двух) жестких дисков из строя, он не в состоянии противостоять другим типам разрушения данных, таким как вирусы, ошибки оператора, хакерские атаки, сбои операционной системы и ее окружения. А при выходе из строя блока питания или падения компьютера со стола (например), все диски массива обычно вылетают разом. Таким образом, вне зависимости от наличия/отсутствия RAID'а регулярное резервирование данных все равно остается обязательным! А если есть резервная копия, тогда какая польза от RAID'а?!

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

Причем RAID-массив может работать только с тем контроллером, которым он был создан. Контроллеры различных производителей (и даже разные модели контроллеров одного и того же производителя) несовместимы друг с другом, и если навернется контроллер, то прощай, весь дисковый массив! Хорошо, если RAID-контроллер внешний, тогда его можно будет, по крайней мере, попытаться купить (именно попытаться, так как он давно уже может быть снят с выпуска и предан забвению). А вот при выходе из строя RAID-контроллера на материнской плате (равно как и любого другого ее жизненно важного компонента), наступает точка кипения - нам придется купить точно такую же материнскую плату, при условии что их модельные ряды обновляются каждый сезон и «старички» исчезают из прайс-листов и складов со скоростью торнадо.

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

В этом смысле программные RAID-массивы более предпочтительны, поскольку работают с любым IDE/SCSI-контроллером, но и тут есть свои тонкости. Вплоть до Windows 2000, система хранила данные о дисковом массиве в… реестре! Следовательно, крах (или переустановка с нуля) Windows означал и крах самого дискового массива со всеми содержащимися в нем данными. В Windows 2000 и более старших версиях Microsoft высадила концепцию «динамических дисков» - по сути дела, тех же самых программных RAID'ов, но! Теперь вся служебная информация хранится уже не в реестре, а на самом диске (дисках), и они могут быть подключены к любой другой W2K, XP.

А вот диски, подключенные к RAID-контроллеру (неважно — интегрированному или нет), в сумке уже не поносишь и просто так к другому компьютеру не подключишь! Как же тогда обмениваться данными друг с другом? Как осуществлять апгрейд системы? Интегрированные контроллеры привязывают нас к материнской плате, не интегрированные — к текущей операционной системе, поскольку вовсе не факт, что другая ось поддерживает этот RAID-контроллер, как не факт и то, что его производитель поддерживает все оси, которые нам нужны. Ну, Windows еще туда-сюда, хотя под устаревшие (по мнению производителей) контроллеры новые драйверы, как правило, не выпускаются со всеми вытекающими отсюда последствиями.

Наконец, у дисков, подключенных к RAID-контроллерам, очень сложно, а иногда и вообще невозможно прочитать показания S.M.A.R.T. (системы самотестирования и мониторинга). А читать их крайне полезно, поскольку по ним можно с некоторой вероятностью предсказать, сколько еще винту жить осталось, и узнать его температуру. Когда диск один, за его температуру можно, в общем-то, и не волноваться, но вот массив из четырех тесно расположенных дисков (а по другому их располагать даже в BigTower'е никак не получается) способен нагреваться до весьма высоких температур, требующих немедленной установки дополнительных систем охлаждения.

Советы по выбору RAID'а

Если же ты все-таки решил объединить диски в RAID и никакими способами тебя не отговорить, то, по крайней мере, останови свой выбор на контроллере именитого производителя (такого как, например, Adaptec), который назавтра не исчезнет вместе со своими поделками.

Что же касается интегрированных контроллеров, тут тоже следует выбирать наиболее популярные чипы, используемые многими производителями материнских плат (хотя и не факт, что «чужая» материнская плата даже с тем же самым чипом подхватит уже собранный RAID). Если на материнской плате имеется несколько контроллеров (например, от Intel, ITE и Silicon Image), следует выбирать тот, который распознается операционной системой без установки внешних драйверов (в данном случае это Silicon Image). Иначе при ремонте упавшей системы могут возникнуть серьезные проблемы, самая распространенная из которых заключается в следующем: грузимся с Live CD, а ось в упор не видит RAID'а. Кстати говоря, Silicon Image штатно поддерживается не только NT, но и остальными операционными системами (Linux/BSD), а вот Intel – увы. ITE не дружит NT, однако понимается Linux'ом и BSD, так что в случае аварии Knoppix LiveCD нам поможет.

Существуют нелепые слухи, что при установке в RAID требуются винчестеры одной модели или, по крайней мере, одного производителя. Это чушь! Можно брать любые диски, не только разных производителей, но даже разного размера. В случае RAID'а уровня 0 мы получим диск суммарной емкости, в случае RAID 1 – наименьшей из всех имеющихся. Вся хитрость в том, что, как неоднократно показывала практика, диски одной модели, имеющие дефекты проектирования или косяки в техпроцессе, выходят из строя примерно в одно и то же время с разбросом всего в несколько месяцев. Это приводит к тому, что члены RAID-массива выходят из строя один за другим прежде, чем владелец машины успевает заменить их.

Выбор дисков от разных производителей реально увеличивает надежность хранения данных на RAID 1 и RAID 5. Что же касается RAID 0, то даже при отказе одного из дисков, он теряет все хранимые на нем данные, и тут, действительно, лучше выбирать идентичные модели, обладающие сходными скоростными характеристиками.

И последнее. Если RAID все-таки упал, не стоит паниковать и рвать на себе вены зубами. Возьми R-Studio от R-Tools Technology (www.r-tt.com) – это лучшее средство для автоматического восстановления из всех имеющихся.

Заключение

Так что же все-таки, по большому счету, представляют собой RAID'ы? Добро или зло? Вопрос сложный, можно даже сказать, риторический. И, как к любому риторическому вопросу, к нему надо подходить с философской точки зрения. То есть выбирать, руководствуясь собственной интуицией и чутьем.

Содержание