Перейти к основному содержанию

mdadm — полезные команды

Linux

Соберу в одном месте список полезных команд для mdadm.

mdadm — утилита для управления программными RAID-массивами в Linux.

С помощью mdadm можно выполнять следующие операции:

  • mdadm --create, -C Создать новый массив на основе указанных устройств. Использовать суперблоки размещённые на каждом устройстве.
  • mdadm --assemble, -A Собрать компоненты ранее созданного массива в массив. Компоненты можно указывать явно, но можно и не указывать — тогда выполняется их поиск по суперблокам.
  • mdadm --build, -B Собрать массив из компонентов, у которых нет суперблоков. Не выполняются никакие проверки, создание и сборка массива в принципе ничем не отличаются.
  • mdadm --manage Разнообразные операции по управлению массивом, такие как замена диска и пометка как сбойного.
  • mdadm --misc Действия, которые не относятся ни к одному из других режимов работы.
  • mdadm --grow, -G Расширение или уменьшение массива, включаются или удаляются новые диски.
  • mdadm --incremental, -I Добавление диска в массив.
  • mdadm --monitor, --follow, -F Следить за изменением состояния устройств. Для RAID0 этот режим не имеет смысла.

И другие: mdadm --help.

Формат вызова:

mdadm [mode] [array] [options]

Создание массива

Для создания массива нужно использовать не смонтированные разделы. Убедитесь в этом, при необходимости демонтируйте и уберите из fstab.

Пример создания RAID5 массива из трёх дисков:

  • /dev/nvme0n1
  • /dev/nvme1n1
  • /dev/nvme2n1

Я использую NVMe диски, у вас названия дисков будут другие.

Желательно изменить тип разделов на FD (Linux RAID autodetect). Это можно сделать с помощью fdisk (t).

Занулить суперблоки дисков:

mdadm --zero-superblock --force /dev/nvme0n1
mdadm --zero-superblock --force /dev/nvme1n1
mdadm --zero-superblock --force /dev/nvme2n1

Стереть подпись и метаданные:

wipefs --all --force /dev/nvme0n1
wipefs --all --force /dev/nvme1n1
wipefs --all --force /dev/nvme2n1

С помощью ключа --create создать RAID5 массив:

 mdadm --create --verbose /dev/md0 --level=5 --raid-devices=3 /dev/nvme0n1 /dev/nvme1n1 /dev/nvme2n1

где:

  • /dev/md0 — массив, который мы создаём;
  • --level 5 — уровень RAID;
  • --raid-devices=3 — количество дисков, из которых собирается массив;
  • /dev/nvme0n1 /dev/nvme1n1 /dev/nvme2n1 — диски.

Для примера RAID1 из двух дисков /dev/sdb и /dev/sdc можно создать так:

mdadm --create --verbose /dev/md2 -l 1 -n 2 /dev/sd{b,c}

где:

  • /dev/md2 — массив, который мы создаём;
  • -l 5 — уровень RAID;
  • -n 2 — количество дисков, из которых собирается массив;
  • /dev/sd{b,c} — диски sdb и sdc.

    Состояние массива

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

    cat /proc/mdstat

    Пример 1:

    root@ch01:~# cat /proc/mdstat
    Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
    md127 : active raid1 nvme1n1[1] nvme0n1[0]
          3750607192 blocks super 1.2 [2/2] [UU]
    
    unused devices: <none>

    mdadm

    Пример 2:

    [root@dbk00 ~]# cat /proc/mdstat
    Personalities : [raid1] [raid0]
    md10 : active raid0 sdb1[1] sda1[0]
          70319335424 blocks super 1.2 512k chunks
    
    md20 : active raid0 sdc1[0] sdd1[1]
          70319335424 blocks super 1.2 512k chunks
    
    md126 : active raid1 sde[1] sdf[0]
          927881216 blocks super external:/md127/0 [2/2] [UU]
    
    md127 : inactive sdf[1](S) sde[0](S)
          10402 blocks super external:imsm
    
    unused devices: <none>

    Подробный статус выбранного массива

    mdadm --detail /dev/md2

    Пример:

    root@ch01:~# mdadm --detail /dev/md127
    /dev/md127:
               Version : 1.2
         Creation Time : Wed May  6 16:39:32 2020
            Raid Level : raid1
            Array Size : 3750607192 (3576.86 GiB 3840.62 GB)
         Used Dev Size : 3750607192 (3576.86 GiB 3840.62 GB)
          Raid Devices : 2
         Total Devices : 2
           Persistence : Superblock is persistent
    
           Update Time : Fri Aug 14 17:09:47 2020
                 State : clean
        Active Devices : 2
       Working Devices : 2
        Failed Devices : 0
         Spare Devices : 0
    
    Consistency Policy : resync
    
                  Name : VirtualDisk01
                  UUID : 1728ebed:ad0b0000:faad83b7:37070000
                Events : 173
    
        Number   Major   Minor   RaidDevice State
           0     259        0        0      active sync   /dev/nvme0n1
           1     259        1        1      active sync   /dev/nvme1n1

    mdadm

    Список массивов

    mdadm --detail --scan --verbose

    Пример:

    root@ch01:~# mdadm --detail --scan --verbose
    ARRAY /dev/md/VirtualDisk01 level=raid1 num-devices=2 metadata=1.2 name=VirtualDisk01 UUID=1728ebed:ad0b0000:faad83b7:37070000
       devices=/dev/nvme0n1,/dev/nvme1n1
    

    bash

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

    Файловую систему в массиве можно создать с помощью mkfs, например:

    mkfs.ext4 -m 0 /dev/md0

    Для лучшей производительности файловой системы имеет смысл указывать при её создании количество дисков в рейде и количество блоков файловой системы, которое может поместиться в один страйп (chunk), это касается массивов уровня RAID0, RAID5 ,RAID6 ,RAID10. Для RAID1 (mirror) это не имеет значения так как запись идет всегда на один device, a в других типах массивов данные записываются последовательно на разные диски порциями, соответствующими размеру stripe. Например, если мы используем RAID5 из 3 дисков с дефолтным размером страйпа в 64К и файловую систему ext3 с размером блока в 4К то можно вызывать команду mkfs.ext3 так:

    mkfs.ext3 -b 4096 -E stride=16,stripe-width=32 /dev/md0

    stripe-width обычно рассчитывается как

    stride * N

    где N — это диски с данными в массиве, например, в RAID5 два диска с данными и один parity для контрольных сумм. Для файловой системы XFS нужно указывать не количество блоков файловой системы, соответствующих размеру stripe в массиве, а размер самого страйпа:

    mkfs.xfs -d su=64k,sw=3 /dev/md0

    Создание mdadm.conf

    Операционная система не запоминает какие RAID-массивы ей нужно создать и какие диски в них входят. Эта информация содержится в файле mdadm.conf.

    mkdir /etc/mdadm
    echo "DEVICE partitions" > /etc/mdadm/mdadm.conf
    mdadm --detail --scan | awk '/ARRAY/ {print}' >> /etc/mdadm/mdadm.conf

    В интернете советуют применять команду mdadm --detail --scan --verbose, но я не рекомендую, т.к. она пишет в конфигурационный файл названия разделов, а они в некоторых случаях могут измениться, тогда RAID-массив не соберётся. А mdadm --detail --scan записывает UUID разделов, которые не изменятся.

    Проверка целостности массива

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

    Есть ли ошибки в процессе проверки программного RAID-массива по команде check или repair:

    cat /sys/block/md0/md/mismatch_cnt

    Работа с дисками

    Диск в массиве можно условно сделать сбойным с помощью ключа --fail (-f):

    mdadm /dev/md0 --fail /dev/nvme0n1
    mdadm /dev/md0 -f /dev/nvme0n1

    Удалить из массива отказавший диск:

    mdadm /dev/md0 --remove /dev/nvme0n1
    mdadm /dev/md0 -r /dev/nvme0n1

    Добавить в массив заменённый диск:

    mdadm /dev/md0 --add /dev/nvme0n1
    mdadm /dev/md0 -a /dev/nvme0n1

    Сборка существующего массива

    Собрать существующий массив можно с помощью mdadm --assemble:

    mdadm --assemble /dev/md0 /dev/nvme0n1 /dev/nvme1n1 /dev/nvme2n1
    mdadm --assemble --scan

    Расширение массива

    Расширить массив можно с помощью ключа --grow (-G). Сначала добавляется диск, а потом массив расширяется:

    mdadm /dev/md0 --add /dev/nvme3n1

    Проверяем, что диск добавился:

    mdadm --detail /dev/md0
    cat /proc/mdstat

    Если диск добавился, расширяем массив:

    mdadm -G /dev/md0 --raid-devices=4

    Опция --raid-devices указывает новое количество дисков в массиве с учётом добавленного. Рекомендуется задать файл бэкапа на случай прерывания перестроения массива, например, добавить опцию:

    --backup-file=/var/backup

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

    • /proc/sys/dev/raid/speed_limit_min
    • /proc/sys/dev/raid/speed_limit_max

    Убедитесь, что массив расширился:

    cat /proc/mdstat

    Нужно обновить конфигурационный файл с учётом сделанных изменений:

    mdadm --detail --scan >> /etc/mdadm/mdadm.conf

    Возобновление отложенной синхронизации resync=PENDING

    Если синхронизации массива отложена, состояние массива resync=PENDING, то синхронизацию можно возобновить:

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

    или

    mdadm --readwrite /dev/md0

    Переименовать массив

    Останавливаем массив:

    umount /dev/md0
    mdadm --stop /dev/md0

    Собираем массив с новым именем:

    mdadm --assemble /dev/md3 /dev/nvme0n1 /dev/nvme1n1 /dev/nvme2n1 --update=name

    Или для старых версий:

    mdadm –assemble /dev/md3 /dev/nvme0n1 /dev/nvme1n1 /dev/nvme2n1 –update=super-minor

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

    Останавливаем массив:

    umount /dev/md0
    mdadm --stop /dev/md0

    Затем необходимо затереть superblock каждого из составляющих массива:

    mdadm --zero-superblock --force /dev/nvme0n1
    mdadm --zero-superblock --force /dev/nvme1n1
    mdadm --zero-superblock --force /dev/nvme2n1

    Или с помощью dd:

    dd if=/dev/zero of=/dev/nvme0n1 bs=512 count=1
    dd if=/dev/zero of=/dev/nvme1n1 bs=512 count=1
    dd if=/dev/zero of=/dev/nvme2n1 bs=512 count=1

    Теги

     

    Похожие материалы

    mdadm — расширяем RAID5 массив заменой дисков

    Нам предстоит достаточно сложная задача, причём не на один день. Будем расширять программный mdadm массив RAID5 путём замены старых дисков на новые диски большего объёма

    mdadm — добавляем диск большего объёма в RAID5

    Сегодня будем добавлять диск в RAID5, собранный с помощью mdadm. Операция отработана, мы уже это делали раньше. Есть одно маленькое отличие: мы не смогли найти такой же диск.

    Теги