nvme-linux-smart-health
Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
| nvme-linux-smart-health [2026/02/27 00:45] – admin | nvme-linux-smart-health [2026/02/27 01:04] (текущий) – admin | ||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| - | ====== NVMe в Linux: SMART и Health для мониторинга дисков ====== | + | ======NVMe в Linux: SMART и Health для мониторинга дисков====== |
| - | ==== Зачем администратору смотреть SMART/ | + | ====Зачем администратору смотреть SMART/ |
| NVMe‑диски часто деградируют «не как SATA»: сначала растёт latency ступеньками, | NVMe‑диски часто деградируют «не как SATA»: сначала растёт latency ступеньками, | ||
| Строка 12: | Строка 11: | ||
| На практике мониторинг NVMe закрывает три задачи: | На практике мониторинг NVMe закрывает три задачи: | ||
| - | | + | * **Disk health monitoring** — видеть условия работы и текущий статус (температура, |
| - | * **Predictive failure** — ловить ранние признаки деградации (рост ``media_errors``, | + | * **Predictive failure** — ловить ранние признаки деградации (рост ``media_errors``, |
| - | * **Триаж инцидентов** — быстро отделить проблему диска от проблем выше (ФС, RAID, питание, | + | * **Триаж инцидентов** — быстро отделить проблему диска от проблем выше (ФС, RAID, питание, |
| Ниже — практический чек‑лист и команды, | Ниже — практический чек‑лист и команды, | ||
| - | ==== Инструменты: | + | |
| + | ====Инструменты: | ||
| Для NVMe в Linux обычно используют два инструмента: | Для NVMe в Linux обычно используют два инструмента: | ||
| - | | + | * **``nvme-cli``** — «родной» доступ к NVMe‑логам: |
| - | * **``smartctl``** (smartmontools) — универсальный вывод, удобно, | + | * **``smartctl``** (smartmontools) — универсальный вывод, удобно, |
| В проде удобно держать оба: ``smartctl`` — для унификации алертов, | В проде удобно держать оба: ``smartctl`` — для унификации алертов, | ||
| - | ==== Установка ==== | + | |
| + | ====Установка==== | ||
| <code bash> | <code bash> | ||
| apt update | apt update | ||
| Строка 36: | Строка 40: | ||
| </ | </ | ||
| - | ==== Быстрая инвентаризация NVMe в системе ==== | + | ====Быстрая инвентаризация NVMe в системе==== |
| <code bash> | <code bash> | ||
| lsblk -d -o NAME, | lsblk -d -o NAME, | ||
| Строка 45: | Строка 49: | ||
| - | ==== SMART/ | + | ====SMART/ |
| Основная команда для чтения NVMe SMART/ | Основная команда для чтения NVMe SMART/ | ||
| Строка 59: | Строка 63: | ||
| Если сомневаетесь, | Если сомневаетесь, | ||
| - | ==== Ключевые поля: что смотреть в первую очередь ==== | + | ====Ключевые поля: что смотреть в первую очередь==== |
| Названия могут слегка отличаться, | Названия могут слегка отличаться, | ||
| - | | + | * **critical_warning** — сводный битовый флаг критических состояний. Ноль — нормально, |
| - | * **``temperature``** — текущая температура (перегрев даёт троттлинг и ускоряет деградацию). | + | * **temperature** — текущая температура (перегрев даёт троттлинг и ускоряет деградацию). |
| - | * **``available_spare``** и **``available_spare_threshold``** — запас по резервным блокам и порог. | + | * **available_spare** и **available_spare_threshold** — запас по резервным блокам и порог. |
| - | * **``percentage_used``** — оценка «израсходованного ресурса» (0–100+). Это не «процент оставшегося времени», | + | * **percentage_used** — оценка «израсходованного ресурса» (0–100+). Это не «процент оставшегося времени», |
| - | * **``media_errors``** — один из самых важных индикаторов: | + | * **media_errors** — один из самых важных индикаторов: |
| - | * **``num_err_log_entries``** — количество записей в NVMe error log (важнее динамика, | + | * **num_err_log_entries** — количество записей в NVMe error log (важнее динамика, |
| - | * **``power_on_hours``**, **``power_cycles``**, **``unsafe_shutdowns``** — «биография» диска и качество окружения (питание/ | + | * **power_on_hours**, |
| + | ====Как интерпретировать critical warning (битовая маска)==== | ||
| - | ==== Как интерпретировать critical warning (битовая маска) ==== | ||
| - | Поле | + | Поле |
| - | * бит 0: ``available_spare`` ниже порога; | + | * бит 0: available_spare ниже порога; |
| - | * бит 1: температура вышла за пределы (over/under temperature); | + | * бит 1: температура вышла за пределы (over/under temperature); |
| - | * бит 2: деградация надёжности (device reliability degraded); | + | * бит 2: деградация надёжности (device reliability degraded); |
| - | * бит 3: устройство в режиме «только чтение»; | + | * бит 3: устройство в режиме «только чтение»; |
| - | * бит 4: требуется backup / критический ресурс. | + | * бит 4: требуется backup / критический ресурс. |
| + | |||
| + | |||
| + | > Практическое правило: | ||
| - | > Практическое правило: | ||
| Для контекста полезно собрать идентификаторы контроллера и namespace: | Для контекста полезно собрать идентификаторы контроллера и namespace: | ||
| Строка 88: | Строка 95: | ||
| </ | </ | ||
| - | ==== SMART через smartctl: когда нужен единый подход ==== | + | ====SMART через smartctl: когда нужен единый подход==== |
| - | Если у вас уже есть мониторинг на базе smartmontools, | + | Если у вас уже есть мониторинг на базе smartmontools, |
| <code bash> | <code bash> | ||
| smartctl -a /dev/nvme0 | smartctl -a /dev/nvme0 | ||
| </ | </ | ||
| + | |||
| Иногда полезно явно указать тип устройства: | Иногда полезно явно указать тип устройства: | ||
| Строка 100: | Строка 109: | ||
| </ | </ | ||
| - | В выводе ищите аналоги: | ||
| + | В выводе ищите аналоги: | ||
| + | |||
| + | ====Почему значения в nvme‑cli и smartctl могут отличаться==== | ||
| - | ==== Почему значения в nvme‑cli и smartctl могут отличаться ==== | ||
| Чаще всего отличия — это формат представления (например, | Чаще всего отличия — это формат представления (например, | ||
| + | ====Ошибка носителя (media errors): что считать нормой, | ||
| - | ==== Ошибка носителя (media errors): что считать нормой, | ||
| - | ``media_errors`` (в smartctl обычно | + | **media_errors** (в smartctl обычно Media and Data Integrity Errors) — счётчик неисправимых ошибок носителя/ |
| + | Если **media_errors** стал больше нуля, действуйте по плану: | ||
| + | 1. **Зафиксируйте текущее значение** и начните смотреть динамику (рост важнее абсолютного значения). | ||
| + | 2. **Снимите NVMe error log** и проверьте повторяемость/ | ||
| + | 3. **Проверьте kernel log** на reset/ | ||
| + | 4. **Сократите риск**: проверьте бэкапы/ | ||
| + | 5. **Планируйте замену**: | ||
| - | Если ``media_errors`` стал больше нуля, действуйте по плану: | + | ====Где ещё видно признаки проблем: |
| - | 1. **Зафиксируйте текущее значение** и начните смотреть динамику (рост важнее абсолютного значения). | + | |
| - | 2. **Снимите NVMe error log** и проверьте повторяемость/ | + | |
| - | 3. **Проверьте kernel log** на reset/ | + | |
| - | 4. **Сократите риск**: проверьте бэкапы/ | + | |
| - | 5. **Планируйте замену**: | + | |
| - | + | ||
| - | + | ||
| - | ==== Где ещё видно признаки проблем: | + | |
| <code bash> | <code bash> | ||
| dmesg -T | grep -iE ' | dmesg -T | grep -iE ' | ||
| Строка 127: | Строка 135: | ||
| </ | </ | ||
| - | Регулярные reset/ | + | Регулярные reset/ |
| + | ====NVMe error log: быстрый способ понять «что именно болит»==== | ||
| - | ==== NVMe error log: быстрый способ понять «что именно болит» ==== | + | |
| - | Даже когда | + | Даже когда |
| <code bash> | <code bash> | ||
| nvme error-log /dev/nvme0 | nvme error-log /dev/nvme0 | ||
| </ | </ | ||
| + | |||
| Если хотите увидеть больше записей: | Если хотите увидеть больше записей: | ||
| Строка 140: | Строка 150: | ||
| nvme error-log /dev/nvme0 -e 256 | nvme error-log /dev/nvme0 -e 256 | ||
| </ | </ | ||
| + | |||
| На что смотреть в первую очередь: | На что смотреть в первую очередь: | ||
| - | | + | * повторяемость одного и того же статуса/ |
| - | * связь по времени с просадками производительности и таймаутами в ядре; | + | * связь по времени с просадками производительности и таймаутами в ядре; |
| - | * появление ошибок после обновления ядра или изменения прошивки/ | + | * появление ошибок после обновления ядра или изменения прошивки/ |
| + | |||
| + | |||
| + | > Если error log растёт, | ||
| + | |||
| + | |||
| + | ====Self‑test для NVMe: когда он полезен и как запускать==== | ||
| + | |||
| + | Многие NVMe поддерживают self‑test. Наличие и поведение зависят от модели и платформы, | ||
| + | |||
| + | Просмотр self‑test log: | ||
| + | <code bash> | ||
| + | nvme self-test-log / | ||
| + | </ | ||
| + | |||
| + | Запуск короткого теста (если поддерживается): | ||
| + | <code bash> | ||
| + | nvme device-self-test /dev/nvme0 --self-test-code=1 | ||
| + | </ | ||
| + | |||
| + | Запуск расширенного теста: | ||
| + | <code bash> | ||
| + | nvme device-self-test /dev/nvme0 --self-test-code=2 | ||
| + | </ | ||
| + | |||
| + | ====Температура и троттлинг: | ||
| + | |||
| + | NVMe чувствительны к перегреву: | ||
| + | |||
| + | Базовая проверка — снова SMART/ | ||
| + | <code bash> | ||
| + | nvme smart-log / | ||
| + | </ | ||
| + | |||
| + | Если температура регулярно высокая: | ||
| + | * на «железе» проверьте airflow, радиатор и расположение рядом с горячими компонентами; | ||
| + | * оцените, | ||
| + | * в виртуальной среде зафиксируйте симптомы и планируйте миграцию нагрузки до того, как начнутся таймауты. | ||
| + | |||
| + | |||
| + | ====Практический чек‑лист алертов: | ||
| + | |||
| + | |||
| + | Если нужна простая схема «без переусложнения», | ||
| + | * **critical_warning ≠ 0** — критический алерт; | ||
| + | * **media_errors** растёт — критический алерт; | ||
| + | * **available_spare ≤ available_spare_threshold** — критический алерт; | ||
| + | * **percentage_used** — warning на вашем пороге (часто 80–90), critical при 100+; | ||
| + | * **Температура** — warning/ | ||
| + | * **num_err_log_entries** растёт — warning, далее сверяйте с kernel log и latency. | ||
| + | |||
| + | |||
| + | |||
| + | =====Сбор метрик одной командой (удобно для cron)===== | ||
| + | |||
| + | Чтобы ловить тренды, | ||
| + | <code bash> | ||
| + | date -Is; nvme smart-log /dev/nvme0; echo | ||
| + | </ | ||
| + | |||
| + | Альтернатива через smartmontools: | ||
| + | <code bash> | ||
| + | date -Is; smartctl -a /dev/nvme0; echo | ||
| + | </ | ||
| + | |||
| + | Дальше можно парсить конкретные строки (grep/awk) или подключить агент мониторинга, | ||
| + | |||
| + | ====Типовые сценарии и быстрые решения==== | ||
| + | |||
| + | =====Сценарий 1: | ||
| + | * Сразу снимите **nvme smart-log** и **nvme error-log**. | ||
| + | * Проверьте, | ||
| + | * Проверьте актуальность бэкапов и план миграции. | ||
| + | * Если есть RAID/ | ||
| + | |||
| + | |||
| + | =====Сценарий 2: | ||
| + | * Считайте это деградацией и практическим *predictive failure*. | ||
| + | * Снимите динамику: | ||
| + | * Проверьте ФС по вашим регламентам, | ||
| + | * Планируйте замену/ | ||
| + | |||
| + | =====Сценарий 3: | ||
| + | * Проверьте температуру и косвенные признаки троттлинга. | ||
| + | * Проверьте kernel log на AER/PCIe ошибки. | ||
| + | * Снимите **nvme error-log** и посмотрите динамику **num_err_log_entries**. | ||
| + | * Если доступно в рамках change‑процесса — обновите прошивку/ | ||
| + | |||
| + | ====Частые вопросы==== | ||
| + | |||
| + | |||
| + | =====Можно ли полностью доверять percentage_used? | ||
| + | |||
| + | Это хороший индикатор направления и тренда, | ||
| + | |||
| + | |||
| + | =====Нормально ли, что num_err_log_entries не ноль? | ||
| + | |||
| + | Иногда да: единичные записи могли появиться из‑за редких событий (например, | ||
| + | |||
| + | |||
| + | =====Чем полезен nvme-cli, если уже есть smartctl? | ||
| + | |||
| + | **smartctl** удобен для унификации, | ||
| + | |||
| + | |||
| + | ====Итог==== | ||
| + | |||
| + | |||
| + | Базовый мониторинг NVMe в Linux строится вокруг SMART/ | ||
| + | |||
| - | > Если error log растёт, | ||
nvme-linux-smart-health.1772142329.txt.gz · Последнее изменение: 2026/02/27 00:45 — admin · В данный момент заблокировано пользователем 216.73.216.52
