Меню

Mdadm проверка на ошибки

Соберу в одном месте список полезных команд для 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

    Обновлено Обновлено: 10.12.2022
    Опубликовано Опубликовано: 08.03.2019

    Тематические термины: RAID, Linux

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

    Установка утилиты mdadm
    Создание RAID
        Подготовка носителей
        Сборка отказоустойчивого массива
    Файл mdadm.conf
    Создание файловой системы и монтирование
    Получение информации о RAID
    Проверка целостности массива
    Восстановление RAID
        Заменой диска
        Пересборка массива
    Использование Hot Spare
    Добавление диска к массиву
    Удаление массива

    Установка mdadm

    Утилита mdadm может быть установлена одной командой.

    Если используем CentOS / Red Hat:

    yum install mdadm

    Если используем Ubuntu / Debian:

    apt-get install mdadm

    Сборка RAID

    Перед сборкой, стоит подготовить наши носители. Затем можно приступать к созданию рейд-массива.

    Подготовка носителей

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

    mdadm —zero-superblock —force /dev/sd{b,c}

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

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

    mdadm: Unrecognised md component device — /dev/sdb
    mdadm: Unrecognised md component device — /dev/sdc

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

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

    wipefs —all —force /dev/sd{b,c}

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

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

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

    * где:

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

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

    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 1046528K

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

    Continue creating array? y

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

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

    Вводим команду:

    lsblk

    … и находим информацию о том, что у наших дисков sdb и sdc появился раздел md0, например:


    sdb                     8:16   0    2G  0 disk  
    ??md0                   9:0    0    2G  0 raid1 
    sdc                     8:32   0    2G  0 disk  
    ??md0                   9:0    0    2G  0 raid1 

    * в примере мы видим собранный raid1 из дисков sdb и sdc.

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

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

    mkdir /etc/mdadm

    echo «DEVICE partitions» > /etc/mdadm/mdadm.conf

    mdadm —detail —scan —verbose | awk ‘/ARRAY/ {print}’ >> /etc/mdadm/mdadm.conf

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

    DEVICE partitions
    ARRAY /dev/md0 level=raid1 num-devices=2 metadata=1.2 name=proxy.dmosk.local:0 UUID=411f9848:0fae25f9:85736344:ff18e41d

    * в данном примере хранится информация о массиве /dev/md0 — его уровень 1, он собирается из 2-х дисков.

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

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

    mkfs.ext4 /dev/md0

    * данной командой мы создаем на md0 файловую систему ext4.

    или:

    mkfs.xfs /dev/md0

    * для файловой системы xfs.

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

    mount /dev/md0 /mnt

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

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

    Сначала смотрим идентификатор раздела:

    blkid

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

    /dev/md0: UUID=»ffa7c082-7613-4dbc-ae62-3f5508652cf6″ TYPE=»ext4″

    * в моем примере мы будем использовать идентификатор ffa7c082-7613-4dbc-ae62-3f5508652cf6.

    Открываем теперь fstab и добавляем строку:

    vi /etc/fstab

    UUID=»ffa7c082-7613-4dbc-ae62-3f5508652cf6″    /mnt    ext4    defaults    0 0

    Если ранее мы монтировали раздел в каталог /mnt, вводим:

    umount /mnt

    И после: 

    mount -a

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

    df -h

    /dev/md0               990M         2,6M  921M            1% /mnt

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

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

    cat /proc/mdstat

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

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

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

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

    mdadm -D /dev/md0

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

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

               Version : 1.2
         Creation Time : Wed Mar  6 09:41:06 2019
            Raid Level : raid1
            Array Size : 1046528 (1022.00 MiB 1071.64 MB)
         Used Dev Size : 1046528 (1022.00 MiB 1071.64 MB)
          Raid Devices : 2
         Total Devices : 2
           Persistence : Superblock is persistent

           Update Time : Wed Mar  6 09:41:26 2019
                 State : clean 
        Active Devices : 2
       Working Devices : 2
        Failed Devices : 0
         Spare Devices : 0

    Consistency Policy : resync

                  Name : proxy.dmosk.local:0  (local to host proxy.dmosk.local)
                  UUID : 304ad447:a04cda4a:90457d04:d9a4e884
                Events : 17

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

    * где:

    • 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) — размер блока в килобайтах, который пишется на разные диски.

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

    man mdadm

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

    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

    Восстановление RAID

    Рассмотрим два варианта восстановлении массива.

    Замена диска

    В случае выхода из строя одного из дисков массива, команда cat /proc/mdstat покажет следующее:

    cat /proc/mdstat

    Personalities : [raid1] 
    md0 : active raid1 sdb[0]
          1046528 blocks super 1.2 [2/1] [U_]

    * о наличии проблемы нам говорит нижнее подчеркивание вместо U — [U_] вместо [UU].

    Или:

    mdadm -D /dev/md0


           Update Time : Thu Mar  7 20:20:40 2019
                 State : clean, degraded

    * статус degraded говорит о проблемах с RAID.

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

    mdadm /dev/md0 —remove /dev/sdc

    Теперь добавим новый:

    mdadm /dev/md0 —add /dev/sde

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

    mdadm -D /dev/md0


           Update Time : Thu Mar  7 20:57:13 2019
                 State : clean, degraded, recovering

        Rebuild Status : 40% complete

    recovering говорит, что RAID восстанавливается; Rebuild Status — текущее состояние восстановления массива (в данном примере он восстановлен на 40%).

    Если синхронизация выполняется слишком медленно, можно увеличить ее скорость. Для изменения скорости синхронизации вводим:

    echo ‘10000’ > /proc/sys/dev/raid/speed_limit_min

    * по умолчанию скорость speed_limit_min = 1000 Кб, speed_limit_max — 200000 Кб. Для изменения скорости, можно поменять только минимальную.

    Пересборка массива

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

    mdadm —assemble —scan

    * данная команда сама найдет необходимую конфигурацию и восстановит RAID.

    Также, мы можем указать, из каких дисков пересобрать массив:

    mdadm —assemble /dev/md0 /dev/sdb /dev/sdc

    Запасной диск (Hot Spare)

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

    Диском Hot Spare станет тот, который просто будет добавлен к массиву:

    mdadm /dev/md0 —add /dev/sdd

    Информация о массиве изменится, например:

    mdadm -D /dev/md0


        Number   Major   Minor   RaidDevice State
           0       8       16        0      active sync   /dev/sdb
           2       8       48        1      active sync   /dev/sdc

           3       8       32        —      spare   /dev/sdd

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

    mdadm /dev/md0 —fail /dev/sdb

    И смотрим состояние:

    mdadm -D /dev/md0


        Rebuild Status : 37% complete

        Number   Major   Minor   RaidDevice State
           3       8       32        0      spare rebuilding   /dev/sdd
           2       8       48        1      active sync   /dev/sdc

           0       8       16        —      faulty   /dev/sdb

    * как видим, начинается ребилд. На замену вышедшему из строя sdb встал hot-spare sdd.

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

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

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

    mdadm /dev/md0 —add /dev/sde

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

    4       8       16        —      spare   /dev/sde

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

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

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

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

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

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

    umount /mnt

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

    mdadm -S /dev/md0

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

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

    mdadm —zero-superblock /dev/sdb

    mdadm —zero-superblock /dev/sdc

    mdadm —zero-superblock /dev/sdd

    * где диски /dev/sdb/dev/sdc/dev/sdd были частью массива md0.

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

    wipefs —all —force /dev/sd{b,c,d}

    Contents

    • 1 Detecting, querying and testing
      • 1.1 Detecting a drive failure
      • 1.2 Querying the array status
      • 1.3 Simulating a drive failure
        • 1.3.1 Force-fail by hardware
        • 1.3.2 Force-fail by software
      • 1.4 Simulating data corruption
      • 1.5 Monitoring RAID arrays

    Detecting, querying and testing

    This section is about life with a software RAID system, that’s
    communicating with the arrays and tinkertoying them.

    Note that when it comes to md devices manipulation, you should always
    remember that you are working with entire filesystems. So, although
    there could be some redundancy to keep your files alive, you must
    proceed with caution.

    Detecting a drive failure

    Firstly: mdadm has an excellent ‘monitor’ mode which will send an email when a problem is detected in any array (more about that later).

    Of course the standard log and stat files will record more details about a drive failure.

    It’s always a must for /var/log/messages to fill screens with tons of
    error messages, no matter what happened. But, when it’s about a disk
    crash, huge lots of kernel errors are reported. Some nasty examples,
    for the masochists,

        kernel: scsi0 channel 0 : resetting for second half of retries.
        kernel: SCSI bus is being reset for host 0 channel 0.
        kernel: scsi0: Sending Bus Device Reset CCB #2666 to Target 0
        kernel: scsi0: Bus Device Reset CCB #2666 to Target 0 Completed
        kernel: scsi : aborting command due to timeout : pid 2649, scsi0, channel 0, id 0, lun 0 Write (6) 18 33 11 24 00
        kernel: scsi0: Aborting CCB #2669 to Target 0
        kernel: SCSI host 0 channel 0 reset (pid 2644) timed out - trying harder
        kernel: SCSI bus is being reset for host 0 channel 0.
        kernel: scsi0: CCB #2669 to Target 0 Aborted
        kernel: scsi0: Resetting BusLogic BT-958 due to Target 0
        kernel: scsi0: *** BusLogic BT-958 Initialized Successfully ***
    

    Most often, disk failures look like these,

        kernel: sidisk I/O error: dev 08:01, sector 1590410
        kernel: SCSI disk error : host 0 channel 0 id 0 lun 0 return code = 28000002
    

    or these

        kernel: hde: read_intr: error=0x10 { SectorIdNotFound }, CHS=31563/14/35, sector=0
        kernel: hde: read_intr: status=0x59 { DriveReady SeekComplete DataRequest Error }
    

    And, as expected, the classic /proc/mdstat look will also reveal problems,

        Personalities : [linear] [raid0] [raid1] [translucent]
        read_ahead not set
        md7 : active raid1 sdc9[0] sdd5[8] 32000 blocks [2/1] [U_]
    

    Later on this section we will learn how to monitor RAID with mdadm so
    we can receive alert reports about disk failures. Now it’s time to
    learn more about /proc/mdstat interpretation.

    Querying the array status

    You can always take a look at the array status by doing cat /proc/mdstat
    It won’t hurt. Take a look at the /proc/mdstat page to learn how to read the file.

    Finally, remember that you can also use mdadm to check
    the arrays out.

             mdadm --detail /dev/mdx
    

    These commands will show spare and failed disks loud and clear.

    Simulating a drive failure

    If you plan to use RAID to get fault-tolerance, you may also want to
    test your setup, to see if it really works. Now, how does one
    simulate a disk failure?

    The short story is, that you can’t, except perhaps for putting a fire
    axe thru the drive you want to «simulate» the fault on. You can never
    know what will happen if a drive dies. It may electrically take the
    bus it is attached to with it, rendering all drives on that bus
    inaccessible. The drive may also just report a read/write fault
    to the SCSI/IDE/SATA layer, which, if done properly, in turn makes the RAID layer handle this
    situation gracefully. This is fortunately the way things often go.

    Remember, that you must be running RAID-{1,4,5,6,10} for your array to be
    able to survive a disk failure. Linear- or RAID-0 will fail
    completely when a device is missing.

    Force-fail by hardware

    If you want to simulate a drive failure, you can just plug out the
    drive. If your HW does not support disk hot-unplugging, you should do this with the power off (if you are interested in testing whether your data can survive with a disk less than the usual number, there is no point in being a hot-plug cowboy here. Take the system down, unplug the disk, and boot it up again)

    Look in the syslog, and look at /proc/mdstat to see how the RAID is
    doing. Did it work? Did you get an email from the mdadm monitor?

    Faulty disks should appear marked with an (F) if you look at
    /proc/mdstat. Also, users of mdadm should see the device state as
    faulty.

    When you’ve re-connected the disk again (with the power off, of
    course, remember), you can add the «new» device to the RAID again,
    with the mdadm —add’ command.

    Force-fail by software

    You can just simulate a drive failure without unplugging things.
    Just running the command

         mdadm --manage --set-faulty /dev/md1 /dev/sdc2
    

    should be enough to fail the disk /dev/sdc2 of the array /dev/md1.

    Now things move up and fun appears. First, you should see something
    like the first line of this on your system’s log. Something like the
    second line will appear if you have spare disks configured.

         kernel: raid1: Disk failure on sdc2, disabling device.
         kernel: md1: resyncing spare disk sdb7 to replace failed disk
    

    Checking /proc/mdstat out will show the degraded array. If there was a
    spare disk available, reconstruction should have started.

    Another useful command at this point is:

         mdadm --detail /dev/md1
    

    Enjoy the view.

    Now you’ve seen how it goes when a device fails. Let’s fix things up.

    First, we will remove the failed disk from the array. Run the command

         mdadm /dev/md1 -r /dev/sdc2
    

    Note that mdadm cannot pull a disk out of a running array.
    For obvious reasons, only faulty disks can be hot-removed from an
    array (even stopping and unmounting the device won’t help — if you ever want
    to remove a ‘good’ disk, you have to tell the array to put it into the
    ‘failed’ state as above).

    Now we have a /dev/md1 which has just lost a device. This could be a
    degraded RAID or perhaps a system in the middle of a reconstruction
    process. We wait until recovery ends before setting things back to
    normal.

    So the trip ends when we send /dev/sdc2 back home.

         mdadm /dev/md1 -a /dev/sdc2
    

    As the prodigal son returns to the array, we’ll see it becoming an
    active member of /dev/md1 if necessary. If not, it will be marked as
    a spare disk. That’s management made easy.

    Simulating data corruption

    RAID (be it hardware or software), assumes that if a write to a disk
    doesn’t return an error, then the write was successful. Therefore, if
    your disk corrupts data without returning an error, your data will
    become corrupted. This is of course very unlikely to happen, but it
    is possible, and it would result in a corrupt filesystem.

    RAID cannot, and is not supposed to, guard against data corruption on
    the media. Therefore, it doesn’t make any sense either, to purposely
    corrupt data (using dd for example) on a disk to see how the RAID
    system will handle that. It is most likely (unless you corrupt the
    RAID superblock) that the RAID layer will never find out about the
    corruption, but your filesystem on the RAID device will be corrupted.

    This is the way things are supposed to work. RAID is not a guarantee
    for data integrity, it just allows you to keep your data if a disk
    dies (that is, with RAID levels above or equal one, of course).

    Monitoring RAID arrays

    You can run mdadm as a daemon by using the follow-monitor mode. If
    needed, that will make mdadm send email alerts to the system
    administrator when arrays encounter errors or fail. Also, follow mode
    can be used to trigger contingency commands if a disk fails, like
    giving a second chance to a failed disk by removing and reinserting
    it, so a non-fatal failure could be automatically solved.

    Let’s see a basic example. Running

        mdadm --monitor --daemonise --mail=root@localhost --delay=1800 /dev/md2
    

    should release a mdadm daemon to monitor /dev/md2. The —daemonise switch tells mdadm to run as a deamon. The delay parameter means that polling will be done in intervals of 1800 seconds.
    Finally, critical events and fatal errors should be e-mailed to the
    system manager. That’s RAID monitoring made easy.

    Finally, the —program or —alert parameters specify the program to be
    run whenever an event is detected.

    Note that, when supplying the -f switch, the mdadm daemon will never exit once it decides that there
    are arrays to monitor, so it should normally be run in the background.
    Remember that your are running a daemon, not a shell command.
    If mdadm is ran to monitor without the -f switch, it will behave as a normal shell command and wait for you to stop it.

    Using mdadm to monitor a RAID array is simple and effective. However,
    there are fundamental problems with that kind of monitoring — what
    happens, for example, if the mdadm daemon stops? In order to overcome
    this problem, one should look towards «real» monitoring solutions.
    There are a number of free software, open source, and even commercial
    solutions available which can be used for Software RAID monitoring on
    Linux. A search on FreshMeat should return a good number of matches.

    The point of RAID with redundancy is that it will keep going as long as it can, but obviously it will detect errors that put it into a degraded mode, such as a failing disk. You can show the current status of an array with mdadm --detail (abbreviated as mdadm -D):

    # mdadm -D /dev/md0
    <snip>
           0       8        5        0      active sync   /dev/sda5
           1       8       23        1      active sync   /dev/sdb7
    

    Furthermore the return status of mdadm -D is nonzero if there is any problem such as a failed component (1 indicates an error that the RAID mode compensates for, and 2 indicates a complete failure).

    You can also get a quick summary of all RAID device status by looking at /proc/mdstat. You can get information about a RAID device in /sys/class/block/md*/md/* as well; see Documentation/md.txt in the kernel documentation. Some /sys entries are writable as well; for example you can trigger a full check of md0 with echo check >/sys/class/block/md0/md/sync_action.

    In addition to these spot checks, mdadm can notify you as soon as something bad happens. Make sure that you have MAILADDR root in /etc/mdadm.conf (some distributions (e.g. Debian) set this up automatically). Then you will receive an email notification as soon as an error (a degraded array) occurs.

    Make sure that you do receive mail send to root on the local machine (some modern distributions omit this, because they consider that all email goes through external providers — but receiving local mail is necessary for any serious system administrator). Test this by sending root a mail: echo hello | mail -s test root@localhost. Usually, a proper email setup requires two things:

    • Run an MTA on your local machine. The MTA must be set up at least to allow local mail delivery. All distributions come with suitable MTAs, pick anything (but not nullmailer if you want the email to be delivered locally).

    • Redirect mail going to system accounts (at least root) to an address that you read regularly. This can be your account on the local machine, or an external email address. With most MTAs, the address can be configured in /etc/aliases; you should have a line like

       root: djsmiley2k
      

      for local delivery, or

       root: djsmiley2k@mail-provider.example.com
      

      for remote delivery. If you choose remote delivery, make sure that your MTA is configured for that. Depending on your MTA, you may need to run the newaliases command after editing /etc/aliases.

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

    Содержание:

    • Установка утилиты управления программным RAID — mdadm
    • Создание RAID из 2-х дисков
    • Создание файловой системы на RAID, монтирование
    • Просмотр состояния, проверка целостности RAID массива
    • Восстановление RAID при сбое, замена диска
    • Добавление и удаление дисков в RAID массив на Linux
    • Добавление Hot-Spare диска в RAID массив
    • Удаление массива
    • Mdmonitor: Мониторинг состояния RAID и email оповещения
    • RAID массив в состоянии inactive

    Установка утилиты управления программным 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
    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
    vda 253:0 0 20G 0 disk
    ├─vda1 253:1 0 512M 0 part /boot
    └─vda2 253:2 0 19.5G 0 part /
    vdb 253:16 0 20G 0 disk
    └─md0 9:0 0 20G 0 raid1
    vdc 253:32 0 20G 0 disk
    └─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
     devtmpfs 485M 0 485M 0% /dev
    tmpfs 496M 0 496M 0% /dev/shm
    tmpfs 496M 44M 452M 9% /run
    tmpfs 496M 0 496M 0% /sys/fs/cgroup
    /dev/vda2 20G 1.4G 19G 7% /
    /dev/vda1 488M 100M 353M 23% /boot
    tmpfs 100M 0 100M 0% /run/user/0
    /dev/md0 20G 45M 19G 1% /backup
    

    Массив смонтировался без ошибок. Чтобы не монтировать устройство каждый раз вручную, внесем изменения в 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]
    md0 : active raid1 vdc[1] vdb[0]
    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
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes

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

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

    # cat /proc/mdstat

    Personalities : [raid1]
    md0 : active raid1 vdb[0]
    20954112 blocks super 1.2 [2/1] [U_]
    

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

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

    # mdadm -D /dev/md0

    /dev/md0:
    Version : 1.2
    Creation Time : Tue Oct 29 12:39:22 2019
    Raid Level : raid1
    Array Size : 20954112 (19.98 GiB 21.46 GB)
    Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
    Raid Devices : 2
    Total Devices : 2
    Persistence : Superblock is persistent
    Update Time : Tue Oct 29 14:41:13 2019
    State : clean, degraded
    Active Devices : 1
    Working Devices : 1
    Failed Devices : 1
    

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

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

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

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

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

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

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

    # mdadm -D /dev/md0

    /dev/md0:
    Version : 1.2
    Creation Time : Tue Oct 29 12:39:22 2019
    Raid Level : raid1
    Array Size : 20954112 (19.98 GiB 21.46 GB)
    Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
    Raid Devices : 2
    Total Devices : 2
    Persistence : Superblock is persistent
    Update Time : Tue Oct 29 14:50:20 2019
    State : clean, degraded, recovering
    Active Devices : 1
    Working Devices : 2
    Failed Devices : 0
    Spare Devices : 1
    Consistency Policy : resync
    Rebuild Status : 69% complete
    Name : server.vpn.ru:0 (local to host server.vpn.ru)
    UUID : 9d59b1fb:7b0a7b6d:15a75459:8b1637a2
    Events : 42
    Number Major Minor RaidDevice State
    0 253 16 0 active sync /dev/vdb
    2 253 48 1 spare rebuilding /dev/vdd
    

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

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

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

    State : clean
    Active Devices : 2
    Working Devices : 2
    Failed Devices : 0
    Spare Devices : 0
    

    Добавление и удаление дисков в 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
    3 253 32 0 active sync /dev/vdc
    2 253 48 1 active sync /dev/vdd
    4 253 16 2 active sync /dev/vdb
    
    

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

    Если вы хотите безвозвратно удалить 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]
    md0 : inactive vdc[1] vdb[0]
    20954112 blocks super
    unused devices: <none>
    

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

    # mdadm --stop /dev/md0

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

    # mdadm --assemble --scan –force

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

    # mount -a

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

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

    Управление программным RAID-массивом в Linux выполняется с помощью программы mdadm.

    У программы mdadm есть несколько режимов работы.

    Assemble (сборка)
    Собрать компоненты ранее созданного массива в массив. Компоненты можно указывать явно, но можно и не указывать — тогда выполняется их поиск по суперблокам.
    Build (построение)
    Собрать массив из компонентов, у которых нет суперблоков. Не выполняются никакие проверки, создание и сборка массива в принципе ничем не отличаются.
    Create (создание)
    Создать новый массив на основе указанных устройств. Использовать суперблоки размещённые на каждом устройстве.
    Monitor (наблюдение)
    Следить за изменением состояния устройств. Для RAID0 этот режим не имеет смысла.
    Grow (расширение или уменьшение)
    Расширение или уменьшение массива, включаются или удаляются новые диски.
    Incremental Assembly (инкрементальная сборка)
    Добавление диска в массив.
    Manage (управление)
    Разнообразные операции по управлению массивом, такие как замена диска и пометка как сбойного.
    Misc (разное)
    Действия, которые не относятся ни к одному из перечисленных выше режимов работы.
    Auto-detect (автоообнаружение)
    Активация автоматически обнаруживаемых массивов в ядре Linux.

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

     mdadm [mode] [array] [options]
    

    Режимы:

    • -A, —assemble — режим сборки
    • -B, —build — режим построения
    • -C, —create — режим создания
    • -F, —follow, —monitor — режим наблюдения
    • -G, —grow — режим расширения
    • -I, —incremental — режим инкрементальной сборки

    Настройка программного RAID-массива

    Рассмотрим как выполнить настройку RAID-массива 5 уровня на трёх дисковых разделах. Мы будем использовать разделы:

       /dev/hde1
       /dev/hdf2
       /dev/hdg1
    

    В том случае если разделы иные, не забудьте использовать соответствующие имена файлов.

     Создание разделов

    Нужно определить на каких физических разделах будет создаваться RAID-массив. Если разделы уже есть, нужно найти свободные (fdisk -l). Если разделов ещё нет, но есть неразмеченное место, их можно создать с помощью программ fdisk или cfdisk.

    Просмотреть какие есть разделы:

       %# fdisk -l
    
       Disk /dev/hda: 12.0 GB, 12072517632 bytes
       255 heads, 63 sectors/track, 1467 cylinders
       Units = cylinders of 16065 * 512 = 8225280 bytes
    
       Device Boot    Start       End    Blocks   Id  System
       /dev/hda1   *         1        13    104391   83  Linux
       /dev/hda2            14       144   1052257+  83  Linux
       /dev/hda3           145       209    522112+  82  Linux swap
       /dev/hda4           210      1467  10104885    5  Extended
       /dev/hda5           210       655   3582463+  83  Linux
       ...
       ...
       /dev/hda15         1455      1467    104391   83  Linux
    

    Просмотреть, какие разделы куда смонтированы, и сколько свободного места есть на них (размеры в килобайтах):

       %# df -k
       Filesystem           1K-blocks      Used Available Use% Mounted on
       /dev/hda2              1035692    163916    819164  17% /
       /dev/hda1               101086      8357     87510   9% /boot
       /dev/hda15              101086      4127     91740   5% /data1
       ...
       ...
       ...
       /dev/hda7              5336664    464228   4601344  10% /var
    

    Размонтирование

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

       %# umount /dev/hde1
       %# umount /dev/hdf2
       %# umount /dev/hdg1
    

     Изменение типа разделов

    Желательно (но не обязательно) изменить тип разделов, которые будут входить в RAID-массив и установить его равным FD (Linux RAID autodetect). Изменить тип раздела можно с помощью fdisk.

    Рассмотрим как это делать на примере раздела /dev/hde1.

        %# fdisk /dev/hde
        The number of cylinders for this disk is set to 8355.
        There is nothing wrong with that, but this is larger than 1024,
        and could in certain setups cause problems with:
        1) software that runs at boot time (e.g., old versions of LILO)
        2) booting and partitioning software from other OSs
        (e.g., DOS FDISK, OS/2 FDISK)
    
        Command (m for help):
    
        Use FDISK Help
    
        Now use the fdisk m command to get some help:
    
        Command (m for help): m
        ...
        ...
        p   print the partition table
        q   quit without saving changes
        s   create a new empty Sun disklabel
        t   change a partition's system id
        ...
        ...
        Command (m for help):
    
        Set The ID Type To FD
    
        Partition /dev/hde1 is the first partition on disk /dev/hde.
        Modify its type using the t command, and specify the partition number
        and type code.
        You also should use the L command to get a full listing
        of ID types in case you forget.
    
        Command (m for help): t
        Partition number (1-5): 1
        Hex code (type L to list codes): L
    
        ...
        ...
        ...
        16  Hidden FAT16    61   SpeedStor       f2  DOS secondary
        17  Hidden HPFS/NTF 63  GNU HURD or Sys fd  Linux raid auto
        18  AST SmartSleep  64  Novell Netware  fe  LANstep
        1b  Hidden Win95 FA 65  Novell Netware  ff  BBT
        Hex code (type L to list codes): fd
        Changed system type of partition 1 to fd (Linux raid autodetect)
    
        Command (m for help):
    
        Make Sure The Change Occurred
    
        Use the p command to get the new proposed partition table:
    
        Command (m for help): p
    
        Disk /dev/hde: 4311 MB, 4311982080 bytes
        16 heads, 63 sectors/track, 8355 cylinders
        Units = cylinders of 1008 * 512 = 516096 bytes
    
        Device Boot    Start       End    Blocks   Id  System
        /dev/hde1             1      4088   2060320+  fd  Linux raid autodetect
        /dev/hde2          4089      5713    819000   83  Linux
        /dev/hde4          6608      8355    880992    5  Extended
        /dev/hde5          6608      7500    450040+  83  Linux
        /dev/hde6          7501      8355    430888+  83  Linux
    
        Command (m for help):
    
        Save The Changes
    
        Use the w command to permanently save the changes to disk /dev/hde:
    
        Command (m for help): w
        The partition table has been altered!
    
        Calling ioctl() to re-read partition table.
        WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
        The kernel still uses the old table.
        The new table will be used at the next reboot.
        Syncing disks.
    

    Аналогичным образом нужно изменить тип раздела для всех остальных разделов, входящих в RAID-массив.

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

    Создание RAID-массива выполняется с помощью программы mdadm (ключ —create). Мы воспользуемся опцией —level, для того чтобы создать RAID-массив 5 уровня. С помощью ключа —raid-devices укажем устройства, поверх которых будет собираться RAID-массив.

        %# mdadm --create --verbose /dev/md0 --level=5  --raid-devices=3 /dev/hde1 /dev/hdf2 /dev/hdg1
        mdadm: layout defaults to left-symmetric
        mdadm: chunk size defaults to 64K
        mdadm: /dev/hde1 appears to contain an ext2fs file system
            size=48160K  mtime=Sat Jan 27 23:11:39 2007
        mdadm: /dev/hdf2 appears to contain an ext2fs file system
            size=48160K  mtime=Sat Jan 27 23:11:39 2007
        mdadm: /dev/hdg1 appears to contain an ext2fs file system
            size=48160K  mtime=Sat Jan 27 23:11:39 2007
        mdadm: size set to 48064K
        Continue creating array? y
        mdadm: array /dev/md0 started.
    

    Если вы хотите сразу создать массив, где диска не хватает (degraded) просто укажите слово missing вместо имени устройства. Для RAID5 это может быть только один диск; для RAID6 — не более двух; для RAID1 — сколько угодно, но должен быть как минимум один рабочий.

    Проверка правильности сборки

    Убедиться, что RAID-массив проинициализирован корректно можно просмотрев файл /proc/mdstat. В этом файле отражается текущее состояние RAID-массива.

        %# cat /proc/mdstat
        Personalities : [raid5]
        read_ahead 1024 sectors
        md0 : active raid5 hdg1[2] hde1[1] hdf2[0]
            4120448 blocks level 5, 32k chunk, algorithm 3 [3/3] [UUU]
        unused devices: <none>
    

    Обратите внимание на то, как называется новый RAID-массив. В нашем случае он называется /dev/md0. Мы будем обращаться к массиву по этому имени.

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

    Новый RAID-раздел нужно отформатировать, т.е. создать на нём файловую систему. Сделать это можно при помощи программы из семейства mkfs. Если мы будем создавать файловую систему ext3, воспользуемся программой mkfs.ext3. :

        %# mkfs.ext3 /dev/md0
        mke2fs 1.39 (29-May-2006)
        Filesystem label=
        OS type: Linux
        Block size=1024 (log=0)
        Fragment size=1024 (log=0)
        36144 inodes, 144192 blocks
        7209 blocks (5.00%) reserved for the super user
        First data block=1
        Maximum filesystem blocks=67371008
        18 block groups
        8192 blocks per group, 8192 fragments per group
        2008 inodes per group
        Superblock backups stored on blocks:
                8193, 24577, 40961, 57345, 73729
    
        Writing inode tables: done
        Creating journal (4096 blocks): done
        Writing superblocks and filesystem accounting information: done
        This filesystem will be automatically checked every 33 mounts or
        180 days, whichever comes first.  Use tune2fs -c or -i to override.
    

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

          %# 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.

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

     mdadm --detail --scan --verbose
    

    Вот пример её использования:

        %# mdadm --detail --scan --verbose
        ARRAY /dev/md0 level=raid5 num-devices=4
        UUID=77b695c4:32e5dd46:63dd7d16:17696e09
        devices=/dev/hde1,/dev/hdf2,/dev/hdg1
    

    Если файла mdadm.conf ещё нет, можно его создать:

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

    Создание точки монтирования для RAID-массива

    Поскольку мы создали новую файловую систему, вероятно, нам понадобится и новая точка монтирования. Назовём её /raid.

        %# mkdir /raid
    

    Изменение /etc/fstab

    Для того чтобы файловая система, созданная на новом RAID-массиве автоматически монтировалась при загрузке, добавим соответствующую запись в файл /etc/fstab хранящий список автоматически монтируемых при загрузке файловых систем.

       /dev/md0      /raid     ext3    defaults    1 2
    

    Если мы объединяли в RAID-массив разделы, которые использовались раньше, нужно отключить их монтирование: удалить или закомментировать соответствующие строки в файле /etc/fstab. Закомментировать строку можно символом #.

        #/dev/hde1       /data1        ext3    defaults        1 2
        #/dev/hdf2       /data2        ext3    defaults        1 2
        #/dev/hdg1       /data3        ext3    defaults        1 2
    

    Монтирование файловой системы нового RAID-массива

    Для того чтобы получить доступ к файловой системе, расположенной на новом RAID-массиве, её нужно смонтировать. Монтирование выполняется с помощью команды mount.

    Если новая файловая система добавлена в файл /etc/fstab, можно смонтировать её командой mount -a (смонтируются все файловые системы, которые должны монтироваться при загрузке, но сейчас не смонтированы).

       %# mount -a
    

    Можно смонтировать только нужный нам раздел (при условии, что он указан в /etc/fstab).

       %# mount /raid
    

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

       %# mount /dev/md0 /raid
    

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

    Информация о состоянии RAID-массива находится в файле /proc/mdstat.

        %# raidstart /dev/md0
        %# cat /proc/mdstat
        Personalities : [raid5]
        read_ahead 1024 sectors
        md0 : active raid5 hdg1[2] hde1[1] hdf2[0]
            4120448 blocks level 5, 32k chunk, algorithm 3 [3/3] [UUU]
        unused devices: <none>
    

    Если в файле информация постоянно изменяется, например, идёт пересборка массива, то постоянно изменяющийся файл удобно просматривать при помощи программы watch:

    %$ watch cat /proc/mdstat
    

    Как выполнить проверку целостности программного RAID-массива md0:

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

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

    cat /sys/block/md0/md/mismatch_cnt
    

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

    В некоторых руководствах по mdadm после первоначальной сборки массивов рекомендуется добавлять в файл /etc/mdadm/mdadm.conf вывод команды «mdadm —detail —scan —verbose»:

    ARRAY /dev/md/1 level=raid1 num-devices=2 metadata=1.2 name=linuxWork:1 UUID=147c5847:dabfe069:79d27a05:96ea160b
      devices=/dev/sda1
    ARRAY /dev/md/2 level=raid1 num-devices=2 metadata=1.2 name=linuxWork:2 UUID=68a95a22:de7f7cab:ee2f13a9:19db7dad
      devices=/dev/sda2
    

    , в котором жёстко прописаны имена разделов (/dev/sda1, /dev/sda2 в приведённом примере).

    Если после этого обновить образ начальной загрузки (в Debian вызвать ‘update-initramfs -u’ или ‘dpkg-reconfigure mdadm’), имена разделов запишутся в файл mdadm.conf образа начальной загрузки и вы не сможете загрузиться с массива, если конфигурация жёстких дисков изменится (нужные разделы получат другие имена). Для этого не обязательно добавлять или убирать жёсткие диски: в многодисковых системах их имена могут меняться от загрузки к загрузке.

    Решение: записывать в /etc/mdadm/mdadm.conf вывод команды «mdadm —detail —scan» (без —verbose).

    При этом в файле mdadm.conf будут присутствовать UUID разделов, составляющих каждый RAID-массив. При загрузке системы mdadm находит нужные разделы независимо от их символических имён по UUID.

    mdadm.conf, извлечённый из образа начальной загрузки Debian:

    DEVICE partitions
    HOMEHOST <system>
    ARRAY /dev/md/1 metadata=1.2 UUID=147c5847:dabfe069:79d27a05:96ea160b name=linuxWork:1
    ARRAY /dev/md/2 metadata=1.2 UUID=68a95a22:de7f7cab:ee2f13a9:19db7dad name=linuxWork:2
    

    Результат исследования раздела командой ‘mdadm —examine'»

    /dev/sda1:
             Magic : a92b4efc
           Version : 1.2
       Feature Map : 0x0
        Array UUID : 147c5847:dabfe069:79d27a05:96ea160b
              Name : linuxWork:1
     Creation Time : Thu May 23 09:17:01 2013
        Raid Level : raid1
      Raid Devices : 2
    

    Раздел c UUID 147c5847:dabfe069:79d27a05:96ea160b войдёт в состав массива, даже если станет /dev/sdb1 при очередной загрузке системы.

    Вообще, существует 2 файла mdadm.conf, влияющих на автоматическую сборку массивов:

    • один при загрузке системы, записывется в образ начальной загрузки при его обновлении;
    • другой находится в каталоге /etc/mdadm/ и влияет на автосборку массивов внутри работающей системы.

    Соответственно, вы можете иметь информацию:

    1) в образе начальной загрузки (ОНЗ) и в /etc/mdadm/mdadm.conf;

    2) только в ОНЗ (попадает туда при его создании обновлении);

    3) только в /etc/mdadm/mdadm.conf;

    4) нигде.

    В том месте, где есть mdadm.conf, сборка происходит по правилам; где нет — непредсказуемо.
    Примечание: если вы не обновили ОНЗ после создания RAID-массивов, их конфигурация всё равно в него попадёт — при обновлении образа другой программой / при обновлении системы (но вы не будете об этом знать со всеми вытекающими).

    Дальнейшая работа с массивом

    Пометка диска как сбойного

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

        %# mdadm /dev/md0 --fail /dev/hde1
        %# mdadm /dev/md0 -f     /dev/hde1
    

    Удаление сбойного диска

    Сбойный диск можно удалить с помощью ключа —remove (-r):

        %# mdadm /dev/md0 --remove /dev/hde1
        %# mdadm /dev/md0 -r       /dev/hde1
    

    Добавление нового диска

    Добавить новый диск в массив можно с помощью ключей —add (-a) и —re-add:

        %# mdadm /dev/md0 --add /dev/hde1
        %# mdadm /dev/md0 -a    /dev/hde1
    

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

    Собрать существующий массив можно с помощью mdadm —assemble. Как дополнительный аргумент указывается, нужно ли выполнять сканирование устройств, и если нет, то какие устройства нужно собирать.

        %# mdadm --assemble /dev/md0 /dev/hde1 /dev/hdf2 /dev/hdg1
        %# mdadm --assemble --scan
    

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

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

        %# mdadm /dev/md0 --add /dev/hdh2
    

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

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

    Если раздел действительно добавился, мы можем расширить массив:

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

    Опция —raid-devices указывает новое количество дисков используемое в массиве. Например, было 3 диска, а теперь расширяем до 4-х — указываем 4.

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

    --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
        %# vi /etc/mdadm/mdadm.conf
    

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

    Отложенная синхронизация:

    Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
    md0 : active(auto-read-only) raid1 sda1[0] sdb1[1]
          78148096 blocks [2/2] [UU]
            resync=PENDING
    

    Возобновить:

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

    P.S.: Если вы увидели «active (auto-read-only)» в файле /proc/mdstat, то возможно вы просто ничего не записывали в этот массив. К примеру, после монтирования раздела и любых изменений в примонтированном каталоге, статус автоматически меняется:

    md0 : active raid1 sdc[0] sdd[1]
    

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

    Для начала отмонтируйте и остановите массив:

        %# umount /dev/md0
        %# mdadm --stop /dev/md0
    

    Затем необходимо пересобрать как md5 каждый из разделов sd[abcdefghijk]1

        %# mdadm --assemble /dev/md5 /dev/sd[abcdefghijk]1 --update=name
    

    или так

        %# mdadm --assemble /dev/md5 /dev/sd[abcdefghijk]1 --update=super-minor
    

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

    Для начала отмонтируйте и остановите массив:

        %# umount /dev/md0
        %# mdadm -S /dev/md0
    

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

        %# mdadm --zero-superblock /dev/hde1
        %# mdadm --zero-superblock /dev/hdf2
    

    Если действие выше не помогло, то затираем так:

        %# dd if=/dev/zero of=/dev/hde1 bs=512 count=1
        %# dd if=/dev/zero of=/dev/hdf2 bs=512 count=1
    

    Содержание

    Эта страница целиком списана с исходной, где рассматриваются вопросы создания и обслуживания программного RAID-массива в операционной системе Linux. К сожалению, исходная страница недоступна, приходится держать копию на этом wiki.

    Краткое описание mdadm

    Управление программным RAID-массивом в Linux выполняется с помощью программы mdadm.
    У программы mdadm есть несколько режимов работы.

    Assemble(сборка)

    Собрать компоненты ранее созданного массива в массив. Компоненты можно указывать явно, но можно и не указывать — тогда выполняется их поиск по суперблокам.

    Build(построение)

    Собрать массив из компонентов, у которых нет суперблоков. Не выполняются никакие проверки, создание и сборка массива в принципе ничем не отличаются.

    Create(создание)

    Создать новый массив на основе указанных устройств. Использовать суперблоки размещённые на каждом устройстве.

    Monitor(наблюдение)

    Следить за изменением состояния устройств. Для RAID0 этот режим не имеет смысла.

    Grow (расширение или уменьшение)

    Расширение или уменьшение массива, включаются или удаляются новые диски.

    Incremental Assembly (инкрементальная сборка)

    Добавление диска в массив.

    Manage (управление)

    Разнообразные операции по управлению массивом, такие как замена диска и пометка как сбойного.

    Misc (разное)

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

    Auto-detect (автоообнаружение)

    Активация автоматически обнаруживаемых массивов в ядре Linux.

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

    mdadm [mode] [array] [options]

    Режимы:

    • -A, –assemble — режим сборки

    • -B, –build — режим построения

    • -C, –create — режим создания

    • -F, –follow, –monitor — режим наблюдения

    • -G, –grow — режим расширения

    • -I, –incremental — режим инкрементальной сборки

    Настройка программного RAID-массива

    Рассмотрим как выполнить настройку RAID-массива 10 уровня на четырёх дисковых разделах. Мы будем использовать разделы:

     /dev/sda1
     /dev/sdb1
     /dev/sdc1
     /dev/sdd1   

    В том случае если разделы иные, не забудьте использовать соответствующие имена файлов.

    Создание разделов

    Нужно определить на каких физических разделах будет создаваться RAID-массив. Если разделы уже есть, нужно найти свободные (fdisk -l). Если разделов ещё нет, но есть неразмеченное место, их можно создать с помощью программ fdisk или cfdisk.

    Просмотреть какие есть разделы:

     %# fdisk -l
     Disk /dev/hda: 12.0 GB, 12072517632 bytes
     255 heads, 63 sectors/track, 1467 cylinders
     Units = cylinders of 16065 * 512 = 8225280 bytes
     Device Boot    Start       End    Blocks   Id  System
     /dev/hda1   *         1        13    104391   83  Linux
     /dev/hda2            14       144   1052257+  83  Linux
     /dev/hda3           145       209    522112+  82  Linux swap
     /dev/hda4           210      1467  10104885    5  Extended
     /dev/hda5           210       655   3582463+  83  Linux
     ...
     ...
     /dev/hda15         1455      1467    104391   83  Linux

    Просмотреть, какие разделы куда смонтированы, и сколько свободного места есть на них (размеры в килобайтах):

     %# df -k
     Filesystem           1K-blocks      Used Available Use% Mounted on
     /dev/hda2              1035692    163916    819164  17% /
     /dev/hda1               101086      8357     87510   9% /boot
     /dev/hda15              101086      4127     91740   5% /data1
     ...
     ...
     ...
     /dev/hda7              5336664    464228   4601344  10% /var

    Размонтирование

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

     %# umount /dev/sda1
     %# umount /dev/sdb1
     %# umount /dev/sdc1
     %# umount /dev/sdd1

    Изменение типа разделов

    Желательно (но не обязательно) изменить тип разделов, которые будут входить в RAID-массив и установить его равным FD (Linux RAID autodetect). Изменить тип раздела можно с помощью fdisk.

    Рассмотрим, как это делать на примере раздела /dev/hde1.

      %# fdisk /dev/hde
      The number of cylinders for this disk is set to 8355. 
      There is nothing wrong with that, but this is larger than 1024,
      and could in certain setups cause problems with:
      1) software that runs at boot time (e.g., old versions of LILO)
      2) booting and partitioning software from other OSs
      (e.g., DOS FDISK, OS/2 FDISK)
      Command (m for help):
      Use FDISK Help
      Now use the fdisk m command to get some help:
      Command (m for help): m
      ...
      ...
      p   print the partition table
      q   quit without saving changes
      s   create a new empty Sun disklabel
      t   change a partition's system id
      ...
      ...
      Command (m for help):
      Set The ID Type To FD
      Partition /dev/hde1 is the first partition on disk /dev/hde. 
      Modify its type using the t command, and specify the partition number 
      and type code. 
      You also should use the L command to get a full listing 
      of ID types in case you forget.
      Command (m for help): t
      Partition number (1-5): 1
      Hex code (type L to list codes): L
      ...
      ...
      ...
      16  Hidden FAT16    61   SpeedStor       f2  DOS secondary
      17  Hidden HPFS/NTF 63  GNU HURD or Sys fd  Linux raid auto
      18  AST SmartSleep  64  Novell Netware  fe  LANstep
      1b  Hidden Win95 FA 65  Novell Netware  ff  BBT
      Hex code (type L to list codes): fd
      Changed system type of partition 1 to fd (Linux raid autodetect)
      Command (m for help):
      Make Sure The Change Occurred
      Use the p command to get the new proposed partition table:
      Command (m for help): p
      Disk /dev/hde: 4311 MB, 4311982080 bytes
      16 heads, 63 sectors/track, 8355 cylinders
      Units = cylinders of 1008 * 512 = 516096 bytes
      Device Boot    Start       End    Blocks   Id  System
      /dev/hde1             1      4088   2060320+  fd  Linux raid autodetect
      /dev/hde2          4089      5713    819000   83  Linux
      /dev/hde4          6608      8355    880992    5  Extended
      /dev/hde5          6608      7500    450040+  83  Linux
      /dev/hde6          7501      8355    430888+  83  Linux
      Command (m for help):
      Save The Changes
      Use the w command to permanently save the changes to disk /dev/hde:
      Command (m for help): w
      The partition table has been altered!
      Calling ioctl() to re-read partition table.
      WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
      The kernel still uses the old table.
      The new table will be used at the next reboot.
      Syncing disks.

    Аналогичным образом нужно изменить тип раздела для всех остальных разделов, входящих в RAID-массив.

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

    Создание RAID-массива выполняется с помощью программы mdadm (ключ –create). Мы воспользуемся опцией –level, для того чтобы создать RAID-массив 10 уровня. С помощью ключа –raid-devices укажем устройства, из которых будет собираться RAID-массив.

      mdadm --create --verbose /dev/md0 --level=10 --raid-devices=4 /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1
      mdadm: layout defaults to left-symmetric
      mdadm: chunk size defaults to 64K
      mdadm: /dev/hde1 appears to contain an ext2fs file system
          size=48160K  mtime=Sat Jan 27 23:11:39 2007
      mdadm: /dev/hdf2 appears to contain an ext2fs file system
          size=48160K  mtime=Sat Jan 27 23:11:39 2007
      mdadm: /dev/hdg1 appears to contain an ext2fs file system
          size=48160K  mtime=Sat Jan 27 23:11:39 2007
      mdadm: size set to 48064K
      Continue creating array? y
      mdadm: array /dev/md0 started.

    Если вы хотите сразу создать массив, где диска не хватает (degraded) просто укажите слово missing вместо имени устройства. Для RAID5 это может быть только один диск; для RAID6 — не более двух; для RAID1 — сколько угодно, но должен быть как минимум один рабочий.

    Проверка правильности сборки

    Убедиться, что RAID-массив проинициализирован корректно можно просмотрев файл /proc/mdstat. В этом файле отражается текущее состояние RAID-массива.

      %# cat /proc/mdstat
      Personalities : [raid5]
      read_ahead 1024 sectors
      md0 : active raid5 hdg1[2] hde1[1] hdf2[0]
          4120448 blocks level 5, 32k chunk, algorithm 3 [3/3] [UUU]
      unused devices: <none>

    Обратите внимание на то, как называется новый RAID-массив. В нашем случае он называется /dev/md0. Мы будем обращаться к массиву по этому имени.

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

    Новый RAID-раздел нужно отформатировать, т.е. создать на нём файловую систему. Сделать это можно при помощи программы из семейства mkfs. Если мы будем создавать файловую систему ext3, воспользуемся программой mkfs.ext3. :

      %# mkfs.ext3 /dev/md0
      mke2fs 1.39 (29-May-2006)
      Filesystem label=
      OS type: Linux
      Block size=1024 (log=0)
      Fragment size=1024 (log=0)
      36144 inodes, 144192 blocks
      7209 blocks (5.00%) reserved for the super user
      First data block=1
      Maximum filesystem blocks=67371008
      18 block groups
      8192 blocks per group, 8192 fragments per group
      2008 inodes per group
      Superblock backups stored on blocks: 
              8193, 24577, 40961, 57345, 73729
      Writing inode tables: done                            
      Creating journal (4096 blocks): done
      Writing superblocks and filesystem accounting information: done
      This filesystem will be automatically checked every 33 mounts or
      180 days, whichever comes first.  Use tune2fs -c or -i to override.

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

     
        %# 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.

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

    mdadm –detail –scan –verbose

    Вот пример её использования:

      %# mdadm --detail --scan --verbose
      ARRAY /dev/md0 level=raid5 num-devices=4 
      UUID=77b695c4:32e5dd46:63dd7d16:17696e09
      devices=/dev/hde1,/dev/hdf2,/dev/hdg1

    Если файла mdadm.conf ещё нет, можно его создать:

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

    Создание точки монтирования для RAID-массива

    Поскольку мы создали новую файловую систему, вероятно, нам понадобится и новая точка монтирования. Назовём её /raid.

      %# mkdir /raid

    Изменение /etc/fstab

    Для того чтобы файловая система, созданная на новом RAID-массиве, автоматически монтировалась при загрузке, добавим соответствующую запись в файл /etc/fstab хранящий список автоматически монтируемых при загрузке файловых систем.

     /dev/md0      /raid     ext3    defaults    1 2

    Если мы объединяли в RAID-массив разделы, которые использовались раньше, нужно отключить их монтирование: удалить или закомментировать соответствующие строки в файле /etc/fstab. Закомментировать строку можно символом #.

      #/dev/hde1       /data1        ext3    defaults        1 2
      #/dev/hdf2       /data2        ext3    defaults        1 2
      #/dev/hdg1       /data3        ext3    defaults        1 2

    Монтирование файловой системы нового RAID-массива

    Для того чтобы получить доступ к файловой системе, расположенной на новом RAID-массиве, её нужно смонтировать. Монтирование выполняется с помощью команды mount.

    Если новая файловая система добавлена в файл /etc/fstab, можно смонтировать её командой mount -a (смонтируются все файловые системы, которые должны монтироваться при загрузке, но сейчас не смонтированы).

     %# mount -a

    Можно смонтировать только нужный нам раздел (при условии, что он указан в /etc/fstab).

     %# mount /raid

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

     %# mount /dev/md0 /raid

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

    Информация о состоянии RAID-массива находится в файле /proc/mdstat.

      %# raidstart /dev/md0
      %# cat /proc/mdstat
      Personalities : [raid5]
      read_ahead 1024 sectors
      md0 : active raid5 hdg1[2] hde1[1] hdf2[0]
          4120448 blocks level 5, 32k chunk, algorithm 3 [3/3] [UUU]
      unused devices: <none>

    Если в файле информация постоянно изменяется, например, идёт пересборка массива, то постоянно изменяющийся файл удобно просматривать при помощи программы watch:

    %$ watch cat /proc/mdstat

    Как выполнить проверку целостности программного RAID-массива md0:

    echo ‘check’ >/sys/block/md0/md/sync_action

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

    cat /sys/block/md0/md/mismatch_cnt

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

    В некоторых руководствах по mdadm после первоначальной сборки массивов рекомендуется добавлять в файл /etc/mdadm/mdadm.conf вывод команды «mdadm –detail –scan –verbose»:

    ARRAY /dev/md/1 level=raid1 num-devices=2 metadata=1.2 name=linuxWork:1 UUID=147c5847:dabfe069:79d27a05:96ea160b

    devices=/dev/sda1

    ARRAY /dev/md/2 level=raid1 num-devices=2 metadata=1.2 name=linuxWork:2 UUID=68a95a22:de7f7cab:ee2f13a9:19db7dad

    devices=/dev/sda2

    , в котором жёстко прописаны имена разделов (/dev/sda1, /dev/sda2 в приведённом примере).

    Если после этого обновить образ начальной загрузки (в Debian вызвать ‘update-initramfs -u’ или ‘dpkg-reconfigure mdadm’), имена разделов запишутся в файл mdadm.conf образа начальной загрузки, и вы не сможете загрузиться с массива, если конфигурация жёстких дисков изменится (нужные разделы получат другие имена). Для этого не обязательно добавлять или убирать жёсткие диски: в многодисковых системах их имена могут меняться от загрузки к загрузке.

    Решение: записывать в /etc/mdadm/mdadm.conf вывод команды «mdadm –detail –scan» (без –verbose).

    При этом в файле mdadm.conf будут присутствовать UUID разделов, составляющих каждый RAID-массив. При загрузке системы mdadm находит нужные разделы независимо от их символических имён по UUID.

    mdadm.conf, извлечённый из образа начальной загрузки Debian:

    DEVICE partitions
    HOMEHOST <system>
    ARRAY /dev/md/1 metadata=1.2 UUID=147c5847:dabfe069:79d27a05:96ea160b name=linuxWork:1
    ARRAY /dev/md/2 metadata=1.2 UUID=68a95a22:de7f7cab:ee2f13a9:19db7dad name=linuxWork:2

    Результат исследования раздела командой ‘mdadm –examine’«

    /dev/sda1:

           Magic : a92b4efc
         Version : 1.2
     Feature Map : 0x0
      Array UUID : 147c5847:dabfe069:79d27a05:96ea160b
            Name : linuxWork:1

    Creation Time : Thu May 23 09:17:01 2013

      Raid Level : raid1
    Raid Devices : 2

    Раздел c UUID 147c5847:dabfe069:79d27a05:96ea160b войдёт в состав массива, даже если станет /dev/sdb1 при очередной загрузке системы.

    Вообще, существует 2 файла mdadm.conf, влияющих на автоматическую сборку массивов:

      один при загрузке системы, записывется в образ начальной загрузки при его обновлении;
      другой находится в каталоге /etc/mdadm/ и влияет на автосборку массивов внутри работающей системы. 

    Соответственно, вы можете иметь информацию:

    1) в образе начальной загрузки (ОНЗ) и в /etc/mdadm/mdadm.conf;

    2) только в ОНЗ (попадает туда при его создании обновлении);

    3) только в /etc/mdadm/mdadm.conf;

    4) нигде.

    В том месте, где есть mdadm.conf, сборка происходит по правилам; где нет — непредсказуемо.

    Примечание: если вы не обновили ОНЗ после создания RAID-массивов, их конфигурация всё равно в него попадёт — при обновлении образа другой программой / при обновлении системы (но вы не будете об этом знать со всеми вытекающими).
    [править] Дальнейшая работа с массивом
    [править] Пометка диска как сбойного

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

      %# mdadm /dev/md0 --fail /dev/hde1
      %# mdadm /dev/md0 -f     /dev/hde1

    [править] Удаление сбойного диска

    Сбойный диск можно удалить с помощью ключа –remove (-r):

      %# mdadm /dev/md0 --remove /dev/hde1
      %# mdadm /dev/md0 -r       /dev/hde1

    [править] Добавление нового диска

    Добавить новый диск в массив можно с помощью ключей –add (-a) и –re-add:

      %# mdadm /dev/md0 --add /dev/hde1
      %# mdadm /dev/md0 -a    /dev/hde1

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

    Собрать существующий массив можно с помощью mdadm –assemble. Как дополнительный аргумент указывается, нужно ли выполнять сканирование устройств, и если нет, то какие устройства нужно собирать.

      %# mdadm --assemble /dev/md0 /dev/hde1 /dev/hdf2 /dev/hdg1
      %# mdadm --assemble --scan

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

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

      %# mdadm /dev/md0 --add /dev/hdh2

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

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

    Если раздел действительно добавился, мы можем расширить массив:

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

    Опция –raid-devices указывает новое количество дисков, используемое в массиве. Например, было 3 диска, а теперь расширяем до 4-х — указываем 4.

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

    1. -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
      %# vi /etc/mdadm/mdadm.conf

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

    Отложенная синхронизация:

    Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
    md0 : active(auto-read-only) raid1 sda1[0] sdb1[1]
        78148096 blocks [2/2] [UU]
          resync=PENDING

    Возобновить:

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

    P.S.: Если вы увидели «active (auto-read-only)» в файле /proc/mdstat, то возможно вы просто ничего не записывали в этот массив. К примеру, после монтирования раздела и любых изменений в примонтированном каталоге, статус автоматически меняется:

    md0 : active raid1 sdc[0] sdd[1]

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

    Для начала отмонтируйте и остановите массив:

      %# umount /dev/md0
      %# mdadm --stop /dev/md0

    Затем необходимо пересобрать как md5 каждый из разделов sd[abcdefghijk]1

      %# mdadm --assemble /dev/md5 /dev/sd[abcdefghijk]1 --update=name

    или так

      %# mdadm --assemble /dev/md5 /dev/sd[abcdefghijk]1 --update=super-minor

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

    Для начала отмонтируйте и остановите массив:

      %# umount /dev/md0
      %# mdadm -S /dev/md0

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

      %# mdadm --zero-superblock /dev/hde1
      %# mdadm --zero-superblock /dev/hdf2

    Если действие выше не помогло, то затираем так:

      %# dd if=/dev/zero of=/dev/hde1 bs=512 count=1
      %# dd if=/dev/zero of=/dev/hdf2 bs=512 count=1

    Создание пустого массива без сихронизации данных

    Не каноничный метод, применять на дисках без данных!

    Смотрим информацию по массивам и выбираем жертву

      %# cat /proc/mdstat

    Предварительно разбираем массив

      %# mdadm --stop /dev/md124

    Создаём директорию для metadata файлов

      %# mkdir /tmp/metadata

    Снимаем дамп metadata с одного из raid дисков

      %# mdadm --dump=/tmp/metadata /dev/sda1

    Копируем метаданные

      %# cp /tmp/metadata/sda1 /tmp/metadata/sdb1

    Накатываем бекап

      %# mdadm --restore=/tmp/metadata /dev/sdb1

    Собираем массив

      %# mdadm --create --verbose /dev/md124 --level=0 --raid-devices=2 /dev/sda /dev/sdb

    Радуемся отсутствию синка и данных

      %# cat /proc/mdstat

    Дополнительная информация

      man mdadm (англ.)
      man mdadm.conf (англ.)
      Linux Software RAID (англ.)
      Gentoo Install on Software RAID (англ.)
      HOWTO Migrate To RAID (англ.)
      Remote Conversion to Linux Software RAID-1 for Crazy Sysadmins HOWTO (англ.)
      Migrating To RAID1 Mirror on Sarge (англ.)
      Настройка программного RAID-1 на Debian Etch (рус.), а также обсуждение на ЛОРе
      Недокументированные фишки программного RAID в Linux (рус.) 

    Производительность программных RAID-массивов

      Adventures With Linux RAID: Part 1, Part 2 (англ.)
      Параметры, влияющие на производительность программного RAID (рус.) 

    Разные заметки, имеющие отношение к RAID

      BIO_RW_BARRIER - what it means for devices, filesystems, and dm/md. (англ.) 


    This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
    Learn more about bidirectional Unicode characters

    Show hidden characters

    #!/bin/bash
    # При запуске без параметров `bash mdadm-check.sh` проверяет все массивы из `raids`.
    # Если один из дисков неиправен, то заменяет его на резервный из `backup_disk`.
    # Передав параметр `install` `bash mdadm-check.sh install` можно внести запись
    # в cron, для выполнения проверки каждую минуту (Установка работает в Ubuntu 14.04).
    # После этого можно испортить один из дисков командой `test` `bash mdadm-check.sh test`,
    # чтобы проверить работу. При этом будет сломан диск из `test_disk`.
    # В принципе, просто заменить поврежденный диск в одном из массивов можно командой
    # sudo mdadm -D /dev/md0 | grep faulty | rev | cut -d ‘ ‘ -f1 | rev | xargs sudo mdadm /dev/md0 -r | sudo mdadm /dev/md0 -a /dev/sdf1
    export PATH=/sbin/:$PATH
    script_path=$(pwd -P)
    backup_disk=/dev/sdf1
    test_disk=/dev/sdb1
    raids=(/dev/md0 /dev/md1)
    case «$1« in
    install)
    echo Installing…
    crontab -l | { cat; echo «* * * * * /bin/bash $script_path/$0«; } | crontab —
    service cron restart
    ;;
    test)
    echo Testing…
    mdadm —manage —set-faulty ${raids[0]} $test_disk
    ;;
    *)
    echo Scanning ${raids[*]}
    for raid in ${raids[*]}
    do
    faulty=$(mdadm -D $raid | grep faulty)
    if [[ $faulty ]]
    then
    disk=$(mdadm -D /dev/md0 | grep faulty | rev | cut -d -f1 | rev)
    echo Faulty found in $raid disk $disk
    mdadm $raid -r $disk && mdadm $raid -a $backup_disk
    if [ «$?« -eq «0« ]
    then
    echo Array $raid repaired
    fi
    else
    echo Array $raid is OK
    fi
    done
    echo Scan finished!
    esac

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

    mdadm --create --verbose /dev/md0 --level=1  --raid-devices=2 /dev/sda1 /dev/sdb1
    

    После чего нужно создать конфигурационный файл mdadm.conf

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

    И записать изменения в загрузочный образ:

    Работа с массивом

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

    mdadm /dev/md0 --fail /dev/hde1
    mdadm /dev/md0 -f     /dev/hde1
    

    Удаление сбойного диска
    Сбойный диск можно удалить с помощью ключа —remove (-r):

    mdadm /dev/md0 --remove /dev/hde1
    mdadm /dev/md0 -r       /dev/hde1
    

    Добавление нового диска
    Добавить новый диск в массив можно с помощью ключей —add (-a) и —re-add:

    mdadm /dev/md0 --add /dev/hde1
    mdadm /dev/md0 -a    /dev/hde1
    

    Сборка существующего массива
    Собрать существующий массив можно с помощью mdadm —assemble. Как дополнительный аргумент указывается, нужно ли выполнять сканирование устройств, и если нет, то какие устройства нужно собирать.

    mdadm --assemble /dev/md0 /dev/hde1 /dev/hdf2 /dev/hdg1
    mdadm --assemble --scan
    

    Проверить состояние массива и получить информацию и массиве

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

    Информация о массиве:

    Информация об элементе массива:

    mdadm --examine /dev/sda1
    

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

    зарускаем проверку

    echo check > /sys/block/md1/md/sync_action
    

    смотрим результат

    ~# cat /proc/mdstat
     Personalities : [raid10] [raid1]
     md0 : active raid1 sdb1[1] sda1[0] sdc1[2] sdd1[3]
           128384 blocks [4/4] [UUUU]
    
     md1 : active raid10 sdd2[3] sdc2[2] sda2[0] sdb2[1]
           134222848 blocks 256K chunks 2 near-copies [4/4] [UUUU]
           [>....................]  check =  0.5% (787072/134222848) finish=19.7min speed=112438K/sec
    

    Убить массив

    mdadm --stop /dev/md0
    mdadm --zero-superblock /dev/sda..
    

    mdadm — утилита для управления программными RAID массивами в GNU/Linux (Linux Software Raid), ранее известная, как mdctl. MD — сокращение от multi disk.

    В Linux можно использовать следующие разновидности RAID:

    Не все разновидности RAID-массивов доступны в ядре Linux в начальной конфигурации. Например, чтобы использовать RAID5 необходимо внести изменения в конфигурацию ядра и скомпилировать его заново. Для уже скомпилированных ядер из дистрибутивов, возможно потребуется явная загрузка соответствующего модуля. Пример: modprobe raid5.

    При создании RAID1 (зеркала) с целью повышения отказоустойчивости системы рекомендуется разделы swap также объединять в массив. При использовании swap-разделов вне RAID при отказе одного диска может случиться крах системы (если на поломавшийся диск была выгружена часть страниц памяти). При объединении в RAID- массив разделов swap такого не произойдет, т.к. выгружаемая страница будет присутствовать на обоих дисках.

    Если вместо [UU] видим [_U], то целостность одного из дисков нарушена.

    Ниже описана процедура восстановления диска после незначительного сбоя. В моем случае было выключено некорректно питание сервера и развалился md5.

    Нужно быть аккуратным с номерами разделов.

    [root@vm ~]# cat /proc/mdstat
    Personalities : [raid1] 
    md5 : active raid1 sdb2[1]
          860160192 blocks [2/1] [_U]
          
    md3 : active raid1 sdb3[1] sda3[0]
          30716160 blocks [2/2] [UU]
          
    md4 : active raid1 sdb5[1] sda5[0]
          20482752 blocks [2/2] [UU]
          
    md1 : active raid1 sdb6[1] sda6[0]
          16386176 blocks [2/2] [UU]
          
    md2 : active raid1 sdb7[1] sda7[0]
          10241280 blocks [2/2] [UU]
          
    md0 : active raid1 sdb1[1] sda1[0]
          20482752 blocks [2/2] [UU]
          
    unused devices: <none>

    Видим, что проблема с md5. Смотрим более подробную информацию о ошибке.

    [root@vm ~]# mdadm --query --detail /dev/md5
    /dev/md5:
            Version : 0.90
      Creation Time : Mon Jan 31 13:29:01 2011
         Raid Level : raid1
         Array Size : 860160192 (820.31 GiB 880.80 GB)
      Used Dev Size : 860160192 (820.31 GiB 880.80 GB)
       Raid Devices : 2
      Total Devices : 1
    Preferred Minor : 5
        Persistence : Superblock is persistent
    
        Update Time : Mon Feb 28 13:08:42 2011
              State : clean, degraded
     Active Devices : 1
    Working Devices : 1
     Failed Devices : 0
      Spare Devices : 0
    
               UUID : bba1242e:c9f75ce4:7872b1fa:7a320018
             Events : 0.89396
    
        Number   Major   Minor   RaidDevice State
           0       0        0        0      removed
           1       8       18        1      active sync   /dev/sdb2

    Видим что не хватает /dev/sda2. Пробуем его добавить обратно в RAID md5.

    [root@vm ~]# mdadm -a /dev/md5 /dev/sda2
     mdadm: added /dev/sda2

    Если все ок. Наблюдаем состояние синхронизации RAID md5.

    [root@vm ~]# cat /proc/mdstat
    Personalities : [raid1] 
    md5 : active raid1 sda2[0] sdb2[1]
          860160192 blocks [2/1] [_U]
          [===>.................]  recovery = 18.0% (154891584/860160192) finish=108.7min speed=108091K/sec

    Пришли уведомления от Установка и использование лог-анализатора Logwatch:

     --------------------- Raid Begin ------------------------ 
    
     Apr  3 08:46:21 raid1: Disk failure on sda7, disabling device.  
     
     ---------------------- Raid End ------------------------- 

    и от mdadm monitoring:

    This is an automatically generated mail message from mdadm
    running
    
    A Fail event had been detected on md device /dev/md2.
    
    It could be related to component device /dev/sda7.
    
    Faithfully yours, etc.
    1. Проверим(уточним) поступившую информацию

      [root@vm ~]# cat /proc/mdstat 
      Personalities : [raid1] 
      md5 : active raid1 sdb2[1] sda2[0]
            860160192 blocks [2/2] [UU]
            
      md3 : active raid1 sdb3[1] sda3[0]
            30716160 blocks [2/2] [UU]
            
      md4 : active raid1 sdb5[1] sda5[0]
            20482752 blocks [2/2] [UU]
            
      md1 : active raid1 sdb6[1] sda6[0]
            16386176 blocks [2/2] [UU]
            
      md2 : active raid1 sdb7[1] sda7[2](F)
            10241280 blocks [2/1] [_U]
            
      md0 : active raid1 sdb1[1] sda1[0]
            20482752 blocks [2/2] [UU]
            
      unused devices: <none>
    2. Проблема с md2. Уточним информацию.

      [root@vm ~]# mdadm --query --detail /dev/md2
      /dev/md2:
              Version : 0.90
        Creation Time : Mon Jan 31 13:35:55 2011
           Raid Level : raid1
           Array Size : 10241280 (9.77 GiB 10.49 GB)
        Used Dev Size : 10241280 (9.77 GiB 10.49 GB)
         Raid Devices : 2
        Total Devices : 2
      Preferred Minor : 2
          Persistence : Superblock is persistent
      
          Update Time : Mon Apr  4 16:10:47 2011
                State : clean, degraded
       Active Devices : 1
      Working Devices : 1
       Failed Devices : 1
        Spare Devices : 0
      
                 UUID : d37240a0:95da8141:7aa4d888:5d41f52f
               Events : 0.30558
      
          Number   Major   Minor   RaidDevice State
             0       0        0        0      removed
             1       8       23        1      active sync   /dev/sdb7
      
             2       8        7        -      faulty spare   /dev/sda7
    3. Проблема с /dev/sda. Нужно это винчестер заменить на аналогичный по размеру. Выключаем компьютер. Заменяем винчестер. Проверяем:

      [root@vm ~]# fdisk -l | less
      Disk /dev/sda: 1000.2 GB, 1000204886016 bytes
      255 heads, 63 sectors/track, 121601 cylinders
      Units = cylinders of 16065 * 512 = 8225280 bytes
      
      
      Disk /dev/sdb: 1000.2 GB, 1000204886016 bytes
      255 heads, 63 sectors/track, 121601 cylinders
      Units = cylinders of 16065 * 512 = 8225280 bytes
      
         Device Boot      Start         End      Blocks   Id  System
      /dev/sdb1   *           1        2550    20482843+  fd  Linux raid autodetect
      /dev/sdb2            2551      109635   860160262+  fd  Linux raid autodetect
      /dev/sdb3          109636      113459    30716280   fd  Linux raid autodetect
      /dev/sdb4          113460      121601    65400615    5  Extended
      /dev/sdb5          113460      116009    20482843+  fd  Linux raid autodetect
      /dev/sdb6          116010      118049    16386268+  fd  Linux raid autodetect
      /dev/sdb7          118050      119324    10241406   fd  Linux raid autodetect
    4. Новый неразмеченный винчестер добавлен как sda. Утилитой sfdisk скопируем структуру разделов с рабочего HDD (sdb) на новый HDD (sda).

      [root@vm ~]# sfdisk -d /dev/sdb | sfdisk /dev/sda
    5. Проверяем разбивку. Видим что новый HDD разбит идентично старому:

      [root@vm ~]# fdisk -l | less
      Disk /dev/sda: 1000.2 GB, 1000204886016 bytes
      255 heads, 63 sectors/track, 121601 cylinders
      Units = cylinders of 16065 * 512 = 8225280 bytes
      
         Device Boot      Start         End      Blocks   Id  System
      /dev/sda1   *           1        2550    20482843+  fd  Linux raid autodetect
      /dev/sda2            2551      109635   860160262+  fd  Linux raid autodetect
      /dev/sda3          109636      113459    30716280   fd  Linux raid autodetect
      /dev/sda4          113460      121601    65400615    5  Extended
      /dev/sda5          113460      116009    20482843+  fd  Linux raid autodetect
      /dev/sda6          116010      118049    16386268+  fd  Linux raid autodetect
      /dev/sda7          118050      119324    10241406   fd  Linux raid autodetect
      
      Disk /dev/sdb: 1000.2 GB, 1000204886016 bytes
      255 heads, 63 sectors/track, 121601 cylinders
      Units = cylinders of 16065 * 512 = 8225280 bytes
      
         Device Boot      Start         End      Blocks   Id  System
      /dev/sdb1   *           1        2550    20482843+  fd  Linux raid autodetect
      /dev/sdb2            2551      109635   860160262+  fd  Linux raid autodetect
      /dev/sdb3          109636      113459    30716280   fd  Linux raid autodetect
      /dev/sdb4          113460      121601    65400615    5  Extended
      /dev/sdb5          113460      116009    20482843+  fd  Linux raid autodetect
      /dev/sdb6          116010      118049    16386268+  fd  Linux raid autodetect
      /dev/sdb7          118050      119324    10241406   fd  Linux raid autodetect
    6. Добавляем каждый раздел в предназначенный ему RAID. Чтобы не ошибиться при добавлении, лучше предварительно используя команду mdadm –query –detail /dev/md? узнать какая по номеру партиция диска sdb добавлена и подставить аналогичную с нового диска sda.

      [root@vm ~]# mdadm --add /dev/md0 /dev/sda1
      mdadm: added /dev/sda1
      [root@vm ~]# mdadm --add /dev/md1 /dev/sda6
      mdadm: added /dev/sda6
      [root@vm ~]# mdadm --add /dev/md2 /dev/sda7
      mdadm: added /dev/sda7
      ...
    7. Проверить синхронизацию, после добавления в RAID можно командой

      [root@vm ~]# cat /proc/mdstat 
      Personalities : [raid1] 
      md5 : active raid1 sda2[2] sdb2[1]
            860160192 blocks [2/1] [_U]
            	resync=DELAYED
            
      md3 : active raid1 sda3[2] sdb3[1]
            30716160 blocks [2/1] [_U]
            	resync=DELAYED
            
      md4 : active raid1 sda5[2] sdb5[1]
            20482752 blocks [2/1] [_U]
            	resync=DELAYED
            
      md1 : active raid1 sda6[0] sdb6[1]
            16386176 blocks [2/2] [UU]
            
      md2 : active raid1 sda7[2] sdb7[1]
            10241280 blocks [2/1] [_U]
            [=====>...............]  recovery = 28.4% (2914880/10241280) finish=2.3min speed=51682K/sec
            
      md0 : active raid1 sda1[0] sdb1[1]
            20482752 blocks [2/2] [UU]
            
      unused devices: <none>

    После замены вылетевшего диска нужно обязательно установить на новый диск grub.

    В этом случае используется первый grub. Установим grub на /dev/sda:

    # cat /boot/grub/device.map
    # this device map was generated by anaconda
    (hd0)     /dev/sda
    (hd1)     /dev/sdb
    [root@vm ~]# grub
    Probing devices to guess BIOS drives. This may take a long time.
    
        GNU GRUB  version 0.97  (640K lower / 3072K upper memory
    ...
    grub> root (hd0,0)     
    
    root (hd0,0)
     Filesystem type is ext2fs, partition type 0xfd
    
    grub> setup (hd0)
    setup (hd0)
     Checking if "/boot/grub/stage1" exists... yes
     Checking if "/boot/grub/stage2" exists... yes
     Checking if "/boot/grub/e2fs_stage1_5" exists... yes
     Running "embed /boot/grub/e2fs_stage1_5 (hd0)"...  15 sectors are embedded.
    succeeded
     Running "install /boot/grub/stage1 (hd0) (hd0)1+15 p (hd0,0)/boot/grub/stage2 /boot/grub/grub.conf"... succeeded
    Done.
    
    # more /proc/mdstat или # cat /proc/mdstat
    # cd /etc/cron.hourly/
    # touch mdraidstate
    # chmod +x mdraidstate
    # nano mdraidstate
    
    #!/bin/sh
    
    /sbin/mdadm --monitor --scan -1 --mail=test@your.domen
    # mdadm --monitor --mail=your_mail@here --delay=600 /dev/md*
    <code>
    Для проверки рассылки сообщения добавляется ключ --test:
    <code>
    /sbin/mdadm --monitor --scan -1 --mail=test@your.domen --test

    Если нужно чаще, самое простое решение, добавить в /etc/crontab строку, используя нотацию с «/», например:

    */5 * * * * root run-parts /etc/cron.my5min

    предварительно нужно создать папку /etc/cron.my5min и поместить туда файл (файлы), которые нужно запускать раз в 5 минут.

    В Debin, Ubuntu обязательно нужно поставить Введение Grub2 на второй винт

    grub-install /dev/sdb

    После завершения процесса установки, загружаемся с HDD, входим в систему под правами пользователя root и настраиваем загрузчик GRUB.

    # dpkg-reconfigure grub-pc

    Отмечаем звёздочками /dev/sda и /dev/sdb.

    При вылете первого винчестера /dev/sdа, может возникнуть проблема при загрузке со второго /dev/sdb как ни странно это лечится так (то есть отключается графический терминал GRUB): раскоментируется строка GRUB_TERMINAL=console и запуск update-grub для применения изменений.

    # nano /etc/default/grub
    # Uncomment to disable graphical terminal (grub-pc only)
    GRUB_TERMINAL=console
    # update-grub

    Приходит сообщение:

    /etc/cron.weekly/99-raid-check:
    
    WARNING: mismatch_cnt is not 0 on /dev/md2

    Смотрим значение mismatch_cnt

    # cat /sys/block/md2/md/mismatch_cnt
    1664

    Значения mismatch_cnt в пределе нескольких тысяч можно игнорировать абсолютно без вреда для данных и стабильности систем.

    0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии

    А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Md5 of file does not match data in flash ошибка
  • Mcs 220 otis коды ошибок