Твердотельный накопитель формата NVMe устроен принципиально иначе, чем привычный механический винчестер, и стареет он по своим законам. Здесь нет вращающихся пластин и движущихся головок, а значит, нет и осыпающейся поверхности в классическом смысле. Зато есть ячейки флеш-памяти, у каждой из которых ограничено число циклов перезаписи. Когда таких циклов накапливается слишком много, ячейка перестаёт надёжно хранить заряд, и накопитель медленно подбирается к границе своего ресурса. Чтобы заглянуть в это незримое старение, в спецификацию NVMe встроен журнал здоровья, а вытащить его из накопителя помогает утилита nvme-cli.
Два параметра из этого журнала несут наибольшую практическую ценность. Первый показывает текущую температуру кристалла, второй оценивает израсходованный ресурс в процентах. Вместе они дают честную картину того, сколько накопителю осталось и не перегревается ли он прямо сейчас. Графические утилиты в системе чаще всего сводят всё это к ничего не значащему слову про исправность, тогда как сырые цифры журнала позволяют судить о состоянии диска самостоятельно и заранее.
Откуда берётся журнал здоровья и чем NVMe отличается от старого SMART
У механических дисков самодиагностика опирается на длинную таблицу пронумерованных атрибутов, причём каждый производитель трактует их по-своему. У накопителей NVMe подход строже и единообразнее: спецификация жёстко определяет страницу журнала под номером два, куда контроллер складывает стандартный набор полей здоровья. Благодаря этому вывод по диску одного бренда выглядит так же, как по диску другого, и интерпретировать его проще.
Прежде чем смотреть журнал, нужно понять, к какому устройству обращаться. У накопителя NVMe есть два уровня именования. Путь вида nvme0 указывает на контроллер целиком, а путь вида nvme0n1 обозначает конкретное пространство имён, то есть тот блочный том, который монтируется и размечается. Журнал здоровья запрашивается у контроллера, поэтому для диагностики обычно используют путь контроллера. Полный перечень установленных накопителей и их точные имена выдаёт служебная команда.
sudo nvme list
Эта команда покажет таблицу с именами узлов, серийными номерами, моделями и объёмом. Из неё становится ясно, какой именно путь подставлять в дальнейшие команды, что особенно важно на машинах с несколькими накопителями.
Как прочитать журнал здоровья через nvme smart-log
Сам пакет ставится штатным менеджером пакетов. В семействе Debian и Ubuntu имя пакета совпадает с названием утилиты, в дистрибутивах с менеджером dnf оно такое же.
# Debian, Ubuntu и производные
sudo apt install nvme-cli
# Fedora, RHEL, CentOS Stream
sudo dnf install nvme-cli
Основная команда диагностики выводит журнал здоровья целиком. Вместо nvme0 подставляется реальный путь контроллера, полученный из перечня выше.
sudo nvme smart-log /dev/nvme0
В ответ накопитель выдаёт набор строк, каждая из которых это отдельное поле здоровья. Ниже типичный фрагмент вывода для накопителя, отработавшего около полутора лет в составе сервера.
critical_warning : 0
temperature : 37 C
available_spare : 100%
available_spare_threshold : 10%
percentage_used : 6%
data_units_written : 36731192
power_on_hours : 1299
media_errors : 0
unsafe_shutdowns : 10
Первое, на что стоит смотреть, это поле critical_warning. Ноль означает, что контроллер не видит проблем. Любое ненулевое значение это прямой сигнал тревоги: накопитель сообщает либо о перегреве, либо о деградации надёжности, либо о переходе в режим только для чтения. Если здесь не ноль, разбираться нужно немедленно, не дожидаясь остальных полей.
Почему percentage_used это самая честная оценка остатка ресурса
Поле percentage_used работает как индикатор расхода ресурса, наподобие датчика топлива в баке. Ноль означает практически новый накопитель, сотня говорит, что заявленный производителем запас выносливости исчерпан. Цифра рассчитывается контроллером на основе того, сколько данных уже записано, и сопоставляется с паспортным ресурсом конкретной модели.
Любопытная особенность этого показателя в том, что он способен перевалить за сотню. Это не ошибка и не повод для немедленной паники, потому что оценка построена на прогнозе долговечности, а не на жёстком пределе. Накопитель с показателем сто десять процентов не обязательно мёртв, он просто пережил расчётный ресурс и работает на запасе прочности. Однако относиться к нему стоит как к подозрительному: разумно перенести с него критичные данные и держать его лишь под некритичные задачи.
Чтобы прочувствовать масштаб, полезно сравнить два реальных случая. В первом накопитель за год с небольшим намотал около полутора тысяч часов работы и показывает шесть процентов износа, записав порядка десяти терабайт. Это здоровая, размеренная эксплуатация, диск спокойно проживёт ещё много лет. Во втором случае накопитель за неполные два года показал шестьдесят девять процентов износа, потому что на него вылили сто восемьдесят шесть терабайт записи. Здесь ресурс тает на глазах, и причину высокой нагрузки стоит искать в прожорливых до записи службах. Сама цифра износа без контекста объёма записанных данных мало о чём говорит, поэтому смотреть их нужно вместе.
Что рассказывает запас резервных ячеек и счётчик записанных данных
Рядом с износом стоят ещё два важных поля. Available_spare показывает, сколько процентов резервного пула ячеек ещё цело, а available_spare_threshold задаёт порог, ниже которого падение резерва считается критичным. Пока резерв держится на сотне, накопителю есть чем подменять выходящие из строя ячейки. Когда available_spare опускается ниже своего порога, обычно выставленного на отметке десять процентов, это однозначный сигнал близкого износа памяти и повод задуматься о замене.
Поле data_units_written отражает суммарный объём записанных на накопитель данных, измеряемый в единицах по пятьсот двенадцать тысяч байт каждая. Именно этот счётчик питает расчёт износа, и именно по его динамике удобно вычислять, какая служба грузит диск записью. Если за короткий срок объём вырос на десятки терабайт, стоит присмотреться к логам, кэшам и базам данных, которые могли превратиться в источник постоянной перезаписи. Сопоставив прирост записанных данных с приростом процента износа, можно прикинуть, на сколько лет хватит накопителя при текущем темпе нагрузки.
Полезны и счётчики надёжности. Поле media_errors считает ошибки целостности данных, и здоровый накопитель держит здесь ноль. Поле unsafe_shutdowns фиксирует число некорректных отключений питания, каждое из которых это потенциальный риск для данных в кэше. Эти цифры дополняют картину и помогают отличить износ от внешних бед вроде нестабильного питания.
Почему температура накопителя влияет на его долговечность
Поле temperature показывает текущую температуру кристалла в градусах Цельсия, а у многих накопителей рядом идут показания нескольких отдельных датчиков, разбросанных по плате. Тепло это второй после записи враг твердотельной памяти. При перегреве контроллер вынужден сбрасывать частоту работы, чтобы остыть, и скорость накопителя падает прямо на глазах. Этот механизм называется тепловым троттлингом, и его срабатывания накопитель тоже фиксирует в журнале.
Здоровая рабочая температура для большинства накопителей держится в районе тридцати-пятидесяти градусов. Устойчивый перегрев выше семидесяти градусов вреден для долговечности и заметно ускоряет старение памяти. На практике высокая температура чаще всего говорит о плохом обдуве отсека, отсутствии радиатора или о том, что накопитель зажат в тесном корпусе ноутбука без вентиляции. Прежде чем винить сам диск, стоит проверить именно условия его охлаждения.
Постоянно следить за температурой и здоровьем вручную неудобно, поэтому состояние удобно опрашивать из скрипта и сводить к нужным полям. Утилита умеет выдавать журнал не только человекочитаемым текстом, но и в машинном формате, удобном для разбора программой.
sudo nvme smart-log /dev/nvme0 --output-format=json
Такой вывод легко скормить любому обработчику и вытащить из него именно процент износа и температуру, чтобы построить мониторинг или присылать оповещение при выходе значений за разумные границы. Это превращает разовую проверку в постоянный фоновый присмотр без ручной возни.
Дополнительные журналы и команды для глубокой диагностики
Журнал здоровья это не единственный источник сведений о накопителе. Рядом с ним лежит журнал ошибок, куда контроллер пишет подробности о сбоях команд, и заглянуть в него полезно, когда поле num_err_log_entries в основном журнале показывает ненулевое число. Каждая запись там это история конкретного сбоя со временем и кодом, и по ним удобно понять, носят ли ошибки разовый характер или повторяются.
sudo nvme error-log /dev/nvme0
Не менее полезна общая идентификация контроллера, из которой видны модель, версия прошивки и заявленные производителем возможности. Версия прошивки тут особенно важна, поскольку часть проблем с износом и перегревом лечится её обновлением, а не заменой железа.
sudo nvme id-ctrl /dev/nvme0
Отдельного внимания заслуживает паспортный ресурс записи, который производитель указывает в характеристиках модели. Зная этот предел в терабайтах и текущий объём записанных данных из журнала здоровья, легко самостоятельно проверить, насколько честен показатель износа. Иногда встроенный расчёт оказывается консервативным и пугает раньше времени, а иногда, наоборот, слишком оптимистичен под конкретный профиль нагрузки. Сопоставление с паспортом снимает эту неопределённость.
Полезно понимать и природу единиц измерения записи. Поле записанных данных хранит счётчик в блоках по пятьсот двенадцать тысяч байт, и при выводе человекочитаемым форматом утилита нередко сама переводит его в терабайты в квадратных скобках рядом. Если же разбор идёт из машинного вывода, перевод придётся делать самостоятельно, умножая число единиц на размер блока. Этот нюанс важен, потому что путаница в единицах легко искажает расчёт темпа износа в десятки раз.
Какие шаги предпринять при тревожных показаниях журнала
Когда журнал NVMe показывает настораживающие цифры, разумный порядок реакции выглядит так:
- Проверить поле critical_warning и при любом ненулевом значении немедленно сделать резервную копию данных;
- Оценить percentage_used вместе с объёмом записанных данных, чтобы понять реальный темп расхода ресурса;
- Сверить available_spare с его порогом и при падении резерва запланировать замену накопителя;
- Измерить температуру под нагрузкой и при перегреве заняться охлаждением отсека или установкой радиатора;
- Отследить источник избыточной записи через прирост data_units_written, если ресурс тает слишком быстро.
Стоит держать в уме главную особенность твердотельной памяти. В отличие от механического диска, который часто сыплет ошибками задолго до смерти, исправный накопитель NVMe нередко работает безупречно почти до самого конца, а затем при исчерпании ресурса переходит в режим только для чтения. Это бережёт уже записанные данные, но новые записать будет невозможно. Поэтому ловить приближение этой границы по проценту износа важно заранее, а не постфактум.
Что в итоге держать перед глазами
Журнал здоровья NVMe это приборная панель твердотельного накопителя, и читать её куда полезнее, чем доверять обобщённому вердикту графических утилит. Процент износа честно показывает, сколько ресурса уже потрачено, и в связке с объёмом записанных данных позволяет прикинуть остаток жизни диска. Температура раскрывает условия эксплуатации и предупреждает о перегреве, который незаметно подтачивает память. Запас резервных ячеек и счётчики ошибок дополняют картину, отделяя естественный износ от внешних неприятностей.
Регулярный взгляд в этот журнал, автоматический разбор машинного вывода и привычка соотносить износ с реальной нагрузкой превращают накопитель из чёрного ящика в прозрачный прибор. Твердотельный диск редко умирает молча, он заранее показывает, сколько прошёл и сколько ему осталось. Прочитать эту шкалу и вовремя подготовить замену под силу каждому, кто знает, куда смотреть.