Почему мониторинг SSD отличается от HDD: главные метрики здоровья
Твердотельные накопители деградируют иначе, чем жесткие диски. HDD умирает от механического износа - удары головок, заклинивание шпинделя, нестабильные сектора. SSD умирает от исчерпания ресурса перезаписи ячеек NAND. Каждая ячейка выдерживает ограниченное число циклов программирования/стирания (P/E cycles). Контроллер SSD распределяет нагрузку равномерно по всем ячейкам - этот процесс называется выравниванием износа (wear leveling). Когда резерв ячеек заканчивается, диск переходит в режим read-only или полностью отказывает.
Поэтому традиционные HDD-метрики вроде Spin-Up Time или Seek Error Rate для SSD бесполезны. Вам нужны три ключевых атрибута: Wear Leveling Count (процент использованных циклов перезаписи), Total LBAs Written (объем записанных данных за всю жизнь диска) и Reallocated Sectors Count (число переназначенных сбойных блоков из резервной области). Эти три показателя дают полную картину износа и позволяют предсказать момент, когда диск пора менять - до того как данные станут недоступны.
Если вы отвечаете за парк серверов или рабочих станций, вам также пригодятся наши руководства по сравнению утилит мониторинга HDD и SSD и мониторингу производительности сервера - они дополнят картину диагностики дисковой подсистемы.
Wear Leveling Count: главный индикатор износа
Wear Leveling Count (иногда называется Average Block Erase Count) - это нормализованный показатель, отражающий, сколько циклов перезаписи уже использовано относительно паспортного максимума. Значение 100 означает новый диск с нулевым износом. Значение 0 означает, что гарантированный производителем ресурс полностью исчерпан. Промежуточные значения - прямая пропорция: 50 - износ 50%, 10 - износ 90%.
Трактовка зависит от производителя. Samsung выводит Wear Leveling Count в процентах оставшегося ресурса (100 - отлично, 0 - замена). Intel для некоторых моделей использует обратную шкалу: сырое значение растет от нуля, и критическим считается достижение паспортного максимума циклов. WD и Kingston могут использовать атрибут с ID 230 (Media Wearout Indicator) с аналогичной нормализацией. Перед принятием решения всегда сверяйтесь с документацией на конкретную модель.
Пороговые значения для принятия решений: при Wear Leveling Count = 10 и ниже диск подлежит немедленной замене в продуктивной среде. При значении 20-30 - планируйте замену в ближайшее окно обслуживания. Значения выше 50 - нормальный рабочий износ.
Total LBAs Written (TBW): расчет оставшегося ресурса
Total LBAs Written (TLW) показывает общее количество секторов, записанных на диск за все время работы. Зная этот показатель и паспортный TBW (Total Bytes Written) из спецификации производителя, вы можете точно вычислить процент износа.
Формула расчета:
Износ (%) = (Total LBAs Written × размер сектора) / TBW диска × 100
Размер сектора для современных SSD - 512 байт или 4096 байт (4K). Уточните для вашей модели через спецификацию или вывод smartctl. Пример расчета для Samsung 870 EVO 500GB с TBW = 300 TBW и показанием Total LBAs Written = 117187500000:
Записано ГБ = 117187500000 × 512 / (1024³) ≈ 55900 ГБ ≈ 55,9 ТБ Износ = 55,9 / 300 × 100 ≈ 18,6%
Где взять TBW? В спецификации на сайте производителя. Для датацентровых SSD часто указывается DWPD (Drive Writes Per Day) - количество полных перезаписей емкости диска в сутки в течение гарантийного срока. TBW = DWPD × емкость × гарантийный срок в днях. Например, DWPD=1 для диска 1 ТБ на 5 лет дает TBW = 1 × 1 ТБ × 1825 дней = 1825 TBW.
Reallocated Sectors Count: когда резервные блоки заканчиваются
На SSD переназначение секторов происходит из-за физической деградации ячеек NAND. Когда ячейка перестает надежно хранить заряд, контроллер помечает её как сбойную и подменяет блоком из резервной области. Пока резерв есть - диск работает штатно. Рост Reallocated Sectors Count в сочетании с падением Wear Leveling Count - прямой сигнал к немедленной замене: резерв исчерпывается, и новые сбои будет нечем компенсировать.
Допустимые значения: 0-10 - норма для диска с пробегом. 10-100 - повод для пристального наблюдения, проверяйте динамику раз в неделю. Более 100 - критично, планируйте замену немедленно. Резкий скачок на десятки или сотни за короткий промежуток - диск отказывает прямо сейчас, данные под угрозой. В такой ситуации изучите наше руководство по восстановлению данных с SSD - там описан протокол действий при инциденте.
Инструменты мониторинга SSD в Windows: от GUI до PowerShell
В Windows доступны два подхода: графические утилиты для быстрой проверки и командная строка для автоматизации. CrystalDiskInfo дает визуальную оценку за секунды. PowerShell позволяет встроить проверку в скрипты и системы мониторинга.
CrystalDiskInfo: быстрый визуальный мониторинг
Скачайте CrystalDiskInfo с официального сайта (версия Standard Edition, портативная или установщик). Запустите. Главное окно показывает общую оценку здоровья цветом: синий/зеленый - Good (норма), желтый - Caution (внимание, износ выше порога), красный - Bad (критично). Тут же отображаются температура, общее время работы, интерфейс подключения.
Перейдите на вкладку SMART. Найдите атрибуты:
- Wear Leveling Count - у Samsung ID 177, текущее значение от 100 до 0.
- Total LBAs Written - ID 241, сырое значение в шестнадцатеричном виде.
- Reallocated Sectors Count - ID 5, сырое значение - число переназначенных секторов.
Настройка оповещений: меню Function → Alert → отметьте галочки «Health Status» и «Temperature». При падении здоровья до Caution или Bad утилита покажет всплывающее окно или воспроизведет звук.
PowerShell: автоматизация сбора SMART-данных
Для серверов без GUI и для скриптов мониторинга используйте встроенные командлеты. Базовый вывод:
Get-PhysicalDisk | Select-Object FriendlyName, HealthStatus, OperationalStatus Get-StorageReliabilityCounter -PhysicalDisk (Get-PhysicalDisk -FriendlyName "Samsung SSD 870 EVO")
Вывод Get-StorageReliabilityCounter содержит поля Wear (нормализованный износ, аналог Wear Leveling Count), ReadErrorsTotal, WriteErrorsTotal, Temperature. Ограничение: не все SSD отдают Wear через этот API. Для NVMe-дисков данные могут быть неполными - в этом случае используйте WMI-класс MSStorageDriver_FailurePredictStatus или специализированные утилиты производителя.
Пример извлечения конкретного значения Wear для использования в скриптах:
$disk = Get-PhysicalDisk -FriendlyName "Samsung SSD 870 EVO"
$reliability = Get-StorageReliabilityCounter -PhysicalDisk $disk
$wear = $reliability.Wear
if ($wear -lt 10) { Write-Host "КРИТИЧНО: износ SSD более 90%" }
Мониторинг SSD в Linux: smartctl и nvme-cli
В Linux мониторинг SSD разделяется по интерфейсу: SATA-диски обслуживаются через smartctl из пакета smartmontools, NVMe-диски - через nvme-cli. Установите оба пакета заранее:
apt install smartmontools nvme-cli # Debian/Ubuntu dnf install smartmontools nvme-cli # RHEL/CentOS/Fedora
smartctl для SATA SSD: универсальный инструмент
Полный вывод SMART-атрибутов:
smartctl -a /dev/sda
Ключевые атрибуты и их типичные ID:
- Wear Leveling Count - ID 177 или 233. Значение VALUE - нормализованное (100 - новый, 0 - износ 100%).
- Total LBAs Written - ID 241. RAW_VALUE - общее число записанных секторов.
- Reallocated Sectors Count - ID 5. RAW_VALUE - количество переназначенных секторов.
Быстрый поиск нужных метрик через grep:
smartctl -a /dev/sda | grep -iE "wear|realloc|total_lba"
Запуск тестов: smartctl -t short /dev/sda (быстрый, 2 минуты), smartctl -t long /dev/sda (полный, может занять часы). Результат: smartctl -l selftest /dev/sda.
nvme-cli для NVMe SSD: прямой доступ к контроллеру
NVMe-диски не используют ATA-команды, поэтому smartctl для них ограничен. Полноценный SMART-лог доступен через nvme-cli. Список NVMe-устройств:
nvme list
Вывод SMART-лога:
nvme smart-log /dev/nvme0
Ключевые поля вывода:
- percentage_used - прямой аналог Wear Leveling Count. Значение 0 означает износ 0% (новый диск). Значение 100 и выше - ресурс исчерпан. Это обратная шкала по сравнению с SATA-SMART: здесь значение растет с износом.
- critical_warning - битовая маска тревог: бит 0 (доступный резерв ниже порога), бит 1 (температура выше порога), бит 2 (деградация NVM-подсистемы).
- temperature - текущая температура в Кельвинах, вычитайте 273 для Цельсия.
- data_units_written - объем записанных данных в блоках по 512 КБ (умножьте на 512 и разделите на 1024³ для гигабайт).
Пример расчета износа NVMe-диска с TBW=600 TBW и data_units_written=23456789:
Записано ГБ = 23456789 × 512 КБ / (1024²) ≈ 11728394 МБ ≈ 11453 ГБ ≈ 11,5 ТБ Износ = 11,5 / 600 × 100 ≈ 1,9%
Настройка оповещений о критическом износе SSD
Ручная проверка SMART-атрибутов не работает для парка из десятков машин. Нужен автоматический опрос с отправкой уведомлений при достижении пороговых значений. Ниже приведены готовые скрипты для Windows и Linux.
Скрипт для Windows: мониторинг Wear Leveling через PowerShell
Скрипт проверяет значение Wear для указанного диска и отправляет email при падении ниже порога. Сохраните как Check-SSDWear.ps1:
$diskName = "Samsung SSD 870 EVO"
$threshold = 10
$smtpServer = "smtp.yourcompany.com"
$from = "monitoring@yourcompany.com"
$to = "admin@yourcompany.com"
try {
$disk = Get-PhysicalDisk -FriendlyName $diskName -ErrorAction Stop
$reliability = Get-StorageReliabilityCounter -PhysicalDisk $disk
$wear = $reliability.Wear
if ($wear -lt $threshold) {
$body = "КРИТИЧЕСКИЙ ИЗНОС SSD: $diskName. Wear Leveling = $wear (порог: $threshold). Немедленно замените диск."
Send-MailMessage -From $from -To $to -Subject "ALERT: SSD износ критический" -Body $body -SmtpServer $smtpServer
}
} catch {
$body = "ОШИБКА мониторинга SSD $diskName : $_"
Send-MailMessage -From $from -To $to -Subject "ERROR: мониторинг SSD" -Body $body -SmtpServer $smtpServer
}
Настройте запуск по расписанию: Task Scheduler → Create Task → Trigger: Daily, Repeat every 1 hour → Action: Start a program, powershell.exe -ExecutionPolicy Bypass -File "C:\Scripts\Check-SSDWear.ps1".
Скрипт для Linux: оповещение на основе smartctl
Bash-скрипт извлекает Wear Leveling Count для SATA SSD и отправляет уведомление через mailx. Сохраните как /usr/local/bin/check-ssd-wear.sh:
#!/bin/bash
DISK="/dev/sda"
THRESHOLD=10
EMAIL="admin@yourcompany.com"
WEAR=$(smartctl -a $DISK | grep -i "wear_leveling_count" | awk '{print $4}')
if [ -z "$WEAR" ]; then
WEAR=$(smartctl -a $DISK | grep -i "media_wearout" | awk '{print $4}')
fi
if [ -n "$WEAR" ] && [ "$WEAR" -lt "$THRESHOLD" ]; then
echo "КРИТИЧЕСКИЙ ИЗНОС SSD $DISK. Wear Leveling = $WEAR (порог: $THRESHOLD)." | mailx -s "ALERT: SSD износ критический" $EMAIL
fi
Для NVMe-дисков замените строку извлечения Wear на:
WEAR=$(nvme smart-log $DISK | grep percentage_used | awk '{print $3}' | sed 's/%//')
# percentage_used растет с износом: 0 - новый, 100 - износ 100%
if [ -n "$WEAR" ] && [ "$WEAR" -gt $((100 - THRESHOLD)) ]; then
echo "КРИТИЧЕСКИЙ ИЗНОС NVMe $DISK. Percentage Used = $WEAR%." | mailx -s "ALERT: NVMe износ критический" $EMAIL
fi
Добавьте в cron ежечасный запуск: 0 * * * * /usr/local/bin/check-ssd-wear.sh.
Для централизованного мониторинга парка серверов используйте Zabbix или Prometheus. В Zabbix создайте Item типа Zabbix agent с ключом system.run[smartctl -a /dev/sda | grep Wear_Leveling_Count | awk '{print $4}'] и Trigger с порогом. Prometheus собирает метрики через textfile collector от Node Exporter - напишите экспортер, который парсит вывод smartctl и пишет в /var/lib/node_exporter/textfile_collector/ssd_wear.prom.
Особенности мониторинга SSD разных производителей
SMART-атрибуты не стандартизированы жестко. Производители используют разные ID и названия для одних и тех же метрик. Сверка с официальной документацией обязательна перед интерпретацией значений.
Типичные различия:
- Samsung: Wear Leveling Count - ID 177. Значение 100 - новый, 0 - полный износ. Утилита производителя - Samsung Magician, показывает износ в процентах и TBW графически.
- Intel: Media Wearout Indicator - ID 233 (SATA), Percentage Used - в NVMe-логе. Шкала аналогична Samsung для SATA (100 → 0). Для NVMe - обратная (0 → 100% износа). Фирменная утилита - Intel Memory and Storage Tool.
- Western Digital / SanDisk: Media Wearout Indicator - ID 230. Нормализация 100 → 0. WD Dashboard - фирменная утилита мониторинга.
- Kingston: Wear Leveling Count - ID 231 или 233, зависит от модели. Kingston SSD Manager показывает состояние наглядно.
- Crucial / Micron: Percentage Lifetime Used - ID 202 или 210. Шкала 100 → 0. Storage Executive - утилита производителя.
Рекомендация: всегда устанавливайте фирменную утилиту производителя для первичной диагностики. Она корректно интерпретирует атрибуты конкретной модели. Данные из generic-инструментов (smartctl, CrystalDiskInfo) перепроверяйте по документации вендора. Для датацентровых NVMe-дисков используйте nvme-cli - он дает прямой доступ к стандартизированному SMART-логу, где поля вроде percentage_used и critical_warning едины для всех производителей.
При построении отказоустойчивых систем хранения мониторинг отдельных SSD - только первый уровень. Для комплексной защиты данных изучите наши материалы по настройке кэширования в системах хранения и практической настройке производительности массивов. Если вы разворачиваете инфраструктуру мониторинга и вам нужны облачные ресурсы, Timeweb Cloud предоставляет VDS и выделенные серверы с возможностью гибкого масштабирования.