Данная статья применима к:
Общая информация
В настоящей статье рассматриваются общие приемы работы с программными (soft) RAID. Рассматривается вариант использования драйвера MD (инструмента командной строки mdadm), и инструментов командной строки LVM.
- RAID (англ. Redundant Array of Independent Disks — избыточный массив независимых (самостоятельных) накопителей данных) — технология объединения нескольких накопителей данных в логический модуль для повышения отказоустойчивости и (или) производительности. Подробнее см. статью RAID.
- LVM (англ. Logical Volume Manager) — менеджер логических томов, подсистема операционной системы, позволяющая использовать разные области одного жесткого диска и/или области с разных жестких дисков как один логический том.
При эксплуатации, особенно при эксплуатации серверных систем, рекомендуется использовать аппаратные реализации RAID. Допустимость использования и применимость программных RAID должна определяться информационной политикой компании. Выбор между RAID MD и RAID LVM зависит от приоритетов удобства администрирования, надежности и эффективности, однако при установке новых ОС следует отдавать предпочтение установке с использованием LVM, обеспечивающим большие возможности дальнейшей настройки, см. также Рекомендации по установке Astra Linux Special Edition x.7 на клиентские компьютеры.
В инструментах LVM поддерживается два варианта RAID:
- ранняя собственная реализация LVM, поддерживающая RAID с чередованием (stripe) и с зеркалированием (mirror);
- реализация с использованием возможностей ядра, поддерживающая все варианты RAID, реализованные в ядре.
Далее в статье рассматривается реализация с использованием возможностей ядра.
В качестве накопителей для RAID могут использоваться как физические устройства (например, накопители на жестких магнитных дисках), так и логические устройства (дисковые разделы). Далее для обозначения таких устройств используется термин накопитель.
Особенности стенда
При подготовке статьи использовалась виртуальная машина, поэтому имена накопителей на дисках имеют вид /dev/vdX, например /dev/vdb. При использовании физической машины имена накопителей могут иметь вид /dev/sdX (имена накопителей также могут зависеть от типа используемых носителей). При использовании дисковых разделов имена будут иметь вид /dev/vdXN (для физических машин — /dev/sdXN), например /dev/vdb1.
В примерах работы с дисковыми разделами предполагается, что используется таблица разделов в формате GPT. Если Astra Linux был установлен с использованием таблицы разделов формата MBR, то таблицу может понадобиться конвертировать в формат GPT.
Установка пакетов
Инструмент командной строки mdadm предоставляется пакетом mdadm. Пакет может быть установлен из основного репозитория Astra Linux с помощью графического менеджера пакетов synaptic или из командной строки командой:
Общие действия
Подготовка новых накопителей
Если накопители, которые предполагается включить в RAID, использовались ранее, то перед дальнейшим их использованием рекомендуется выполнять их очиcтку:
- Удалить информацию о предыдущем использовании диска в RAID:sudo mdadm --zero-superblock --force <имя_накопителя>Если в результате выполнения команды выдается сообщение:то информация об использовании носителя в RAID не обнаружена и можно переходить к следующему шагу.
mdadm: Unrecognised md component device - <имя_накопителя>
- Очистить сигнатуры данных на носителе:sudo wipefs <имя_накопителя>wipefs --all --force /dev/sd{b,c}
ipefs --all --force /dev/sd{b,c}
Обновление конфигурации после внесения изменений
После создания RAID для полного сохранения его параметров следует обновить образ системы:
Если это не сделать, то при следующей загрузке ОС конфигурация RAID будет обнаружена, восстановлена и подключена автоматически, но при этом может измениться имя устройства RAID, что создаст сложности в его использовании.
Зафиксировать имя устройства RAID можно также создав конфигурационный файл, см. ниже.
Создание конфигурационного файла
Настройки программного RAID хранятся в конфигурационном файле /etc/mdadm/mdadm.conf. Пример минимальной конфигурации:
DEVICE partitions ARRAY <имя_устройства_RAID> level=<уровень_RAID> num-devices=<количество_устройств_в_RAID> metadata=1.2 name=<имя_RAID> UUID=<идентификатор_устройства_RAID>
Значение уровень_RAID и количество_устройств задаются в команде создания RAID, остальные значения могут генерироваться автоматически при создании RAID. Состав параметров также зависит от используемой конфигурации RAID, например может быть указано количество резервных накопителей (spares). Актуальную конфигурацию RAID после его создания можно получить командой:
ARRAY /dev/md0 level=raid5 num-devices=5 metadata=1.2 spares=1 name=se1801-18057:0 UUID=20fe193f:40373760:085344c8:b781ca1a
Действия после создания RAID
После создания или изменения конфигурации RAID может потребоваться некоторое время для синхронизации данных. При использовании RAID LVM состояние синхронизации можно проверить командой:
Пример вывода команды (два логических тома lvol_root и lvol1, использующих RAID уровня 1, синхронизированных на 100%):
LV Cpy%Sync Devices lv_root 100,00 lv_root_rimage_0(0),lv_root_rimage_1(0) [lv_root_rimage_0] /dev/vda3(256) [lv_root_rimage_1] /dev/vdb3(1) [lv_root_rmeta_0] /dev/vda3(7165) [lv_root_rmeta_1] /dev/vdb3(0) lv_swap /dev/vda3(0) lvol1 100,00 lvol1_rimage_0(0),lvol1_rimage_1(0) [lvol1_rimage_0] /dev/vdc(1) [lvol1_rimage_1] /dev/vdd(1) [lvol1_rmeta_0] /dev/vdc(0) [lvol1_rmeta_1] /dev/vdd(0)
Проверить состояние RAID не использующего LVM можно следующими командами:
- Команда:sudo mdadm --detail /dev/md127Пример вывода команды (RAID 5 с одним резервным диском в состоянии синхронизации 6%):
- Команда:cat /proc/mdstatПример вывода команды (массив RAID уровня 1 из устройств /dev/vdc и /dev/vdb в состоянии синхронизации 22.9%):
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] md0 : active raid1 vdc[1] vdb[0] 31439872 blocks super 1.2 [2/2] [UU] [====>................] resync = 22.9% (7201664/31439872) finish=1.9min speed=205761K/sec unused devices: <none>
После создания RAID он становится доступен как обычное блочное устройство (накопитель), и к нему можно применять обычные операции работы с накопителями. Получить отчет о составе накопителей и массивов RAID можно командой:
Пример вывода команды:
vda 252:0 0 30G 0 disk ├─vda1 252:1 0 2M 0 part ├─vda2 252:2 0 1G 0 part /boot ├─vda3 252:3 0 28G 0 part │ ├─VG-lv_swap 253:0 0 1G 0 lvm [SWAP] │ └─VG-lv_root 253:1 0 27G 0 lvm / └─vda4 252:4 0 1G 0 part /boot/efi vdb 252:16 0 20G 0 disk └─md0 9:0 0 20G 0 raid1 vdc 252:32 0 20G 0 disk └─md0 9:0 0 20G 0 raid1 vdd 252:48 0 20G 0 disk vde 252:64 0 20G 0 disk vdf 252:80 0 20G 0 disk
В приведенном примере:
- операционная система размещена на накопителе /dev/vda
- накопители /dev/vdb и /dev/vdc входят в RAID /dev/md0, накопители /dev/vdd, /dev/vde, /dev/vdf не используются.
После создания устройства RAID с ним можно работать используя его имя (/dev/md0) так же, как с обычным дисковым разделом. Например:
- Отформатировать:sudo mkfs.ext4 /dev/md0
- Примонтировать:sudo mount /dev/md0 /mnt
- Скопировать в него домашние каталоги пользователей:Для примера используется упрощенный вариант команды. Подробнее см. Архивирование и восстановление файлов с сохранением мандатных атрибутов.sudo cp -R /home/* /mnt
- Отмонтировать:sudo umount /dev/md0
- Внести в файл /etc/fstab запись для автоматического монтирования, например:Подробнее см. man fstab.
/dev/md0 /home ext4 defaults 0 2
Простое создание RAID
Постановка задачи
После установки операционной системы к компьютеру подключены два (или более) новых накопителя. Требуется объединить эти накопители в массив RAID и перенести на них файловые ресурсы. В качестве примера файлового ресурса используется каталог /home, содержащий домашние каталоги пользователей. Далее предполагается, что добавлены накопители /dev/vdc и /dev/vdd.
Решение c использованием LVM
- Создать на добавленных накопителях физические тома, например, :sudo pvcreate /dev/vd{b,c,d,e,f}
- Включить добавленные накопители в группу логических томов. Для примера используется создаваемая по умолчанию группа VG:sudo vgextend VG /dev/vd{b,c,d,e,f}
- Создать на добавленных носителях логический том. Создать том можно сразу с указанием требуемого уровня RAID. Размещение компонентов RAID на накопителях при этом будет выполняться автоматически. Например:
- Создать RAID уровня 0 с общим объемом 500МБ на трех накопителях. Это линейный RAID. Количество накопителей для таких RAID задается опцией -i, с помощью которой указывается количество накопителей с данными:sudo lvcreate --type raid0 -L 500M -i 3 -n my_lv0 VGПри этом на каждом логическом томе будет выделена 1/3 (168МБ) общего выделенного объема (с учетом округления выделено 504МБ):lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
...
vdb 252:16 0 30G 0 disk
└─VG-my_lv0_rimage_0 253:2 0 168M 0 lvm
└─VG-my_lv0 253:5 0 504M 0 lvm
vdc 252:32 0 30G 0 disk
└─VG-my_lv0_rimage_1 253:3 0 168M 0 lvm
└─VG-my_lv0 253:5 0 504M 0 lvm
vdd 252:48 0 30G 0 disk
└─VG-my_lv0_rimage_2 253:4 0 168M 0 lvm
└─VG-my_lv0 253:5 0 504M 0 lvmДля создания RAID, занимающего весь свободный объем, можно использовать опцию -l 100%FREE:sudo lvcreate --type raid0 -l 100%FREE -i 3 -n my_lv0 VG - Создать RAID уровня 1 на четырех накопителях. Это RAID с зеркалированием, и для таких RAID указывается количество зеркал, т. е. количество на единицу меньшее количества накопителей входящих в RAID. Для этого используется используется опция -m:sudo lvcreate --type raid1 -L 500M -m 3 -n my_lv1 VGВ данном примере задано использование трех зеркал, то есть всего используется четыре накопителя, на каждом из которых выделяется полный объем RAID:lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
...
vdb 252:16 0 30G 0 disk
├─VG-my_lv1_rmeta_0 253:2 0 4M 0 lvm
│ └─VG-my_lv1 253:10 0 500M 0 lvm
└─VG-my_lv1_rimage_0 253:3 0 500M 0 lvm
└─VG-my_lv1 253:10 0 500M 0 lvm
vdc 252:32 0 30G 0 disk
├─VG-my_lv1_rmeta_1 253:4 0 4M 0 lvm
│ └─VG-my_lv1 253:10 0 500M 0 lvm
└─VG-my_lv1_rimage_1 253:5 0 500M 0 lvm
└─VG-my_lv1 253:10 0 500M 0 lvm
vdd 252:48 0 30G 0 disk
├─VG-my_lv1_rmeta_2 253:6 0 4M 0 lvm
│ └─VG-my_lv1 253:10 0 500M 0 lvm
└─VG-my_lv1_rimage_2 253:7 0 500M 0 lvm
└─VG-my_lv1 253:10 0 500M 0 lvm
vde 252:64 0 30G 0 disk
├─VG-my_lv1_rmeta_3 253:8 0 4M 0 lvm
│ └─VG-my_lv1 253:10 0 500M 0 lvm
└─VG-my_lv1_rimage_3 253:9 0 500M 0 lvm
└─VG-my_lv1 253:10 0 500M 0 lvm - Создать RAID уровня 5 на четырех накопителях. Это RAID с чередованием и контрольной суммой. Для создания таких RAID с помощью опции -i указывается количество накопителей с данными. Объем еще одного накопителя требуется для размещения контрольных сумм:sudo lvcreate --type raid5 -L 500M -i 3 -n my_lv1 VGСтруктура RAID:lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
...
vdb 252:16 0 30G 0 disk
├─VG-my_lv1_rmeta_0 253:2 0 4M 0 lvm
│ └─VG-my_lv1 253:10 0 504M 0 lvm
└─VG-my_lv1_rimage_0 253:3 0 168M 0 lvm
└─VG-my_lv1 253:10 0 504M 0 lvm
vdc 252:32 0 30G 0 disk
├─VG-my_lv1_rmeta_1 253:4 0 4M 0 lvm
│ └─VG-my_lv1 253:10 0 504M 0 lvm
└─VG-my_lv1_rimage_1 253:5 0 168M 0 lvm
└─VG-my_lv1 253:10 0 504M 0 lvm
vdd 252:48 0 30G 0 disk
├─VG-my_lv1_rmeta_2 253:6 0 4M 0 lvm
│ └─VG-my_lv1 253:10 0 504M 0 lvm
└─VG-my_lv1_rimage_2 253:7 0 168M 0 lvm
└─VG-my_lv1 253:10 0 504M 0 lvm
vde 252:64 0 30G 0 disk
├─VG-my_lv1_rmeta_3 253:8 0 4M 0 lvm
│ └─VG-my_lv1 253:10 0 504M 0 lvm
└─VG-my_lv1_rimage_3 253:9 0 168M 0 lvm
└─VG-my_lv1 253:10 0 504M 0 lvm
- Создать RAID уровня 0 с общим объемом 500МБ на трех накопителях. Это линейный RAID. Количество накопителей для таких RAID задается опцией -i, с помощью которой указывается количество накопителей с данными:
Далее с созданным дисковым разделом RAID можно работать как с обычным дисковым разделом.
Решение без использования LVM
При наличии свободных дисков массив RAID из свободных носителей создается одной командой с указанием имени и уровня RAID, количества накопителей и их имен. Общий формат команды:
Пример создания RAID 1:
Для подтверждения создания RAID требуется ввести символ y.
Пример вывода команды:
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 Continue creating array? y mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started.
Аналогичным образом создаются RAID других уровней.mkfs.ext4 /dev/md0mkfs.ext4 /dev/md0
Добавление и удаление накопителей в RAID
Постановка задачи
- Настроено использование RAID.
- Добавлен новый накопитель.
- Требуется:
- добавить новый накопитель в состав ранее настроенного RAID
- удалить накопитель из состава ранее настроенного RAID
Решение при использовании LVM
При использовании LVM накопитель следует включить в группу томов LVM. Дальнейшие действия
Решение без использования LVM
Накопители в состав RAID могут быть добавлены как основные (используемые для хранения данных) и как резервные (spare). Резервные накопители используютcя при выходе из строя одного из основных накопителей. Максимальное количество основных накопителей в составе RAID задается при его создании, и может быть изменено позднее. Если в составе RAID накопителей меньше, чем максимальное количество, то накопители, добавляемые как резервные, будут сразу задействованы как недостающие основные накопители (при этом сразу начнется синхронизация данных). Если в составе RAID имеется полный комплект основных накопителей, то накопители будут добавляться как резервные независимо от способа добавления.
Для удаления используемого носителя этот носитель сначала должен быть помечен как неисправный (failed).
- Добавление основного накопителя:sudo mdadm /dev/md0 --manage --add /dev/vde
- Добавление резервного накопителя:sudo mdadm /dev/md0 --manage --add-spare /dev/vde
- Удаление накопителя:
- Пометить носитель как сбойный:sudo mdadm /dev/md0 --manage --fail /dev/vde
- Удалить накопитель:sudo mdadm /dev/md0 --manage --remove /dev/vde
- Пометить носитель как сбойный: