Перейти к основному содержанию

Реанимация NVMe диска в Linux — 3

NVMe

Я уже писал о реанимации отвалившихся дисков NVMe. В первом случае у меня рассыпался namespace:

Реанимация NVMe диска в Linux

Вот втором случае namespace остался целым, но диск выпал из устройств PCI:

Реанимация NVMe диска в Linux — 2

Сегодня у нас очень похожий случай, NVMe диск выпал из устройств PCI, из mdadm массива, соответственно тоже. Если раньше реанимация проводилась на RAID1 массивах, то сегодня пострадал RAID10. Возможно, именно из-за этого процедура восстановления оказалась чуть сложнее.

Итак, тестовый стенд представляет собой сервер с операционной системой Oracle Linux. В сервере четыре NVME диска Samsung, которые объединены в зеркальный программный RAID10 массив.

Samsung SSD MZPLJ12THALA-00007 — NVMe 12.8 ТБ

Помимо этого в сервере есть ещё два NVME диска Samsung, которые объединены в зеркальный программный RAID1 массив.

Samsung SSD 3.2TB PCIe MZPLJ3T2HBJR-00007

Один из NVMe дисков в RAID10 массиве на сервере перестал работать. Массив, собранный с помощью mdadm, перешёл в состояние degraded. Сработал мониторинг, начинаем разбираться в ситуации. Сервер перезагружать нельзя, будем чинить прямо так.

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

cat /proc/mdstat

nvme

В массиве md30 работают три из четырёх дисков: [U_UU]. В качестве дисков массиву переданы четыре раздела:

  • /dev/nvme0n1p1
  • /dev/nvme2n1p1
  • /dev/nvme3n1p1 (F)
  • /dev/nvme5n1p1

По значку (F) видно, что /dev/nvme3n1p1 — faulty. Посмотрим подробности:

mdadm --detail /dev/md30

nvme

А диск-то у нас из массива не удалился на этот раз. Он числится в массиве и помечен как сбойный.

Посмотреть информацию об NVMe дисках можно с помощью утилиты nvme из пакета nvme-cli:

NVMe Command Line Interface (NVMe-CLI)

yum install nvme-cli
или
apt install nvme-cli

nvme list

nvme

Однако, утилита не смогла обнаружить диск /dev/nvme3n1. Видим пять устройств, а должно быть шесть. Можно посмотреть, определяется ли диск как PCI устройство командой lspci.

lspci | grep -E "NVMe|Non-Volatile"

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

lspci | grep Samsung
04:00.0 Non-Volatile memory controller: Samsung Electronics Co Ltd Device a824
41:00.0 Non-Volatile memory controller: Samsung Electronics Co Ltd Device a824
44:00.0 Non-Volatile memory controller: Samsung Electronics Co Ltd Device a824
47:00.0 Non-Volatile memory controller: Samsung Electronics Co Ltd Device a824
84:00.0 Non-Volatile memory controller: Samsung Electronics Co Ltd Device a824
87:00.0 Non-Volatile memory controller: Samsung Electronics Co Ltd Device a824

В списке присутствуют все шесть NVMe дисков из обоих RAID массивов. Нам нужно определить адрес сбойного диска.

cd /sys/bus/pci/drivers/nvme/
ll

Сравниваем два списка.

nvme

Драйвер устройства 0000:47:00.0 отсутствует, остальные есть. Удаляем отсутствующий диск из списка устройств и заново сканируем PCI.

echo 1 > /sys/bus/pci/devices/0000\:47\:00.0/remove
echo 1 > /sys/bus/pci/rescan

Здесь самое важное, не удалить что-нибудь не то. Если ошибиться с диском, то можно потерять данные.

nvme list

nvme

Диск /dev/nvme3n1 появился. Проверим ошибки:

nvme smart-log /dev/nvme3n1

nvme

Странно, ошибок нет. Вероятно, сбой произошёл не по причине неисправности диска. Проверим namespace:

nvme id-ns /dev/nvme3n1

nvme

Namespace существует. Посмотрим раздел.

lsblk

nvme

Раздел /dev/nvme3n1p1 существует. Поскольку раздел ещё числится в массиве как сбойный, выкинем его оттуда:

mdadm /dev/md30 --remove /dev/nvme3n1p1
mdadm --detail /dev/md30

Теперь сбойных дисков в массиве не числится.

nvme

Возвращаем диск в массив.

mdadm /dev/md30 --add /dev/nvme3n1p1
cat /proc/mdstat

nvme

Массив начал восстанавливаться.

mdadm --detail /dev/md30

nvme

Осталось дождаться окончания процедуры перестроения массива.

Ссылки

Реанимация NVMe диска в Linux

Реанимация NVMe диска в Linux — 2

Теги

Цены

 

Похожие материалы