|
В настоящей статье рассматриваются общие приемы работы с программными (soft) RAID с использованием драйвера MD (инструмента командной строки mdadm) и с использованием инструментов командной строки LVM.
Некоторые термины:
При эксплуатации, особенно при эксплуатации серверных систем, рекомендуется использовать аппаратные реализации RAID. Допустимость использования и применимость программных RAID должна определяться информационной политикой компании. Выбор между реализации RAID MD и RAID LVM зависит от приоритетов удобства администрирования, надежности и эффективности, однако при установке новых ОС следует отдавать предпочтение установке с использованием LVM, что обеспечивает большие возможности дальнейшей настройки (см. также Рекомендации по установке Astra Linux Special Edition x.7 на клиентские компьютеры). Возможно также одновременное использование технологий LVM и MD, например развертывание структуры LVM на RAID, созданном с использованием MD. Пример такого развертывания приведен в главе про перенос ОС с линейного носителя на RAID.
В инструментах LVM поддерживается два варианта RAID:
Далее в статье рассматривается реализация LVM с использованием драйвера MD.
В качестве накопителей для RAID могут использоваться как физические устройства (например, накопители на жестких магнитных дисках), так и логические устройства (дисковые разделы). Далее для обозначения таких устройств используется термин накопитель.
Для упрощения изложения в статье используются диски одинакового размера. На практике диски могут быть разного размера, при этом LVM автоматически использует минимально необходимые объемы дискового пространства, при использовании MD расход дискового пространства следует контролировать вручную.
При подготовке статьи использовалась виртуальная машина, поэтому имена накопителей на дисках имеют вид /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 |
LVM предоставляется пакетом lvm2:
sudo apt install lvm2 |
Перед выполнением любых манипуляций с дисковыми разделами находящимися в эксплуатации для предотвращения защиты от возможной потери данных необходимо:
|
Если накопители, которые предполагается включить в RAID, использовались ранее, то перед дальнейшим их использованием рекомендуется выполнять их очиcтку:
| sudo mdadm --zero-superblock --force <имя_накопителя> |
mdadm: Unrecognised md component device - <имя_накопителя> |
| sudo wipefs <имя_накопителя> |
После создания RAID с использованием драйвера MD для полного сохранения его параметров следует обновить образ системы:
| 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 |
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 необходимо периодически проверять состояние массива данных. Процедура детальной проверки обозначается термином чистка (scrubbing).
При использовании RAID LVM проверку состояния RAID можно запустить командой:
| sudo lvchange --syncaction check <имя_группы_физических_томов_LVM>/<имя_логического_тома_LVM> |
Аналогично запускается процедура восстановления:
| sudo lvchange --syncaction repair <имя_группы_физических_томов_LVM>/<имя_логического_тома_LVM> |
Проверить статус RAID можно командой:
| sudo lvs -o +raid_sync_action,raid_mismatch_count <имя_группы_физических_томов_LVM>/<имя_логического_тома_LVM> |
Пример вывода команды:
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert SyncAction Mismatches |
При установке пакета mdadm автоматически создается файл /etc/cron.d/mdadm который по расписанию (в первую субботу каждого месяца) выполняет команду проверки:
| /usr/share/mdadm/checkarray --cron --all --idle --quiet |
и направляет отчет суперпользователю (root).
После установки операционной системы к компьютеру подключены два (или более) новых накопителя. Требуется объединить эти накопители в массив RAID и перенести на них файловые ресурсы. В качестве примера файлового ресурса используется каталог /home, содержащий домашние каталоги пользователей. Далее предполагается, что добавлены накопители /dev/vdc и /dev/vdd.
sudo pvcreate /dev/vd{b,c,d,e,f} |
| sudo pvs |
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/md0 mkfs.ext4 /dev/md0
При использовании LVM добавляемый накопитель достаточно просто включить в группу томов LVM. Добавление накопителя (точнее, выделение места и создание нового логического тома на физическом томе) выполняются вручную (по умолчанию) или автоматически при отказе ранее включенного в RAID накопителя. По умолчанию отказ накопителя регистрируется в журнале, но никаких действий по восстановлению RAID не предпринимается.
Для включения автоматического добавления:
| raid_fault_policy = "allocate" |
| mirror_image_fault_policy = "allocate" |
Для добавления вручную используется команда lvconvert, например:
| sudo lvconvert --repair <имя_группы_томов>/<имя_логического_тома_RAID> |
С помощью команды lvconvert также можно заменить накопитель в составе RAID:
| sudo lvconvert --replace <имя_заменяемого_накопителя> <имя_группы_томов>/<имя_логического_тома_RAID> <имя_заменяющего_накопителя> |
Имя заменяющего накопителя можно не указывать, тогда поиск подходящей замены будет выполнен автоматически. Пример команды:
sudo lvconvert --replace /dev/sdb1 vg00/my_raid1 /dev/sdf1 |
При использовании драйвера MD накопители в состав 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 |
Имеется настроенный RAID.
Требуется изменить его уровень.
Для внесения изменений в конфигурацию RAID LVM используется команда lvconvert. В общем случае достаточно указать целевой уровень RAID и имя конвертируемого логического тома. Например:
| sudo lvconvert --type raid6 <имя_группы_томов>/<имя_логического_тома_RAID> |
Подробное описание особенностей и возможностей конвертации см. в справочной системе:
| man lvmraid |
Инструмент MD поддерживает конвертацию зеркала (RAID 1) в RAID 5. При этом в исходном RAID должно быть не более одного зеркала (т.е. не более двух накопителей).
В общем случае для конвертации следует:
sudo mdadm <имя_RAID> --fail <имя_накопителя> |
sudo mdadm --grow <имя_RAID> -n 2 |
| sudo mdadm --grow <имя_RAID> --level=5 |
sudo mdadm --grow <имя_RAID> --add <имя_накопителя> -n 3 |
См. статью Копия Установка Astra Linux на программный (soft) RAID.
ОС установлена на линейный диск (на линейные дисковые разделы).
После установки ОС добавлен второй диск.
Для обеспечения отказоустойчивости требуется перенести ОС на RAID 1.
Если операционная система установлена с использованием LVM, то в самом простом варианте для переноса ОС в RAID 1:
| sudo pvcreate /dev/vdb |
| sudo vgextend VG /dev/vdb |
| sudo lvconvert --type raid1 VG/lv_root |
В более сложных вариантах можно предварительно создать на добавленном носителе структуру дисковых разделов исходного носителя, скопировать содержимое загрузочных дисковых разделов (/boot и /boot/efi) и использовать для создания физического тома и далее для создания RAID дисковый раздел, а не весь диск.
Возможна также обратная операция: конвертация RAID 1 в раздельные образы. Для этого требуется явно указать новое имя логического тома для отделяемого зеркала, например, lv_new:
| sudo lvconvert --splitmirrors 1 -n lv_new VG/lv_root |
Перезагрузка ОС при этом не требуется.
Далее можно:
| sudo lvremove VG/lv_new |
| sudo vgreduce VG /dev/vdb |
| sudo pvremove /dev/vdb |
Далее в примере рассматривается конструкция LVM поверх MD (рекомендованный вариант установки Astra Linux Special Edition). Вариант без использования LVM в целом отличается только способом копирования корневого раздела.
При использовании RAID LVM в процессе конвертации линейного логического тома в RAID 1 автоматически используется минимально необходимое дисковое пространство. При использовании MD такой возможности нет. При конвертации в RAID 1 будет задействован весь носитель, часть пространства которого просто не будет использоваться. Поэтому для эффективного использования дискового пространства актуальной становится работа с дисковыми разделами, а не с дисковыми носителями.
Исходная структура дисковых разделов:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS |
| sudo sfdisk -d /dev/vda | sudo sfdisk /dev/vdb |
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS |
| sudo mdadm --create /dev/md0 -l 1 -n 2 missing /dev/vdb3 |
AME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS |
| sudo pvcreate /dev/md0 |
| sudo vgextend VG /dev/md0 |
Insufficient free space: 7165 extents needed, but only 7162 available |
sudo swapoff -a |
| sudo vgreduce VG /dev/vda3 |
| sudo pvremove /dev/vda3 |
echo 1 | sudo tee /parsecfs/unsecure_setxattr |
sudo update-initramfs -uk all |
| sudo reboot |
| sudo mdadm /dev/md0 --add-spare /dev/vda3 |
/dev/md0: Update Time : Mon Jan 13 11:46:10 2025 Consistency Policy : resync Rebuild Status : 5% complete Name : se1801-18057:0 (local to host se1801-18057) Number Major Minor RaidDevice State |