Понимание RAID


  • В: Что такое RAID? Почему я всегда его использую?

    О: RAID - путь комбинирования нескольких дисков в одно целое для увеличения скорости и/или надежности. Существует несколько различных типов и реализаций RAID, каждый со своими преимуществами и недостатками. Например, помещая копию одинаковых данных на два диска (называется зеркализация дисков, или RAID уровня 1), скорость чтения может быть повышена поочередным считыванием с каждого диска зеркала. В среднем, каждый диск менее занят, т.к. он обрабатывает только половину операций чтения (для двух дисков), или 1/3 (для трех дисков), и т.д. В дополнение, зеркало может повышать надежность: если один диск выходит из строя, другой диск содержит копию данных. Различные пути комбинирования дисков в один, обозначаются уровнями RAID, могут обеспечить большую эффективность хранения, чем просто зеркализация, или могут изменить производительность по задержкам (времени доступа), или производительность пропускной способности (скорости передачи), для чтения или записи, в то же время поддерживается избыточность - это полезно для противодействия отказам.

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

    RAID может быть реализован аппаратно, в виде специальных дисковых контроллеров, или программно, как модуль ядра который связывает низкоуровневый драйвер диска, и файловую систему, которая находится на нем. Аппаратный RAID - всегда "дисковый контроллер", - это устройство к которому могут подсоединяться диски. Обычно он представляет собой плату, которая вставляется в слот ISA/EISA/PCI/S-Bus/MicroChannel. Однако, некоторые RAID контроллеры - в виде ящика, который соединяется кабелями с используемым дисковым контроллером, и дисками. Меньшие из них помещаются в дисковой стойке; большие могут быть встроены в дисковый шкаф со своими собственными стойками и источником питания. Последние аппаратные RAID используют с последними и быстрейшими процессорами, что обеспечивает обычно лучшую общую производительность, несмотря на значительную цену. Это потому, что большинство RAID контроллеров поставляются с встроенными процессорами на борту и кеш-памятью, которые могут значительно разгрузить суммарную обработку главного процессора, насколько позволяет скорость поступления данных в большой кеш контроллера. Старые аппаратные RAID могут работать как "тормоз" когда используются с новейшими процессорами: вчерашние модные встроенные процессоры и кеш могут быть бутылочным горлышком, и их производительность часто превосходится чисто-программными RAID и новыми, но простыми в других отношениях, дисковыми контроллерами. Аппаратные RAID могут иметь преимущество над чисто-программными RAID, если используют синхронизацию шпинделей дисков и знают позицию дисковых пластин относительно головок диска и желаемого дискового блока. Однако, большинство современных (дешевых) дисков не предоставляют эту информацию, во всяком случае, средства управления этим и т.о., большинство аппаратных RAID не имеет этих преимуществ. Аппаратные RAID различных производителей, версий и моделей обычно не совместимы: если RAID контроллер отказывает, он должен быть заменен на другой контроллер того-же самого типа. На момент написания (Июнь 1998), широкое разнообразие аппаратных контроллеров используется под Linux; однако, никакой из них, на текущий момент, не поставляется с утилитами конфигурации и управления, которые запускаются под Linux.

    Software-RAID - набор модулей ядра, вместе с утилитами управления, которые реализуют чисто программный RAID, и не требуют необычной аппаратуры. Подсистема Linux RAID реализована в ядре, как уровень над низкоуровневыми драйверами дисков (для IDE, SCSI и Paraport устройств), и интерфейсом блочных устройств. Файловая система, будь то ext2fs, DOS-FAT, или другая, работает поверх блочного интерфейса. Программный RAID, по своей программной природе, склонен быть более гибким, чем аппаратная реализация. Обратная сторона этого - требуется больше процессорного времени, по сравнению с аппаратной реализацией. Конечно, цена не превзойденная. Кроме того программный RAID имеет одну важную отличительную особенность: он оперирует базируясь на разделах, где несколько отдельных дисковых разделов собираются вместе для создания разделов RAID. В этом отличие от большинства аппаратных решений RAID, которые объединяют вместе целые диски в массив. В аппаратных RAID, факт, что массив RAID - прозрачен для операционной системы, упрощает управление. В программном, гораздо больше конфигурационных опций и вариантов, что запутывает дело.

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


  • В: Что такое уровни RAID? Почему так много? Чем различаются?

    О: Различные уровни RAID имеют различную производительность, избыточность, емкость, надежность и ценовые характеристики. Большинство, но не все, из уровней RAID предоставляют повышенную защиту от отказов диска. Из тех, которые предоставляют избыточность, RAID-1 и RAID-5 более популярны. RAID-1 предлагает лучшую производительность, в то же время RAID-5 применяется для более продуктивного использования имеющихся емкостей накопителей. Однако, настройка производительности - совсем иное дело, так как производительность зависит от множества различных факторов, от типа приложения, до размеров stripe-ов, блоков, и файлов. Более трудные аспекты настройки производительности откладываются до более поздних разделов этого HOWTO.


  • Далее описывается разница между уровнями RAID в контексте реализации программного RAID в Linux.

  • RAID-linear

    простое объединение разделов для создания большого виртуального раздела. Это применяется если у Вас несколько маленьких дисков, и Вы хотите создать один большой раздел. Это объединение не предлагает избыточности, и фактически уменьшает общую надежность: если один из дисков выходит из строя, весь раздел выходит из строя.


  • RAID-1 так же называемый "зеркализацией"("mirroring"). Два (или более) раздела, все одинакового размера, каждый содержит точную копию всех данных, блок в блок. Зеркализация дает сильную защиту от отказов диска: если один диск отказывает, есть другой с точной копией данных. Зеркализация также может помочь увеличить производительность подсистемы ввода-вывода, так как запросы на чтение могут быть разделены между несколькими дисками. К несчастью, зеркализация также менее эффективна в смысле емкости: два зеркальных раздела могут вместить не больше данных, чем один раздел.


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




  • RAID-0 подобна RAID-linear, исключая то, что компоненты разделов делятся на strip-ы и затем чередуются. Подобно RAID-linear, результат - один большой виртуальный раздел. Так же как и в RAID-linear, это не предполагает избыточности, и тоже уменьшает общую надежность: отказ одного диска ударит по всему. RAID-0 часто претендует на увеличение производительности по сравнению RAID-linear. Однако, это может быть или не быть справедливо, в зависимости от характеристик файловой системы, типичного размера файла по сравнению с размером stripe, и типа рабочей нагрузки. Файловая система ext2fs

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


  • RAID-4 чередует stripe-ы подобно RAID-0, но требуется дополнительный раздел для размещения информации о четности. Четность используется для получения избыточности: если один из дисков отказывает, данные на оставшихся дисках могут быть использованы для воссоздания данных на отказавшем диске. Получаем N дисков с данными, и один диск с четностью, stripe четности вычисляется так - берется один stripe из каждого диска с данными, и XOR-ятся вместе. Итак, емкость (N+1)-дисков массива RAID-4 равна N, что намного лучше чем зеркализация (N+1) дисков, и почти так же хорошо, как RAID-0 на N. Заметьте, что для N=1, где один диск с данными, и один паритетный, RAID-4 эквивалентен зеркализации, при этом каждый из двух дисков копирует друг друга. Однако, RAID-4 НЕ дает производительности чтения зеркализации, и имеет пониженную производительность записи. По просту, это потому, что обновление паритета требует чтения старого паритета, перед тем, ка новый паритет может быть вычислен и записан. При большом количестве операций записи, паритетный диск может стать "бутылочным горлышком", т.к. каждая операция записи должна обращаться к паритетному диску.




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


  • RAID-2 и RAID-3 редко используются, и в некоторой степени стали устаревшими для современных дисковых технологий. RAID-2 подобен RAID-4, но размещает ECC информацию вместо паритетной. С тех пор как все современные диски реализуют ECC в себе, это предоставляет маленькую дополнительную защиту. RAID-2 может дать большую целостность данных, если пропало питание в процессе записи; однако, резервные аккумуляторы и чистое завершение работы могут дать ту же выгоду. RAID-3 подобен RAID-4, исключая то, что он использует наименьший возможный размер stripe. Как результат, любая операция чтения будет включать в себя все диски, делая перекрытие запросов ввода-вывода трудным/невозможным. Для избежания задержек при ожидания вращения, RAID-3 требует синхронизации всех шпинделей дисков. Большинство современных дисков не имеют способности синхронизировать шпиндели, или, если и имеют, не имеют нужных соединителей, кабелей, и документации производителей. Ни RAID-2 ни RAID-3 не поддерживаются драйверами программного RAID в Linux.


  • Прочие уровни RAID определены различными исследователями и поставщиками. Многие из них представляют наложение одного типа raid поверх другого. Некоторые требуют специального оборудования, а другие защищены патентами. Нет единой схемы именования этих уровней. Иногда преимущества этих систем небольшие, или по крайне мере не проявляются пока система не слишком нагружена. Исключая размещение RAID-1 поверх RAID-0/linear, Программный RAID Linux не поддерживает никакие друге варианты.



  • Содержание раздела