Работа с mdadm в Linux для организации RAID
mdadm — утилита для работы с программными RAID-массивами различных уровней. В данной инструкции рассмотрим примеры ее использования.
Установка mdadm
Утилита mdadm может быть установлена одной командой.
Если используем CentOS / Red Hat:
Если используем Ubuntu / Debian:
apt-get install mdadm
Сборка RAID
Перед сборкой, стоит подготовить наши носители. Затем можно приступать к созданию рейд-массива.
Подготовка носителей
Сначала необходимо занулить суперблоки на дисках, которые мы будем использовать для построения RAID (если диски ранее использовались, их суперблоки могут содержать служебную информацию о других RAID):
mdadm —zero-superblock —force /dev/sd
* в данном примере мы зануляем суперблоки для дисков sdb и sdc.
Если мы получили ответ:
mdadm: Unrecognised md component device — /dev/sdb
mdadm: Unrecognised md component device — /dev/sdc
. то значит, что диски не использовались ранее для RAID. Просто продолжаем настройку.
Далее нужно удалить старые метаданные и подпись на дисках:
wipefs —all —force /dev/sd
Создание рейда
Для сборки избыточного массива применяем следующую команду:
mdadm —create —verbose /dev/md0 -l 1 -n 2 /dev/sd
- /dev/md0 — устройство RAID, которое появится после сборки;
- -l 1 — уровень RAID;
- -n 2 — количество дисков, из которых собирается массив;
- /dev/sd — сборка выполняется из дисков sdb и sdc.
Мы должны увидеть что-то на подобие:
mdadm: Note: this array has metadata at the start and
may not be suitable as a boot device. If you plan to
store ‘/boot’ on this device please ensure that
your boot-loader understands md/v1.x metadata, or use
—metadata=0.90
mdadm: size set to 1046528K
Также система задаст контрольный вопрос, хотим ли мы продолжить и создать RAID — нужно ответить y:
Continue creating array? y
Мы увидим что-то на подобие:
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
. и находим информацию о том, что у наших дисков sdb и sdc появился раздел md0, например:
.
sdb 8:16 0 2G 0 disk
??md0 9:0 0 2G 0 raid1
sdc 8:32 0 2G 0 disk
??md0 9:0 0 2G 0 raid1
.
* в примере мы видим собранный raid1 из дисков sdb и sdc.
Создание файла mdadm.conf
В файле mdadm.conf находится информация о RAID-массивах и компонентах, которые в них входят. Для его создания выполняем следующие команды:
echo «DEVICE partitions» > /etc/mdadm/mdadm.conf
mdadm —detail —scan —verbose | awk ‘/ARRAY/
DEVICE partitions
ARRAY /dev/md0 level=raid1 num-devices=2 metadata=1.2 name=proxy.dmosk.local:0 UUID=411f9848:0fae25f9:85736344:ff18e41d
* в данном примере хранится информация о массиве /dev/md0 — его уровень 1, он собирается из 2-х дисков.
Создание файловой системы и монтирование массива
Создание файловой системы для массива выполняется также, как для раздела:
* данной командой мы создаем на md0 файловую систему ext4.
Примонтировать раздел можно командой:
* в данном случае мы примонтировали наш массив в каталог /mnt.
Чтобы данный раздел также монтировался при загрузке системы, добавляем в fstab следующее:
/dev/md0 /mnt ext4 defaults 1 2
Для проверки правильности fstab, вводим:
Мы должны увидеть примонтированный раздел md, например:
/dev/md0 990M 2,6M 921M 1% /mnt
Информация о RAID
Посмотреть состояние всех RAID можно командой:
В ответ мы получим что-то на подобие:
md0 : active raid1 sdc[1] sdb[0]
1046528 blocks super 1.2 [2/2] [UU]
* где md0 — имя RAID устройства; raid1 sdc[1] sdb[0] — уровень избыточности и из каких дисков собран; 1046528 blocks — размер массива; [2/2] [UU] — количество юнитов, которые на данный момент используются.
** мы можем увидеть строку md0 : active(auto-read-only) — это означает, что после монтирования массива, он не использовался для записи.
Подробную информацию о конкретном массиве можно посмотреть командой:
* где /dev/md0 — имя RAID устройства.
Version : 1.2
Creation Time : Wed Mar 6 09:41:06 2019
Raid Level : raid1
Array Size : 1046528 (1022.00 MiB 1071.64 MB)
Used Dev Size : 1046528 (1022.00 MiB 1071.64 MB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Wed Mar 6 09:41:26 2019
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Consistency Policy : resync
Name : proxy.dmosk.local:0 (local to host proxy.dmosk.local)
UUID : 304ad447:a04cda4a:90457d04:d9a4e884
Events : 17
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
- Version — версия метаданных.
- Creation Time — дата в время создания массива.
- Raid Level — уровень RAID.
- Array Size — объем дискового пространства для RAID.
- Used Dev Size — используемый объем для устройств. Для каждого уровня будет индивидуальный расчет: RAID1 — равен половине общего размера дисков, RAID5 — равен размеру, используемому для контроля четности.
- Raid Devices — количество используемых устройств для RAID.
- Total Devices — количество добавленных в RAID устройств.
- Update Time — дата и время последнего изменения массива.
- State — текущее состояние. clean — все в порядке.
- Active Devices — количество работающих в массиве устройств.
- Working Devices — количество добавленных в массив устройств в рабочем состоянии.
- Failed Devices — количество сбойных устройств.
- Spare Devices — количество запасных устройств.
- Consistency Policy — политика согласованности активного массива (при неожиданном сбое). По умолчанию используется resync — полная ресинхронизация после восстановления. Также могут быть bitmap, journal, ppl.
- Name — имя компьютера.
- UUID — идентификатор для массива.
- Events — количество событий обновления.
- Chunk Size (для RAID5) — размер блока в килобайтах, который пишется на разные диски.
Подробнее про каждый параметр можно прочитать в мануале для mdadm:
Также, информацию о разделах и дисковом пространстве массива можно посмотреть командой fdisk:
Создание программного RAID-массива на Linux-платформе
Важность надёжного хранения данных очевидна для пользователя любого уровня. Тем более сейчас, когда объёмы хранимых данных растут с угрожающей скоростью, вне зависимости от того, являются ли эти данные персональными (коллекции фотографий и видеозаписей) или корпоративными (финансовая и проектная документация, результаты научных исследований и т.п.). Одно из средств, помогающих в той или иной степени решить проблему надёжности хранения данных, основано на организации дискового RAID-массива.
Концепция 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 с псевдографическим интерфейсом, которую можно запустить из консоли следующей командой:
После запуска следует создать раздел свопинга (например, размером 1ГБ), а оставшееся пространство (19 ГБ) отдать корневому разделу. При этом важно установить для обоих разделов тип Linux RAID (шестнадцатеричный код fd). После этого нужно обязательно записать сделанные изменения и выйти из cfdisk.
Теперь необходимо выполнить точно такую же разбивку разделов на двух других дисках. Эта операция без затруднений выполняется с помощью другой полезной утилиты, позволяющей управлять дисковыми разделами:
Ключ -d используется для создания дампа всех разделов указанного устройства в формате, который может служить входным для той же команды sfdisk, что позволяет создавать дубликаты разделов с сохранением всех свойств и атрибутов.
В результате будут получены три диска с одинаковыми разделами и установленным типом Linux RAID. Теперь можно приступать непосредственно к созданию RAID-массива.
Создание дисков RAID-массива
Для создания RAID-массива потребуется утилита mdadm из одноимённого пакета. Сама операция создания выполняется с помощью команд, приведенных в листинге 1.
Листинг 1. Создание дисков RAID-массива
Первый ключ команды обязательно должен определять основной режим функционирования 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-подсистемы. Перед установкой следует позаботиться о том, чтобы раздел, выделенный для свопинга, корректно распознавался программой установки. Для этого используется следующая команда:
Установка 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):
Управление RAID-массивом
Преимущества избыточности при хранении данных в RAID-массиве можно оценить, если отключить один из дисков в конфигурации виртуальной машины, тем самым имитируя его отказ. После перезагрузки системы на RAID-массиве в виртуальной машине следует выполнить операцию копирования достаточно большого объёма данных. После этого в хост-системе можно будет увидеть, что размеры двух работающих дисков увеличились (в соответствии с объёмом скопированных данных), а размер третьего, отключённого диска остался неизменным.
Если третий диск снова подключить и ещё раз перезагрузить систему в виртуальной машине, то вновь подключённый диск будет обнаружен, но синхронизация с первыми двумя RAID-дисками не будет выполнена. Дело в том, что эта операция должна выполняться вручную. Для продолжения «эксперимента» теперь следует полностью удалить третий диск из виртуальной машины и создать точно такой же новый, чтобы имитировать замену испорченного физического жёсткого диска на исправный.
Текущее состояние RAID-массива проверяется по содержимому вышеупомянутого файла /proc/mdstat. После удаления третьего диска содержимое этого файла будет выглядеть приблизительно так, как на рисунке 1.
Рисунок 1. Фрагмент файла /proc/mdstat — один из дисков отсутствует
Из показанного фрагмента понятно, что в настоящий момент функционируют только два RAID-диска из трёх, а о том, какое именно устройство-компонент отсутствует, сообщает параметр [UU_] — первые два устройства задействованы, на месте последнего — символ подчёркивания.
Если предположить, что третий диск в конфигурации виртуальной машины вновь создан, то необходимо скопировать разделы со всеми их характеристиками с одного из работающих RAID-дисков с помощью уже описанной выше команды:
После этого подготовленный «новый» диск добавляется в существующий RAID-массив:
Теперь система продолжает функционировать в нормальном режиме — все три RAID-устройства-компонента подключены и работают. В этом можно убедиться, снова просмотрев содержимое файла /proc/mdstat.
Дополнительные замечания
Имитировать отказ одного из RAID-дисков можно и с помощью специальных ключей команды mdadm, как показано ниже:
После того, как диск объявлен «неработающим», его можно удалить из RAID-массива:
Сразу после логического удаления устройства-компонента его можно заменить физически. Ещё раз следует отметить, что «аппаратные» жёсткие диски настоятельно рекомендуется заменять только идентичными устройствами, а компоненты в виде логических разделов непременно должны быть заменены разделами точно такого же размера.
Когда замена устройства-компонента проведена, можно добавить обновлённый компонент в RAID-массив с помощью упоминавшейся выше команды:
Заключение
Программная реализация RAID-массива в системе Linux позволяет пользователю без особых затруднений создавать дисковые массивы нескольких уровней с применением как физических дисков, так и логических разделов. Предоставляемых этой подсистемой возможностей вполне достаточно, чтобы организовать хранение данных, ориентированное и на надёжность, и на производительность.
Ресурсы для скачивания
Комментарии
Войдите или зарегистрируйтесь для того чтобы оставлять комментарии или подписаться на них.