Материал просмотрен 453 раз(а)

Mdadm – утилита Linux, позволяющая создавать и управлять софтварными Raid-массивами дисков (md – multiple devices). Что такое raid и для чего он нужен я писал давным давно.

Сейчас мы замутим программный рейд на Linux-машине. Делать будем “зеркало” (raid1).

План:

  1. Создаём рейд-массив;
  2. Делаем автомонтирование;
  3. Проверяем отказоустойчивость;

Сперва добавим к нашей виртуальной машине два дополнительных диска. Перейдём в настройки, откроем раздел “Носители”, добавим новый диск в раздел “Контроллер: SATA”. Объем небольшой, по 2 гигабайта хватит.

Добавление нового "физического" диска

Добавление нового “физического” диска

Получилось как-то так:

Два новых диска

Два новых диска

Запускаем виртуальную машину.

В системе появились два новых устройства /dev/sdb и /dev/sdc

Разделов на них нет. Создадим разделы на обоих, выделив всё свободное место и сменив тип файловой системы на fd – Linux raid autodetect:

Подобные операции мы проделали и с /dev/sdb и с /dev/sdc. Итак, у нас есть /dev/sdb1 и /dev/sdc1 разделы.

Создадим программное зеркало:

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

Указали создать новое устройство /dev/md0, из двух устройств sdb1 и sdc1 в уровень 1 (raid1).

Создаём программный рейд

Создаём программный рейд

Готово! Создали рейд. Теперь нам нужно сделать автосоздание рейда при запуске, автомонтирование каталога и проверить отказоустойчивость.

Допишем в файл /etc/fstab запись, чтобы устройство монтировалось в каталог /raid. Не забудем эту папочку создать командой

# mkdir /raid

Делаем запись в fstab

Делаем запись в fstab

Ну попутно ещё создадим файловую систему на устройстве:

# mkfs.ext3 /dev/md0

Создаём файловую систему

Создаём файловую систему

Автосоздание рейда при запуске описывается в конфигурационном файле /etc/mdadm/mdadm.conf, содержимое которого выглядит так:

Строка “DEVICE partitions“, а затем вывод команды # mdadm --detail --scan

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

Создаём файл автоконфигурирования

Создаём файл автоконфигурирования

итак, файл выглядит вот так:

Содержимое файла автоконфигурирования

Содержимое файла автоконфигурирования

Готово! Перезагружаемся!

# reboot

Сейчас мы заполним данными диск. Я просто скопировал файлы из каталога /etc/ в каталог /raid/, в который у нас примонтировано наше устройство /dev/md0

# cp /etc/* /raid/

Содержимое каталога

Содержимое каталога

Готово. Сейчас мы будем имитировать нештатную ситуацию – выход из строя одного из дисков:

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

# mdadm /dev/md0 -f /dev/sdc1

Метим раздел как сбойный

Метим раздел как сбойный

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

# mdadm -D /dev/md0

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

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

Появилась строка faulty spare /dev/sdc1… А статус массива degraded. Вот, в общем-то и имитация сбоя. На практике это произойдёт автоматически, не надо будет помечать диск как фейловый (ключ -f).

Удалим раздел /dev/sdc1 из массива и занулим его:

# mdadm /dev/md0 -r /dev/sdc1
# dd if=/dev/zero of=/dev/sdc

Удаляем раздел из массива и зануляем его

Удаляем раздел из массива и зануляем его

Теперь у нас имеется “битое зеркало”, которое дышит благодаря одному лишь диску /dev/sdb1, в чём нетрудно убедиться. Данные на месте.

Далее, по нашей симуляции, мы установим “чистый диск”, коим у нас будет являться /dev/sdc (он и правда чист, мы его занулили).

Теперь нужно воссоздать разметку диска. Можно это делать вручную fdisk-ом. А можно воспользоваться sfdisk, если диски одного размера.

# sfdisk -d /dev/sdb | sfdisk /dev/sdc

Копируем разметку с раздела

Копируем разметку с раздела

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

Когда процедура будет завершена, добавим в наш рейд /dev/sdc1 и дождёмся окончания синхронизации:

# mdadm /dev/md0 -a /dev/sdc1
А посмотреть состояние синхронизации можно в файле /proc/mdstat

# cat /proc/mdstat

Статистика синхронизации

Статистика синхронизации

Как видим, происходит восстановление…

Если выполнить команду

# mdadm -D /dev/md0

то увидим, что и тут идёт ребилдинг (синхронизация)

Информация о синхронизации

Информация о синхронизации

Когда синхронизация завершена – оба диска работает нормально! Данные на месте!

Диски синхронизированны

Диски синхронизированны

Вот так мы и рассмотрели работу зеркала. Аналогично можно создать и raid5, на трёх дисках, к примеру. Там избыточность будет меньше.