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

▍Шпаргалка по работе с Mdadm

Сборка RAID

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

sudo mdadm --zero-superblock --force /dev/sd{a,b}

  • в данном примере мы зануляем суперблоки для дисков sda и sdb.

Если мы получили ответ:

mdadm: Unrecognised md component device - /dev/sda
mdadm: Unrecognised md component device - /dev/sdb

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

Далее нужно удалить старые метаданные и подпись на дисках:

sudo wipefs --all --force /dev/sd{a,b}
/dev/sda: 8 bytes were erased at offset 0x00000200 (gpt): 45 46 49 20 50 41 52 54
/dev/sda: 8 bytes were erased at offset 0x1d1c1115e00 (gpt): 45 46 49 20 50 41 52 54
/dev/sda: 2 bytes were erased at offset 0x000001fe (PMBR): 55 aa
/dev/sdb: 8 bytes were erased at offset 0x00000200 (gpt): 45 46 49 20 50 41 52 54
/dev/sdb: 8 bytes were erased at offset 0x1d1c1115e00 (gpt): 45 46 49 20 50 41 52 54
/dev/sdb: 2 bytes were erased at offset 0x000001fe (PMBR): 55 aa

Создание рейда

Для сборки зеркального массива применяем следующую команду:

sudo mdadm --create --verbose /dev/md0 --level=mirror --raid-devices=2 /dev/sd{a,b}

  • где:

    /dev/md0 — устройство RAID, которое появится после сборки; --level=mirror — уровень RAID; --raid-devices=2 — количество дисков, из которых собирается массив; /dev/sd{b,c} — сборка выполняется из дисков sda и sdb.

Мы должны увидеть что-то на подобие:

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
mdadm: size set to 1953382464K

Также система задаст контрольный вопрос, хотим ли мы продолжить и создать RAID — нужно ответить y:

Continue creating array? y

Мы увидим что-то на подобие:

mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

Создание файла mdadm.conf

В файле mdadm.conf находится информация о RAID-массивах и компонентах, которые в них входят. Для его создания выполняем следующие команды:

mdadm --detail --scan --verbose | awk '/ARRAY/ {print}' >> /etc/mdadm/mdadm.conf

Пример содержимого:

ARRAY /dev/md0 level=raid1 num-devices=2 metadata=1.2 name=srv:0 UUID=4de6170a:b32ae0c8:dcba68e5:3a2e1623
* в данном примере хранится информация о массиве /dev/md0 — его уровень 1, он собирается из 2-х дисков.

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

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

sudo mkfs.ext4 /dev/md0

Примонтировать раздел можно командой:

sudo mount /dev/md0 /mnt/data

  • в данном случае мы примонтировали наш массив в каталог /mnt/data.

Чтобы данный раздел также монтировался при загрузке системы, добавляем в fstab следующее:

sudo nano /etc/fstab
UUID="7bdf0a43-8c2d-40fb-b996-45c90131879b"        /mnt/data    ext4    relatime,noatime,nodiratime    0 0

UUID можно увидеть в выводе команды blkid

sudo blkid
...
/dev/md0: UUID="7bdf0a43-8c2d-40fb-b996-45c90131879b" BLOCK_SIZE="4096" TYPE="ext4"
...
Монтируем:

sudo mount -a

Мы должны увидеть примонтированный раздел md, например:

df -h
/dev/md0        1,8T   28K  1,7T   1% /mnt/data

Информация о RAID

Посмотреть состояние всех RAID можно командой:

cat /proc/mdstat

В ответ мы получим что-то на подобие:

md0 : active raid1 sdb[1] sda[0] 1046528 blocks super 1.2 [2/2] [UU]

  • где md0 — имя RAID устройства; raid1 sdb[1] sda[0] — уровень избыточности и из каких дисков собран; 1046528 blocks — размер массива; [2/2] [UU] — количество юнитов, которые на данный момент используются. ** мы можем увидеть строку md0 : active(auto-read-only) — это означает, что после монтирования массива, он не использовался для записи.

Подробную информацию о конкретном массиве можно посмотреть командой:

sudo mdadm -D /dev/md0

  • где /dev/md0 — имя RAID устройства.

Пример ответа:

           Version : 1.2
     Creation Time : Mon May 30 08:11:42 2022
        Raid Level : raid1
        Array Size : 1953382464 (1862.89 GiB 2000.26 GB)
     Used Dev Size : 1953382464 (1862.89 GiB 2000.26 GB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

     Intent Bitmap : Internal

       Update Time : Mon May 30 08:25:30 2022
             State : clean, resyncing 
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

Consistency Policy : bitmap

     Resync Status : 7% complete

              Name : srv:0  (local to host srv)
              UUID : 4de6170a:b32ae0c8:dcba68e5:3a2e1623
            Events : 223

    Number   Major   Minor   RaidDevice State
       0       8        0        0      active sync   /dev/sda
       1       8       16        1      active sync   /dev/sdb

  • где:

Version — версия метаданных.

Creation Time — дата в время создания массива.

Raid Level — уровень RAID.

Array Size — объем дискового пространства для RAID.

Used Dev Size — используемый объем для устройств. Для каждого уровня будет индивидуальный расчет: RAID1 — равен половине общего размера дисков, RAID5 — равен размеру, используемому для контроля четности.

Raid Devices — количество используемых устройств для RAID.

Total Devices — количество добавленных в RAID устройств.

Update Time — дата и время последнего изменения массива.

State — текущее состояние. clean — все в порядке.

Active Devices — количество работающих в массиве устройств.

Working Devices — количество добавленных в массив устройств в рабочем состоянии.

Failed Devices — количество сбойных устройств.

Spare Devices — количество запасных устройств.

Consistency Policy — политика согласованности активного массива (при неожиданном сбое). По умолчанию используется resync — полная ресинхронизация после восстановления. Также могут быть bitmap, journal, ppl.

Name — имя компьютера.

UUID — идентификатор для массива.

Events — количество событий обновления.

Chunk Size (для RAID5) — размер блока в килобайтах, который пишется на разные диски.

Также, информацию о разделах и дисковом пространстве массива можно посмотреть командой fdisk:

sudo fdisk -l /dev/md0

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

Для проверки целостности вводим:

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

Результат проверки смотрим командой:

cat /sys/block/md0/md/mismatch_cnt

  • если команда возвращает 0, то с массивом все в порядке.

Остановка проверки:

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

Замена вышедшего диска из строя mdadm

Помечаем диск как сбойный:

sudo mdadm /dev/md0 -f /dev/sde1

Удаляем диск из массива:

sudo mdadm /dev/md0 --remove /dev/sde1

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

sudo mdadm /dev/md0 -a /dev/sde1

Идет ребилд, все ок:

/dev/md0:
        Version : 1.2
  Creation Time : Sun Apr 19 12:55:51 2015
     Raid Level : raid5
     Array Size : 6836404736 (6519.70 GiB 7000.48 GB)
  Used Dev Size : 976629248 (931.39 GiB 1000.07 GB)
   Raid Devices : 8
  Total Devices : 8
    Persistence : Superblock is persistent

    Update Time : Sun Apr 19 20:46:21 2015
          State : clean, degraded, recovering 
 Active Devices : 7
Working Devices : 8
 Failed Devices : 0
  Spare Devices : 1

         Layout : left-symmetric
     Chunk Size : 512K

 Rebuild Status : 0% complete

           Name : srv:0  (local to host srv)
           UUID : 5d022f24:5885cb2d:49c40425:39bb7bc1
         Events : 81

    Number   Major   Minor   RaidDevice State
       0       8        1        0      active sync   /dev/sda1
       1       8       49        1      active sync   /dev/sdd1
       8       8       65        2      spare rebuilding   /dev/sde1
       3       8       81        3      active sync   /dev/sdf1
       4       8       97        4      active sync   /dev/sdg1
       5       8      145        5      active sync   /dev/sdj1
       6       8      161        6      active sync   /dev/sdk1
       7       8      177        7      active sync   /dev/sdl1

Если диск помечен как сбойный (F) - sdh1[8](F):

cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md0 : active raid5 sdm1[7] sdi1[3] sdh1[8](F) sdj1[4] sdk1[5] sdl1[6] sdd1[1] sda1[0]
      6836404736 blocks super 1.2 level 5, 512k chunk, algorithm 2 [8/7] [UU_UUUUU]

unused devices: <none>

Удаляем его

sudo mdadm --manage /dev/md0 --remove /dev/sdh1

Добавляем заново:

sudo mdadm /dev/md0 -a /dev/sdh1

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

В данном примере рассмотрим вариант добавления активного диска к RAID, который будет использоваться для работы, а не в качестве запасного.

Добавляем диск к массиву:

sudo mdadm /dev/md0 --add /dev/sde

Новый диск мы увидим в качестве spare:

4 8 16 - spare /dev/sde

Теперь расширяем RAID:

sudo mdadm -G /dev/md0 --raid-devices=3

  • в данном примере подразумевается, что у нас RAID 1 и мы добавили к нему 3-й диск.

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

При удалении массива внимателнее смотрите на имена массива и дисков и подставляйте свои значения.

Если нам нужно полностью разобрать RAID, сначала размонтируем и остановим его:

sudo umount /mnt/data

  • где /mnt/data — каталог монтирования нашего RAID.

sudo mdadm -S /dev/md0

  • где /dev/md0 — массив, который мы хотим разобрать.
  • если мы получим ошибку mdadm: fail to stop array /dev/md0: Device or resource busy, с помощью команды lsof -f -- /dev/md0 смотрим процессы, которые используют раздел и останавливаем их.

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

sudo mdadm --zero-superblock /dev/sda

sudo mdadm --zero-superblock /dev/sdb

sudo mdadm --zero-superblock /dev/sdc
* где диски /dev/sda, /dev/sdb, /dev/sdc были частью массива md0.

А также удаляем метаданные и подпись:

sudo wipefs --all --force /dev/sd{a,b,c}

Запуск массива

Чтобы запустить все массивы, определенные в конфигурации или в /proc/mdstat, введите:

sudo mdadm --assemble --scan

Чтобы запустить конкретный массив, вы можете передать его в качестве аргумента в mdadm –assemble:

sudo mdadm --assemble /dev/md0

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

sudo mdadm --assemble /dev/md0 /dev/sda /dev/sdb /dev/sdc /dev/sdd
Собрав массив, его можно смонтировать как обычно:
sudo mount /dev/md0 /mnt/md0
Теперь массив доступен в точке монтирования.

К началу