Введение
RAID – технология старая, проверенная временем и надежная. RAID – аббревиатура, означающая Rebundant Array of Independent Drives (Избыточный массив независимых дисков). Что это значит? Если объяснять просто, то это такое устройство, которое объединяет в один диск несколько дисков, и объединяет по-разному. Но результат всегда одинаковый: для пользователя это будет единый накопитель, на который он может скопировать свои файлы.
Хорошо, спросите вы, а зачем тогда нужен этот самый RAID, если можно с таким же успехом просто подключить жесткий диск? Естественно, раз он был придуман, то не просто так. Какие задачи решает дисковый массив?
Основные функции дисковых массивов
Первая – это повышение производительности. Организация нескольких дисков в единое устройство хранения информации позволяет записывать данные пользователя одновременно на все диски массива порциями, тем самым увеличивая (в теории) скорость работы дисковой подсистемы кратно количеству дисков в ней. На практике, конечно, прирост производительности не кратен числу дисков, но все равно, он весьма высок и превышает обычные для стандартных жестких дисков скорости как минимум на 50%.
Вторая – это повышение емкости. Несколько дисков, объединенных в массив, будут иметь или суммарную емкость всех дисков массива, или немногим менее (обычно суммарная емкость всех дисков минус емкость одного или двух дисков).
Третья – это повышение надежности. Неспроста в расшифровке аббревиатуры RAID присутствует слово «избыточность» — большинство типов дисковых массивов реализуют те или иные механизмы защиты данных от потерь. Единственный тип RAID, в котором не реализована избыточность – это RAID-0, или, как его еще называют, «страйп». Этот тип массива использует все диски для хранения пользовательских данных, он самый быстрый из всех типов дисковых массивов и позволяет получить самую большую конечную емкость устройства, но при этом он абсолютно не защищен от сбоев, и в случае любой неисправности любого члена массива RAID-0 данные на нем теряются.
Как это работает? В целом просто, как и все гениальное.
Диски разделяются на блоки, а блоки чередуются в определенном порядке. Когда нужно записать информацию, контроллер распределяет ее по свободным блокам. Вот и все. Казалось бы, что может быть надежнее?
Типы дисковых массивов
Сохранение общего принципа «блочная запись данных в определенном порядке» порождает массу его разновидностей. Можно записывать данные блоками с чередованием на каждом диске, через диск, через несколько дисков; можно записывать информацию блоками разной величины; можно разделить блоки на блоки с данными и блоки с информацией для восстановления (избыточность), и также чередовать их по-разному. В общем, вариантов масса. Это и порождает основные проблемы восстановления данных с дисковых массивов.
Всем известно, что RAID-массивы бывают разными: RAID-0 (страйп), RAID-1 (зеркало), RAID-3, RAID-4 (массивы с контролем четности, вынесенным на отдельный диск), RAID-5, RAID-6 (массивы с контролем четности блочного типа). Мы не будем описывать эти типы дисковых массивов – в интернете об этом информации более чем достаточно; на рисунках ниже изображено, как они работают.
Реализация избыточности: XOR и коды Рида-Соломона
Намного интереснее то, как реализуется избыточность. Для этого используется два логических механизма: XOR (RAID-3, RAID-4, RAID-5) и XOR + код Рида-Соломона (RAID-6).
Что такое XOR? Это логический оператор, который принято обозначать как «исключающее или». Работает он просто и начинает иметь смысл при трех участниках оператора: первом слагаемом, втором слагаемом и результате. Смысл оператора заключается в том, что зная два из трех его участников мы всегда можем точно назвать третий. Конечно, XOR можно организовать и для четырех, и для пяти, и для большего количества участников – просто сами операции восстановления недостающего члена ряда будут сложнее. Как это работает? Давайте рассмотрим на примере ряда из трех членов (пусть для простоты это будет три диска с однобитовым размером блока, чтобы нам было проще представить механизм):
Мы видим, что при утере любого из дисков содержимое утерянного байта в каждом блоке утерянного диска может быть восстановлено из двух других с использованием операции «исключающее или». Очевидно, что при потере одного диска, основанного на этом принципе восстановления (избыточности), массив продолжит работать нормально, хотя и медленнее обычного, так как много времени будет тратиться контроллером массива на расчет недостающих битов информации. По этой причине дисковые массивы с избыточностью обычно делаются с небольшим размером блока (до 256 секторов), так как пересчет больших блоков слишком сильно нагружает контроллер и общая производительность массива при больших блоках падает просто катастрофически; кроме того, активное использование контроллера в режиме постоянного пересчета данных неизбежно приведет к его повышенному износу и по этой причине – преждевременному выходу из строя.
Более высокий уровень надежности дискового массива можно обеспечить, только реализовав дополнительный механизм восстановления утерянных данных. Такой механизм был реализован в массивах RAID-6, он позволяет массиву пережить потерю сразу двух дисков, и минимальное количество членов массива, соответственно, будет четыре. Основан этот механизм на использовании двух независимых систем пересчета данных: XOR (о нем мы сказали выше) и коды Рида-Соломона. В массивах типа RAID-6 чередуются блоки данных, блоки XOR и блоки кодов Рида-Соломона так, что при выходе из строя одного или даже двух дисков содержимое этих дисков может быть пересчитано контроллером, и массив продолжит работать (данные будут доступны). Что же такое коды Рида-Соломона?
Если говорить максимально просто, то код Рида-Соломона – это битовая матрица, позволяющая при утере одного или двух ее участников рассчитать их содержимое по остальным. Казалось бы, чем отличается код Рида-Соломона от XOR? Отличие в том, что коды Рида-Соломона позволяют восстановить битовое значение при отсутствии не одного, а двух компонентов. Для этого используются более сложные алгоритмы: поля Галуа, синдром ошибки и прямое преобразование Фурье. Если при использовании XOR восстановление возможно только при сохранении цикличности расположения битов информации, то при использовании кодов Рида-Соломона сохранение цикличности уже не требуется, так как математика контроллера сама способна рассчитать положение ошибок и скорректировать их.
Естественно, использование такого сложного алгоритма восстановления данных приведет, в случае утери одного или двух дисков из массива RAID-6, к сильному износу контроллера и, как следствие, к его преждевременному выходу из строя.
Состояние массива с избыточностью: нормальное, деградировавшее, неисправное
Любой дисковый массив, имеющий избыточность, по своему состоянию разделяется на нормально работающий (все диски массива исправны и массив функционирует нормально, данные защищены), деградировавший (degraded) (один или два (в зависимости от типа RAID) диска массива неисправны, массив функционирует с пересчетом отсутствующих дисков, данные не защищены) и неисправный (вышло из строя больше дисков, чем поддерживает избыточность, контроллер не имеет возможности рассчитать данные на вышедших из строя дисках, массив перестал существовать как устройство хранения информации).
Нормально работающий массив – его естественное состояние. Для того, чтобы не потерять массив в случае выхода из строя одного из его членов, было внедрено понятие «горячая замена» (hot spare) – пустой диск, единственная функция которого – принять на себя пересчитанные контроллером данные вышедшего из строя накопителя. Такой диск после переноса на него рассчитанных данных включается в массив, а вышедший из строя диск из него исключается. Эта процедура называется «перестроить массив» (RAID rebuild). Как правило, во время перестройки (ребилда) массив работает значительно медленнее, чем в нормальном состоянии. По этой причине в случае ребилда деградировавшего массива пользователь может его перезагрузить («что-то зависает, надо перезапустить»). Результатом такой перезагрузки может стать переход массива из состояния «деградировавший» в состояние «неисправный». Во избежание подобных последствий, при наличии настроенного диска горячей замены, в случае значительной потери производительности массива зайдите в утилиту его настройки и мониторинга и посмотрите, чем именно сейчас занят массив. Если он покажет вам процесс rebuild – не трогайте массив до его окончания.
Состояние массива без избыточности: исправен и неисправен
Для массивов без избыточности (RAID-0 и RAID-1) возможно только два состояния: массив исправен (все диски массива работают и данные доступны) и массив неисправен (один или несколько дисков массива вышли из строя, данные недоступны).
Если с массивами RAID-0 выход одного или нескольких участников массива из строя приводит к образованию «дыр» в данных (те места, где должны быть блоки данных из вышедших из строя носителей), то с массивами RAID-1 (зеркало) все намного интереснее. По простой логике зеркало, или массив с полным дублированием диска, не должно приводить к потере данных в случае выхода из строя одного из участников. На практике это так далеко не всегда. Довольно часто (особенно в случае использования в массиве дисков одного производителя и одной модели) один диск «клонирует» не только данные со второго, но и его ошибки, что может привести к одновременному выходу из строя обоих дисков с идентичными симптомами. В настоящее время зеркалирование – уже отмирающая технология, предпочтение отдается блочным массивам с избыточностью как более надежным.
Составные массивы. Кластеры. Локусы. Современные системы хранения данных
Конечно же, свет вовсе не сошелся клином на тех типах RAID, которые мы перечислили выше; производители всевозможных устройств с удовольствием применяют различные алгоритмы, комбинации и решения для реализации наиболее (по их мнению) быстрых и надежным типов массивов. Один из методов «улучшения» RAID – применение технологий составных массивов.
В самом простом случае составной дисковый массив – это два или больше массива, объединенных в один. Например, два RAID-5, которые объединены в зеркало (RAID-1). Или два страйпа (RAID-0), объединенных в зеркало. И т.п. По типу объединения такие массивы обычно имеют двойную цифровую кодировку (RAID50 или RAID5+0, RAID10 или RAID1+0, и т.д.). Составление массива из нескольких добавляет массиву надежности.
Более сложные структуры создаются уже для промышленных систем хранения данных, они призваны обеспечить большие емкости при высоком уровне отказоустойчивости. Как правило, это составные массивы иерархического типа, реализованные по принципу матрешки: более мелкие массивы помещаются в более крупные, и так до тех пор, пока на верхушке не остается один, наиболее крупный, RAID. Например, такая структура:
Десять массивов RAID-5, объединены попарно в массивы RAID-0 (таких массивов получается пять), эти массивы RAID-0 объединены в RAID-6; четыре таких массива RAID-6 объединены в RAID-0. Как разграничить такую схему?
Для этого придумана специальная терминология.
Промышленное устройство хранения информации (или просто дисковый массив) – это окончательный продукт взаимодействия всех дисков в системе, то свободное место, которое он предоставляет для использования.
Кластер – первичная ячейка хранения данных, объединение нескольких массивов первого или второго уровня (в нашем примере кластером является попарное объединение массивов RAID-5 в массив RAID-0).
Локус – объединение кластеров.
Таким образом, простым определением промышленного устройства хранения информации будет: промышленное устройство хранения информации – это иерархическое объединение в единое дисковое поле локусов кластеризованных дисковых субъединиц.
Физическая реализация дисковых массивов
Как дисковые массивы реализуются на практике? Возможно два метода: программный и аппаратный.
Массив на программном уровне может быть создан даже на базе одного диска (в RAID программно собираются участки его поверхности). Обычно программный массив собирается в Linux, реже – Mac или Windows. Инструменты создания программных массивов в Linux/Unix системах намного мощнее, удобнее и гибче, чем в Windows, поэтому в подавляющем большинстве NAS (Network Attached Storage) для сборки массива используется Linux. Соответственно, собирая программный массив блочного типа с избыточностью, нужно быть готовым к тому, что он будет «отъедать» часть ресурсов процессора и оперативной памяти для обсчета избыточности.
Массив на аппаратном уровне собирается с использованием специализированного RAID-контроллера – это или внешняя карта расширения, устанавливаемая в PCI или PCI-E слот, или интегрированный в материнскую плату микрочип. В любом случае, всю математику, а также хранение настроек, логов ошибок и т.п., берет на себя уже не программная часть, реализванная в операционной системе, и не ресурсы компьютера, а аппаратная часть контроллера.
В большинстве случаев для организации дискового массива требуются диски одинакового объема. Однако некоторые контроллеры позволяют реализовывать блочные дисковые массивы с избыточностью и на дисках разного объема: DROBO, Synology и т.п. Такие массивы строятся на принципе разделения общего дискового пространства на зоны, из которых собирается конечный массив. Эти массивы имеют свои собственные маркетинговые названия (например, Beyond RAID у DROBO, Hybrid RAID у Synology, и т.п.), однако суть всегда остается одинаковой: это, во-первых, блочный массив, а во-вторых, у него имеется реализованная циклическим способом избыточность.
На каких дисках строятся дисковые массивы
В принципе для построения массива нет ограничений по используемым носителям. Это могут быть и традиционные жесткие диски с любым интерфейсом (SCSI, SAS, SATA, PATA), и твердотельные диски с любым интерфейсом (SATA, NVMe, M.2 и т.п.), и карты памяти (в китае даже выпускаются особые платы расширения, позволяющие сделать из нескольких карт SD один твердотельный накопитель – при этом карты памяти работают как RAID-0).
Массивы на SSD собираются в дата-центрах, для которых приоритетным является не объем хранилища, а его производительность – например, там, где требуется обрабатывать медиа-контент (видео в разрешении 4К и 8К, фотографии, снятые камерами с разрешением больше 32 мегапикселей, и т.п.). Это киностудии, медиахранилища (например, облако iCloud) и т.п.
На жестких дисках собираются массивы тогда, когда объем важнее производительности – и, естественно, когда построить массив на SSD не позволяет бюджет (твердотельные диски намного дороже жестких). Массивы на SATA или PATA-дисках (последние уже почти не встречаются) собираются в бюджетном сегменте, они дешевле всех других и позволяют строить хранилища довольно внушительного объема.
SCSI или SAS диски используются в бизнес- или enterprise-решениях, их отличает более высокая степень надежности, чем SATA/PATA диски. Кроме того, обычно SCSI/SAS диски разрабатываются именно для использования в серверах, поэтому их отличает (обычно) более высокая скорость вращения шпинделя, уменьшенное время поиска информации, высокие скорости передачи данных.
Массивы на картах памяти строят в подавляющем большинстве случаев обычные пользователи, хотя такие массивы могут быть реализованы в некоторых профессиональных камерах для повышения безопасности данных (две карты памяти, которые работают в режиме RAID-1). Массив на картах памяти наименее надежен, так как качество карт памяти значительно уступает качеству жестких или твердотельных дисков, карты памяти имеют гораздо больше шансов на выход из строя и, наконец, они просто значительно медленнее дисковых накопителей.
Восстановление дисковых массивов в компании IT-Doctor
Наш опыт в области восстановления данных составляет более 25 лет, и немалую часть этого времени мы посвятили дисковым массивам. Основная часть наших клиентов обращалась с устройствами NAS и с внешними USB-дисками, оборудованными внутри 2 – 4 накопителями. Как правило, в таких устройствах реализуется либо массив RAID-0, либо RAID-5. Подобного рода массивы восстанавливаются обычно очень быстро, так как нами накоплена большая база стандартных конфигураций дисковых массивов для такого рода устройств. В 90% случаев при исправных дисках при обращении к нам с устройством NAS или внешним диском, построенным по архитектуре RAID, мы восстановим данные в тот же или на следующий день.
В более сложных случаях, когда применяется нетривиальная конфигурация массива, или когда один или несколько дисков в массиве вышли из строя в разное время, и требуется определить, какой из них несет актуальные данные, а какой следует игнорировать, процесс восстановления данных может занять 2 – 3 дня. С чем это связано?
Прежде всего, мы обязательно сделаем посекторную копию каждого диска массива. Это делается даже в том случае, если все диски в массиве исправны. Работа с копией полностью исключает фатальные для данных ошибки, а ведь один из наших основных принципов – работать безопасно.
Затем мы исследуем диски вручную и определим, какие из участников массива в настоящий момент исправны, какие – неисправны, и какие из неисправных дисков следует восстанавливать (определяется актуальность данных). Только после этого неисправный диск будет приводиться в пригодное для копирования данных состояние и будет создаваться его посекторная копия.
После всех приготовлений диски анализируются специализированным ПО (в том числе, если требуется, и нашей собственной разработки), определяется конфигурация массива (порядок дисков, размер блока, тип цикла и распределение блоков, смещения (если они есть) и т.п.). Сборка массива осуществлятся в шестнадцатеричном редакторе; после сборки возможно две опции доставки данных – создание полноценного клона массива на другой (исправный) массив (например, на другой NAS) или пофайловое копирование информации на носители заказчика (на другой NAS, на другие диски, и т.п.).
Статистика по обращениям к нам с дисковыми массивами для восстановления данных приводится в этой статье. Как видите, мы восстановили немало массивов, имеем в этом плане огромный опыт и все необходимое для таких работ оборудование: SCSI и SAS-контроллеры, внешние USB-раки для монтажа многодисковых массивов (до 8 SAS-дисков в стойке), специализированное ПО для анализа и сборки массивов. Мы привыкли работать быстро и качественно и всегда готовы оказать вам помощь с воссстановлением данных из RAID, если он вдруг перестал работать.
Станислав Корб, ©2018