mdadm

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
mdadm (ранее mdctl)
Тип

Дисковая утилита

Разработчик

Neil Brown

Операционная система

Linux

Последняя версия

3.3.0 (2013-09-03)

Лицензия

GNU GPL 2 и новее

Сайт

http://neil.brown.name/blog/mdadm

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

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

  • LINEAR (JBOD) — расширение размера логического диска за счет нескольких физических дисков;
  • RAID0 (striping) — распределение блоков на нескольких физических дисках для повышения скоростей записи и чтения, но без обеспечения отказоустойчивости;
  • RAID1 (mirroring) — зеркалирование, то есть запись одних и тех же данных одновременно на несколько дисков, что обеспечивает отказоустойчивость при выходе из строя любого количества дисков, пока остаётся хотя бы один работоспособный;
  • RAID4 — RAID 4 похож на RAID 3, но отличается от него тем, что данные разбиваются на блоки, а не на байты;
  • RAID5 — массив с обеспечением отказоустойчивости за счет минимальной избыточности (требуется минимум три диска, для отказоустойчивости - четыре диска);
  • RAID6 — похож на RAID 5, но имеет более высокую степень надежности — под контрольные суммы выделяется емкость 2-х дисков, рассчитываются 2 суммы по разным алгоритмам;
  • MULTIPATH — не RAID-массив, позволяющий создавать разные псевдо-дисковые устройства для одного физического диска;
  • FAULTY — псевдо RAID-массив.

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

Просмотр состояния массивов[править | править вики-текст]

Информацию о состоянии активных массивов можно просмотреть в псевдо-файле /proc/mdstat

cat /proc/mdstat
Personalities : [raid0] [raid1]
md3 : active raid0 sdb4[1] sda4[0]
581006592 blocks 64k chunks

md1 : active raid1 sdb1[1] sda1[0]
88256 blocks [2/2] [UU]

Команды[править | править вики-текст]

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

  • Create — создание RAID-массива из нескольких дисков (с суперблоком на каждом устройстве).
  • Assemble — сборка (ранее созданного) массива и его активация. Диски из которых собирается массив могут указываться явно или будет выполнен их автоматический поиск. mdadm проверяет, образуют ли компоненты корректный массив.
  • Build  — объединение дисков в массив (без суперблоков). Для таких массивов mdadm не различает создание и последующую сборку. Также невозможно проверить, были ли указаны необходимые устройства в верном порядке. Не используйте этот режим, если вы не знаете зачем это нужно.
  • Manage — Управление массивом: добавление новых свободных дисков (spares) и удаление неработоспособных (faulty devices).
  • Follow/Monitor — Следить за одним или несколькими md-устройствами и реагировать на изменение их состояния. Это имеет смысл только для массивов уровней 1, 4, 5, 6 или multipath-массивов, так так только они могут иметь различные состояния. raid0 или linear не могут иметь недостающих, запасных или сбойных дисков, поэтому там не за чем следить.
  • Grow — расширение или уменьшение размера (shrink) массива, либо иное его реформирование (reshape). На данный момент поддерживается изменение активного размера компонентов в RAID-массивах уровней 1/4/5/6, а также изменение количества активных устройств в RAID1.
  • Misc  — прочие операции с независимыми дисками. Например: просмотр и модификация суперблоков массива и остановка активных массивов.

Получение информации о RAID-диске и его разделах[править | править вики-текст]

Для определения того, является ли устройство массивом или его частью, можно использовать утилиту mdadm с ключом -Q (--query). Указанные в этом разделе операции относятся к группе прочих, но указывать ключ (--misc) не обязательно. Ключ -Q также можно не указывать — если в параметрах mdadm указано только дисковое устройства, то этот ключ подразумевается по умолчанию. В примере ниже проверяются три устройства:

  • обычный раздел (не часть массива):

mdadm -Q /dev/sde3

mdadm: /dev/sde3 does not appear to be an md device
  • раздел, являющийся частью массива:

mdadm -Q /dev/sdb1

/dev/sdb1: device 0 in 3 device active raid5 /dev/md0.  Use mdadm --examine for more detail.
  • раздел диска, снятого с другого компьютера, где он был частью массива:

mdadm -Q /dev/sde2

/dev/sde2: is not an md array
/dev/sde2: device 6 in 8 device undetected raid5 /dev/md2.  Use mdadm --examine for more detail.
  • массив целиком

mdadm -Q /dev/md0

/dev/md0: 467.51GiB raid5 3 devices, 0 spares. Use mdadm --detail for more detail.

Более подробную информацию о массиве в целом или его части можно получить используя соответственно ключи -D (--detail) и -E (--examine). В обоих случаях выводится почти одинаковая информация, но с ключом -D нужно указывать имя массива, а с ключом -E указывается имя одного из разделов RAID-диска. Причем, массив должен быть запущен, а для раздела это не важно — главное, чтобы он был частью хоть какого-либо массива.

mdadm -D /dev/md0

/dev/md0:
        Version : 00.90.03
  Creation Time : Tue Jan 22 20:41:09 2008
     Raid Level : raid5
     Array Size : 490223232 (467.51 GiB 501.99 GB)
  Used Dev Size : 245111616 (233.76 GiB 250.99 GB)
   Raid Devices : 3
  Total Devices : 3
Preferred Minor : 0
    Persistence : Superblock is persistent
    Update Time : Tue Mar 25 10:52:30 2008
          State : clean
 Active Devices : 3
Working Devices : 3
 Failed Devices : 0
  Spare Devices : 0
         Layout : left-symmetric
     Chunk Size : 64K
           UUID : 3d40658b:58e8e3bb:f2dc72f0:8ce9d084
         Events : 0.12
    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1
       2       8       49        2      active sync   /dev/sdd1

Создание массива[править | править вики-текст]

Перед созданием массива следует создать для него устройство-идентификатор (если оно отсутствует): mknod /dev/md1 b 9 1; в данном случае создаётся идентификтор для массива с номером 1, что указывается в имени устройства и его коде (9 — это код устройства всех RAID-массивов, 1 — идентификатор). Желательно, чтобы разделы, из которых создаётся массив, имели одинаковый размер (хотя они могут располагаться на физических дисках разного размера и даже разного типа). При создании этих разделов следует присвоить им тип fd («Linux raid autodetect»). Не следует создавать массив из разделов, размещающихся на одном физическом диске — хотя это и возможно, это совершенно бессмысленно и приведет к существенному снижению быстродействия дисковой подсистемы. Интересной идеей является создание массива из USB-флеш дисков с целью повышения скорости, но из-за низкой надёжности USB портов система будет менее надёжна, чем массив из жёстких дисков.

mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/hda3 /dev/hdc3

Этот пример создаёт массив RAID 1 из двух разделов: один из hda и второй из hdc. Несколько дисков можно указывать с помощью шаблона, например /dev/sd[ac]2 или /dev/sd[a-f]1.

  • --create (или сокращённо ): команда создания
  • /dev/md0: имя устройства создаваемого виртуального раздела
  • --level=1 (или сокращённо -l 1): уровень RAID. См. справочник по использованию mdadm (используйте «man mdadm» в командной строке)
  • --raid-devices=2 (или сокращённо -n 2): количество устройств
  • /dev/hda3: первый диск в массиве
  • /dev/hdc3: второй диск

Если на момент создания массива диска нет (например, при переходе на RAID) вместо имени диска просто напишите missing. Команда завершается сразу, обычно выдавая сообщение mdadm: array /dev/mdХ started. При этом уже сразу можно использовать массив. Фактически массив строится в фоновом режиме, прогресс можно посмотреть в файле /proc/mdstat; там же указывается предположительное время завершения построения массива.

После создания RAID-раздела можно создать на нем файловую систему как на обычном разделе диска. Созданный и отформатированный RAID-раздел можно использовать как корень файловой системы (но для этого поддержка RAID должна быть встроена в ядро, а не как загружаемый модуль). Не следует создавать RAID-массив для своп-раздела — система сама обнаружит своп-разделы на разных дисках и будет использовать их по принципу RAID-массива. Не забудьте добавить соответствующую строку в файл конфигурации /etc/fstab, чтобы RAID-раздел монтировался автоматически при загрузке системы.

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

Расширение массива (добавление и замена дисков)[править | править вики-текст]

mdadm /dev/md0 --add /dev/hdd3

Эта команда добавляет новый «диск» (а вернее раздел) в массив md0. Добавленный диск считается пустым и резервным. Его можно использовать для расширения размера массива или он будет автоматически использован (в массивах, обеспечивающих отказоустойчивость) в качестве замены для вышедшего из строя диска.

Для расширения размера массива (если конечно тип массива допускает расширение) указывается ключ -G (--grow) и новое число дисков массива с помощью ключа -nX (--raid-devices=X).

mdadm -G /dev/md0 -n4 

Процесс реструктурирования массива выполняется в фоновом режиме и обычно занимает много часов. Наблюдать за ходом процесса можно просматривая файл /proc/mdstat. В принципе можно расширять и смонтированные массивы — это не опасно, но это увеличивает время реструктуризации. По умолчанию, скорость реструктуризации ограничена, но ее можно изменить

cat /proc/sys/dev/raid/speed_limit_m*
200000
1000
echo 10000 >/proc/sys/dev/raid/speed_limit_min

Расширение массива не увеличивает автоматически размер файловой системы на ней находящийся. Поэтому затем нужно расширить файловую систему явно. Для того чтобы удостовериться, что расширение произошло без ошибок можно проверить целостность файловой системы.

Удаление массива[править | править вики-текст]

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

mdadm -S /dev/md0

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

mdadm --zero-superblock /dev/sd[a-e]1

Файл конфигурации mdadm.conf[править | править вики-текст]

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

mdadm --detail --scan

В результате нам будет выведена информация вида:

ARRAY /dev/md/0 metadata=1.2 name=server:0 UUID=74c51786:16bbb1af:469a4f42:76ec9654
ARRAY /dev/md/1 metadata=1.2 name=server:1 UUID=6c65a539:36d0f116:b1194783:fc35d949
ARRAY /dev/md/2 metadata=1.2 name=server:2 UUID=55c01664:2cc1aa5b:5257948b:a7ea760c
ARRAY /dev/md/3 metadata=1.2 name=server:3 UUID=cf13c857:59adbacc:165c987e:d7c7f8a1

Её и добавляем в файл mdadm.conf

Известные проблемы[править | править вики-текст]

1. Частая ошибка при создании RAID устройств заключается в том, что dmraid-driver берет управление над всеми устройствами, которые должны были использоваться в новом RAID устройстве. Будет выдано сообщение об ошибке такого вида:

mdadm: Cannot open /dev/sdb1: Device or resource busy

Чтобы решить эту проблему, вы должны собрать новый образ initrd(initramfs) без dmraid-driver. Пример для ядра «2.6.18-8.1.6.el5»-kernel:

mkinitrd --without-dmraid /boot/NO_DMRAID_initrd-2.6.18-8.1.6.el5.img 2.6.18-8.1.6.el5

После этого, система должна быть перезагружена с новым initrd(initramfs). Отредактируйте ваш /boot/grub/grub.conf чтобы указать новый initrd(initramfs).

Если по каким-то причинам собрать новый образ initrd(initramfs) нет возможности, может помочь команда

dmsetup remove_all

2. Если один из компонентов массива переходит в статус «Failed», то обычно помогает его ручное удаление из массива, а затем – добавление заново. Например:

mdadm --manage /dev/md1 --remove /dev/sdd1
mdadm --manage /dev/md1 --add /dev/sdd1

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

mdadm --manage /dev/md0 --remove /dev/sda1 

необходимо сначала пометить его как поврежденный

mdadm /dev/md0 -f /dev/sda1 

после уже удалить его

mdadm /dev/md0 -r /dev/sda1 

и вновь добавить

mdadm /dev/md0 -a /dev/sda1

При повторении этой ситуации следует проверить дисковый накопитель на исправность.

Ссылки[править | править вики-текст]

См. также[править | править вики-текст]