
«Диск тормозит» может означать неисправный накопитель, заполненную файловую систему, очередь запросов, проблему кабеля или ограничение виртуального storage. Одна программа не отличит все эти причины. Эта инструкция объединяет двадцать доступных инструментов Windows и Linux по конкретным задачам и показывает, с чего начать диагностику без записи тестовых данных на рабочий диск. Среда Linux в примерах — Debian/Ubuntu; Windows — поддерживаемая рабочая станция или сервер. Устройства /dev/sda и /dev/nvme0 — примеры: сначала установите реальный путь и серийный номер.

1. Выбрать инструмент по уровню проблемы
Двадцать инструментов ниже не равно двадцати агентам, которые нужно установить одновременно. Встроенные средства ОС часто достаточны для первичной диагностики. Проверяйте условия лицензии и источник загрузки перед включением в корпоративный комплект.
- 1. smartctl из smartmontools — подробные SMART/ATA/SCSI/NVMe сведения и журнал self-test.
- 2. smartd — периодическая проверка состояния накопителей и уведомления.
- 3. nvme-cli — сведения и журналы NVMe, включая SMART и ошибки контроллера.
- 4. CrystalDiskInfo — графическое чтение состояния поддерживаемых HDD/SSD в Windows.
- 5. Get-PhysicalDisk — инвентаризация физических дисков через Windows Storage.
- 6. Get-StorageReliabilityCounter — доступные счётчики температуры, износа и ошибок.
- 7. Performance Monitor — исторические счётчики задержки, очереди и IOPS Windows.
- 8. Resource Monitor — связь процессов с дисковой активностью на текущем хосте.
- 9. DiskMon — наблюдение низкоуровневой дисковой активности Windows.
- 10. Process Monitor — операции процессов с файлами и результаты обращений.
- 11. iostat — нагрузка и задержки блочных устройств Linux.
- 12. pidstat — дисковая активность отдельных процессов.
- 13. iotop — интерактивный поиск процессов, создающих I/O, при поддержке ядра.
- 14. lsblk — карта устройств, разделов и точек монтирования.
- 15. df — заполнение файловых систем и inode.
- 16. du — размеры каталогов, видимые из текущего namespace.
- 17. ncdu — удобный интерактивный просмотр потребления места.
- 18. WinDirStat — визуальная карта файлов и каталогов Windows.
- 19. journalctl — ошибки ядра, файловой системы и storage в системном журнале.
- 20. Prometheus node_exporter — метрики дисков и файловых систем для централизованного мониторинга Linux.
Официальные страницы: CrystalDiskInfo, WinDirStat, DiskMon, node_exporter. TestDisk и PhotoRec относятся к восстановлению данных, fio и CrystalDiskMark — к нагрузочным тестам; смешивать их с постоянным мониторингом неправильно. Запись benchmark на аварийный диск может ухудшить ситуацию.
2. Установить, какое устройство обслуживает проблемный каталог
В виртуальной машине «диск» может быть виртуальным томом, а SMART доступен только на гипервизоре или контроллере. В RAID необходимо сопоставить slot, serial и физический накопитель средствами производителя. Отсутствие SMART внутри VM не доказывает исправность массива.
sudo apt update
sudo apt install smartmontools nvme-cli sysstat ncdu
lsblk -o NAME,TYPE,SIZE,FSTYPE,MOUNTPOINTS,MODEL,SERIAL
findmnt -T /var/lib
sudo smartctl --scan-open
sudo nvme list
Сохраните вывод в обращении: host, дата, путь, serial, firmware, controller и mountpoint. USB-мост может не передавать необходимые команды. Не подбирайте случайные флаги passthrough; используйте поддерживаемый тип из smartctl --scan-open и документацию контроллера. На Windows сопоставьте номера дисков с физическими устройствами:
Get-Disk | Select-Object Number,FriendlyName,SerialNumber,BusType,OperationalStatus,Size
Get-PhysicalDisk | Select-Object FriendlyName,SerialNumber,MediaType,HealthStatus,OperationalStatus,Size
Get-Volume | Select-Object DriveLetter,FileSystemLabel,FileSystem,SizeRemaining,Size
Счётчики RAID и Storage Spaces могут отличаться от физических счётчиков производителя. Это разные уровни наблюдения, а не взаимно исключающие результаты.
3. Проверить свободное место и inode
Заполненный диск не обязательно повреждён. Иногда свободны гигабайты, но закончились inode из-за миллионов маленьких файлов. Иногда удалённый журнал продолжает занимать место, пока процесс держит открытый дескриптор. Проверка должна различать эти случаи.
df -hT /var/lib
df -i /var/lib
sudo du -xhd1 /var | sort -h
sudo ncdu -x /var
sudo lsof +L1
du -x и ncdu -x не пересекают границы файловой системы, что исключает случайный обход подключённого backup. lsof устанавливается отдельно, если отсутствует. Его результат с deleted означает открытый удалённый файл; безопасное решение определяется владельцем приложения — например штатная ротация или согласованный перезапуск, а не убийство всех процессов. Не удаляйте вручную содержимое /var/lib/docker, базы данных или VM images. В Windows WinDirStat запускают на нужном томе с учётом прав: недоступные каталоги делают суммарную оценку неполной.
4. Прочитать SMART и правильно оценить код возврата
smartctl -x показывает расширенную информацию. SMART overall-health PASSED не обещает, что диск не откажет завтра. Анализируйте журнал ошибок, self-test, динамику атрибутов и корреляцию с симптомами. Raw значения разных моделей нельзя сравнивать как одинаковые единицы.
sudo smartctl -x /dev/sda > smart-sda.txt
rc=$?
printf 'smartctl exit bitmask: %s\n' "$rc"
sudo smartctl -x -j /dev/sda > smart-sda.json
Код возврата — битовая маска: один ненулевой результат может означать ошибку команды, заявленное ухудшение здоровья или историческую ошибку в журнале. Поэтому оболочка «всё, кроме нуля — диск умер» непригодна. Сначала расшифруйте маску и содержимое ответа. ATA Current_Pending_Sector и Offline_Uncorrectable требуют внимания к данным, а рост UDMA_CRC_Error_Count может указывать на тракт передачи: кабель, разъём, backplane. У отдельных устройств атрибуты отсутствуют или имеют другое назначение. Руководство smartctl.
5. Проверить NVMe: предупреждения, ресурс и ошибки
У NVMe другие поля, чем у SATA. Смотрите critical_warning, available_spare, percentage_used, media_errors и error log. Percentage used оценивает расход ресурса по модели производителя; он не является точным отсчётом дней до отказа. Температурные пороги определяются устройством, универсальное значение для любого SSD назначать нельзя.
sudo nvme id-ctrl /dev/nvme0
sudo nvme smart-log /dev/nvme0 -o json > nvme-smart.json
sudo nvme error-log /dev/nvme0 -e 16 > nvme-errors.txt
sudo journalctl -k --since '-2 hours' --no-pager > kernel-storage.txt
Сопоставьте время kernel timeout/reset с пиками latency и температурой. Исторический счётчик unsafe shutdowns сам по себе не доказывает текущую неисправность; его рост при нормальных выключениях требует расследования. media_errors, которые растут вместе с I/O failures, — повод немедленно проверить доступную резервную копию и план замены. nvme-smart-log.
6. Снять здоровье дисков Windows
PowerShell Storage удобен для автоматизации, но доступность полей зависит от накопителя, драйвера и контроллера. Пустое поле Wear или Temperature не равно нулевому износу и нулевой температуре. Не назначайте тревогу «всё нормально» по одному отсутствующему счётчику.
$disks = Get-PhysicalDisk
$disks | Select-Object FriendlyName,SerialNumber,HealthStatus,OperationalStatus
foreach ($disk in $disks) {
try {
$disk | Get-StorageReliabilityCounter -ErrorAction Stop |
Select-Object DeviceId,Temperature,Wear,PowerOnHours,ReadErrorsUncorrected,WriteErrorsUncorrected
} catch {
Write-Warning ("Счётчики недоступны для {0}: {1}" -f $disk.FriendlyName,$_.Exception.Message)
}
}
Get-WinEvent -FilterHashtable @{LogName='System';StartTime=(Get-Date).AddHours(-2)} |
Where-Object ProviderName -Match 'disk|storport|stornvme|Ntfs' |
Select-Object TimeCreated,ProviderName,Id,LevelDisplayName,Message
Используйте официальный Get-StorageReliabilityCounter, а для поддерживаемой модели — CrystalDiskInfo из доверенного источника. При cluster storage команда может работать на уровне кластера; убедитесь, что собираете нужный объект.
7. Отличить неисправность от насыщения I/O
iostat следует запускать с интервалом: первый отчёт часто отражает статистику с загрузки, поэтому ключ -y исключает его. await — среднее время запроса, включающее очередь; среднее может скрыть хвосты задержки. На NVMe и RAID %util=100 не всегда означает, что достигнут максимальный throughput: устройство обслуживает несколько запросов параллельно.
iostat -xz -y 1 10
pidstat -d 1 10
vmstat 1 10
cat /proc/pressure/io
Сопоставьте r/s, w/s, throughput, await и aqu-sz с конкретной нагрузкой. Если приложение медленное при малом I/O, ищите блокировки, синхронные flush, сеть или CPU. Если все VM тормозят одновременно, смотрите общий datastore и RAID rebuild. Не меняйте scheduler, queue depth и cache policy до установления причины и резервной копии конфигурации. Документация sysstat.
8. Найти процесс и конкретные операции
pidstat показывает I/O процесса, но кэш и buffered write могут отделять время операции приложения от физической записи. iotop требует поддержки учёта в ядре и прав; нулевой отчёт не доказывает отсутствие нагрузки. В контейнере host PID и namespace PID различаются.
sudo apt install iotop lsof
sudo iotop -o -P
pidstat -d -p 1234 1 10
sudo lsof -p 1234
В Windows откройте Resource Monitor → Disk, отсортируйте процессы по Total, затем сопоставьте файлы и response time. Для Process Monitor задайте фильтры Process Name и Path, очистите старый захват, воспроизведите симптом и остановите запись. Длинный бесконтрольный trace занимает место и содержит пути пользовательских данных. На рабочем сервере сохраните только нужное окно и ограничьте доступ к файлу расследования.
9. Настроить наблюдение и проверить доставку тревоги
Для Linux сначала проверьте поддержку конкретных дисков, затем настройте smartd по документации пакета. Наличие работающего процесса не означает доставку уведомлений: тест должен пройти путь от события до дежурного. В системе мониторинга нужны отдельные сигналы состояния, ошибок чтения, заполнения и недоступности источника.
systemctl status smartmontools --no-pager
sudo smartd -q onecheck
journalctl -u smartmontools --since '-30 minutes' --no-pager
Имя службы зависит от пакета; уточните через systemctl list-unit-files. node_exporter даёт метрики diskstats и filesystem, но не превращается автоматически в полный SMART-агент. Для SMART нужен отдельный коллектор или корректно подготовленный textfile collector. Экспортер доступен только сети мониторинга; открытый endpoint может раскрывать инфраструктуру. Порог места оценивайте в процентах и гигабайтах, а также по скорости роста. Отдельно проверяйте freshness: пропавший агент не должен оставлять последний зелёный статус навсегда.
10. Принять решение и сохранить доказательства
При росте media errors, read failures или pending sectors начните с данных: установите, что восстанавливается из backup и сколько займёт возврат. При физических симптомах и незаменимых данных не запускайте массовый surface scan на оригинале; процедуру копирования и восстановления определяет специалист. SMART self-test на стабильном диске запускают в согласованное окно:
sudo smartctl -t short /dev/sda
# Повторить чтение после времени, указанного устройством
sudo smartctl -l selftest /dev/sda
sudo smartctl -x /dev/sda > smart-after.txt
Не запускайте долгий тест на аварийном накопителе ради заполнения отчёта. Для рабочего диска критерий исправления включает исчезновение симптома под исходной нагрузкой, понятную динамику счётчиков и подтверждённое восстановление данных. Для переполнения — согласованную очистку/расширение и прогноз роста; для saturated storage — измерение после изменения. Итог обращения: host, serial, симптомы, временной диапазон, SMART/NVMe, I/O, решение, владелец и дата следующей проверки.
Нужен контроль состояния дисков?
Для серверов и рабочих станций можно организовать регулярный мониторинг накопителей, а также резервное копирование критичных данных.
