Как собрать 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.
Читайте также: