Дерево страниц

Вы просматриваете старую версию данной страницы. Смотрите текущую версию.

Сравнить с текущим просмотр истории страницы

« Предыдущий Версия 2 Следующий »

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

В настоящей статье рассматриваются общие приемы работы с программными (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 или из командной строки командой:

sudo apt install mdadm

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

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

Если накопители, которые предполагается включить в 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}

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

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

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
  • накопители /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 и перенести на них файловые ресурсы. В качестве примера файлового ресурса используется каталог /home, содержащий домашние каталоги пользователей. Далее предполагается, что добавлены накопители /dev/vdc и /dev/vdd.

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

  1. Создать на добавленных накопителях физические тома, например, :
    sudo pvcreate /dev/vd{b,c,d,e,f}


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

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

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

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

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

Конфигурация стенда

Исключение накопителя из RAID

Конфигурация стенда

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

Конфигурация стенда

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

Конфигурация стенда

Удаление RAID

Конфигурация стенда