Программный RAID в Linux с помощью mdadm

mdadm – утилита для работы с программными RAID -массивами в Linux. В статье мы рассмотрим, как работать с утилитой mdadm (multiple disks admin) для создания массива, добавления дисков, управления дисками, добавление hot-spare и много другой полезной информации.

Установка утилиты управления программным RAID — mdadm

Чтобы установить утилиту mdadm, запустите команду установки:

  • Для Centos/Red Hat используется yum /dnf: yum install mdadm
  • Для Ubuntu/Debian: apt-get install mdadm

В резульатте в системе будет установлена сама утилита mdadm и необходимые библиотеки:

Running transaction Installing : libreport-filesystem-2.1.11-43.el7.centos.x86_64 1/2 Installing : mdadm-4.1-1.el7.x86_64 2/2 Verifying : mdadm-4.1-1.el7.x86_64 1/2 Verifying : libreport-filesystem-2.1.11-43.el7.centos.x86_64 2/2 Installed: mdadm.x86_64 0:4.1-1.el7 Dependency Installed: libreport-filesystem.x86_64 0:2.1.11-43.el7.centos Complete!

Создание RAID из 2-х дисков

У меня на сервере установлены два дополнительных диска и я хочу содать на низ програмное зеркало (RAID1). Диски пустые, данные на них не писались. Для начала, нужно занулить все суперблоки на дисках, которые мы будем добавлять в RAID-массив:

# mdadm --zero-superblock --force /dev/vd{b,c}

У меня два есть два чистых диска vdb и vdc . mdadm --zero-superblock - очистка дисков передо добавлением в raid

mdadm: Unrecognised md component device - /dev/vdb_x000D_mdadm: Unrecognised md component device - /dev/vdc

Данный листинг означает, что ни один из дисков ранее не был добавлен в массив.

Чтобы собрать программный RAID1 из двух дисков в устройстве /dev/md0, используйтк команду:

# mdadm --create --verbose /dev/md0 -l 1 -n 2 /dev/vd{b,c}

Где « -l 1 » — это тип массива, в нашем случае RAID1

А « -n 2 «- это количество дисков, которое добавляется в массив.

Если нужно создать RAID0 в режиме страйп (stripe) для увеличения скорости чтения/записи данных за счет распараллеливания команд между несколькими физическими дисками, используйте команду:

# mdadm --create --verbose /dev/md0 --level=0 --raid-devices=2 /dev/vdb /dev/vdc

RAID 5 из трех или более дисков:

# mdadm --create --verbose /dev/md0 --level=5 --raid-devices=3 /dev/vdb /dev/ vdс /dev/vdd

После запуска команды, нужно подтвердить действия и массив будет создан:

mdadm - создать raid1 из 2-х дисков в Linux

Теперь при просмотре информации о дисках, мы видим наш массив:

# lsblk

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT_x000D_vda 253:0 0 20G 0 disk_x000D_├─vda1 253:1 0 512M 0 part /boot_x000D_└─vda2 253:2 0 19.5G 0 part /_x000D_vdb 253:16 0 20G 0 disk_x000D_└─md0 9:0 0 20G 0 raid1_x000D_vdc 253:32 0 20G 0 disk_x000D_└─md0 9:0 0 20G 0 raid1

Создание файловой системы на RAID, монтирование

Чтобы создать файловую систему ext4 на нашем RAID1 массиве из двух дисков, используйте команду:

# mkfs.ext4 /dev/md0

создать файловую систему ext4 на raid томе

Создадим директорию backup и примонтируем к ней RAID устройство:

# mkdir /backup
# mount /dev/md0 /backup/

# df -h

Filesystem Size Used Avail Use% Mounted on_x000D_ devtmpfs 485M 0 485M 0% /dev_x000D_tmpfs 496M 0 496M 0% /dev/shm_x000D_tmpfs 496M 44M 452M 9% /run_x000D_tmpfs 496M 0 496M 0% /sys/fs/cgroup_x000D_/dev/vda2 20G 1.4G 19G 7% /_x000D_/dev/vda1 488M 100M 353M 23% /boot_x000D_tmpfs 100M 0 100M 0% /run/user/0_x000D_/dev/md0 20G 45M 19G 1% /backup_x000D_

Массив смонтировался без ошибок. Чтобы не монтировать устройство каждый раз вручную, внесем изменения в fstab :

# nano /etc/fstab

/dev/md0 /backup ext4 defaults 1 2

fstab - авто-монтирование raid устройства в каталог

Просмотр состояния, проверка целостности RAID массива

Чтобы проверить целостность данных в массиве, используйте команду:

#echo 'check' > /sys/block/md0/md/sync_action

После чего, нужно посмотреть вывод файла:

#cat /sys/block/md0/md/mismatch_cnt

Если в результате вы получаете 0, то с вашим массивом все в порядке:

проверка целостности raid в linux

Чтобы остановить проверку, используйте команду:

#echo 'idle' > /sys/block/md0/md/sync_action

Чтобы проверить состояние всех RAID -массивов доступны на сервере, используйте команду:

# cat /proc/mdstat

Personalities : [raid1]_x000D_md0 : active raid1 vdc[1] vdb[0]_x000D_20954112 blocks super 1.2 [2/2] [UU]

В листинге команды, видим информацию о нашем ранее созданном raid.

Более подробную информацию о конкретном raid-массиве, можно посмотреть командой:

# mdadm -D /dev/md0

mdadm -D /dev/md0 - получить информацию о raid массиве в linux

Разберем основные пункты листинга команды:

  • Version – версия метаданных;
  • Creation Time – дата и время создания raid-массива;
  • Raid Level – уровень raid-массива;
  • Array Size – объем дискового пространства для raid-массива;
  • Used Dev Size – используемый объем для устройств;
  • Raid Device – количество дисков в raid-массиве;
  • Total Devices – количество добавленных в raid-массив дисков;
  • State – текущее состояние (clean – все ОК);
  • Active Devices — количество активных дисков в raid-массиве;
  • Working Devises — количество рабочих дисков в raid-массиве;
  • Failed Devices – количество устройств со сбоями в raid-массиве;
  • Spare Devices – количество запасных дисков в raid-массиве;
  • Consistency Policy — параметр задающий тип синхронизации после сбоя в raid-массиве, rsync — полная синхронизация после восстановления raid-массива (доступны режимы bitmap, journal, ppl);
  • UUID – идентификатор raid-массива

Краткую информацию можно посмотреть с помощью утилиты fdisk :

# fdisk -l /dev/md0

Disk /dev/md0: 21.5 GB, 21457010688 bytes, 41908224 sectors_x000D_Units = sectors of 1 * 512 = 512 bytes_x000D_Sector size (logical/physical): 512 bytes / 512 bytes_x000D_I/O size (minimum/optimal): 512 bytes / 512 bytes

Восстановление RAID при сбое, замена диска

Если у вас вышел из строя или повредился один из дисков в RAID-массиве, его можно заменить другим. Для начала определим, поврежден ли диск и какой диск нам следует менять.

# cat /proc/mdstat

Personalities : [raid1]_x000D_md0 : active raid1 vdb[0]_x000D_20954112 blocks super 1.2 [2/1] [U_]_x000D_

Из листинга команды, вы видим, что только один диск активен. Так же о проблеме говорит [ U_ ]. Когда оба диска рабочие, вывод будет [ UU ].

Подробная информация о RAID-массиве также показывает, что естт проблемы:

# mdadm -D /dev/md0

/dev/md0:_x000D_Version : 1.2_x000D_Creation Time : Tue Oct 29 12:39:22 2019_x000D_Raid Level : raid1_x000D_Array Size : 20954112 (19.98 GiB 21.46 GB)_x000D_Used Dev Size : 20954112 (19.98 GiB 21.46 GB)_x000D_Raid Devices : 2_x000D_Total Devices : 2_x000D_Persistence : Superblock is persistent_x000D_Update Time : Tue Oct 29 14:41:13 2019_x000D_State : clean, degraded_x000D_Active Devices : 1_x000D_Working Devices : 1_x000D_Failed Devices : 1_x000D_

State : clean, degraded – данная строка указывает на то, что диск в raid-массиве поврежден.

В нашем случае нужно заменить неисправный диск /dev/vdc . Для восстановления массива, нужно удалить нерабочий диск и добавить новый.

Удаляем неиспраный диск:

# mdadm /dev/md0 --remove /dev/vdc

Добавляем в массив новый диск :

# mdadm /dev/md0 --add /dev/vdd

Восстановление диска запустится автоматически после добавления нового диска:

# mdadm -D /dev/md0

/dev/md0:_x000D_Version : 1.2_x000D_Creation Time : Tue Oct 29 12:39:22 2019_x000D_Raid Level : raid1_x000D_Array Size : 20954112 (19.98 GiB 21.46 GB)_x000D_Used Dev Size : 20954112 (19.98 GiB 21.46 GB)_x000D_Raid Devices : 2_x000D_Total Devices : 2_x000D_Persistence : Superblock is persistent_x000D_Update Time : Tue Oct 29 14:50:20 2019_x000D_State : clean, degraded, recovering_x000D_Active Devices : 1_x000D_Working Devices : 2_x000D_Failed Devices : 0_x000D_Spare Devices : 1_x000D_Consistency Policy : resync_x000D_Rebuild Status : 69% complete_x000D_Name : server.vpn.ru:0 (local to host server.vpn.ru)_x000D_UUID : 9d59b1fb:7b0a7b6d:15a75459:8b1637a2_x000D_Events : 42_x000D_Number Major Minor RaidDevice State_x000D_0 253 16 0 active sync /dev/vdb_x000D_2 253 48 1 spare rebuilding /dev/vdd_x000D_

rebuild Status : 69% complete — показывает текущее состояние восстановления массива.

spare rebuilding /dev/vdd — показывает какой диск добавляется к массиву.

После восстановления массива, листинг по дискам выглядит так:

State : clean_x000D_Active Devices : 2_x000D_Working Devices : 2_x000D_Failed Devices : 0_x000D_Spare Devices : 0_x000D_

Добавление и удаление дисков в RAID массив на Linux

Чтобы разобрать ранее созданный массив, нужно отмонтировать его :

# umount /backup

И выполнить команду:

# mdadm -S /dev/md0

mdadm: stopped /dev/md0

После разбора массива, он не должен определяться как устройство:

# mdadm -S /dev/md0

mdadm: error opening /dev/md0: No such file or directory

Чтобы собрать массив, который мы ранее разобрали вручную, запустите команду:

# mdadm --assemble —scan

mdadm --assemble —scan пересборка массива

Данная команда просканирует диски из разобранного или развалившегося RAID массива и по метаданным попробует собрать из них RAID.

Если вам нужно удалить рабочий диск из массива и заменить его на другой, нужно для начала пометить рабочий диск как нерабочий:

# mdadm /dev/md0 --fail /dev/vdc

После чего диск можно будет удалить командой::

# mdadm /dev/md0 --remove /dev/vdc

Добавляется новый диск, так же как и в случае с нерабочим диском:

# mdadm /dev/md0 --add /dev/vdd

Добавление Hot-Spare диска в RAID массив

Вы можете добавит в массив hot-spare диск для горячей замены при выходе из строя одного из активных дисков. Добавьте свободный диск в нужный массив:

# mdadm /dev/md0 --add /dev/vdc

После чего проверив статус raid-массива, мы увидим данный диск как spare:

mdadm - добавить hot-spare диск в raid массив

Чтобы проверить, сработает ли « горячая замена» диска, пометим любой из дисков как нерабочий и проверим статус raid-массива:

# mdadm /dev/md0 --fail /dev/vdb

После чего при проверке статуса массива, будет видно, что началась пересборка массива:

mdadm - faulty - сбойный диск

Диск /dev/vdb помечен как нерабочий, а hot-spare диск стал одним из активных дисков RAID и запустился процесс восстановления.

Чтобы добавить дополнительный рабочий диск в RAID, нужно выполнить два шага.

Добавить пустой диск массиву:

# mdadm /dev/md0 --add /dev/vdb

Теперь данный диск будет отображаться как hot-spare , чтобы сделать его рабочим, расширим raid-массив:

# mdadm -G /dev/md0 —raid-devices=3

После чего запустится процесс пересборки массива:

mdadm - програмный raid linux spare rebuilding

После выполнения пересборки, все диски стали активны:

Number Major Minor RaidDevice State_x000D_3 253 32 0 active sync /dev/vdc_x000D_2 253 48 1 active sync /dev/vdd_x000D_4 253 16 2 active sync /dev/vdb_x000D__x000D_

Удаление массива

Если вы хотите безвозвратно удалить raid-массив, используйте следующую схему:

# umount /backup – отмонтируем массив от директории

# mdadm -S /dev/md0 — останавливаем RAID устройство

После чего очищаем все суперблоки на дисках, из которых он был собран:

# mdadm --zero-superblock /dev/vdb
# mdadm --zero-superblock /dev/vdc

Mdmonitor: Мониторинг состояния RAID и email оповещения

Для мониторинга состояния RAID массива можно использовать службу mdmonitor . Сначала нужно создать файл /etc/mdadm.conf с конфигурацией текущего массива:

# mdadm –detail –scan > /etc/mdadm.conf

Конфигурационный файл mdadm.conf не создается автоматически. Его нужно создавать и актуализировать вручную.

В конце файла /etc/mdadm.conf добавьте email адрес администратора, на который нужно слать оповещения о проблемах с RAID:

MAILADDR [email protected]

Останолось перезапустить службу mdmonitor через systemctl :

# systemctl restart mdmonitor

После этого система будет оповещать вас по email об ошибках в mdadm и неисправных дисках.

RAID массив в состоянии inactive

При сбоях оборудования или аварийного выключения по питанию, массив может перейти в состояние inactive . Все диски помечаются как неактивные, но ошибок на дисках нет.

# cat /proc/mdstat

Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]_x000D_md0 : inactive vdc[1] vdb[0]_x000D_20954112 blocks super_x000D_unused devices: <none>_x000D_

В этом случае нужно остановить массив командой:

# mdadm --stop /dev/md0

И пересобрать его:

# mdadm --assemble --scan –force

Если массив прописан в /etc/fstab, нужно перемонтировать его командой:

# mount -a

Есть способы создания программного RAID на уже установленной ОС. В этом случае вам придется вручную скопировать таблицы всех разделов на новый диск, и вручную переместить содержимое системного диска на RAID из одного диска, очистить первый диск и добавить его в RAID, после чего поправить initramfs и загрузик GRUB. Поэтому все-таки лучше, если вы выберите режим установите CentOS на программный RAID при развертывании сервера.

Утилита mdadm упрощает работу с raid-массивами в Linux. В данной статье я описал основные моменты работы с данной утилитой, а также затронул самые частые вопросы, которые возникают при работе с raid -массивами через утилиту mdadm .

EnglishRussianUkrainian