Данная статья применима к:

  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.8)
  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7), РУСБ.10015-10
  • Astra Linux Special Edition РУСБ.10015-17
  • Astra Linux Special Edition РУСБ.10015-37 (очередное обновление 7.7)
  • Astra Linux Special Edition РУСБ.10015-03 (очередное обновление 7.6)
  • Astra Linux Special Edition РУСБ.10152-02 (очередное обновление 4.7)


Общая информация

В настоящей статье рассматриваются общие приемы работы с программными (soft) RAID с использованием драйвера MD (инструмента командной строки mdadm) и с использованием инструментов командной строки LVM.

Некоторые термины:

  • RAID (англ. Redundant Array of Independent Disks — избыточный массив независимых (самостоятельных) накопителей данных) — технология объединения нескольких накопителей данных в логический модуль для повышения отказоустойчивости и (или) производительности. Поддерживает уровни RAID 0, 1, 4, 5, 6, 10. Подробнее см. статью RAID.
  • LVM (англ. Logical Volume Manager) — менеджер логических томов, подсистема операционной системы, позволяющая использовать разные области одного жесткого диска и/или области с разных жестких дисков как один логический том.
  • Линейный носитель (диск, дисковый раздел) — носитель, не входящий в состав RAID.

При эксплуатации, особенно при эксплуатации серверных систем, рекомендуется использовать аппаратные реализации RAID. Допустимость использования и применимость программных RAID должна определяться информационной политикой компании. Выбор между реализации RAID MD и RAID LVM зависит от приоритетов удобства администрирования, надежности и эффективности, однако при установке новых ОС следует отдавать предпочтение установке с использованием LVM, что обеспечивает большие возможности дальнейшей настройки (см. также Рекомендации по установке Astra Linux Special Edition x.7 на клиентские компьютеры). Возможно также одновременное использование технологий LVM и MD, например развертывание структуры LVM на RAID, созданном с использованием MD. Пример такого развертывания приведен в главе про перенос ОС с линейного носителя на RAID.

В инструментах LVM поддерживается два варианта RAID:

  • Ранняя собственная реализация LVM, поддерживающая RAID с чередованием (stripe, аналог RAID 0) и с зеркалированием (mirror, аналог RAID 1).
  • Более поздняя реализация с использованием драйвера MD, поддерживающая все уровни RAID, поддерживаемые этим драйвером. Для RAID уровней 5 и 6 поддерживается тонкая настройка конфигурации (левый, правый, симметричный, асимметричный и пр.). Рассмотрение таких настроек в настоящую статью не входит.

Далее в статье рассматривается реализация 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

Общие действия

Предотвращение возможной потери данных

Перед выполнением любых манипуляций с дисковыми разделами находящимися в эксплуатации для предотвращения защиты от возможной потери данных необходимо:

  1. Провести отработку предполагаемых действий на тестовом стенде.
  2. Обеспечить резервное копирование всех данных, которые могут быть затронуты манипуляциями.
  3. Обеспечить резервирование электропитания.

Подготовка новых накопителей

Если накопители, которые предполагается включить в RAID, использовались ранее, то перед дальнейшим их использованием рекомендуется выполнять их очиcтку:

  1. Удалить информацию о предыдущем использовании диска в RAID:
    sudo mdadm --zero-superblock --force <имя_накопителя>
    Если в результате выполнения команды выдается сообщение:
    mdadm: Unrecognised md component device - <имя_накопителя>
    то информация об использовании носителя в RAID не обнаружена и можно переходить к следующему шагу.
  2. Очистить сигнатуры данных на носителе:
    sudo wipefs <имя_накопителя>
    wipefs --all --force /dev/sd{b,c}
    ipefs --all --force /dev/sd{b,c}

Особенности использования драйвера MD

Обновление конфигурации после внесения изменений

После создания 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
Пример конфигурации для RAID5 с одним резервным носителем:
ARRAY /dev/md0 level=raid5 num-devices=5 metadata=1.2 spares=1 name=se1801-18057:0 UUID=20fe193f:40373760:085344c8:b781ca1a

Если после создания RAID компьютер был перезагружен без сохранения конфигурации RAID, то для восстановления конфигурации:

  1. Создать конфигурационный файл как указано выше.
  2. В конфигурационном файле указать необходимое имя RAID.
  3. Выполнить команду:
    sudo update-initramfs -uk all
  4. Перезагрузить ОС.

Действия после создания RAID

Проверка состояния RAID

После создания или изменения конфигурации 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
    Пример вывода команды (RAID 5 с одним резервным диском в состоянии синхронизации 6%):
    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
    Пример вывода команды (массив 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 он становится доступен как обычное блочное устройство (накопитель), и к нему можно применять обычные операции работы с накопителями.  Получить отчет о составе накопителей и массивов 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  

В приведенном примере:

  • операционная система размещена на накопителе /dev/vda на логическом томе LVM lv_root в группе томов LVM VG;
  • накопители /dev/vdb и /dev/vdc входят в RAID /dev/md0, накопители /dev/vdd, /dev/vde, /dev/vdf не используются.

После создания устройства RAID с ним можно работать используя его имя (/dev/md0) так же, как с обычным дисковым разделом. Например:

  1. Отформатировать:
    sudo mkfs.ext4 /dev/md0
  2. Примонтировать:
    sudo mount /dev/md0 /mnt
  3. Скопировать в него домашние каталоги пользователей:
    Для примера используется упрощенный вариант команды. Подробнее см. Архивирование и восстановление файлов с сохранением мандатных атрибутов.
    sudo cp -R /home/* /mnt
  4. Отмонтировать:
    sudo umount /dev/md0
  5. Внести в файл /etc/fstab запись для автоматического монтирования, например:
    /dev/md0 /home ext4 defaults 0 2
    Подробнее см. man fstab.

Обслуживание RAID

При эксплуатации RAID необходимо периодически проверять состояние массива данных. Процедура детальной проверки обозначается термином чистка (scrubbing).

Scrubbing при использовании LVM

При использовании 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>

Пример вывода команды:

sudo lvs -o +raid_sync_action,raid_mismatch_count VG/lvol0

  LV    VG Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert SyncAction Mismatches
  lvol0 VG rwi-a-r--- 500,00m                                    100,00           idle                0

Scrubbing при использовании MD

При установке пакета mdadm автоматически создается файл /etc/cron.d/mdadm который по расписанию (в первую субботу каждого месяца) выполняет команду проверки:

/usr/share/mdadm/checkarray --cron --all --idle --quiet

и направляет отчет суперпользователю (root).

Простое создание RAID

Постановка задачи

После установки операционной системы к компьютеру подключены два (или более) новых накопителя. Требуется объединить эти накопители в массив RAID и перенести на них файловые ресурсы. В качестве примера файлового ресурса используется каталог /home, содержащий домашние каталоги пользователей. Далее предполагается, что добавлены накопители /dev/vdc и /dev/vdd.

Решение c использованием LVM

  1. Создать на добавленных накопителях физические тома, например, :
    sudo pvcreate /dev/vd{b,c,d,e,f}
  2. Получить список групп логических томов:
    sudo pvs
    Далее для примера используется группа логических томов VG.
  3. Включить добавленные накопители в группу логических томов:
    sudo vgextend VG /dev/vd{b,c,d,e,f}
  4. Создать на добавленных носителях логический том. Создать том можно сразу с указанием требуемого уровня RAID. Размещение компонентов RAID на накопителях при этом будет выполняться автоматически. Например:
    1. Создать 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
    2. Создать 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  
    3. Создать 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 можно работать как с обычным дисковым разделом.

Решение с использованием MD

При наличии свободных дисков массив 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  

Добавление, замена, удаление накопителей в RAID

Постановка задачи

  • Настроено использование RAID.
  • Добавлен новый накопитель.
  • Требуется:
    • добавить новый накопитель в состав ранее настроенного RAID;
    • заменить накопитель из состава RAID на новый;
    • удалить накопитель из состава ранее настроенного RAID

Решение с использованием LVM

При использовании LVM добавляемый накопитель достаточно просто включить в группу томов LVM. Добавление накопителя (точнее, выделение места и создание нового логического тома на физическом томе) выполняются вручную (по умолчанию) или автоматически при отказе ранее включенного в RAID накопителя. По умолчанию отказ накопителя регистрируется в журнале, но никаких действий по восстановлению RAID не предпринимается.

Для включения автоматического добавления: 

  1. В конфигурационном файле /etc/lvm/lvm.conf:
    1. Раскомментировать параметр raid_fault_policy и присвоить ему значение "allocate":
      raid_fault_policy = "allocate"
      Этот параметр включает автоматическое выделение замены для RAID с уровнями больше 1.
    2. Раскомментировать параметр mirror_image_fault_policy и присвоить ему значение "allocate":
      mirror_image_fault_policy = "allocate"
      Этот параметр включает автоматическое выделение замены для RAID 1 (зеркало).
  2. Перезагрузить ОС.

Для добавления вручную используется команда lvconvert, например:

sudo lvconvert --repair <имя_группы_томов>/<имя_логического_тома_RAID>

С помощью команды lvconvert также можно заменить накопитель в составе RAID:

sudo lvconvert --replace <имя_заменяемого_накопителя> <имя_группы_томов>/<имя_логического_тома_RAID> <имя_заменяющего_накопителя>

Имя заменяющего накопителя можно не указывать, тогда поиск подходящей замены будет выполнен автоматически. Пример команды:

sudo lvconvert --replace /dev/sdb1 vg00/my_raid1 /dev/sdf1


Решение с использованием MD

При использовании драйвера 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
  • Удаление накопителя:
    1. Пометить носитель как сбойный:
      sudo mdadm /dev/md0 --manage --fail /dev/vde
    2. Удалить накопитель:
      sudo mdadm /dev/md0 --manage --remove /dev/vde

Изменение уровня RAID

Постановка задачи

Имеется настроенный RAID.

Требуется изменить его уровень.

Решение с использованием LVM

Для внесения изменений в конфигурацию RAID LVM используется команда lvconvert. В общем случае достаточно указать целевой уровень RAID и имя конвертируемого логического тома. Например:

sudo lvconvert --type raid6 <имя_группы_томов>/<имя_логического_тома_RAID>

Подробное описание особенностей и возможностей конвертации см. в справочной системе:

man lvmraid

Решение с использованием MD

Инструмент MD поддерживает конвертацию зеркала (RAID 1) в RAID 5. При этом в исходном RAID должно быть не более одного зеркала (т.е. не более двух накопителей).

В общем случае для конвертации следует:

  1. Вывести из состава RAID все зеркала, кроме последнего, последовательно повторяя команды:
    sudo mdadm <имя_RAID> --fail <имя_накопителя>
    sudo mdadm <имя_RAID> --remove <имя_накопителя>
    В составе RAID должно остаться два накопителя. При этом RAID сохранит работоспособность.
  2. Уменьшить количество носителей в RAID до 2:
    sudo mdadm --grow <имя_RAID> -n 2
  3. Выполнить команду конвертации уровня RAID:
    sudo mdadm --grow <имя_RAID> --level=5
  4. Для восстановления корректной минимальной конфигурации RAID добавить в RAID третий накопитель:
    sudo mdadm --grow <имя_RAID> --add <имя_накопителя> -n 3

Установка ОС на RAID

См. статью Установка Astra Linux на программный (soft) RAID.

Перенос установленной ОС на RAID

Постановка задачи

ОС установлена на линейный диск (на линейные дисковые разделы).

После установки ОС добавлен второй диск.

Для обеспечения отказоустойчивости требуется перенести ОС на RAID 1.

Решение с использованием LVM

Если операционная система установлена с использованием LVM, то  в самом простом варианте для переноса ОС в RAID 1:

  1. Создать на новом на добавленном носителе (например, на диске /dev/vdb) физический том LVM:
    sudo pvcreate /dev/vdb
  2. Включить созданный физический том LVM в состав группы физических томов, включающей логический том с корневой файловой системой. Далее используется группа физических томов VG:
    sudo vgextend VG /dev/vdb
  3. Конвертировать имеющийся линейный том LVM с корневой файловой системой в RAID 1. Например, том lv_root в группе томов VG:
    sudo lvconvert --type raid1 VG/lv_root
  4. Перезагрузить ОС.

В более сложных вариантах можно предварительно создать на добавленном носителе структуру дисковых разделов исходного носителя, скопировать содержимое загрузочных дисковых разделов (/boot и /boot/efi) и использовать для создания физического тома и далее для создания RAID дисковый раздел, а не весь диск.

Обратные операции

Возможна также обратная операция: конвертация RAID 1 в раздельные образы. Для этого требуется явно указать новое имя логического тома для отделяемого зеркала, например, lv_new:

sudo lvconvert --splitmirrors 1 -n lv_new VG/lv_root

Перезагрузка ОС при этом не требуется.

Далее можно:

  1. Удалить логический том:
    sudo lvremove VG/lv_new
  2. Исключить физический том из группы физических томов:
    sudo vgreduce VG /dev/vdb
  3. Удалить физический том:
    sudo pvremove /dev/vdb

Решение с использованием MD

Далее в примере рассматривается конструкция LVM поверх MD (рекомендованный вариант установки Astra Linux Special Edition). Вариант без использования LVM в целом отличается только способом копирования корневого раздела.

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

Исходная структура дисковых разделов:

lsblk

NAME             MAJ:MIN RM SIZE RO TYPE  MOUNTPOINTS
 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:5    0  27G  0 lvm  /
└─vda4         252:4    0   1G  0 part /boot/efi
vdb            252:16   0  30G  0 disk 
Где vda - исходный диск, vdb — добавленный диск.
  1. Первым шагом можно скопировать структуру дисковых разделов основного диска  (dev/vda) на добавленный диск (/dev/vdb):
    sudo sfdisk -d /dev/vda | sudo sfdisk /dev/vdb
    В итоге получится следующая структура разделов:
    NAME           MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
    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:5    0  27G  0 lvm  /
    └─vda4         252:4    0   1G  0 part /boot/efi
    vdb            252:16   0  30G  0 disk 
    ├─vdb1         252:17   0   2M  0 part 
    ├─vdb2         252:18   0   1G  0 part 
    ├─vdb3         252:19   0  28G  0 part 
    └─vdb4         252:20   0   1G  0 part 
  2. Создать деградировавшее зеркало (RAID 1), содержащее только один носитель. Для указания отсутствующего носителя использовать вместо имени носителя специальное имя missing:
    sudo mdadm --create /dev/md0 -l 1 -n 2 missing /dev/vdb3
    Структура дисковых разделов:
    lsblk

     AME           MAJ:MIN RM SIZE RO TYPE  MOUNTPOINTS
    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:5    0  27G  0 lvm   /
    └─vda4         252:4    0   1G  0 part  /boot/efi
    vdb            252:16   0  30G  0 disk  
    ├─vdb1         252:17   0   2M  0 part  
    ├─vdb2         252:18   0   1G  0 part  
    ├─vdb3         252:19   0  28G  0 part  
    │ └─md0          9:0    0  28G  0 raid1 
    └─vdb4         252:20   0   1G  0 part  
    В состав дисковых разделов добавлен раздел /dev/md0.
  3. Создать на RAID физический том LVM:
    sudo pvcreate /dev/md0
  4. Добавить созданный физический том LVM в состав группы томов (для примера — группа VG):
    sudo vgextend VG /dev/md0
  5. Перенести на созданный физический том LVM существующий физический том с корневой файловой системой:
    1. При использовании LVM:
      1. При использовании LVM можно использовать предоставляемую LVM возможность перемещения томов между физическими носителями (команда pvmove). Однако напрямую это может быть невозможно, так как при одинаковых дисках созданный на RAID том будет чуть меньше, чем том на линейном носителе:
        sudo pvmove /dev/vda3 /dev/md0

          Insufficient free space: 7165 extents needed, but only 7162 available
          Unable to allocate mirror extents for VG/pvmove0.
          Failed to convert pvmove LV to mirrored.
        Для устранения этой проблемы можно временно отключить подкачку (swap) и удалить предназначенный для этого логический том LVM:
        sudo swapoff -a
        sudo lvremove VG/lv_swap
        Если вытеснение было отключено, то:
        1. Удалить (закомментировать) указание UUID тома подкачки в файле /etc/initramfs-tools/conf.d/resume.
        2. Удалить (закомментировать) указание UUID тома подкачки в файле /etc/fstab.
        Можно также вручную создать логический том и скопировать в него корневую файловую систему, см. ниже.
      2. Исключить освободившийся физический том LVM (/dev/vda3) из состава группы томов (VG):
        sudo vgreduce VG /dev/vda3
      3. Уладить освободившийся физический том LVM (/dev/vda3):
        sudo pvremove /dev/vda3
    2. Если LVM не используется совсем (или используется LVM, но не используется возможность перемещения физических томов LVM), то можно:
      1. Если используется LVM - то создать логический том LVM достаточного для размещения корневой файловой системы размера.
      2. Отформатировать дисковый раздел/логический том LVM, создав в нем файловую систему.
      3. Примонтировать созданную файловую систему, например, в каталог /mnt.
      4. Скопировать в созданную файловую систему исходную файловую систему, используя, например, команды (потребуется установить пакет rsync):
        echo 1 | sudo tee /parsecfs/unsecure_setxattr
        sudo /usr/sbin/execaps -c 0x1000 -- sudo rsync -a --xattrs --acls --exclude=/proc --exclude=/lost+found --exclude=/mnt --exclude=/sys --exclude=/parsecfs / /mnt
        echo 0 | sudo tee /parsecfs/unsecure_setxattr
        Подробнее см. Архивирование и восстановление файлов с сохранением мандатных атрибутов.
        Также можно выполнить копирование загрузившись с Live-CD или иным удобным способом.

  6. Обновить загрузчик:
    sudo update-initramfs -uk all
    sudo update-grub
  7. Перезагрузить ОС:
    sudo reboot
  8. Восстановить целостность RAID, добавив старый дисковый раздел в качестве резервного носителя:
    sudo mdadm /dev/md0 --add-spare /dev/vda3
    После добавления резервного носителя он автоматически будет использован для замены отсутствующего носителя, и начнется процесс синхронизации:
    sudo mdadm --detail /dev/md0

    /dev/md0:
               Version : 1.2
         Creation Time : Sat Jan 11 11:18:59 2025
            Raid Level : raid1
            Array Size : 29338624 (27.98 GiB 30.04 GB)
         Used Dev Size : 29338624 (27.98 GiB 30.04 GB)
          Raid Devices : 2
         Total Devices : 2
           Persistence : Superblock is persistent

           Update Time : Mon Jan 13 11:46:10 2025
                 State : clean, degraded, recovering 
        Active Devices : 1
       Working Devices : 2
        Failed Devices : 0
         Spare Devices : 1

    Consistency Policy : resync

        Rebuild Status : 5% complete

                  Name : se1801-18057:0  (local to host se1801-18057)
                  UUID : 874454a3:ebd4d617:0474a594:a2f391d4
                Events : 479

        Number   Major   Minor   RaidDevice State
           2     252        3        0      spare rebuilding   /dev/vda3
           1     252       19        1      active sync   /dev/vdb3
    l

  9. После завершения синхронизации RAID будет полностью готов к работе.
  10. При необходимости можно включить подкачку любым удобным способом, подробнее см. Область подкачки (swap): особенности применения и обеспечения безопасности.
  • No labels