mdadm - программный рейд Linux

Любой слабенький комп на райзене, а уж тем более современные 8 ядерные процы с достаточным объемом оперативной памяти способны создать достаточно быстрый массив, который уделает бюджетные контроллеры и к тому же более предсказуем, переставляем диски на любой другой комп даже через usb-корзину и собираем Raid.

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

На всякий случай потрем суперблоки, чтобы не возникало ошибок после перезагрузки, на основе этих суперблоков при старте собираются массивы, я один раз совершил ошибку, расформировал Raid-1 и собрал Raid-0, а при перезагрузке получил совсем не тот массив что собирал с поломанными данными

В данном примере рассматриваем создание массива из цельных дисков, если указывать номер раздела, то можно тоже самое делать с разделами, это удобно при зеркалировании дисков разных размеров, например есть диск на 10 террабайт и на 5, можно на двух дисках создать разделы по 5 террабайт и зазеркалить и еще 5 террабайт будут без зеркала или подключены в другой массив...
mdadm --zero-superblock /dev/sdx
mdadm --zero-superblock /dev/sdy

Если выдает ошибку, значит суперблоков нет, всё ок.

Затрем метаданные на дисках

wipefs --all --force /dev/sdx
wipefs --all --force /dev/sdy

Создаем устройство

  • -l 0 - RAID-0
  • -n 2 - два диска в массиве
mdadm --create --verbose /dev/md8 -l 0 -n 2 /dev/sdd /dev/sda

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

mkfs.ext4 /dev/md8

Расформирование массива

Если вдруг захотели из Raid1 переделать в Raid0, то действия следующие

Отмонтируем диск

umount /dev/md8

Остановим массив

mdadm -S /dev/md8

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

mdadm --zero-superblock /dev/sdx1
mdadm --zero-superblock /dev/sdy1

Обновление конфигурации

Бывает такое что после удаления и вновь создания массивов возникают проблемы с нумерацией, когда вместо md1 создается md127, решается это примерно так

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

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

update-initramfs -u
reboot 

Вывод из режима read-only

Для raid5 может такое произойти что диск синхронизировался, вы не дождались полной синхронизации и перезагрузили компьютер

md5 : active (auto-read-only) raid5 sdd[2] sda[1] sdc[4] sdf[0]
      52734587904 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/3] [UUU_]
      bitmap: 0/131 pages [0KB], 65536KB chunk

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

mdadm -w /dev/md5

Иногда рейд переходит в автоматический RO лишь по причине что раздел не примонтирован, стоит его смонтировать и всё будет как обычно.

Остановка синхронизации

Если вдруг ваши диски синхронизировались и вы перезагрузили компьютер, то синхронизация может остановиться и вы увидите resync=PENDING

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

Ускорение синхронизации

Если вы синхронизируете большой массив, например диски по 18Тб и скорость синхронизации показывает около 100 мегабайт в сек, сервер в данный момент ничем не занят и его можно загрузить фоновыми задачами, в промышленной эксплуатации такое не рекомендуется, но в момент начальной настройки можно ускорить процесс, можно сделать скорость синхронизации от 500 до 600

echo 500000 > /proc/sys/dev/raid/speed_limit_min
echo 600000 > /proc/sys/dev/raid/speed_limit_max

действует до первой перезагрузки потом будет от 10 до 200

Особые параметры при форматировании

  • stride - шаг
  • stripe-width - ширины полосы

stribe = chunk_size / размер блока

stripe-width = количество_дисков * stribe

Размер блока задается при форматировании, он будет 4КиБ = 4096 байт

Chunk_size можно узнать командой

mdadm --detail /dev/md10 | grep 'Chunk Size'
        Chunk Size : 512K

На Raid10 при 4х дисках с данными только 2, вторые 2 его зеркальная копия, поэтому дисков будем считать 2, а не 4.

stribe = 512/4 = 128

stripe-width = 128*2 = 256

Итого команда форматирования будет выглядеть так

mkfs.ext4 -v -m 0.01 -b 4096 -E stride=128,stripe-width=256 /dev/md0

Опции монтирования

/dev/md5 /mnt/data ext4 nodiratime,noatime,defaults,discard,commit=120 1 2
Показать комментарии