Mdadm восстановление массива raid 1

Обновлено: 05.07.2024

Хочу рассказать поучительную историю, которая случилась со мной на днях. На одном из серверов в ЦОД вышел из строя диск в составе рейда mdadm. Ситуация типовая, с которой регулярно сталкиваюсь. Оставил заявку в техподдержку на замену диска с указанием диска, который надо поменять. В цоде заменили рабочий диск и оставили сбойный. Дальше история, как я решал возникшую проблему.

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на . Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.

Цели статьи

  1. Рассказать поучительную историю о том, какие могут быть проблемы при аренде серверов в ЦОД.
  2. Показать на примере, как надо действовать при выходе из строя диска в рейде mdadm.
  3. Простыми словами объяснить, в чем разница между программным и аппаратным рейдом.

Введение

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

Не скажу, что у меня прям большой опыт аренды серверов, но он есть. Я регулярно обслуживаю 10-15 серверов, расположенных в разных дата центрах, как российских, так и европейских. Первый негативный опыт я получил именно в Европе и был очень сильно удивлен и озадачен. Я, как и многие, был под влиянием либеральной пропаганды на тему того, что у нас все плохо, а вот Европа образец надежности, стабильности и сервиса. Как же я ошибался. Сейчас отдам предпочтение нашим дата центрам. По моему мнению и опыту, у нас тех поддержка и сервис в целом лучше, чем там, без привязки к стоимости. В Европе дешевле схожие услуги, так как там масштабы сервисов в разы больше.

Приведу несколько примеров косяков саппорта, с которыми сталкивался.

Было много всяких инцидентов помельче, нет смысла описывать. Хотя нет, один все же опишу. Устанавливал свой сервер в ЦОД. Решил пойти в маш зал и проконтролировать монтаж. Если есть такая возможность, крайне рекомендую ей воспользоваться. Местный рукожоп неправильно прикрепил салазки и сервер во время монтажа стал падать. Я его поймал, тем спас его и сервера других клиентов. В итоге помог с монтажом. Сам бы он просто не справился. Я не представляю, что было, если бы я не пошел в машзал. К чести руководства, я написал претензию, где подробно описал данный случай и попросил бесплатно месячную аренду. Мне ее предоставили. Советую всем так поступать. Зачастую, руководство может быть не в курсе того, что происходит в реальности. Надо давать обратную связь.

Уровень моего доверия к тех поддержке дата центров и хостингов вы примерно представляете :) Ну и вот случилось очередное ЧП. Подробнее остановлюсь на этой ситуации, так как она случилась вчера, свежи воспоминания.

Замена диска в рейде mdadm

Речь пойдет о дешевых дедиках от selectel. Я их много где использую и в целом готов рекомендовать. Это обычные десктопные системники за скромные деньги. Свое мнение об этих серверах, а так же сравнение с полноценными серверами сделаю в конце, в отдельном разделе.

На сервере была установлена система Debian из стандартного шаблона Selectel. Вот особенности дисковой подсистемы этих серверов и шаблона.

  • 2 ssd диска, объединенные в mdadm
  • /boot раздел на /dev/md0 размером 1G
  • корень / на /dev/md1 и поверх lvm на весь массив

В целом, хорошая и надежная разбивка, чему будет подтверждение дальше. На сервере был установлен proxmox, настроен мониторинг mdadm. Мониторинг дисков не сделал. В какой-то момент получил уведомление в zabbix, что mdadm развалился. Сервер при этом продолжал работать. Ситуация штатная. Пошел в консоль сервера, чтобы все проверить. Посмотрел состояние рейда.

Убедился, что один диск выпал из массива. В системном логе увидел следующее.

Замена диска в mdadm

Попробовал посмотреть информацию о выпавшем диске.

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

Я не стал разбираться, что там к чему с диском. Если вижу проблемы, сразу меняю. Предупредил заказчика, что с диском проблемы, нужно планировать замену. Так как железо десктопное, "сервер" надо выключать. Согласовали время после 22 часов. Я в это время уже сплю, поэтому написал тикет в тех поддержку, где указал время и серийный номер диска, который нужно было оставить. Я сделал на этом акцент, объяснил, что сбойный диск не отвечает, поэтому его серийник посмотреть не могу. Расписал все очень подробно, чтобы не оставить почвы для недопонимания или двойного толкования. Я в этом уже спец, но все равно не помогло.

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

Утром я встал и увидел, что весь системный лог в ошибках диска, рабочего диска в системе нет, а есть один глючный и один новый. Сразу же запустил на всякий случай ребилд массива и он вроде как даже прошел без ошибок. Перезагрузка временно оживила сбойный диск. В принципе, на этом можно было бы остановиться, заменить таки сбойный диск и успокоиться. Но смысл в том, что этот сбойный диск почти сутки не был в работе и данные на нем старые. Это не устраивало. Потом пришлось бы как-то склеивать эти данные с данными из бэкапов. В случае с базой данных это не тривиальная процедура. Созвонился с заказчиком и решили откатываться на рабочий диск, который вытащили накануне ночью.

Я создал тикет и попросил вернуть рабочий диск на место. К счастью, он сохранился. К нему добавить еще один полностью чистый. Хостер оперативно все сделал и извинился. В завершении прислал скриншот экрана сервера.

You are in emergency mode

И самоустранился. Дальше решать проблему загрузки он предложил загрузившись в режиме rescue. Этот режим доступен через панель управления сервером в админке, даже если сервер не имеет ipmi консоли. Как я понял, по сети загружается какой-то live cd для восстановления. Я в нем загрузился, убедился, что данные на месте, но понять причину ошибки не смог. Может быть и смог бы, если бы дольше покопался, но это очень неудобно делать, не видя реальной консоли сервера. Я попросил подключить к серверу kvm over ip, чтобы я мог подключиться к консоли. Тех поддержка без лишних вопросов оперативно это сделала.

К слову, мне известны случаи, когда техподдержка selectel потом сама чинила загрузку и возвращала mdadm в рабочее состояние. Видел такие переписки в тикетах у своих клиентов до того, как они обращались ко мне. Но я не стал настаивать на таком решении проблемы, так как боялся, что будет хуже. К тому же это было утро воскресенья и специалистов, способных это сделать, могло просто не быть. Плюс, я не думаю, что они обладали бы большими компетенциями, чем я. Я бы за их зарплату не пошел работать в ЦОД.

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

You are in emergency mode

У меня много примеров того, как я восстанавливал загрузку сломавшихся linux дистрибутивов.

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

Дальше нужно ввести пароль root и вы окажетесь в системной консоли. Первым делом я проверил состояние массива mdadm.

Состояние массива md0, на котором располагается раздел /boot - inactive. Вот, собственно, и причина того, почему сервер не загружается. Судя по всему, когда был подключен сбойный диск, mdadm отключил массив, чтобы предотвратить повреждение данных. Не понятно, почему именно на разделе /boot, но по факту было именно это. Из-за того, что массив остановлен, загрузиться с него не получалось. Я остановил массив и запустил снова.

После этого массив вышел из режима inactive и стал доступен для дальнейшей работы с ним. Я перезагрузил сервер и убедился, что он нормально загружается. Сервер фактически был в рабочем состоянии, просто с развалившимся массивом mdadm, без одного диска.

Если вам это не поможет, предлагаю еще несколько советов, что можно предпринять, чтобы починить загрузку. Первым делом проверьте файл /etc/fstab и посмотрите, какие разделы и как там монтируются. Вот мой пример этого файла.

Вам нужно убедиться, что указанные lvm разделы /dev/mapper/vg0-root и /dev/mapper/vg0-swap_1 действительно существуют. Для этого используйте команду:

Подробно об этой команде, о работе с lvm и вообще с дисками я рассказываю в отдельной статье - настройка диска в debian. Если с lvm разделами все нормально, проверьте /boot. У меня он монтируется по uuid. Посмотреть список uuid всех разделов можно командой.

Как вы видите, у меня uuid раздела для загрузки полностью совпадает с тем, что указано в fstab. Если по какой-то причине uuid изменился (разобрали и собрали новый массив), отредактируйте fstab.

Все дальнейшие действия я делал уже по ssh. Скопировал таблицу разделов с рабочего диска sda на чистый sdb.

Проверил таблицы разделов и убедился, что они идентичные.

Копирование разделов с одного диска на другой

Скопировал раздел BIOS boot partition с рабочего диска на новый.

Потом добавил разделы диска sdb2 и sdb3 в рейд массив.

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

cat /proc/mdstat

В завершении устанавливаем загрузчик на оба диска.

После этого я перезагрузился и убедился, что все работает нормально. По хорошему, теперь надо было бы поменять загрузочный диск с первого на второй и убедиться, что со второго тоже нормально грузится. Я не стал этого делать, и так простой и так был велик. Главное, чтобы массив был на месте, а починить загрузку, если что, дело техники.

Вот и все по замене диска в массиве mdadm. После доступа к консоли сервера, мне потребовалось минут 10, чтобы вернуть сервер в рабочее состояние.

В чем отличия программного и аппаратного рейда

Сейчас расскажу, чем принципиально отличается программный рейд контроллер (mdadm) от аппаратного, для тех, кто этого до конца не понимает. Если бы у меня вышел из строя диск на аппаратном рейд контроллере, установленном в полноценный сервер, проблема по замене сбойного диска в RAID решалась бы в следующей последовательности:

  1. Рейд контроллер оповещает о том, что с диском проблемы и выводит его из работы. В случае с софтовым рейдом система может зависнуть в случае проблем с диском, прежде чем пометит его как проблемный и перестанет к нему обращаться.
  2. Я оставляю тикет в тех поддержку, где прошу заменить сбойный диск. Информацию о нем я посмотрю в панели управления рейд контроллером.
  3. Сотрудник тех поддержки видит сбойный диск, так как индикация на нем, скорее всего, будет мигать красной лампочкой. Это не гарантия того, что рукожоп все сделает правильно, но тем не менее, шансов, что он ошибется, меньше. Я сталкивался с ситуацией, когда и в этом случае диск меняли не тот.
  4. При появлении нового диска raid контроллер автоматически начинает ребил массива.

Если же у вас в сервере уже установлен запасной диск на случай выхода из строя диска в составе raid массива, то все еще проще:

  1. При выходе из строя диска, контроллер помечает его как сбойный, вводит в работу запасной диск и начинает ребилд.
  2. Вы получаете оповещение о том, что вышел из строя диск и оставляете тикет в тех поддержку на замену запасного диска.

И это все. В обоих случаях у вас вообще нет простоя. Вот принципиальная разница между mdadm и железным raid контроллером. Стоимость полноценного сервера с контроллером и постоянным ipmi доступом к консоли в среднем в 3 раза выше, чем у сервера на десткопном железе с софтовым рейдом при схожей производительности. Это все при условии, что вам достаточно одного процессора и 64G памяти. Это потолок для десктопных конфигураций. Дальше считайте сами, что вам выгоднее. Если возможен простой в несколько часов на замену диска или других комплектующих, то смело можно использовать десктопное железо. Mdadm обеспечивает сопоставимую гарантию сохранности данных в сравнении с железным контроллером. Вопрос лишь в простое и производительности. Ну и своевременные бэкапы добавляют уверенности в том, что вы переживете неполадки с железом.

При использовании железного рейда на hdd дисках, есть возможно получить очень значительный прирост скорости за счет кэша контроллера. Для ssd дисков я особо не замечал разницы. Но это все на глазок, никаких замеров и сравнений я не делал. Нужно еще понимать, что десктопное железо в целом менее надежное. К примеру, в том же селектеле на дешевых серверах я ловил перегрев или очень высокую температуру дисков. Прыгала в районе 55-65 градусов. Все, что ниже 60-ти, тех поддержка футболила, говоря, что это допустимая температура, судя по документации к дискам. Это так и есть, но мы же понимаем, что диск, постоянно работающий на 59 градусах с бОльшей долей вероятности выйдет из строя.

Вот еще пример разницы в железе. Если у вас в нормальном сервере выйдет из строя планка памяти, сервер просто пометит ее как сбойную и выведет из работы. Информацию об этом вы увидите в консоли управления - ilo, idrac и т.д. В десктопном железе у вас просто будет постоянно виснуть сервер и вам придется долго выяснять, в чем же проблема, так как доступа к железу у вас нет, чтобы проще было запланировать тестирование сервера. А если вы закажете это у тех поддержки, то есть ненулевая вероятность, что станет хуже - сервер уронят, перепутают провода подключения дисков и т.д. В общем, это всегда риск. Проще сразу съезжать с такой железки на другую.

Заключение

Надеюсь, моя статья была интересной. Для тех, кто никогда не работал с ЦОДами будет полезно узнать, чего можно от них ожидать. Я скучаю по временам, когда все сервера, которые я администрировал, были в серверной, куда никому не было доступа и куда я мог в любой момент попасть и проверить их. Сейчас все стало не так. И твои сервера уже не твои. Их может сломать, уронить, что-то перепутать сотрудник тех поддержки дата центра.

Сейчас большой тренд на переход в облака. Я смотрю на эти облака и не понимаю, как с ними можно нормально взаимодействовать. Заявленная производительность не гарантированная, нагрузка плавает в течении суток. Упасть может в любой момент и ты не будешь понимать вообще в чем проблема. Твои виртуалки могут быть по ошибке удалены и кроме извинений и компенсации в 3 копейки ты ничего не получить. Каждое обращение в ТП как лотерея. Думаешь, что сломают в этот раз. Если сервера железные, то когда пишу тикет на доступ к железу, я морально и технически всегда готов к тому, что этот сервер сейчас отключится и я больше не смогу к нему подключиться.

В целом, опыт работы с облаками у меня негативный. Несколько раз пробовал для сайтов и все время съезжал. Нет гарантированного времени отклика. А это сейчас фактор ранжирования. Для очень быстрого сайта остается только один вариант - свое железо, а дальше уже кому какое по карману. Зависит от надежности и допустимого времени простоя.

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

mdadm — утилита для работы с программными RAID-массивами различных уровней. В данной инструкции рассмотрим примеры ее использования.

Установка mdadm

Утилита mdadm может быть установлена одной командой.

Если используем CentOS / Red Hat:

yum install mdadm

Если используем Ubuntu / Debian:

apt-get install mdadm

Сборка RAID

Перед сборкой, стоит подготовить наши носители. Затем можно приступать к созданию рейд-массива.

Подготовка носителей

Сначала необходимо занулить суперблоки на дисках, которые мы будем использовать для построения RAID (если диски ранее использовались, их суперблоки могут содержать служебную информацию о других RAID):

mdadm --zero-superblock --force /dev/sd

* в данном примере мы зануляем суперблоки для дисков sdb и sdc.

Если мы получили ответ:

mdadm: Unrecognised md component device - /dev/sdb
mdadm: Unrecognised md component device - /dev/sdc

. то значит, что диски не использовались ранее для RAID. Просто продолжаем настройку.

Далее нужно удалить старые метаданные и подпись на дисках:

wipefs --all --force /dev/sd

Создание рейда

Для сборки избыточного массива применяем следующую команду:

mdadm --create --verbose /dev/md0 -l 1 -n 2 /dev/sd

  • /dev/md0 — устройство RAID, которое появится после сборки;
  • -l 1 — уровень RAID;
  • -n 2 — количество дисков, из которых собирается массив;
  • /dev/sd — сборка выполняется из дисков sdb и sdc.

Мы должны увидеть что-то на подобие:

Также система задаст контрольный вопрос, хотим ли мы продолжить и создать RAID — нужно ответить y:

Continue creating array? y

Мы увидим что-то на подобие:

mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

. и находим информацию о том, что у наших дисков sdb и sdc появился раздел md0, например:

.
sdb 8:16 0 2G 0 disk
??md0 9:0 0 2G 0 raid1
sdc 8:32 0 2G 0 disk
??md0 9:0 0 2G 0 raid1
.

* в примере мы видим собранный raid1 из дисков sdb и sdc.

Создание файла mdadm.conf

В файле mdadm.conf находится информация о RAID-массивах и компонентах, которые в них входят. Для его создания выполняем следующие команды:

echo "DEVICE partitions" > /etc/mdadm/mdadm.conf

DEVICE partitions
ARRAY /dev/md0 level=raid1 num-devices=2 metadata=1.2 name=proxy.dmosk.local:0 UUID=411f9848:0fae25f9:85736344:ff18e41d

* в данном примере хранится информация о массиве /dev/md0 — его уровень 1, он собирается из 2-х дисков.

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

Создание файловой системы для массива выполняется также, как для раздела:

* данной командой мы создаем на md0 файловую систему ext4.

Примонтировать раздел можно командой:

mount /dev/md0 /mnt

* в данном случае мы примонтировали наш массив в каталог /mnt.

Чтобы данный раздел также монтировался при загрузке системы, добавляем в fstab следующее:

/dev/md0 /mnt ext4 defaults 1 2

Для проверки правильности fstab, вводим:

Мы должны увидеть примонтированный раздел md, например:

/dev/md0 990M 2,6M 921M 1% /mnt

Информация о RAID

Посмотреть состояние всех RAID можно командой:

В ответ мы получим что-то на подобие:

md0 : active raid1 sdc[1] sdb[0]
1046528 blocks super 1.2 [2/2] [UU]

* где md0 — имя RAID устройства; raid1 sdc[1] sdb[0] — уровень избыточности и из каких дисков собран; 1046528 blocks — размер массива; [2/2] [UU] — количество юнитов, которые на данный момент используются.
** мы можем увидеть строку md0 : active(auto-read-only) — это означает, что после монтирования массива, он не использовался для записи.

Подробную информацию о конкретном массиве можно посмотреть командой:

* где /dev/md0 — имя RAID устройства.

Version : 1.2
Creation Time : Wed Mar 6 09:41:06 2019
Raid Level : raid1
Array Size : 1046528 (1022.00 MiB 1071.64 MB)
Used Dev Size : 1046528 (1022.00 MiB 1071.64 MB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent

Update Time : Wed Mar 6 09:41:26 2019
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0

Consistency Policy : resync

Name : proxy.dmosk.local:0 (local to host proxy.dmosk.local)
UUID : 304ad447:a04cda4a:90457d04:d9a4e884
Events : 17

Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc

  • Version — версия метаданных.
  • Creation Time — дата в время создания массива.
  • Raid Level — уровень RAID.
  • Array Size — объем дискового пространства для RAID.
  • Used Dev Size — используемый объем для устройств. Для каждого уровня будет индивидуальный расчет: RAID1 — равен половине общего размера дисков, RAID5 — равен размеру, используемому для контроля четности.
  • Raid Devices — количество используемых устройств для RAID.
  • Total Devices — количество добавленных в RAID устройств.
  • Update Time — дата и время последнего изменения массива.
  • State — текущее состояние. clean — все в порядке.
  • Active Devices — количество работающих в массиве устройств.
  • Working Devices — количество добавленных в массив устройств в рабочем состоянии.
  • Failed Devices — количество сбойных устройств.
  • Spare Devices — количество запасных устройств.
  • Consistency Policy — политика согласованности активного массива (при неожиданном сбое). По умолчанию используется resync — полная ресинхронизация после восстановления. Также могут быть bitmap, journal, ppl.
  • Name — имя компьютера.
  • UUID — идентификатор для массива.
  • Events — количество событий обновления.
  • Chunk Size (для RAID5) — размер блока в килобайтах, который пишется на разные диски.

Подробнее про каждый параметр можно прочитать в мануале для mdadm:

Также, информацию о разделах и дисковом пространстве массива можно посмотреть командой fdisk:

Проверка целостности

Для проверки целостности вводим:

Результат проверки смотрим командой:

* если команда возвращает 0, то с массивом все в порядке.

Восстановление RAID

Рассмотрим два варианта восстановлении массива.

Замена диска

В случае выхода из строя одного из дисков массива, команда cat /proc/mdstat покажет следующее:

Personalities : [raid1]
md0 : active raid1 sdb[0]
1046528 blocks super 1.2 [2/1] [U_]

* о наличии проблемы нам говорит нижнее подчеркивание вместо U — [U_] вместо [UU].

.
Update Time : Thu Mar 7 20:20:40 2019
State : clean, degraded
.

* статус degraded говорит о проблемах с RAID.

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

mdadm /dev/md0 --remove /dev/sdc

Теперь добавим новый:

mdadm /dev/md0 --add /dev/sde

Смотрим состояние массива:

.
Update Time : Thu Mar 7 20:57:13 2019
State : clean, degraded, recovering
.
Rebuild Status : 40% complete
.

* recovering говорит, что RAID восстанавливается; Rebuild Status — текущее состояние восстановления массива (в данном примере он восстановлен на 40%).

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

* по умолчанию скорость speed_limit_min = 1000 Кб, speed_limit_max — 200000 Кб. Для изменения скорости, можно поменять только минимальную.

Пересборка массива

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

mdadm --assemble --scan

* данная команда сама найдет необходимую конфигурацию и восстановит RAID.

Также, мы можем указать, из каких дисков пересобрать массив:

mdadm --assemble /dev/md0 /dev/sdb /dev/sdc

Запасной диск (Hot Spare)

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

Диском Hot Spare станет тот, который просто будет добавлен к массиву:

mdadm /dev/md0 --add /dev/sdd

Информация о массиве изменится, например:

.
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
2 8 48 1 active sync /dev/sdc

3 8 32 - spare /dev/sdd

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

mdadm /dev/md0 --fail /dev/sdb

И смотрим состояние:

.
Rebuild Status : 37% complete
.
Number Major Minor RaidDevice State
3 8 32 0 spare rebuilding /dev/sdd
2 8 48 1 active sync /dev/sdc

0 8 16 - faulty /dev/sdb
.

* как видим, начинается ребилд. На замену вышедшему из строя sdb встал hot-spare sdd.

Добавить диск к массиву

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

Добавляем диск к массиву:

mdadm /dev/md0 --add /dev/sde

4 8 16 - spare /dev/sde

Теперь расширяем RAID:

mdadm -G /dev/md0 --raid-devices=3

* в данном примере подразумевается, что у нас RAID 1 и мы добавили к нему 3-й диск.

Удаление массива

При удалении массива внимателнее смотрите на имена массива и дисков и подставляйте свои значения.

Если нам нужно полностью разобрать RAID, сначала размонтируем и остановим его:

* где /mnt — каталог монтирования нашего RAID.

* где /dev/md0 — массив, который мы хотим разобрать.
* если мы получим ошибку mdadm: fail to stop array /dev/md0: Device or resource busy, с помощью команды lsof -f -- /dev/md0 смотрим процессы, которые используют раздел и останавливаем их.

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

mdadm --zero-superblock /dev/sdb

mdadm --zero-superblock /dev/sdc

mdadm --zero-superblock /dev/sdd

* где диски /dev/sdb, /dev/sdc, /dev/sdd были частью массива md0.

В этой статье, вы найдете подробную инструкцию по восстановлению данных с RAID 0, 1 или 5. Массив собран в ОС «Linux», а описанные методы помогут вернуть нужные файлы даже при поломке одного или нескольких дисков.

Как восстановить данные RAID 5, 1, 0 на ОС Linux (mdadm)

Программный массив, построенный на ОС Linux не славится своей надежностью, отключив хотя бы один из накопителей RAID массива он перестает монтироваться, и вся информация стает недоступной. В таком случае вам понадобиться специальная утилита, которая сможет собрать его заново из оставшихся рабочих накопителей. Она найдет и отобразит данные которые там остались, а также поможет их вернуть.

Все тесты будем проводить с помощью утилиты Hetman RAID Recovery. Ее основная функция – это поиск и восстановление информации с неисправных накопителей, которые составляли массив. Программа в автоматическом режиме определит какой контроллер, материнская плата или ПО были использованы для создания массива, пересоберет RAID заново из оставшихся рабочих дисков. Останется только найти все нужные данные и сохранить их на рабочие накопители.

Восстановление данных с поврежденных RAID-массивов, недоступных для компьютера.

Пока дистрибутива Hetman RAID Recovery под ОС Linux не существует, но запустить программу на этой «операционке» вполне возможно.

Для восстановления информации из поврежденного массива, подключите носители к компьютеру с операционной системой Windows. Если у вас нет такой возможности, то можно установить виртуальную машину, или вторую операционную систему на ваш ПК.

Виртуальная машина с Windows 10 на Linux ПК

Как восстановить данные с RAID-1

В начале рассмотрим процесс восстановления с устройства типа RAID 1, который собран на операционной системе Linux и состоит из двух одинаковых жестких дисков.

Этот тип может включать четное количество накопителей, не менее двух, которые используются как полные «зеркала».

Схема строения массива типа RAID 1

Это один самых широко используемых типов. Он обладает высокой отказоустойчивостью, так как при отказе одного накопителя, на его место можно подключить «зеркало», а на пустое место поставить чистый, и весь массив должен работать в обычном режиме. Но, при отказе всего одного «винчестера», не удалось нормально его смонтировать в ОС Linux. В дисковой утилите он по-прежнему доступен, но кнопка монтирования отсутствует, авто-подключение тоже не доступно.

Испорченный RAID-1 array

Hetman RAID Recovery определила все параметры, автоматически собрала и отобразила информацию.

Программа определила все параметры и автоматически пересобрала устройство

Для запуска анализа в менеджере, кликните по иконке устройства правой кнопкой мыши и откройте его.

Запуск анализа в менеджере

Сперва выполните «Быстрое сканирование».

Выбираем Быстрый анализ

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

Отмечаем файлы, которые нужно вернуть и жмем «Восстановить».

Отмечаем файлы, которые нужно вернуть, кликаем «Восстановить»

Указываем место куда их сохранить, затем «Далее» и еще раз «Восстановить».

Мастер сохранения файлов

По окончании процесса восстановления «Готово».

Посмотрите результаты

По завершении все файлы будут лежать в указанной папке.

Программный RAID 1 собранный на ОС Linux устроен таким образом, что записывает служебную информацию о данном типе массива на всех его носителях (из скольких накопителей он состоял, их серийный номер и где расположено начало каждого носителя). Поэтому, при потере одного элемента, программа считывает эту информацию с других носителей и подставляет дополнительные данные, при построении поврежденного массива.

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

Конструктор для ручной пересборки

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

Укажите параметры, а также смещение, по которому расположено начало

В каждой файловой системы есть свои сигнатуры, по которым можно определить ее начало. Указав это смещение вам удастся пересобрать поврежденное устройство заново и достать из него нужные файлы.

Для поиска смещения воспользуйтесь HEX-редактором, кликните по иконке правой кнопкой мыши и откройте HEX или же нажмите сочетание клавиш «Ctrl+H».

Для поиска смещения воспользуйтесь HEX-редактором

Начало загрузочной области в Linux можно найти примерно по такому полю «/media/lin/», где lin – это имя учетной записи пользователя.


Как известно данные о начале диска в данной файловой системе записывается во втором секторе сначала, поэтому нам надо подняться на 2 сектора вверх. Затем сконвертировать значение HEX в десятеричную систему, для этого воспользуйтесь калькулятором.

Сконвертируйте значение HEX в десятеричную систему, для этого воспользуйтесь калькулятором

В калькуляторе открываем режим программиста, отмечаем HEX и вводим наше значение (8200000). Сразу же получим нужное смещение в десятеричном виде (136 314 880).

Окно калькулятора программиста Windows

Теперь, когда известно смещение осталось указать его в конструкторе.

Прописываем смещение в конструкторе

Далее нужно добавить устройство, просканировать и восстановить найденную информацию.

Окно сканирования

Восстанавливаем файлы из RAID 5

В следующем примере разберем процесс восстановления файлов из массива типа 5.

Утилита Linux отображение RAID-5

Как создать программный RAID на Linux Ubuntu

Тип RAID-5 – это избыточный массив жестких дисков с чередованием, без выделенного накопителя чётности.

Блок-схема типа RAID-5

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

Отказ инициализации в Linux

RAID 5 состоит из 5 «винчестеров» один из которых поврежден. Подключите оставшиеся жесткие диски к ПК с Windows, или добавьте их в виртуальную машину. После запуска программы, Hetman RAID Recovery без проблем определила тип и параметры массива.

Главное окно Hetman RAID Recovery

Один «винчестер» пустой. (Правой кнопкой по массиву – Свойства – вкладка RAID)

Окно свойств

Кликните по нему правой кнопкой мыши, а затем «Открыть».

Открываем нужное устройство

Первый шаг мастера – Быстрое сканирование

Программе без труда удалось найти все файлы которые остались. Отметьте нужные и нажмите «Восстановить».

Результаты сканирования

Укажите место куда их сохранить и еще раз кликните «Восстановить».

Мастер сохранения

По завершении вся информация будет лежать в указанной ранее папке.

Файлы восстановлены и находятся в нужном каталоге

Программа все равно сможет определить тип RAID, все нужные параметры и файловую систему, даже если несколько носителей одновременно выйдут из строя.

Автоматическое определение типа устройства

Два диска пустые (Кликаем правой кнопкой – Свойства – переходим на вкладку RAID).

Окно свойств устройства

Просканируем устройство, жмем правой кнопкой мыши и выбираем «Открыть».

Окно менеджера дисков

Для начала мы выполнили «Быстрое сканирование».

Окно мастера – Быстрое сканирование

В результате быстрого сканирования программе не удалось найти целых данных, все найденные данные повреждены. Затем мы выполнили «Полное сканирование».

Выбираем Полный анализ

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

Окно результатов

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

Поэтому такой результат можно считать очень хорошим, так как удалось вернуть часть сохранившихся данных. Отмечаем их и восстанавливаем.

Окно результатов – Сохраняем нужные файлы

Как восстановить данные RAID-0

Для последнего теста мы собрали нулевой RAID из пяти жестких дисков.

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

Дисковая утилита Linux – устройство RAID-0

Посмотрим удастся ли Hetman RAID Recovery достать хоть какую-то информацию.

Тип RAID-0 – это массив жестких дисков с чередованием, с увеличенной производительностью, но без какой-либо устойчивости к отказам оборудования. После поломки или сбоя хоть одного носителя все устройство станет неработоспособным.

Говоря по правде, RAID-0 вообще не является RAID-массивом в строгом понимании этого термина, так как он вообще не обеспечивает избыточности хранимой информации. Этот тип может похвастаться только увеличенной скорость работы.

Блок-схема RAID-0

Программа определила тип и параметры поврежденного устройства.

Утилита без проблем определили тип и свойства устройства

В свойствах видим, что один диск пустой. (Правой кнопкой по массиву – Свойства – вкладка RAID).

Окно параметров массива

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

Окно пошагового мастера – запускаем полное сканирование

После глубокого анализа утилита нашла данные, некоторые файлы оказались повреждёнными.

Вывод результатов

Hetman RAID Recovery удалось найти часть сохранившейся информации. Отмечаем файлы, которые нужно вернуть и жмем «Восстановить»,

Сохранение нужных файлов

Указываем место для сохранения, «Далее», еще раз жмем «Восстановить».

Укажите полный путь к каталогу для сохранения

Завершение процесса

Все файлы будут лежать в указанной папке.

Заключение

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

Dmytriy Zhura

Автор: Dmytriy Zhura, Технический писатель

Дмитрий Жура – автор и один из IT-инженеров компании Hetman Software. Имеет почти 10 летний опыт работы в IT-сфере: администрирование и настройка серверов, установка операционных систем и различного программного обеспечения, настройка сети, информационная безопасность, внедрения и консультация по использованию специализированного ПО. Является экспертом в области восстановления данных, файловых систем, устройств хранения данных и RAID массивов. Подробнее

Linux

Соберу в одном месте список полезных команд для mdadm.

mdadm — утилита для управления программными RAID-массивами в Linux.

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

  • mdadm --create, C Создать новый массив на основе указанных устройств. Использовать суперблоки размещённые на каждом устройстве.
  • mdadm --assemble, -A Собрать компоненты ранее созданного массива в массив. Компоненты можно указывать явно, но можно и не указывать — тогда выполняется их поиск по суперблокам.
  • mdadm --build, -B Собрать массив из компонентов, у которых нет суперблоков. Не выполняются никакие проверки, создание и сборка массива в принципе ничем не отличаются.
  • mdadm --manage Разнообразные операции по управлению массивом, такие как замена диска и пометка как сбойного.
  • mdadm --misc Действия, которые не относятся ни к одному из других режимов работы.
  • mdadm --grow, G Расширение или уменьшение массива, включаются или удаляются новые диски.
  • mdadm --incremental, I Добавление диска в массив.
  • mdadm --monitor, --follow, -F Следить за изменением состояния устройств. Для RAID0 этот режим не имеет смысла.

И другие: mdadm --help.

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

Для создания массива нужно использовать не смонтированные разделы. Убедитесь в этом, при необходимости демонтируйте и уберите из fstab.

Пример создания RAID5 массива из трёх дисков:

  • /dev/nvme0n1
  • /dev/nvme1n1
  • /dev/nvme2n1

Я использую NVMe диски, у вас названия дисков будут другие.

Желательно изменить тип разделов на FD (Linux RAID autodetect). Это можно сделать с помощью fdisk (t).

Занулить суперблоки дисков:

Стереть подпись и метаданные:

С помощью ключа --create создать RAID5 массив:

  • /dev/md0 — массив, который мы создаём;
  • --level 5 — уровень RAID;
  • --raid-devices=3 — количество дисков, из которых собирается массив;
  • /dev/nvme0n1 /dev/nvme1n1 /dev/nvme2n1 — диски.

Для примера RAID1 из двух дисков /dev/sdb и /dev/sdc можно создать так:

  • /dev/md2 — массив, который мы создаём;
  • -l 5 — уровень RAID;
  • -n 2 — количество дисков, из которых собирается массив;
  • /dev/sd — диски sdb и sdc.

Состояние массива

Посмотреть инициализацию массива и текущее состояние можно с помощью команды:

mdadm

Подробный статус выбранного массива

mdadm

Список массивов

bash

Создание файловой системы

Файловую систему в массиве можно создать с помощью mkfs, например:

Для лучшей производительности файловой системы имеет смысл указывать при её создании количество дисков в рейде и количество блоков файловой системы, которое может поместиться в один страйп (chunk), это касается массивов уровня RAID0, RAID5 ,RAID6 ,RAID10. Для RAID1 (mirror) это не имеет значения так как запись идет всегда на один device, a в других типах массивов данные записываются последовательно на разные диски порциями, соответствующими размеру stripe. Например, если мы используем RAID5 из 3 дисков с дефолтным размером страйпа в 64К и файловую систему ext3 с размером блока в 4К то можно вызывать команду mkfs.ext3 так:

stripe-width обычно рассчитывается как

где N — это диски с данными в массиве, например, в RAID5 два диска с данными и один parity для контрольных сумм. Для файловой системы XFS нужно указывать не количество блоков файловой системы, соответствующих размеру stripe в массиве, а размер самого страйпа:

Создание mdadm.conf

Операционная система не запоминает какие RAID-массивы ей нужно создать и какие диски в них входят. Эта информация содержится в файле mdadm.conf.

В интернете советуют применять команду mdadm --detail --scan --verbose, но я не рекомендую, т.к. она пишет в конфигурационный файл названия разделов, а они в некоторых случаях могут измениться, тогда RAID-массив не соберётся. А mdadm --detail --scan записывает UUID разделов, которые не изменятся.

Проверка целостности массива

Есть ли ошибки в процессе проверки программного RAID-массива по команде check или repair:

Работа с дисками

Диск в массиве можно условно сделать сбойным с помощью ключа --fail (-f):

Удалить из массива отказавший диск:

Добавить в массив заменённый диск:

Сборка существующего массива

Собрать существующий массив можно с помощью mdadm --assemble:

Расширение массива

Расширить массив можно с помощью ключа --grow (-G). Сначала добавляется диск, а потом массив расширяется:

Проверяем, что диск добавился:

Если диск добавился, расширяем массив:

Опция --raid-devices указывает новое количество дисков в массиве с учётом добавленного. Рекомендуется задать файл бэкапа на случай прерывания перестроения массива, например, добавить опцию:

При необходимости, можно регулировать скорость процесса расширения массива, указав нужное значение в файлах:

  • /proc/sys/dev/raid/speed_limit_min
  • /proc/sys/dev/raid/speed_limit_max

Убедитесь, что массив расширился:

Нужно обновить конфигурационный файл с учётом сделанных изменений:

Возобновление отложенной синхронизации resync=PENDING

Если синхронизации массива отложена, состояние массива resync=PENDING, то синхронизацию можно возобновить:

date

18.12.2019

directory

CentOS, Linux

comments

комментариев 9

mdadm – утилита для работы с программными RAID-массивами в Linux. В статье мы рассмотрим, как работать с утилитой mdadm (multiple disks admin) для создания массива, добавления дисков, управления дисками, добавление hot-spare и много другой полезной информации.

Чтобы установить утилиту mdadm, запустите команду установки:

  • Для Centos/Red Hat используется yum/dnf: yum install mdadm
  • Для Ubuntu/Debian: apt-get install mdadm

В резульатте в системе будет установлена сама утилита mdadm и необходимые библиотеки:

Создание RAID из 2-х дисков

У меня на сервере установлены два дополнительных диска и я хочу содать на низ програмное зеркало (RAID1). Диски пустые, данные на них не писались. Для начала, нужно занулить все суперблоки на дисках, которые мы будем добавлять в RAID-массив:

mdadm --zero-superblock - очистка дисков передо добавлением в raid

У меня два есть два чистых диска vdb и vdc.

Данный листинг означает, что ни один из дисков ранее не был добавлен в массив.

Чтобы собрать программный RAID1 из двух дисков в устройстве /dev/md0, используйтк команду:

Если нужно создать RAID0 в режиме страйп (stripe) для увеличения скорости чтения/записи данных за счет распараллеливания команд между несколькими физическими дисками, используйте команду:

RAID 5 из трех или более дисков:

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

mdadm - создать raid1 из 2-х дисков в Linux

Теперь при просмотре информации о дисках, мы видим наш массив:

Создание файловой системы на RAID, монтирование

Чтобы создать файловую систему ext4 на нашем RAID1 массиве из двух дисков, используйте команду:

создать файловую систему ext4 на raid томе

Создадим директорию backup и примонтируем к ней RAID устройство:

Массив смонтировался без ошибок. Чтобы не монтировать устройство каждый раз вручную, внесем изменения в fstab:

fstab - авто-монтирование raid устройства в каталог

Просмотр состояния, проверка целостности RAID массива

Чтобы проверить целостность данных в массиве, используйте команду:

После чего, нужно посмотреть вывод файла:

Если в результате вы получаете 0, то с вашим массивом все в порядке:

проверка целостности raid в linux

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

Чтобы проверить состояние всех RAID -массивов доступны на сервере, используйте команду:

В листинге команды, видим информацию о нашем ранее созданном raid.

Более подробную информацию о конкретном raid-массиве, можно посмотреть командой:

mdadm -D /dev/md0 - получить информацию о raid массиве в linux

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

Краткую информацию можно посмотреть с помощью утилиты fdisk:

Восстановление RAID при сбое, замена диска

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

Из листинга команды, вы видим, что только один диск активен. Так же о проблеме говорит [U_]. Когда оба диска рабочие, вывод будет [UU].

Подробная информация о RAID-массиве также показывает, что естт проблемы:

State : clean, degraded – данная строка указывает на то, что диск в raid-массиве поврежден.

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

Удаляем неиспраный диск:

Добавляем в массив новый диск :

Восстановление диска запустится автоматически после добавления нового диска:

rebuild Status : 69% complete — показывает текущее состояние восстановления массива.

spare rebuilding /dev/vdd — показывает какой диск добавляется к массиву.

После восстановления массива, листинг по дискам выглядит так:

Добавление и удаление дисков в RAID массив на Linux

Чтобы разобрать ранее созданный массив, нужно отмонтировать его :

И выполнить команду:

После разбора массива, он не должен определяться как устройство:

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

mdadm --assemble —scan пересборка массива

Данная команда просканирует диски из разобранного или развалившегося RAID массива и по метаданным попробует собрать из них RAID.

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

После чего диск можно будет удалить командой::

Добавляется новый диск, так же как и в случае с нерабочим диском:

Добавление Hot-Spare диска в RAID массив

Вы можете добавит в массив hot-spare диск для горячей замены при выходе из строя одного из активных дисков. Добавьте свободный диск в нужный массив:

mdadm - добавить hot-spare диск в raid массив

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

mdadm - faulty - сбойный диск

Диск /dev/vdb помечен как нерабочий, а hot-spare диск стал одним из активных дисков RAID и запустился процесс восстановления.

Чтобы добавить дополнительный рабочий диск в RAID, нужно выполнить два шага.

Добавить пустой диск массиву:

Теперь данный диск будет отображаться как hot-spare, чтобы сделать его рабочим, расширим raid-массив:

После чего запустится процесс пересборки массива:

mdadm - програмный raid linux spare rebuilding

После выполнения пересборки, все диски стали активны:

Удаление массива

Если вы хотите безвозвратно удалить raid-массив, используйте следующую схему:

После чего очищаем все суперблоки на дисках, из которых он был собран:

Mdmonitor: Мониторинг состояния RAID и email оповещения

Для мониторинга состояния RAID массива можно использовать службу mdmonitor. Сначала нужно создать файл /etc/mdadm.conf с конфигурацией текущего массива:

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

В конце файла /etc/mdadm.conf добавьте email адрес администратора, на который нужно слать оповещения о проблемах с RAID:

Останолось перезапустить службу mdmonitor через systemctl:

После этого система будет оповещать вас по email об ошибках в mdadm и неисправных дисках.

RAID массив в состоянии inactive

При сбоях оборудования или аварийного выключения по питанию, массив может перейти в состояние inactive. Все диски помечаются как неактивные, но ошибок на дисках нет.

В этом случае нужно остановить массив командой:

И пересобрать его:

Если массив прописан в /etc/fstab, нужно перемонтировать его командой:

Утилита mdadm упрощает работу с raid-массивами в Linux. В данной статье я описал основные моменты работы с данной утилитой, а также затронул самые частые вопросы, которые возникают при работе с raid-массивами через утилиту mdadm.

Читайте также: