mdadm

проверить состояние raid массивов

cat /proc/mdstat

Иногда, сразу после загрузки системы один из массивов raid1 имеет статус "inactive" в /proc/mdstat. И соответственно все что должно было быть примонтировано с них — не работает.

пересобрать raid:

mdadm --stop /dev/md4
mdadm --assemble /dev/md4

 

Иногда при просмотре состояния массивов можно увидеть такую картину:

# cat /proc/mdstat

Personalities : [raid1]

md1 : active (auto-read-only) raid1 sda1[0] sdg1[1]

      976761472 blocks [2/2] [UU]

      bitmap: 0/8 pages [0KB], 65536KB chunk

Давайте разберемся что означает статус active (auto-read-only) ?

 

Массив в auto-read-only — на самом деле это не свидетельствует ни о какой проблеме, просто если вы не пользуетесь массивом долгое время, то он переходит в такой режим. Как только вы примонтируете раздел или начнете записывать данные, он перейдет в режим active.

 перевести массив в режим readwrite принудительно:

mdadm -w /dev/md1

А вот если помимо строки active (auto-read-only) Вы увидели resync=PENDING, то это означает, что операция синхронизации массива отложена и тут явно нужно её возобновить, это делается командой

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

Замена сбойного диска в программном RAID массиве.

Задача: заменить сбойный диск /dev/sdb.

Прежде всего, смотрим диагностику:

cat /proc/mdstat

или

mdadm --detail /dev/md0

Если вместо [UU] видим [U_], то дело плохо, целостность одного из дисков нарушена - нужно менять диск.

-1- Прежде всего, делаем так, чтобы с устройством никто не работал - см. п.1,2 Удаление программного (software) массива RAID.

-2- Помечаем раздел как сбойный:

mdadm --manage /dev/md0 --fail /dev/sdb1

-3- Отключаем раздел (удаляем из RAID1):

mdadm --manage /dev/md0 --remove /dev/sdb1

вариант когда диска уже нет в системе ( mdadm: cannot find /dev/sda1: No such file or directory )

mdadm /dev/md0 -r detached mdadm /dev/md1 -r detached

-4- Выключаем машину, меняем диск.

-5- Создаем через cfdisk или fdisk идентичные разделы, или c помощью sfdisk автоматически копируем структуру разделов первого диска /dev/sda:

sfdisk -d /dev/sda | sfdisk /dev/sdb

обязательно после этого проверить UUID

blkid /dev/sd*

если есть совпадения (а они полюбому есть))) то надо перегенерировать  UUID для всех разделов нового диска

tune2fs /dev/sdb1 -U `uuid`

..........

 

Дополнительно: sfdisk не работает!

# sfdisk -s /dev/sda

WARNING: GPT (GUID Partition Table) detected on '/dev/sda'! The util sfdisk doesn’t support GPT. Use GNU Parted.

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

Устанавливаем пакет gdisk

apt-get install gdisk

Копируем таблицу разделов с рабочего диска на замененный:

ВНИМАТЕЛЬНО СИНТАКСИС! sgdisk -R <Новый_диск> <Рабочий_диск>

sgdisk -R /dev/sda /dev/sdb

Успешный результат даст нам: The operation has completed successfully.

Теперь нам изменить у копи GUID, поскольку он тоже скопирован.

sgdisk -G /dev/sda

Смотрим результат:

gdisk -l /dev/sda

 

Этим способом можно пользоваться, поскольку в нашем примере «зеркальный» RAID1. При других уровнях (raid level), нужно разбить диск на раздел(ы) и пометить его(их) типом ФС «Linux raid autodetect».

-6- Добавляем раздел в RAID1 массив:

mdadm --manage /dev/md0 --add /dev/sdb1

-7- Ждем синхронизации массива:

mdadm --wait /dev/md0

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

Проверяем:

cat /proc/sys/dev/raid/speed_limit_min

Изменяем:

echo 50000 > /proc/sys/dev/raid/speed_limit_min

Можно тут:

vim /etc/sysctl.conf

Выставляем нужные нам пределы

dev.raid.speed_limit_min = 50000
dev.raid.speed_limit_max = 200000

Для вступления изменений в силу.

sysctl -p

На этом все.

таксономия: