Имеется сервер с операционной системой Oracle Linux. В сервере два NVME диска Samsung, которые объединены в зеркальный RAID1 массив.
Samsung SSD 12.8TB PCIe MZPLL12THMLA-00005
Один из NVMe дисков на сервере перестал работать. Диск пропал из ОС и из RAID, но после перезагрузки стал виден. Посмотреть информацию об NVMe дисках можно с помощью утилиты nvme из пакета nvme-cli:
yum install nvme-cli
или
apt install nvme-cli
nvme list -o json
Информация о диске выводится, это уже хорошо, значит, контроллер диска ещё работает. Но все партиции пропали, диск недоступен для записи.
При попытке считать SMART лог получаем ошибку:
nvme smart-log /dev/nvme0n1
NVME Status:NS_NOT_READY: The namespace is not ready to be accessed as a result of a condition other than a condition that is reported as an Asymmetric Namespace Access condition
Понятно, что при обращении к namespace диска произошла какая-то ошибка. При этом SMART лог второго такого же диска прекрасно читается:
nvme smart-log /dev/nvme1n1
Пробую получить информацию о namespace проблемного диска:
nvme id-ns /dev/nvme0n1
Информация выводится корректно. Получается, что контроллер диска работает, namespace есть, но почему-то не работает. Попробуем отформатировать NVMe диск. Речь идёт не о форматировании файловой системы, а о форматировании пространства (namespace).
Синтаксис команды:
nvme format <device> [--namespace-id=<nsid> | -n <nsid>] [--lbaf=<lbaf> | -l <lbaf>] [--ses=<ses> | -s <ses>] [--pil=<pil> | -p <pil>] [--pi=<pi> | -i <pi>] [--ms=<ms> | -m <ms>] [--reset | -r ] [--timeout=<timeout> | -t <timeout> ]
Форматирую пространство с параметрами по умолчанию:
nvme format /dev/nvme0n1
Отлично:
Success formatting namespace:1
Снова пробую считать SMART лог проблемного диска:
nvme smart-log /dev/nvme0n1
Теперь лог читается. Диск успешно реанимирован, правда, он пуст.
Нужно заново создать раздел и добавить его в RAID1 массив как SPARE диск. RAID массив начнёт восстанавливаться.
Через 1031 минуту целостность массива была восстановлена. Оба NVMe диска в строю.
P.S. Размышления...
Если вы видите NVMe диск в Linux как /dev/nvme0n1, то это уже кое о чём говорит. Первая часть названия диска "nvme0..." это нулевой контроллер, вторая часть названия "...n1" это первый namespace. Так что уже из названия диска было понятно, что контроллер жив и пространство существует. Можно было сходу форматнуть.