c o p y r i g h t p r o g r a m m i n g d e s i g n e d by ZORBI
Т р о и ц к г
С с ы л к и
С ч е т ч и к и
..:: Статьи ::..
RAID-массивы в теории и на практике
Слово RAID слышим все чаще и чаще, а спроси обычного пользователя, что это такое – в большинстве случаев в ответ не дождешься ничего, кроме «ну», да «э-э-э»... Если же кто скажет: «Это штука, которая благотворно влияет на скорость работы винчестеров и надежность хранения информации», - то, считай, повезло. Забавно. Дешевый RAID-контроллер сейчас можно найти почти в каждой материнке, а у нерасторопного юзера даже в мыслях нет поинтересоваться, за что же он там деньги заплатил. Зато когда ткнешь его носом, разжуешь и все по полочкам разложишь – удивляется, спрашивает озадаченно: «И как же это я раньше без этого обходился-то, а?»
RAID? Я думал, это средство от насекомых…
Однако давай начнем с самого начала. Итак, что же такое RAID? К счастью, мы с тобой не чайники, и знаем, что RAID – это Redundant Array of Inexpensive Disks, т.е. избыточный массив недорогих дисков. Главная фишка заключается в том, что несколько дисков можно объединить в одно устройство, называемое дисковым массивом, которое, помимо большого объема, будет обладать либо повышенной скоростью работы по сравнению с отдельным диском, либо повышенной надежностью хранения данных, либо сразу и тем и другим.
Есть несколько способов объединения дисков в массивы. Эти способы называются level’ами (уровнями) RAID. Существуют 8 сертифицированных базовых уровней (0..7) и немереная куча их комбинаций.
Благодаря незамысловатым идеям, лежащим в основе, сделать RAID уровней 0, 1, 5 и JBOD – как два байта переслать. Сегодня на это способна любая приличная ось и каждая мало-мальски продвинутая материнка.
RAID 0. Что бы ты ни думал, глядя на это название, знай, что RAID нулевого уровня, строго говоря, RAID’ом не является, так как никакой избыточности (redundant) здесь нет и в помине. А относится он к рейдам лишь потому, что это тоже дисковый массив. Зато этот способ объединения дисков – самый быстрый из всех. В этом рейде диски работают параллельно, часть информации идет на один диск, часть – на другой. Скорость работы вырастет во столько раз, сколько винчей ты в этот рейд поставишь. Правда, во столько же раз возрастают шансы, что вся эта система сбойнет к чертовой матери. А уж если RAID 0 дохнет, то навсегда. Восстановить хранившуюся на нем инфу можно разве что высасыванием недостающих фрагментов из пальца. Хотя, если на дисках нет эксклюзивной инфы (или если просто не забывать про бэкап), то возможностью разом увеличить производительность дисковой системы вдвое-втрое, на мой взгляд, ни в коем случае не стоит пренебрегать.
В системе такой массив выглядит как обычный диск, емкость которого равна суммарному объему всех установленных винчей (если они одинаковые) или объему наименьшего винча, помноженному на общее число винчей в массиве (если диски имеют разный объем). На более вместительных дисках в этом случае останется свободное пространство, которое, увы, скорей всего, использовать не удастся. Хотя, пожалуй, мы чуть позже еще обсудим этот вопрос.
RAID 1. В рейде этого уровня одна и та же информация одновременно пишется на несколько дисков, т.е. выполняется так называемое зеркалирование, или mirroring.
Надежность такого решения велика, поскольку если один из винчестеров вдруг накроется, то на втором вся информация останется в целости и сохранности. Круто? Согласен! Одна беда – в системе такой рейд выглядит как один жесткий диск. И его объем равен объему меньшего из дисков зеркальной пары. Обидно, да? Покупаешь два диска, а работаешь, по сути, с одним. И скорость работы в точности такая же, как и у одного винча (хотя теоретически может быть и больше). Впрочем, если ты работаешь с информацией, потеря которой может обойтись тебе гораздо дороже стоимости второго диска, то RAID первого уровня как раз для тебя.
RAID 5. Если ты можешь позволить себе купить как минимум три диска, советую тебе приглядеться к рейду пятого уровня. Это промежуточный вариант, при котором данные распараллеливаются и записываются сразу на несколько дисков (как в RAID 0). Но при этом на каждый диск заносится еще и дополнительная избыточная информация, которая при выходе из строя одного из винчей массива позволяет оставшимся дискам скооперироваться и восстановить данные, хранившиеся на их погибшем товарище. Короче говоря, RAID 5 является своеобразным компромиссом между скоростными характеристиками рейда нулевого уровня и надежностью первого. Скорость чтения этого рейда тем выше, чем больше винчестеров тебе удастся в него запрячь. А вот скорость записи, из-за того что контроллеру приходится конкретно париться над расчетом корректирующих кодов, будет, возможно, даже ниже, чем у одиночного диска.
Ну, а пока ты копишь деньги на три харда, можешь развлечь себя расчетами общей емкости дискового массива в RAID 5. Формула проста: его емкость равна V*(N-1) (где N – количество дисков, а V – вместимость наименьшего).
И это работает? Железно!
Для того чтобы заиметь в своем компе RAID, нужна железяка, которая называется RAID-контроллер. Такие контроллеры продаются отдельно или встраиваются на материнки. Условно их можно разделить на три группы.
Первую паяют для использования дисков с продвинутыми интерфейсами (SCSI, FC-AL, SSA) для работы в супербыстрых и супернадежных системах. На таких контроллерах стоит собственный проц, кэш, они поддерживают многие уровни RAID и щеголяют переизбытком всевозможных функций (проверка целостности, горячее резервирование, горячая замена – из них самые необходимые). Сами по себе такие контроллеры стоят до чертиков, не говоря уже про диски.
Вторая группа RAID-контроллеров рассчитана на пользователей победнее. В основном характеристики таких контроллеров мало чем отличаются от характеристик устройств первой группы, да и стоят эти девайсы ненамного меньше. Зато работают они со значительно более дешевыми дисками (с ATA или Serial ATA интерфейсом), на чем и экономится куча бабок.
RAID-контроллеры третьей группы предназначены для тех, кому нужен рейд, но у кого нет на него денег. На таких девайсах нет ни проца, ни кэша, уровни поддерживаются лишь самые простые, а функции урезаны по самое не хочу. Такой контроллер стоит смешных денег, но несмотря на это некоторую пользу можно извлечь и из него.
От винта!
Проведем эксперимент. Предположим, что на наших с тобой материнках есть RAID-контроллер, поддерживающий RAID 0 и 1. Давай прикинем, как его можно использовать.
Ну, перво-наперво, конечно, мы обзаводимся двумя одинаковыми винчами или - что вероятней - докупаем пару к тому, что уже имеется. В рейд желательно ставить жесткие диски одной марки – надежней будет. Но даже если винчи разные, ничего страшного не случится. Главное подсуетиться, чтобы винчи были одинакового объема, иначе больший диск «подрежется» по размеру меньшего. А мне лично всегда обидно, когда дисковое пространство пропадает впустую.
Что дальше? А дальше ты подключаешь винчи куда надо, заводишь машину, караулишь момент, когда будет написано, как войти в RAID Setup, жмешь заветную кнопочку, и… опа! Мы там!
Как и у всего ширпотреба, в меню твоего контроллера, скорее всего, будет представлен минимальный набор пунктов – Create RAID Set, Delete RAID Set и Rebuild. Не бог весть что, конечно, но, с другой стороны, и запутаться нельзя. Пробежимся по списку.
Создать RAID проще простого – выбираешь пункт Create, потом - тип массива (Mirroring или Striping), указываешь диски и все! Впрочем, если ты выберешь Striping (т.е. если ты сооружаешь рейд-массив нулевого уровня), тебе, возможно, придется еще указать порядок чередования винчестеров (если вдруг ты всунул их больше двух) и размер блока чередования. Не знаешь, какой размер блока поставить? Используй значение по умолчанию.
Удалить еще проще – выбираешь пункт Delete, нужный RAID Set, и недрогнувшей рукой подтверждаешь свой выбор.
Обновление чуточку посложней. Пройдемся по возможным ситуациям
Ситуация первая: было зеркало (RAID 1), но стало тесно и ты решил поставить винчи побольше. Нет проблем! Существует два варианта действий. Первый вариант: в безопасное место сбрасываешь с рейд-массива всю инфу, удаляешь его, ставишь новые винчи, организуешь новый рейд, переписываешь сохраненную инфу обратно.
Вариант второй (продвинутый): вынимаешь из зеркала один винч, на его место вставляешь новый. Делаешь Rebuild массива с оставшегося диска. Вынимаешь второй диск, на его место ставишь другой, новый, и снова делаешь Rebuild с того диска, который поставил перед этим. Размеры партиций правишь с помощью прог для разбивки винчей. Все.
Ситуация вторая: решил поменять накопители в рейде нулевого уровня… Единственный способ это сделать – через бэкап, как при апгрейде зеркала. Поочередная замена с ребилдом, ясное дело, не покатит, так как на каждом винче хранится только часть данных.
Готовимся к неприятностям
Рано или поздно винч сдохнет. На то он и винч. Действуй, сохраняя хладнокровие. Когда умирает один из винчей зеркала, достаточно просто заменить покойника новым хардом, и сделать ребилд диска, оставшегося в живых. Если отбрасывает блины какой-то из дисков чередующегося массива – меняешь винчестер и монтируешь рейд по новой.
По понятным причинам отказ RAID 0 не может пройти незамеченным, а вот об отказе одного винча в RAID 1 можно вообще никогда не узнать, особенно если и контроллер дешевенький, и комплектуется он по-настоящему тупой утилитой. Хотя нет! Если сдохнет и второй винч, правда откроется. Хотя предпринимать что-либо уже будет поздно. Да, и, кстати, совсем не факт, что данные на винчи пишутся и хранятся так, как надо. И если в случае с RAID 0 все, опять же, сразу вылезает на поверхность, то при работе с RAID 1 об этом можно узнать только после издыхания одного из винчей. То есть опять-таки тогда, когда о восстановлении инфы можно даже не заикаться. Происходит же все это безобразие потому, что дешевые контроллеры не умеют делать проверку целостности – применительно к RAID 1 это значит сравнивать содержимое винчей зеркальной пары. Поэтому мой тебе совет – не провоцируй свои дисковые массивы на суицид. Не вынимай хард из рейд-массива первого уровня и не ходи с ним к другу. Ну, если уж сделал так, то, вернув на место, обязательно делай ребилд с нужного диска. И если у тебя продвинутый контроллер, умеющий делать consistency check (проверку целостности), то регулярно пользуйся этой функцией.
Кстати, конфигурировать рейд можно, не только колупаясь в неудобном биосе, но и с помощью приятных GUI’евин, входящих в комплект контроллера. Например, контроллеры на Silicon Image Sil3112A комплектуются конфигом SATALink, позволяющим настроить и винчи, и рейд.
Win на выдумки хитра
Желание пользоваться всякими продвинутыми технологиями в нас мирно сосуществует с яростным нежеланием за это платить. Именно поэтому появилось море девайсов, где микруха, отвечающая за характерную функцию, заменена софтом. Но мы не жалуемся, а с радостью заюзываем подобные… эмуляции. Возьмем, к примеру, программные RAID-массивы. Возможности для их создания есть и в специфически ориентированной Netware, и в не слишком широко распространенном Linuxe’e, и во всячески унижаемых окнах, основанных на коде NT (NT4.0/2000/XP).
Само собой, программные RAID-массивы имеют целый ряд недостатков. Во-первых, программный рейд очень сильно зависит от операционной системы, ее стабильности. В случае падения оси, данные с массивов всех уровней RAID, кроме первого, скорее всего, восстановить не удастся. Во-вторых, как ты догадываешься, выполнение программ лежит на плечах процессора, и это означает, что программный рейд будет кушать некоторую часть процессорных ресурсов, а его производительность будет зависеть от текущей загрузки процессора. При этом производительность системы в свою очередь будет зависеть и от нагрузки на RAID. В-третьих, даже при работе в RAID 1 могут возникнуть сложности. К примеру, при отказе ведущего диска без правки boot.ini загрузиться тебе не удастся.
Честно говоря, раньше я думал, что основное преимущество программной организации рейда – цена, а точнее, ее отсутствие. Но после сравнительного тестирования я понял, что это все же не единственная положительная сторона такого подхода. Впрочем, прежде чем переходить к тестированию, стоит, пожалуй, взглянуть на то, что мы будем тестить.
Я его слепила из того, что было…
Я уже упоминал, что средство построения программного рейда встроено в Windows 2000/XP. Как пользователи мелких и мягких мы можем в любой момент сделать себе RAID 0, 1, 5 или JBOD, не потратив ни одного честно заработанного рубля.
Однако объясняю по пунктам: все начинается с подключения дисков к компьютеру, его включения и ожидания загрузки окон. Полюбоваться на новые устройства можно в Панель управления –> Администрирование –> Управление компьютером –> Управление дисками. После этого ты должен выбрать нужные диски и преобразовать их в динамические. Сделать это необходимо, поскольку интересующие нас софтверные рейды являются динамическими томами, а последние, в свою очередь, могут быть созданы лишь на динамических дисках.
Теперь можно творить. Динамические тома (созданные с помощью ее, Windows, собственного средства управления дисками) – это и есть нужные нам программные рейд-массивы. Определившись, чего бы ты хотел иметь, заходишь в меню Действие –> Все задачи и выбираешь создание тома. Запустится мастер, который проведет тебя за ручку через весь несложный процесс. От тебя потребуется указать тип тома (составной (JBOD), чередующийся (RAID 0), Зеркальный (RAID 1), RAID 5), диски, на которых он будет создан, его метку и выбрать метод представления тома в системе. Да, форматирование лучше выбирай быстрое, иначе засидишься до утра. Дельце сделано? RAID-массив готов? Пользуйся!
Размеры динамических томов можно легко изменять (Действие –> Все задачи –> Расширить том). К тому же софтверные массивы гораздо удобнее аппаратных в плане распределения объема. Можно отвести под создание томов с избыточностью лишь часть пространства, а остальное использовать под другие нужды, создавая тома других видов. Здесь не может быть ситуации с потерей части диска при использовании винчестеров разного объема, как при аппаратном рейде, так как на оставшемся «лишним» куске свободного пространства можно запросто организовать еще один том.
Для удаления динамического тома все в том же меню Действие –> Все задачи нужно выбрать Удаление тома и начхать на предупреждение о возможных потерях инфы (если тебе и в самом деле на это начхать). Кстати, убрать можно не только том, но и зеркало от какого-то тома, лишив его тем самым устойчивости к отказам (команда Разделить зеркальный набор).
Если ты решил вдруг создать какой-то продвинутый рейд средствами популярной Windows 2000 Professional – приготовься к облому. Она ничего, кроме RAID 0, делать не умеет. И говорит, что если мы хотим уровень 1 или 5, то нам надо раскошелиться на Server редакцию. Можно, конечно, решить эту задачу в лоб и переставить окна, но на самом деле ни для кого не секрет, что редакции Windows отличаются лишь набором дополнительного софта в дистрибутиве, а данное ограничение растет из реестра и может быть легко поправлено софтинкой NTSwitch.
Кучи вариантов обновления, как в случае с аппаратным рейдом, не предложу. Возможно, я их не знаю, а, быть может, их попросту нет. Мне кажется, единственно правильный образ действий выглядит так: сначала следует слить всю информацию в теплое сухое место, затем произвести все необходимые манипуляции над выбранным томом, после чего переместить сохраненные данные туда, куда нужно.
Замучили проблемы?
Даже создание на рульном динамическом томе не придает RAID 0 отказоустойчивости. Поэтому при его отказе инфа пойдет прахом. Том RAID 1 при отказе или ошибках одного из дисков в окне Управление дисками помечается как Отказавшая избыточность. Если не хочешь потерять всю инфу – жми Реактивизацию диска как можно скорей. А если не помогает – значит, диск умер: нужно удалить текущее зеркало и создать новое на другом диске. О сбое RAID 5 сообщается точно таким же образом, но в этом случае, если реактивизация диска не помогает, нужно пользоваться командой Восстановить том (понятное дело, это замена одного из разделов тома, и для этого необходим динамический диск с достаточным объемом свободного пространства).
В принципе, вот и все премудрости организации программного рейда. Абсолютно никаких сложностей. Нулевой и первый уровни при небольшом количестве дисков просты как валенки.
Тест, тест, тест!
Чтобы не ездить тебе по ушам просто так, я специально протестировал один из самых распространенных Serial ATA RAID контроллеров на чипе Silicon Image Sil3112A, интегрированный в мою материнку. Конфигурация тестового компьютера была следующей:
MB ASUS A7N8X Deluxe (SATA RAID контроллер на борту, c драйвером 1.0.0.22 и биосом 4.1.50)
HDD 2*Seagate ST380013AS (Barracuda SATA 7200.7, 80 Гб, для RAID)
DVD-ROM ASUS Е-616 (Secondary Slave)
ОС Windows 2000 SP4 Server
Результаты снял для одиночного диска, RAID 0 и RAID 1 в аппаратной и программной реализациях. Для того чтобы не слишком напрягать твои (и свои) мозги популярным нынче IO Meter’ом, я использовал два простых бенчмарка – ZD WinBench 99 и SiSoftware Sandra 2004. Их показаний вполне достаточно для того, чтобы оценить общие тенденции, а реальную производительность все равно бенчмарками никогда не оценить.
Результаты анализов - в студию!
Как и следовало ожидать, скорость дискового массива превышает скорость одиночного диска в конфигурациях с RAID 0 почти в два раза при последовательном доступе, и не сильно отличается от показателей одиночного жесткого диска при случайном доступе (тут сказывается именно случайность доступа).
В конфигурациях RAID 1 со скоростью линейной записи все понятно – она и должна быть немного меньше, чем у одиночного диска. А вот скорость чтения в точности соответствует одиночному диску, хотя я и говорил, что на этом уровне возможно повышение производительности за счет чтения одновременно с обоих винчей массива. Никаких глубинных проблем на самом деле здесь нет – все банально: контроллер дешев и прост, распараллеливать запросы на потоки для нескольких дисков он не умеет.
Насколько я могу судить по опыту общения с другими сверхдешевыми контроллерами, все они точно такие же. Этот не самый худший, но и не лучший. Обычный добротный почти халявный контроллер. Лишь один вопрос не дает мне покоя – на фига он мне нужен, если его полностью бесплатный виндовый эмулятор выдает не худшие результаты? В нулевой конфигурации скорости железного и программного контроллеров совпадают, а так как отказоустойчивости нет ни у того, ни у другого, то глубоко фиолетово, что юзать. Если у тебя есть потребность в быстром вводе-выводе (например, ты увлекаешься видеомонтажом), и на твоей мамке нет встроенного рейда, то можешь не выкидывать деньги на дешевый RAID-контроллер - софтверный эмулятор управится ничуть не хуже!
По правде сказать, я и сам не ожидал, что программный рейд будет в тестах вовсю конкурировать с аппаратным. Я не ковырял дебаггером недра Windows, но что-то мне подсказывает, что ось просто умно распараллеливает запросы. А так как в рейде первого уровня выполняется обычное дублирование информации, то, согласись, и в этом случае непринципиально, каким образом это дублирование будет сделано. Лишь бы оно было. Вот и выходит, что софт сегодня в ударе. И ты можешь при необходимости пользоваться на своей машине программными рейдами нулевого и первого уровней… по крайней мере, до тех пор, пока не накопишь денег на приличный аппаратный RAID-контроллер :).
Пособие по уходу
То, что RAID – навороченная штука, быстрая и надежная, совершенно не означает, что все проблемы заканчиваются с его установкой. На самом деле, RAID-массив подвержен большинству тех же болезней, что и обычный жесткий диск. Поэтому, чтобы в один прекрасный момент не оказаться у разбитого рейда без ценной инфы, следуй рекомендациям, которые я уже давал в 11 номере за прошлый год. Этого будет достаточно. Никаких специальных программных средств для ухода за простенькими массивами не требуется (GUI’евины, идущие в комплекте с котроллерами, не в счет).
Обслуживание динамических дисков и томов выполняй с помощью стандартных виндозных средств. Если ставишь себе реальный аппаратный рейд - можешь смело пользоваться привычным софтом: Acronis Partition Expert, Powerquest Partition Magic и даже fdisk’ом.
Почему-то мне сейчас кажется, что ты спросишь, не для того ли дано нам резервирование в рейде, чтобы голова не болела о необходимости делать бэкап самостоятельно. Нет, не спросишь? А я все равно отвечу! Наличие рейда ни в коем случае не освобождает от необходимости делать резервное копирование. Рейд защищает от аппаратных сбоев. Только. Если ты отформатируешь винч или какой-нибудь вирь сделает это за тебя – останется лишь развести руками. Рейд исправно сохранит все изменения.
Сдается мне, голова у тебя уже пошла кругом, и мне пора сворачиваться. Того, о чем я тебе рассказал, достаточно, чтобы грамотно организовать простенький домашний рейд или понять, почему этого делать не стоит. А если вдруг так случится, что с разнообразными дисковыми массивами твои отношения почему-то не сложатся (что-то рухнет или пойдет не так), что ж… Значит, не судьба. По крайней мере, тогда ты сможешь с чистой совестью заявить, что RAID, увы, плохо действует не только на тараканов.