В настоящей статье рассматриваются общие приемы работы с программными (soft) RAID. Рассматривается вариант использования драйвера MD (инструмента командной строки mdadm), и инструментов командной строки LVM.
При эксплуатации, особенно при эксплуатации серверных систем, рекомендуется использовать аппаратные реализации RAID. Допустимость использования и применимость программных RAID должна определяться информационной политикой компании. Выбор между RAID MD и RAID LVM зависит от приоритетов удобства администрирования, надежности и эффективности, однако при установке новых ОС следует отдавать предпочтение установке с использованием LVM, обеспечивающим большие возможности дальнейшей настройки, см. также Рекомендации по установке Astra Linux Special Edition x.7 на клиентские компьютеры.
В инструментах LVM поддерживается два варианта RAID:
Далее в статье рассматривается реализация с использованием возможностей ядра.
В качестве накопителей для RAID могут использоваться как физические устройства (например, накопители на жестких магнитных дисках), так и логические устройства (дисковые разделы). Далее для обозначения таких устройств используется термин накопитель.
При подготовке статьи использовалась виртуальная машина, поэтому имена накопителей на дисках имеют вид /dev/vdX, например /dev/vdb. При использовании физической машины имена накопителей могут иметь вид /dev/sdX (имена накопителей также могут зависеть от типа используемых носителей). При использовании дисковых разделов имена будут иметь вид /dev/vdXN (для физических машин — /dev/sdXN), например /dev/vdb1.
В примерах работы с дисковыми разделами предполагается, что используется таблица разделов в формате GPT. Если Astra Linux был установлен с использованием таблицы разделов формата MBR, то таблицу может понадобиться конвертировать в формат GPT.
Инструмент командной строки mdadm предоставляется пакетом mdadm. Пакет может быть установлен из основного репозитория Astra Linux с помощью графического менеджера пакетов synaptic или из командной строки командой:
| sudo apt install mdadm |
Если накопители, которые предполагается включить в RAID, использовались ранее, то перед дальнейшим их использованием рекомендуется выполнять их очиcтку:
| sudo mdadm --zero-superblock --force <имя_накопителя> |
mdadm: Unrecognised md component device - <имя_накопителя> |
| sudo wipefs <имя_накопителя> |
После создания RAID для полного сохранения его параметров следует обновить образ системы:
| sudo update-initramfs -uk all |
Если это не сделать, то при следующей загрузке ОС конфигурация 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 после его создания можно получить командой:
| sudo mdadm --detail --scan --verbose | grep ^ARRAY |
ARRAY /dev/md0 level=raid5 num-devices=5 metadata=1.2 spares=1 name=se1801-18057:0 UUID=20fe193f:40373760:085344c8:b781ca1a |
После создания или изменения конфигурации RAID может потребоваться некоторое время для синхронизации данных. При использовании RAID LVM состояние синхронизации можно проверить командой:
| sudo lvs -a -o name,copy_percent,devices |
Пример вывода команды (два логических тома 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 создается два служебный тома: _rmeta_ — метаданные RAID, _rimage_ – данные RAID. |
Проверить состояние RAID не использующего LVM можно следующими командами:
| sudo mdadm --detail /dev/md127 |
sudo mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Thu Jan 9 10:35:56 2025
Raid Level : raid5
Array Size : 125759488 (119.93 GiB 128.78 GB)
Used Dev Size : 31439872 (29.98 GiB 32.19 GB)
Raid Devices : 5
Total Devices : 5
Persistence : Superblock is persistent
Update Time : Thu Jan 9 10:36:10 2025
State : clean, degraded, recovering
Active Devices : 4
Working Devices : 5
Failed Devices : 0
Spare Devices : 1
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : resync
Rebuild Status : 6% complete
Name : se1801-18057:0 (local to host se1801-18057)
UUID : e2f96455:b85dd5cf:2f58836e:77ebb77d
Events : 2
Number Major Minor RaidDevice State
0 252 16 0 active sync /dev/vdb
1 252 32 1 active sync /dev/vdc
2 252 48 2 active sync /dev/vdd
3 252 64 3 active sync /dev/vde
5 252 80 4 spare rebuilding /dev/vdf
|
| cat /proc/mdstat |
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 можно командой:
| lsblk |
Пример вывода команды:
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 |
В приведенном примере:
После создания устройства RAID с ним можно работать используя его имя (/dev/md0) так же, как с обычным дисковым разделом. Например:
| sudo mkfs.ext4 /dev/md0 |
| sudo mount /dev/md0 /mnt |
| Для примера используется упрощенный вариант команды. Подробнее см. Архивирование и восстановление файлов с сохранением мандатных атрибутов. |
| sudo cp -R /home/* /mnt |
| sudo umount /dev/md0 |
/dev/md0 /home ext4 defaults 0 2 |
После установки операционной системы к компьютеру подключены два (или более) новых накопителя. Требуется объединить эти накопители в массив RAID и перенести на них файловые ресурсы. В качестве примера файлового ресурса используется каталог /home, содержащий домашние каталоги пользователей. Далее предполагается, что добавлены накопители /dev/vdc и /dev/vdd.
sudo pvcreate /dev/vd{b,c,d,e,f} |
sudo vgextend VG /dev/vd{b,c,d,e,f} |
sudo lvcreate --type raid0 -L 500M -i 3 -n my_lv0 VG |
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS |
Для создания RAID, занимающего весь свободный объем, можно использовать опцию -l 100%FREE:
|
sudo lvcreate --type raid1 -L 500M -m 3 -n my_lv1 VG |
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS |
sudo lvcreate --type raid5 -L 500M -i 3 -n my_lv1 VG |
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS |
Далее с созданным дисковым разделом RAID можно работать как с обычным дисковым разделом.
При наличии свободных дисков массив RAID из свободных носителей создается одной командой с указанием имени и уровня RAID, количества накопителей и их имен. Общий формат команды:
sudo mdadm --create <имя_устройства_RAID> -l <уровень_RAID> -n <количество_накопителей> <имя_накопителя>... |
Пример создания RAID 1:
| sudo mdadm --create /dev/md0 -l 1 -n 2 /dev/vdb /dev/vdc |
Для подтверждения создания 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
При использовании 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 |