Диагностика и восстановление degraded RAID в Linux
06 Oct 2026, 12:58:10
RAID позволяет повысить отказоустойчивость дисковой подсистемы, но выход одного или нескольких накопителей из массива может привести к его переходу в состояние degraded.Degraded RAID означает, что массив продолжает работать, но один или несколько его компонентов отсутствуют или неисправны. В зависимости от уровня RAID сервер может продолжать работу без потери данных, однако отказ следующего диска может привести к потере массива.
Поэтому при обнаружении degraded RAID важно сначала определить причину, а уже затем выполнять восстановление.
1. Как определить, используется ли программный RAID
В Linux наиболее распространённым вариантом программного RAID является Linux Software RAID (mdadm).Проверить наличие RAID можно командой:
cat /proc/mdstatПример исправного RAID1:
Personalities : [raid1]
md0 : active raid1 sda1[0] sdb1[1]
1047552 blocks super 1.2 [2/2] [UU]
Здесь:
[2/2] [UU]означает, что оба диска из двух работают.
Пример degraded RAID:
md0 : active raid1 sda1[0]
1047552 blocks super 1.2 [2/1] [U_]
Здесь:
[2/1] [U_]
означает:
- [2/1] — в массиве предусмотрено 2 устройства, но активно только 1;
- [U_] — первый компонент работает, второй отсутствует.
2. Получить подробную информацию о RAID
Для более подробной информации используется:mdadm --detail /dev/md0Например:
/dev/md0:Особенно важны параметры: State, Raid Devices, Active Devices, Working Devices, Failed Devices, Spare Devices.
Version : 1.2
Raid Device : 2
Active Devices : 1
Working Devices : 1
Failed Devices : 1
Spare Devices : 0
State : clean, degraded
| Поле | Что означает |
|---|---|
| State | Общее состояние массива: clean (всё записано, массив в порядке), active (идёт запись), degraded (потеряна избыточность), recovering (идёт восстановление на добавленный диск), resyncing (синхронизация), FAILED (массив потерян). Флаги комбинируются, например clean, degraded. |
| Raid Devices | Сколько устройств должно быть в массиве по его конфигурации. Для RAID1 из двух дисков это 2. |
| Active Devices | Сколько устройств сейчас активно участвуют в массиве и содержат актуальные данные. Если меньше, чем Raid Devices, массив degraded. |
| Working Devices | Сколько устройств исправны (Active плюс запасные диски). Это рабочие компоненты, включая spare. |
| Failed Devices | Сколько устройств помечены сбойными (faulty) и исключены из работы. |
| Spare Devices | Сколько запасных дисков в массиве. Они не хранят данные, пока не понадобятся, и автоматически включаются на место отказавшего. |
State : clean, degraded - массив работает, но находится в degraded-состоянии.
3. Определить, какой диск вышел из RAID
Команда:mdadm --detail /dev/md0обычно показывает таблицу устройств:
Number Major Minor RaidDevice State
0 8 1 0 active sync /dev/sda1
1 8 17 1 faulty /dev/sdb1
В данном случае /dev/sdb1 помечен как: faulty. Это означает, что компонент был исключён из массива. Однако не следует сразу делать вывод, что физический диск неисправен.
Причиной исключения может быть:
- ошибка чтения/записи;
- временная проблема с подключением;
- проблема RAID-контроллера;
- ошибка кабеля;
- неисправность диска;
- сбой питания;
- ошибка самого массива.
4. Проверить состояние дисков
Сначала необходимо посмотреть, какие накопители вообще присутствуют в системе:lsblkДополнительно:
lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINTS,MODEL,SERIALДля SATA/SAS-дисков:
smartctl -a /dev/sdaДля NVMe:
smartctl -a /dev/nvme0или:
nvme smart-log /dev/nvme0Особое внимание следует обратить на:
- Reallocated Sector Count;
- Current Pending Sector;
- Offline Uncorrectable;
- SMART overall-health;
- ошибки чтения/записи;
- Media and Data Integrity Errors для NVMe.
5. Проверить системные сообщения
Причину выхода диска из массива можно попытаться найти в kernel log:dmesg -T | grep -iE "error|fail|raid|md|ata|scsi|I/O"Также:
journalctl -k -p warning..alertИщите сообщения вроде:
I/O errorТакие сообщения могут помочь определить, был ли причиной сбоя сам накопитель или канал связи с ним (кабель, порт, питание).
ataX: hard resetting link
blk_update_request: I/O error
md/raid1:md0: Disk failure
md0: recovery
6. Проверить состояние RAID в реальном времени
Во время восстановления RAID можно наблюдать за состоянием массива:watch cat /proc/mdstatНапример:
md0 : active raid1 sda1[0] sdb1[2]
1047552 blocks [2/1] [U_]
[=====>...............] recovery = 25.4%
После завершения восстановления должно появиться:
[UU]а состояние массива должно измениться на normal/clean.
7. Если диск физически исправен
Иногда диск был исключён из массива из-за временной ошибки, но сам накопитель продолжает работать нормально.В таком случае сначала необходимо удалить его старую запись из RAID:
mdadm /dev/md0 --remove /dev/sdb1Затем снова добавить:
mdadm /dev/md0 --add /dev/sdb1После этого начнётся rebuild.
Проверить:
cat /proc/mdstatВажно: не следует выполнять --remove и --add вслепую. Перед этим необходимо убедиться, что используется правильный RAID, раздел и диск.
8. Если диск неисправен
Общий порядок замены:- Убедиться, что резервная копия актуальна (до начала rebuild — он нагружает оставшиеся диски).
- Определить неисправный диск (массив, раздел, серийный номер).
- Проверить SMART и логи.
- Если диск ещё числится в массиве: --fail, затем --remove.
- Физически заменить диск.
- Убедиться, что система видит новый диск.
- Скопировать разметку.
- Добавить раздел в RAID.
- Дождаться rebuild.
- Восстановить загрузчик на новом диске.
- Проверить RAID и конфигурацию.
mdadm /dev/md0 --fail /dev/sdb1
mdadm /dev/md0 --remove /dev/sdb1Для hot-swap серверов замена может выполняться без выключения, если это поддерживают сервер и дисковая подсистема. В остальных случаях порядок зависит от оборудования.
9. Подготовить новый диск
После установки нового накопителя сначала убедитесь, что Linux его видит:lsblkНапример:sda 1.8T
sdb 1.8T
Перед добавлением нового диска в RAID необходимо убедиться, что он имеет подходящий размер и правильную разметку.
Если RAID был создан из разделов, новый диск обычно необходимо разбить аналогичным образом.
Например:
fdisk -l /dev/sdbДля GPT-разметки можно использовать:
sgdisk -R=/dev/sdb /dev/sdaGPT (sgdisk): в -R= указывается целевой диск, источник — последним аргументом.
Но эту команду нельзя выполнять без проверки устройств: перепутанные /dev/sda и /dev/sdb могут привести к перезаписи данных.
После копирования таблицы разделов необходимо сгенерировать новые GUID разделов:
sgdisk -G /dev/sdbMBR (sfdisk):
sfdisk -d /dev/sda | sfdisk /dev/sdbКонкретные команды зависят от структуры исходного массива и разметки дисков.
10. Добавить новый диск в RAID и восстановить загрузчик
После подготовки раздела:mdadm --add /dev/md0 /dev/sdb1Проверить:
cat /proc/mdstatВ процессе восстановления можно увидеть:
md0 : active raid1 sda1[0] sdb1[2]
976630336 blocks super 1.2 [2/1] [U_]
[=====>...............] recovery = 28.5%
После завершения:
[UU]Массив снова становится полностью работоспособным.
Загрузчик. RAID1 защищает данные, но не загрузчик. Если не поставить его на новый диск, то при отказе второго диска сервер не загрузится.
BIOS/MBR или BIOS/GPT:
grub-install /dev/sdbUEFI: системный раздел (ESP) обычно не входит в RAID. Скопируйте его содержимое на ESP нового диска и создайте запись в UEFI:
efibootmgr -c -d /dev/sdb -p 1 -L "Linux (disk 2)" -l '\EFI\\shimx64.efi'Точные команды зависят от дистрибутива и схемы разметки.
11. Что такое rebuild
Rebuild — процесс восстановления избыточности RAID.При восстановлении RAID система читает данные с оставшихся исправных компонентов массива и записывает необходимые данные на новый диск.
Во время rebuild:
- возрастает нагрузка на диски;
- увеличивается I/O;
- производительность сервера может снизиться;
- процесс может занимать значительное время.
Поэтому не стоит считать длительное восстановление автоматически признаком проблемы.
12. Контроль скорости восстановления
Для Linux Software RAID параметры восстановления можно посмотреть:cat /proc/sys/dev/raid/speed_limit_minи:
cat /proc/sys/dev/raid/speed_limit_maxНапример:
1000
200000
Эти значения влияют на диапазон скорости rebuild/recovery.
Минимум можно временно поднять, если нужно ускорить процесс:
echo 50000 > /proc/sys/dev/raid/speed_limit_minНа production-сервере не следует без необходимости устанавливать максимальную скорость восстановления: слишком высокая скорость может существенно увеличить нагрузку на дисковую подсистему и ухудшить работу сервисов. Изменения через /proc пропадают после перезагрузки (для постоянных значений используйте sysctl).
13. Проверить результат
После завершения rebuild:cat /proc/mdstatОжидается состояние:
[UU]
Также:
mdadm --detail /dev/md0Например:
State : cleanЭто означает, что оба компонента RAID работают.
Active Devices : 2
Working Devices : 2
Failed Devices : 0
14. Проверить конфигурацию mdadm и initramfs
После восстановления полезно убедиться, что конфигурация массива сохранена.В зависимости от дистрибутива информация может находиться в:
Debian/Ubuntu: /etc/mdadm/mdadm.conf
RHEL/CentOS/Rocky/Alma: /etc/mdadm.conf
Проверить:
cat /etc/mdadm/mdadm.conf
cat /etc/mdadm.confНа некоторых системах конфигурация может формироваться или обновляться через:
mdadm --detail --scanСравните вывод с содержимым файла. Если массив добавлен или изменён, обновите конфигурацию (без дублирования строк ARRAY), затем пересоберите initramfs:# Debian/Ubuntu
update-initramfs -u# RHEL-семейство
dracut -fПолная замена диска, как правило, UUID массива не меняет, но после любых изменений конфигурации initramfs обновлять нужно.
Важно, чтобы система могла корректно собрать RAID после перезагрузки.
15. Если RAID снова становится degraded
Если после добавления диска массив снова исключает его:[U_]не следует бесконечно выполнять:
mdadm --addНеобходимо найти причину.Проверить:
dmesg -T | grep -iE "error|fail|raid|md|ata|scsi|I/O"и SMART:
smartctl -a /dev/sdXВозможные причины:
- неисправный диск;
- проблема SATA/SAS-линии;
- неисправный backplane;
- проблема RAID-контроллера;
- нестабильное питание;
- ошибки конкретного порта;
- повторяющиеся I/O errors.
16. Аппаратный RAID — отдельный случай
Не все RAID-массивы управляются через mdadm.Если сервер использует аппаратный RAID-контроллер, например:
- Dell PERC;
- Broadcom/LSI MegaRAID;
- HPE Smart Array;
Например, для некоторых контроллеров:
storcli /c0 /showили:
perccli /c0 /showКонкретная команда зависит от производителя и модели контроллера.
Для аппаратного RAID важно различать: RAID logical volume и physical drives.
Операционная система может видеть один логический диск, тогда как внутри RAID-контроллера работают несколько физических накопителей.
17. Что нельзя делать без проверки
При работе с degraded RAID особенно опасны команды, которые изменяют структуру массива.Не следует выполнять вслепую:
mdadm --create
mdadm --add
mdadm --remove
mdadm --zero-superblockили:mkfsна подозрительном устройстве.Также нельзя ориентироваться только на имя устройства: /dev/sda, /dev/sdb, /dev/sdc.
Порядок имён может измениться после перезагрузки.
Для идентификации дисков лучше использовать:
lsblk -o NAME,SIZE,MODEL,SERIALи проверять серийные номера.
Частые состояния RAID
В /proc/mdstat:Состояние | Значение |
| [UU] | все компоненты RAID1 работают |
| [U_] | один из двух компонентов отсутствует |
| recovery | выполняется восстановление |
| resync | выполняется синхронизация |
| reshape | изменение геометрии массива |
| check | плановая проверка массива |
Состояние | Значение |
| clean | массив в нормальном состоянии |
| clean, degraded | массив работает, но потерял избыточность |
| active sync | устройство работает и синхронизировано |
| faulty | устройство помечено как неисправное |
| removed | устройство удалено из массива |
| spare | запасное устройство |
Минимальный набор команд для Linux Software RAID
cat /proc/mdstat
mdadm --detail /dev/md0
lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINTS,MODEL,SERIAL
dmesg -T | grep -iE "error|fail|raid|md|ata|scsi|I/O"
smartctl -a /dev/sdXПосле восстановления:
cat /proc/mdstat
mdadm --detail /dev/md0Идеальный результат для RAID1:
[UU]и:
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Заключение
Диагностика degraded RAID должна начинаться не с немедленной замены диска, а с определения какой компонент вышел из массива и почему.Для Linux Software RAID основными инструментами являются cat /proc/mdstat, mdadm, lsblk, smartctl, dmesg и journalctl.
Главное правило — не выполнять операции изменения RAID, пока точно не определены массив, устройство и причина отказа. Ошибка при выборе диска или использовании mdadm --create, mkfs или --zero-superblock может привести к потере данных.