Установка Linux на RAID-массив.


Установка Linux на RAID-массив.

Первоисточник IBM.com

Концепция RAID

RAID (англ. Redundant Array of Independent Disks - избыточный массив независимых дисков)
(хотя более точной, возможно, будет "вольная интерпретация": массив независимых дисков с
избыточным ресурсом) - это аппаратная или программная подсистема, в которой хранимые
данные распределяются (часто с дублированием) по нескольким жёстким дискам
(физическим или виртуальным). Наиболее эффективной, как с точки зрения надёжности, так
и с точки зрения производительности, является аппаратная RAID-подсистема. Тем не менее,
программная реализация также может принести немалую пользу, и в Linux есть все
необходимые компоненты для организации программного RAID-массива.
Более подробно об основных принципах организации RAID-систем можно узнать на
соответствующей странице Wikipedia и на русскоязычной странице Wikipedia.

Различные типы RAID-массивов

Выше было отмечено, что помимо своей главной функции - обеспечение надёжности
хранения данных - RAID может способствовать повышению производительности, разделяя
данные на несколько потоков для одновременной записи на несколько дисков. Реализация
RAID-подсистемы в Linux несколько отличается от общепринятой, но логическое деление на
несколько уровней сохранено.
На уровне RAID 0 два или более диска используются только для повышения
производительности, поскольку разделяют между собой данные при чтении/записи. Здесь
"избыточность" фактически отсутствует.
Массив RAID 1 является первым уровнем, обеспечивающим избыточность. Этот режим
часто называют "зеркалированием" (mirroring), поскольку данные дублируются на всех
дисках массива. Степень надёжности возрастает, но производительность операции записи
снижается, так как запись одних и тех же данных выполняется несколько раз. Для
организации RAID 1 требуется не менее двух дисков.
Особенностью массива RAID 4 является отдельный диск для записи информации о контроле
чётности данных. Таким образом, узким местом этой подсистемы становятся периоды
ожидания при записи именно на этот диск. По этой причине рекомендуется пользоваться
RAID 5 во всех случаях, кроме тех, в которых применение RAID 4 крайне необходимо и
обосновано.
В массиве RAID 5 при записи разделяются и данные, и информация о контроле чётности.
Поэтому RAID 5 считался наиболее эффективным и экономичным уровнем до появления
новых разработок в этой области: RAID 5EE, RAID 6, RAID 10 и комбинированных уровней
RAID 1+0, RAID 5+0, RAID 1+5. Для организации массива RAID 5 требуется не менее трёх
дисков.
О дальнейшем развитии концепции RAID-массивов можно узнать на указанных выше
страницах Wikipedia. Особый интерес представляет сравнение "RAID 10 versus RAID 5 in
Relational Databases" на англоязычной странице.
Поддержка программной реализации RAID появилась в ядре Linux, начиная с версии 2.0,
хотя для практического использования первая версия вряд ли годилась: возможности её были
весьма ограничены, и содержала она изрядное количество ошибок. Начиная с ядер версии 2.4
ситуация улучшилась, и современные реализации RAID в Linux вполне пригодны для
практического применения.

Создание и конфигурирование RAID-массива

Первые эксперименты с созданием RAID-массивов рекомендуется проводить в среде
виртуальной машины, например, VirtualBox. Это более безопасно, к тому же не у каждого
пользователя найдётся компьютер с двумя-тремя физическими дисками.
Для подробного рассмотрения выбрана организация RAID-массива уровня 1, поскольку это
самый простой с архитектурной точки зрения и обладающий наибольшей избыточностью (с
точки зрения надёжности) массив.
При создании RAID-массива на нескольких физических дисках, следует обратить особое
внимание на то, чтобы диски имели одинаковый размер, а в идеальном варианте лучше всего
использовать диски одной модели.
Итак, для начала в VirtualBox необходимо создать собственно виртуальную машину для
Linux (с ядром версий 2.6), выбрать для неё подходящий размер памяти и создать три
жёстких диска с одинаковым объёмом (по 20 Гб для каждого диска будет вполне достаточно).
После загрузки Linux-системы (можно использовать любой live-DVD или его ISO-образ) для
работы потребуется эмулятор терминала (текстовой консоли).
Для разметки разделов на диске можно воспользоваться утилитой fdisk, но более удобной
является её "наследница" cfdisk с псевдографическим интерфейсом, которую можно
запустить из консоли следующей командой:

Cfdisk /dev/sda

После запуска следует создать раздел свопинга (например, размером 1ГБ), а оставшееся
пространство (19 ГБ) отдать корневому разделу. При этом важно установить для обоих
разделов тип Linux RAID (шестнадцатеричный код fd). После этого нужно обязательно
записать сделанные изменения и выйти из cfdisk.
Теперь необходимо выполнить точно такую же разбивку разделов на двух других дисках. Эта
операция без затруднений выполняется с помощью другой полезной утилиты, позволяющей
управлять дисковыми разделами:

Sfdisk -d /dev/sda | sfdisk /dev/sdb
sfdisk -d /dev/sda | sfdisk /dev/sdc

Ключ -d используется для создания дампа всех разделов указанного устройства в формате,
который может служить входным для той же команды sfdisk, что позволяет создавать
дубликаты разделов с сохранением всех свойств и атрибутов.
В результате будут получены три диска с одинаковыми разделами и установленным типом
Linux RAID. Теперь можно приступать непосредственно к созданию RAID-массива.

Создание дисков RAID-массива

Для создания RAID-массива потребуется утилита mdadm из одноимённого пакета. Сама
операция создания выполняется с помощью команд, приведенных в листинге 1.

Листинг 1. Создание дисков RAID-массива

Mdadm --create /dev/md0 --metadata=0.90 --level=1 --raid-devices=3 /dev/sda1 /dev/sdb1 /dev/sdc1
mdadm --create /dev/md1 --metadata=0.90 --level=1 --raid-devices=3 /dev/sda2 /dev/sdb2 /dev/sdc2

Первый ключ команды обязательно должен определять основной режим функционирования
mdadm. В данном случае используется ключ --create (краткая форма -C) - режим создания.
После этого ключа указывается имя создаваемого RAID-устройства.
Ключ --metadata (краткая форма -e) определяет используемый для данного диска формат
метаданных (суперблока). Значение 0.90 (а также его аналоги 0 и default) при создании
RAID-массива используется по умолчанию, поэтому в приведённом примере его можно было
бы и не включать в команду. Формат 0.90 допускает использование в RAID-массиве до 28
устройств-компонентов, а также определяет максимальный размер этих устройств (не более 2
ТБ).
Ключ --level=1 определяет уровень RAID-массива. Ключ --raid-devices=3 определяет
количество устройств-компонентов в создаваемом RAID-массиве. Завершает командную
строку список устройств, из которых будет сформирован RAID-массив.

Запуск в эксплуатацию

Дисковый массив успешно создан, но пока ещё пуст. Потребуется установить Linux-систему,
чтобы проверить работу созданной RAID-подсистемы. Перед установкой следует
позаботиться о том, чтобы раздел, выделенный для свопинга, корректно распознавался
программой установки. Для этого используется следующая команда:

Mkswap /dev/md0 setup

Установка Linux-системы выполняется в "штатном" режиме за исключением одной
особенности: при выборе разделов вместо привычных /dev/sda1 и /dev/sda2 пользователю
предлагаются /dev/md0 и /dev/md1 соответственно. Загрузчик, разумеется, должен быть
установлен в MBR.
После завершения установки необходимо внести изменения в файл конфигурации загрузчика
для того, чтобы система успешно загрузилась с RAID-устройства.
Если в установленной Linux-системе используется загрузчик grub, то в файл
/boot/grub/grub.conf необходимо внести следующие изменения:

• в строке splashimage=... имя раздела (hd0,1) заменяется на имя (md0,1)
• в строке root (hd0,1) аналогичным образом выполняется замена на (md0,1)

Если система загружается с помощью lilo (этот загрузчик всё ещё используется в некоторых
дистрибутивах), то потребуется отредактировать файл /etc/lilo.conf:

• добавить в начальной (общей) секции строку: raid-extra-boot = mbr-only
• заменить строку boot = /dev/sda на строку boot = /dev/md0

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

Учёт и контроль

Текущее состояние RAID-подсистемы в структуре ядра отражает файл /proc/mdstat. Следует
отметить, что для его просмотра требуются полномочия суперпользователя. Информация из
этого файла особенно важна в тех случаях, когда в RAID-массив добавляется новый диск
(или заменяется испорченный диск) или одно из устройств-компонентов удаляется из RAID-
массива.
Команда mdadm сама по себе выполняет активизацию RAID-массива и в принципе не
требует наличия файла конфигурации, но будет обращаться к нему, если в явной форме
указано его имя ("стандартное" имя - /etc/mdadm.conf). Использование файла конфигурации
рекомендуется по двум причинам:

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

Команда mdadm --detail --scan позволяет получить значения текущих параметров настройки
RAID-массива. Но для извлечения более подробной информации следует воспользоваться
следующей комбинацией команд (опять же, потребуются права root):

Echo 'DEVICE /dev/sd*[0-9]' > /etc/mdadm.conf
mdadm --detail --scan >> /etc/mdadm.conf

Управление RAID-массивом

Преимущества избыточности при хранении данных в RAID-массиве можно оценить, если
отключить один из дисков в конфигурации виртуальной машины, тем самым имитируя его
отказ. После перезагрузки системы на RAID-массиве в виртуальной машине следует
выполнить операцию копирования достаточно большого объёма данных. После этого в хост-
системе можно будет увидеть, что размеры двух работающих дисков увеличились (в
соответствии с объёмом скопированных данных), а размер третьего, отключённого диска
остался неизменным.
Если третий диск снова подключить и ещё раз перезагрузить систему в виртуальной машине,
то вновь подключённый диск будет обнаружен, но синхронизация с первыми двумя RAID-
дисками не будет выполнена. Дело в том, что эта операция должна выполняться вручную.
Для продолжения "эксперимента" теперь следует полностью удалить третий диск из
виртуальной машины и создать точно такой же новый, чтобы имитировать замену
испорченного физического жёсткого диска на исправный.
Текущее состояние RAID-массива проверяется по содержимому вышеупомянутого файла
/proc/mdstat. После удаления третьего диска содержимое этого файла будет выглядеть
приблизительно так, как на рисунке 1.

Рисунок 1. Фрагмент файла /proc/mdstat - один из дисков отсутствует

Вывод программы /proc/mdstat

Из показанного фрагмента понятно, что в настоящий момент функционируют только два
RAID-диска из трёх, а о том, какое именно устройство-компонент отсутствует, сообщает
параметр [UU_] - первые два устройства задействованы, на месте последнего - символ
подчёркивания.
Если предположить, что третий диск в конфигурации виртуальной машины вновь создан, то
необходимо скопировать разделы со всеми их характеристиками с одного из работающих
RAID-дисков с помощью уже описанной выше команды:

Sfdisk -d /dev/sda | sfdisk /dev/sdc

После этого подготовленный "новый" диск добавляется в существующий RAID-массив:

Mdadm /dev/md0 -a /dev/sdc1
mdadm /dev/md1 -a /dev/sdc2

Теперь система продолжает функционировать в нормальном режиме - все три RAID-
устройства-компонента подключены и работают. В этом можно убедиться, снова просмотрев
содержимое файла /proc/mdstat.

Дополнительные замечания

Имитировать отказ одного из RAID-дисков можно и с помощью специальных ключей
команды mdadm, как показано ниже:

Mdadm /dev/md0 --set-faulty /dev/sdc1
или
mdadm /dev/md0 --fail /dev/sdc1

После того, как диск объявлен "неработающим", его можно удалить из RAID-массива:

Mdadm /dev/md0 --remove /dev/sdc1

Сразу после логического удаления устройства-компонента его можно заменить физически.
Ещё раз следует отметить, что "аппаратные" жёсткие диски настоятельно рекомендуется
заменять только идентичными устройствами, а компоненты в виде логических разделов
непременно должны быть заменены разделами точно такого же размера.
Когда замена устройства-компонента проведена, можно добавить обновлённый компонент в
RAID-массив с помощью упоминавшейся выше команды:

Mdadm /dev/md0 --add /dev/sdc1

Заключение

Программная реализация RAID-массива в системе Linux позволяет пользователю без особых
затруднений создавать дисковые массивы нескольких уровней с применением как
физических дисков, так и логических разделов. Предоставляемых этой подсистемой
возможностей вполне достаточно, чтобы организовать хранение данных, ориентированное и
на надёжность, и на производительность.