Сегодня расскажу о проблеме рассинхронизации массива типа RAID10.

Для начала необходимо понимать суть данного массива, хорошо поясняется она здесь:

Array 5 vs Array 10

А в двух словах — это RAID0 из двух или более RAID1, т.е. чередование с зеркалированием. Предлагает нам хорошую избыточность, надежность, а также повышение производительности.

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

Итак, теперь о нашей проблеме.

Иногда диски ломаются, это правда, собственно для этого и придумали умные люди, дисковые массивы. Рассмотрим случай, когда из raid10 вываливается диск по какой-либо причине. Вы собираетесь его заменить. Производите замену и внезапно обнаруживаете Kernel Panic в системе.

Наиболее вероятная причина этого — вы заменили не тот диск, и самый худший вариант, если это второй диск из разрушенного зеркала (я рассматриваю вариант с четырьмя дисками всего).

Что теперь делать?

Во-первых не паниковать.

Во-вторых, выключить сервер, вернуть неправильно вытащенный диск на место и вообще убрать сбойный. Т.е. мы должны получить в итоге три диска онлайн.

Далее — грузимся в какой-нибудь liveCD. Почему не сразу в ОС? Попробовать можно, но скорее всего рейд не соберется и ОС не поднимется. Причиной этому — рассинхронизация зеркал. Т.е. на одном зеркале, где оба рабочих диска — один набор данных, а во втором, где был ошибочно вытащен диск — устаревший.

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

Поэтому грузимся в живой образ (рекомендую systemrescue), и наблюдаем рейд в статусе Inactive. Тут надо убедиться, что все три диска на месте, и они именно те (и на своих местах), которые были целыми перед падением.

Если все ок, выдыхаем и делаем:

mdadm -S /dev/mdX

(X меняем на номер массива)

Пробуем поднять массив и увидеть в живую, какую ошибку получаем

mdadm --assemble /dev/mdX [devices]

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

Теперь делаем так:

mdadm --assemble --scan --force /dev/mdX [devices]

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

Проверяем, что все в порядке:

mdadm -D /dev/mdX

State должен быть —

State : active, degraded

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

mdadm /dev/mdX -a /dev/sdX

Если простой критичен — после восстановления массива, можно загрузить основную ОС с тремя дисками, и уже в продакшене добавлять четвертый.