Восстановление RAID1: замена сбойного диска и проверка
Введение
Этот пошаговый гид показывает, как заменить сбойный жёсткий диск в программном RAID1 (mdadm) и убедиться, что массив корректно восстановлен. Описанные шаги включают симуляцию отказа, копирование таблицы разделов, очистку метаданных RAID, повторное добавление диска и установку загрузчика GRUB.
Кому полезно: системным администраторам и инженерам, поддерживающим серверы на базе Linux с программным RAID.
Важно: в примерах используется /dev/sda и /dev/sdb; адаптируйте имена устройств под вашу систему. Все команды выполняются с правами root.
Требования и предосторожности
- Наличие физического доступа к машине (или удалённого KVM/iLO) для замены диска.
- Резервная копия важных данных перед выполнением операций на разделе/диске.
- mdadm должен быть установлен и настроен.
- Убедитесь, что у вас есть доступ к загрузчику и возможность переустановить GRUB.
Важно: если вы работаете в виртуальной среде, имена дисков могут отличаться (например, /dev/vda, /dev/vdb).
Быстрая схема действий
- Симулируйте отказ диска (или физически извлеките диск).
- Убедитесь, что массив деградировал (cat /proc/mdstat).
- Скопируйте таблицу разделов с исправного диска на новый (sfdisk).
- Очистите старые суперкблоки RAID на новом диске (mdadm –zero-superblock).
- Добавьте разделы нового диска в массив (mdadm -a).
- Дождитесь синхронизации.
- Установите GRUB на оба диска.
1. Симуляция отказа диска
Вы можете смоделировать отказ диска программно, не извлекая физически диск. В примере предполагается отказ /dev/sdb. Команды для пометки разделов как failed и удаления из массива:
mdadm --manage /dev/md0 --fail /dev/sdb1
mdadm --manage /dev/md1 --fail /dev/sdb5
mdadm --manage /dev/md0 --remove /dev/sdb1
mdadm --manage /dev/md1 --remove /dev/sdb5
Если вы предпочитаете полностью выключить систему и вынуть диск, можно также выполнить:
shutdown -h now
После замены или перемещения дисков загрузите систему. Она должна стартовать в деградированном состоянии без потери данных.
2. Проверка состояния массива
Проверьте статус RAID:
cat /proc/mdstat
Ожидаемый пример вывода (в оригинале):
root@server1:~# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sda5[2]
4989940 blocks super 1.2 [2/1] [U_]
md0 : active raid1 sda1[2]
248820 blocks super 1.2 [2/1] [U_]
unused devices:
root@server1:~#
В этом выводе видно, что массивы md0 и md1 работают в режиме raid1, но в каждом массиве отсутствует один из зеркалирующих устройств ([U_] значит один диск отсутствует).
Проверьте таблицу разделов, чтобы увидеть, как система видит диски и md-устройства:
fdisk -l
В документации приведён подробный пример вывода fdisk, который показывает, что /dev/sdb не содержит таблицы разделов после симуляции сбоя.
3. Копирование таблицы разделов с рабочего диска на новый
Если новый диск пуст или у него нет корректной таблицы разделов, копируем её со здорового носителя. Команда ниже считывает разметку /dev/sda и записывает на /dev/sdb:
sfdisk -d /dev/sda | sfdisk --force /dev/sdb
Пример вывода команды (в оригинале):
root@server1:~# sfdisk -d /dev/sda | sfdisk –force /dev/sdb
Checking that no-one is using this disk right now …
Warning: extended partition does not start at a cylinder boundary.
DOS and Linux will interpret the contents differently.
OK
Disk /dev/sdb: 652 cylinders, 255 heads, 63 sectors/track
sfdisk: ERROR: sector 0 does not have an msdos signature
/dev/sdb: unrecognized partition table type
Old situation:
No partitions found
New situation:
Units = sectors of 512 bytes, counting from 0
Device Boot Start End #sectors Id System
/dev/sdb1 * 2048 499711 497664 fd Linux raid autodetect
/dev/sdb2 501758 10483711 9981954 5 Extended
/dev/sdb3 0 - 0 0 Empty
/dev/sdb4 0 - 0 0 Empty
/dev/sdb5 501760 10483711 9981952 fd Linux raid autodetect
Warning: partition 1 does not end at a cylinder boundary
Successfully wrote the new partition table
Re-reading the partition table …
If you created or changed a DOS partition, /dev/foo7, say, then use dd(1)
to zero the first 512 bytes: dd if=/dev/zero of=/dev/foo7 bs=512 count=1
(See fdisk(8).)
root@server1:~#
Примечание: предупреждения о границах цилиндров обычно можно игнорировать на современных системах; важно, что sfdisk успешно записал новую таблицу.
4. Очистка старых суперблоков RAID
Если на новом диске ранее существовали метаданные RAID, их нужно удалить, иначе mdadm может отказать в добавлении раздела.
mdadm --zero-superblock /dev/sdb1
mdadm --zero-superblock /dev/sdb5
Это гарантирует, что разделы будут распознаны как чистые и готовы для добавления в массив.
5. Добавление нового диска в массив
Добавьте соответствующие разделы нового диска в массивы md0 и md1:
mdadm -a /dev/md0 /dev/sdb1
mdadm -a /dev/md1 /dev/sdb5
Затем снова проверьте статус:
cat /proc/mdstat
Пример прогресса синхронизации (в оригинале):
root@server1:~# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sdb5[3] sda5[2]
4989940 blocks super 1.2 [2/1] [U_]
[========>…………] recovery = 44.7% (2233024/4989940) finish=0.2min speed=159501K/sec
md0 : active raid1 sdb1[3] sda1[2]
248820 blocks super 1.2 [2/2] [UU]
unused devices:
root@server1:~#
Подождите завершения синхронизации. Повторяйте cat /proc/mdstat до появления состояния [UU] в обоих массивах.
6. Установка загрузчика на оба диска
После успешной синхронизации обязательно установите загрузчик на оба физических диска, чтобы система могла загрузиться даже если один диск будет удалён:
grub-install /dev/sda
grub-install /dev/sdb
После этого перезагрузите систему и убедитесь, что всё загружается нормально.
Когда этот метод не подходит
- Если диски имеют разные размеры и разметка не может быть адекватно перенесена.
- Если используется LVM поверх RAID с нестандартной конфигурацией — предварительно проверьте метаданные LVM.
- В случаях аппаратного RAID подходы отличаются и этот метод неприменим.
Альтернативные подходы
- Клонирование с помощью dd: можно побитово скопировать диск dd if=/dev/sda of=/dev/sdb bs=64K, но этот метод копирует и UUID, и метаданные, что может потребовать последующей корректировки.
- Использовать parted вместо sfdisk для гибкой разметки, особенно при GPT.
- При наличии снимка LVM — восстановление логических томов до добавления в RAID.
Чеклист перед началом работ (роль: инженер)
- Сделан резерв конфигураций и критичных данных.
- Зафиксированы имена дисков и UUIDы (lsblk -f, blkid).
- Проверено состояние массива (cat /proc/mdstat).
- Подготовлен новый диск и хватает физических/виртуальных портов.
- Права root и доступ к консоли/консоли управления сервером.
Частые ошибки и пути их устранения
- sfdisk сообщает об отсутствии msdos signature: нормальное поведение для чистого диска; sfdisk всё равно может записать таблицу.
- mdadm отказывается добавлять раздел: проверьте, нет ли оставшихся суперблоков (mdadm –examine /dev/sdb1). При необходимости снова выполните –zero-superblock.
- При установке grub ошибка: проверьте корректность монтирования /boot и наличие необходимых модулей. Используйте –boot-directory, если у вас нестандартная схема.
Быстрый справочник команд (cheat sheet)
- Проверка RAID: cat /proc/mdstat
- Просмотр разметки: fdisk -l или lsblk -f
- Копирование таблицы разделов: sfdisk -d /dev/sda | sfdisk –force /dev/sdb
- Очистка суперкблока: mdadm –zero-superblock /dev/sdb1
- Добавление раздела в RAID: mdadm -a /dev/md0 /dev/sdb1
- Установка GRUB: grub-install /dev/sdb
Решение «что делать если…» (краткая методика)
- Если массив не восстанавливается — проверьте mdadm –detail /dev/mdX и dmesg на предмет ошибок.
- Если синхронизация идёт медленно — проверьте скорость дисков и загрузку I/O (iostat, iotop).
- При проблемах с загрузкой после установки GRUB — загрузитесь с live-USB и выполните chroot для переустановки загрузчика.
Ментальные модели
- RAID1 = зеркало: данные дублируются; потеря одного диска не ведёт к потере данных, но требует восстановления зеркала.
- mdadm хранит метаданные в суперкблоках на разделах; перед добавлением раздела в массив суперкблок должен отсутствовать или соответствовать ожидаемому UUID массива.
Критерии приёмки
- Оба массива в состоянии [UU] в выводе cat /proc/mdstat.
- GRUB установлен на обоих дисках и система способна загрузиться при отсоединении любого из них.
- Отсутствие ошибок в dmesg и mdadm –detail /dev/mdX.
1‑строчная глоссарий
- mdadm — утилита управления программными RAID в Linux;
- суперкблок (superblock) — метаданные RAID, которые сохраняют состояние массива;
- sfdisk — утилита для работы с таблицей разделов DOS/MBR;
- GRUB — загрузчик, устанавливаемый в MBR/GPT для загрузки ОС.
Потенциальные риски и рекомендации по смягчению
- Риск: неправильная разметка нового диска — сделайте снимок (sfdisk -d /dev/sda > layout.sfdisk) перед изменениями.
- Риск: потеря загрузочной способности — установите GRUB на оба диска до выключения.
- Риск: длительная синхронизация — выполняйте операции в непиковые часы или ограничьте speed_limit_min/max в /proc/sys/dev/raid/ для контроля влияния на I/O.
Короткое объявление для команды (для рассылки)
Мы заменили сбойный диск в RAID1 на сервере X: диск был помечен как failed, таблица разделов скопирована с /dev/sda на /dev/sdb, суперкблоки очищены, диск добавлен в массив и синхронизирован. GRUB установлен на обоих дисках. Система находится в рабочем состоянии.
Полезные ссылки
- The Software-RAID Howto: http://tldp.org/HOWTO/Software-RAID-HOWTO.html
- Debian: http://www.debian.org/
Краткое резюме
- Замена диска в RAID1 — это операция, которую можно безопасно выполнить онлайн при наличии резервных копий и аккуратном следовании шагам.
- Основные этапы: пометка failed, копирование разметки, очистка суперкблоков, добавление в массив, ожидание синхронизации, установка GRUB.
Важно: всегда адаптируйте команды под вашу конкретную конфигурацию дисков и массивов.
Похожие материалы

Встроенный ключ Android для входа в Google на iOS

ADB и Fastboot на Macbook — руководство

Ошибка 'system repair pending' в Windows — исправление

Создать Android‑приложение бесплатно без кода
Боковая панель для Windows 11/10: MetroSidebar, SideBar, Desktop Sidebar
