Как собрать raid без потери данных linux

Обновлено: 06.07.2024

В данной статье рассмотрим, как удалить неисправный жёсткий диск из массива Linux RAID1 (программное обеспечение RAID) и добавить новый жёсткий диск в массив RAID1 без потери данных. Для копирования схемы раздела диска будем использовать gdisk. Данная программа также работает на большинстве жёстких дисков с GPT (GUID Partition Table).

1 Предварительные замечания

Рассмотрим в качестве примера 2 жёстких диска, /dev/sda и /dev/sdb, с разделами /dev/sda1, /dev/sda2, /dev/sdb1 и /dev/sdb2.

/dev/sdb неисправен и нам потребуется заменить его.

2 Как узнать, что жёстких диск неисправен?

Если жёсткий диск неисправен, в журнале регистрации событий появится большое количество ошибок, например в /var/log/messages или /var/log/syslog.

Можно также выполнить:

и вместо строки [UU] получится [U_], что означает, что массив RAID1 неполон.

3 Удаление неисправного жёсткого диска

Для удаления /dev/sdb, пометим /dev/sdb1 и /dev/sdb2 как неисправные и удалим их из соответствующих массивов RAID (/dev/md0 и /dev/md1).

Для начала отметим /dev/sdb1 как неисправный:

Выходные данные в

должны выглядеть следующим образом:

Затем удалим /dev/sdb1 из /dev/md0:

Выходные данные должны быть следующими:

должно быть следующим:

Теперь проделаем тоже самое с /dev/sdb2 (который является частью /dev/md1):

Затем выключим систему:

и заменим старый жёсткий диск /dev/sdb на новый (по крайней мере объём нового жесткого диска должен совпадать со старым –если размер на несколько МБ меньше, то перестроить массивы будет невозможно).

4-Добавление нового жёсткого диска

После замены жёсткого диска /dev/sdb, включим систему.

Первым делом необходимо создать точно такое же разбиение на разделы, что и в /dev/sda. Выполним это командой sgdisk из пакета gdisk. Если у Вас не установлен gdisk, установите его, выполнив для Debian и Ubuntu следующее:

Для rpm-дистрибутивов Linux, таких как CentOS:

Следующий шаг необязательный, но рекомендуемый. Для проверки того, что у нас есть резервная копия схемы раздела, воспользуемся sgdisk для записи схем раздела обоих дисков в файл. В нашем случае файл сохраним в /root folder.

В случае неудачи можно восстановить таблицу разделов с помощью опции --load-backup в sgdisk .

Теперь скопируем схему раздела из /dev/sda в /dev/sdb:

Затем необходимо рандомизировать GUID на новом жёстком диске, чтобы убедится, что он уникален.

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

Далее добавим /dev/sdb1 в /dev/md0 и /dev/sdb2 в /dev/md1:

Теперь оба массива (/dev/md0 и /dev/md1) будут синхронизированы.

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

Во время синхронизации выходные данные должны выглядеть следующим образом:

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

Добрый день. Такая ситуация: нам в организацию был приобретен сервак DELL PowerEdge R530 / 3.5 , PERC H730 Integrated RAID Controller, с 2-мя венчиками по 1 TB, на него был поставлен vmware exsi, и при установке которого был виден только 1 HDD, в следствии чего был сделан вывод (возможно не верный) что диски работают в зеркале (те RAID 1), развернул виртуальные машины все вроде норм работает, но потом обратил внимание что на одном винчестере не мигает индикатор записи, и как следствие я сделал вывод что RAID 1 не стоит (не работает). Собственно сам вопрос - как наиболее безбоязненно поставить RAID 1? (желательно без потери данных).


[мимо крокодил]под raid нужно было сразу форматировать

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


Валера, если ты рейды определяешь по светодиодам, то имеет смысл руководству нанять нормального сисадмина?

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

Да ты ж базовых вещей не знаешь.

а вот это вообще зло.


Приведите вывод dmesg.

просвети если не сложно в чем я не прав

У тебя 2 выбора, либо хардверный raid через встроенный контроллер, либо софтверный.

Как точно работает твой рэйд контроллер лично я ХЗ, но это и не важно, ибо рэйд контроллеры бывают двух видов: либо а) Дорогой энтерпрайз, либо б) ненужные. У тебя вариант б. А встроенные в мать кондроллеры — это злейшее зло.


Другой вариант: Использовать разный софт для поднятия рейда. Но тут нужно, как UVV уже сказал выше нужно заранее подготавливать диски. Для этого можно или выбирать ФС с поддержкой raid, такие как zfs или btrfs, или использовать какой нибудь mdadm. У меня, к примеру, на домашнем компе вот так:

Deleted ( 12.12.17 15:14:43 )
Последнее исправление: nepank 12.12.17 15:15:22 (всего исправлений: 1)

Спасибо буду пробовать.


Как настроить raid1 на нём. Первая ссылка в ютюбе.

В общем ситуация решилась довольно таки просто, когда залез в биос выяснилось что 1 диск (пустой) был в режиме not ready for raid, переведя его в режим ready for raid, создал raid 1, который компоновался часа 4 ( по факту копировал данные с одного диска на другой). В итоге получил 2 диска в Raid 1, без необходимости восстанавливать данные с бэкапа.

Есть raid1 из 2 дисков, есть 2 дополнительных диска, нужно добавить эти 2 диска в массив и мигрировать на raid10 без потери данных. Ситуация усложняется тем, что boot расположен не в raid, а находит только на одном из дисков, и для усиления отказоустойчивости сервера загрузчик нужно переместить в raid1.

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

Имеем:
На диске /dev/sdd1 находится /boot
На массиве /dev/md1 находится /
На массиве /dev/md2 находится swap
Если у вас с загрузчиком вопрос уже решен, можете перейти сразу к разделу с миграцией.

Переносим загрузчик

На диске /dev/sdd есть данные и есть загрузчик, поэтому его будем считать эталоном, все остальные диски можно считать пустыми. Для надежности, загрузчик мы не будем размещать на raid10, а оставим на raid1 из 2х дисков (можно и на 3х и на 4х), для большей отказоустойчивости.

Создаем на диске sdb разделы один в один как на sdd. Либо вручную, например, с помощью

Либо просто дублируем разделы

Сам загрузчик находится на /dev/sdd1, поэтому деградированный raid1 /dev/md4 создадим следующим образом

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

Теперь перезагрузим сервер, и после перезагрузки увидим странный массив /dev/md127 от которого нужно избавиться, и наш /dev/md4, который может не появиться, т.к. вместо него /dev/md127. Решить эту проблему достаточно просто, достаточно остановить эти 2 массива и добавить заново /dev/md4

Для надежности стоит еще раз перезагрузиться и после этого мы подходим к самой ответственной части, нужно отредактировать загрузчик GRUB2 так, чтобы он грузил сервер с созданного массива. Для этого нужно узнать UUID старого диска с загрузчиком /dev/sdd1 и нового массива /dev/md4

Пример получившегося нового конфига

insmod raid
insmod mdraid
insmod part_msdos
insmod part_msdos
insmod part_msdos
insmod part_msdos
insmod ext2
set root='(md/4)'
search --no-floppy --fs-uuid --set 59f76eb9-00d2-479e-b94e-6eb54fc574d4
set locale_dir=($root)/grub/locale

menuentry 'Debian GNU/Linux, with Linux 2.6.32-5-amd64' --class debian --class gnu-linux --class gnu --class os insmod raid
insmod mdraid
insmod part_msdos
insmod part_msdos
insmod part_msdos
insmod part_msdos
insmod ext2
set root='(md/4)'
search --no-floppy --fs-uuid --set 59f76eb9-00d2-479e-b94e-6eb54fc574d4
echo 'Loading Linux 2.6.32-5-amd64 . '
linux /vmlinuz-2.6.32-5-amd64 root=/dev/md1 ro quiet
echo 'Loading initial ramdisk . '
initrd /initrd.img-2.6.32-5-amd64
>
menuentry 'Debian GNU/Linux, with Linux 2.6.32-5-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os

Очень важно, чтобы теперь вы не перезагружались, поэтому что изменив этот файл, загрузчик уже будет думать, что информация для загрузки находится на /dev/md4, а там пока еще ничего нет. Чтобы оставить себе лазейку, не редактируйте секцию recovery mode, так вы сможете загрузиться со старыми данными, правда для этого вам понадобится доступ через KVM-IP или чтобы сотрудник ДЦ выбрал при загрузке recovery mode.

Теперь необходимо обновить ram-диск, иначе система просто не загрузится

После того, как мы внесли изменения в загрузчик, можно переносить содержимое /boot на созданный массив /dev/md4

Мы должны убедиться, что загрузчик GRUB2 установлен на 2х жестких дисках (или 4х, смотря сколько вы захотели добавить в массив), а так же на массиве /dev/md4. Самый надежный способ это сделать, выполнить

где нужно выбрать все диски, на которые нужно добавить загрузчик.

Кроме загрузчика, и сама система должна правильно понять, что загрузчик теперь в другом месте, для этого достаточно отредактировать файлы /etc/fstab и /etc/mtab. Нас интересует строка, где монтируется /boot. UUID нам не понадобится, вместо него указываем название нашего raid-массива.
В файле /etc/fstab

В файле /etc/mtab

Теперь можно перезагружаться, и если вы все сделали правильно, система загрузится с /dev/md4, а /dev/sdd1 уже не используется. Осталось только дособрать наш деградированный массив

Мигрируем с raid1 на raid10 без потери данных

Ситуация все та же, есть raid1 массив из 2х дисков и 2 свободных диска, нужно собрать это все в raid10 и чтобы данные были целы.
Для новых дисков нужно создать структуру разделов идентичную тем, что уже в raid

На /dev/md4 находится /boot
На /dev/md1 находится /
На /dev/md2 находится swap

/boot мы не будем трогать, оставим его как raid1, данные сохранить нужно только на /dev/md1 (массив состоит из /dev/sda6, /dev/sdb6, /dev/sdc6, /dev/sdd6).

Чтобы сохранить данные, мы соберем деградированный raid10 массив из 3 дисков, и перенесем туда данные с raid1, после этого разберем raid1 и доделаем raid10.

Для начала вытащим 1 диск из raid1, т.к. нам нужно минимум 3 диска для создания raid10

Собираем деградированный RAID10 как /dev/md3 и монтируем его. Обязательно добавим запись о новом массиве, чтобы после перезагрузки он оставался

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

Переносим данные с /dev/md1 на /dev/md3

Всё, данные сохранены на raid10 и миграция почти завершена. Теперь нужно указать системе, чтобы она использовала новый /dev/md3, вместо старого /dev/md1. Для этого надо отредактировать файлы /etc/fstab и /etc/mtab.
В файле /etc/fstab нужно сделать замену UUID /dev/md1 на UUID /dev/md3

В файле /etc/mtab нужно просто заменить везде вместо /dev/md1 новый /dev/md3

Когда меняется устройство для /boot или / нужно обязательно редактировать конфигурацию загрузчика /boot/grub/grub.cfg и выполнять update-initramfs, иначе грузится не будет.

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

Нужно перезагрузиться, чтобы корень / стал новым массивом /dev/md3 и обращений к старом raid1 уже не было. Закончить создание raid10 нужно добавлением того диска, который сейчас в raid1 (/dev/sdd6). Но для начала нужно его остановить и очистить раздел

И только теперь добавить диск в массив raid10 и обновить данные о массивах

Современные жесткие диски - чудо инженерии и техники. Пластины из магниево-алюминиевого сплава несутся со скоростью 120 оборотов в секунду, при этом считывающую голову от поверхности диска отделяет расстояние в 1/10 толщины человеческого волоса. Сама голова перемещается в любую точку всего за 2мс, что вызывает боковую перегрузку в фантастические 550G. Современные диски обладают впечатляющим объемом, большой линейной скоростью (что на чтение, что на запись) и минимальной задержкой поиска. И платят они за это (кроме цены) серьезным падением надежности. Старенькие Seagate Barracude и Quantum Fireball 6-10 гигабайт объемом без каких-либо нареканий жили десятилетиями, еще более старинные IBM на сотни мегабайт можно было безопасно вскрыть и закрыть в домашних условиях без специальной подготовки. Современные модели крайне чувствительны к вибрациям, тряске, углу наклона, удару и даже шуму (sic!). Средний срок жизни современного террабайтника - три года, если он эксплуатируется не слишком активно. Диски для серверов и NAS живут год-два. Если раньше RAID считался дорогой экзотикой серверного мира (по типу SCSI), то сейчас программный soft-raid - абсолютная необходимость, без которого сервер просто нельзя устанавливать.

В данной статье я расскажу, как мигрировать Debian Linux (в статье используется 7 версия, но с 6 тоже проблем не будет) с одного диска на зеркало из двух. В принципе, методика миграции универсальна, и Ubuntu или CentOS можно мигрировать точно так же. В качестве RAID будем использовать его программную реализацию (mdraid), что позволит сэкономить на железе. В общем случае использование mdraid оправдано, если у вас не очень много дисков (очень много - это больше 10), не используется сложный raid-алгоритм (RAID5/RAID6 и их потомки) и нет большой нагрузки на IOT. Если top показывает, что IO wait ушел куда-то к 50% - время подумать о покупке аппаратного решения.

В моем примере используется стандартная разбивка от Неметт:

Внимание! FreeBSD мигрируется по иной схеме, так как во FreeBSD нет mdraid, вместо него используется GEOM. Не пытайтесь адаптировать данную статью для FreeBSD! Если вам нужна статья по миграции FreeBSD - напишите в комментариях, я напишу такую инструкцию отдельно

Подготовка и миграция данных

В данной статье я предполагаю, что у нас два одинаковых диска, /dev/sda - это реальный, а /dev/sdb - свеже установленный. Все действия производятся от root.

Для начала нам потребуется немного ПО:

screen в данной ситуации ставится, чтобы избежать проблем, если во время копирования данных поломается сеть. Если копируете локально (с консоли) - он вам не нужен

Warning можно игнорировать. На данном этапе рекомендую проверить, что на диске-получателе геометрии нет. Если там есть данные, то при копировании геометрии они умрут, и шансов восстановить их без скальпеля не будет:

Лирическое отступление. Если у вас большие диски и используется GPT-таблица - sfdisk вам не поможет, потребуется установить программу gdisk и переносить уже ей:

Теперь у нас есть два идентичных по разбивке диска. Соберем из второго диска RAID. В нашей ситуации это зеркало (raid-1), по этому RAID будет работать, даже если в массиве остался один диск (так как по идеологии RAID-1 диски совершенно равноправны). Мы создадим по одному raid на каждый раздел диска, включая своп (это гарантирует, что система нормально запустится, если любой диск выйдет из строя). Так как в нормальном случае при сборке зеркала надо указывать два диска, вместо отсутствующего мы будем использовать ключевое слово missing

Важное примечание. GRUB первой версии не может загружаться с новой версии mdraid-массива. Специально для boot-раздела нужно указать старую версию дискового массива (ключом –metadata=0.90). В моем примере это md0:

Массив собрался, проверим:

Выглядит вроде норм (обратите внимание на md0!), можно форматировать наши новые разделы. Я очень рекомендую использовать метки (label) при форматировании - это здорово облегчает жизнь при проблемах. Метка выставляется ключем -L

После того, как все отформатируется, можно монтировать:

Теперь у нас есть две файловых системы: реальная, с которой сервер сейчас загружен и “пустая”, структурно повторяющая реальную. И во вторую можно копировать данные из первой. Процедура длительная, крайне рекомендую проводить ее через screen. Перед началом рекомендуется остановить все сервисы, которые активно пишут в жесткий диск (например, mysql) - иначе есть риск получить неконсистентность данных:

Переключение на новый диск

Теперь нам нужно установить загрузчик на второй диск. Прелесть загрузчика в том, что он живет в загрузочной области, которая не отображается на файловую систему, а значит, копировать его “в лоб” - бессмысленно. Загрузчик ставится на диск, а не на раздел. Если у вас 10 дисков - ставить надо на все, которые в теории должны быть загрузочными

После переноса данных начинается самое сложное - правка путей. В старых версиях linux адресация дисков была относительной, master в канале ide0 назывался hda, slave ide 1 - hde (hdd был зарезервирован). Это вызывало интересные коллизии в SCSI и SATA, где адресация внутри шины не абсолютна, и после перезагрузки диски могли легко поменяется местами - просто потому, что кто-то очнулся раньше. Поэтому в новых версиях введен механизм block uuid, у каждого блочного устройства есть абсолютно уникальный идентификатор, и обращения к дискам идут строго по нему.

Нам нужно получить список всех блочных идентификаторов, их выдает команда blkid:

Много-много страшного текста (а я говорил, что label - очень помогает!). Теперь нам нужно поменять одни UID на другие. Менять можно в любом текстовом редакторе. Главное их не перепутать. Я рекомендую скопировать UID-ы куда-нибудь примерно в таком виде:

Менять UUID надо в двух местах:

  • /mount/etc/fstab - список файловых систем. Там нужно поменять все UID
  • /mount/boot/grub/grub.cfg - конфигурация загрузчика. Тут будут только UUID разделов /boot и /, но будет их, в отличие от fstab, несколько

Если у вас нет доступа к BIOS и вы не можете поменять приоритет загрузки дисков, новый конфиг grub из /mount/boot/grub/grub.cfg нужно скопировать на место старого (/boot/grub/grub.cfg).

Данные скопированы, и теперь можно спокойно перезагружать сервер:

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

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

Теперь остается только дождаться окончания синхронизации массива, а посмотреть состояние можно так:

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.

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