Современные версии Windows собирают информацию о состоянии жестких дисках компьютера через SMART и могут оповестить пользователя о наличии проблем. Рассмотрим, как выглядит уведомление Windows о физических проблемах с жестким диском и как с помощью PowerShell и командной строки получить SMART информацию о здоровье ваших дисков через встроенные WMI классы.
Большинство современных жестких дисков (в том числе HDD, SSD, NVMe SSD) поддерживает технологию базового самотестирования и анализа состояния S.M.A.R.T (Self-Monitoring, Analysis and Reporting Technology). Контроллер диска оценивает состояние физических характеристик диска, и Windows может получить доступ к этим данным через WMI.
Содержание:
- Ошибка “Windows обнаружила неполадки жесткого диска”
- Получение SMART параметров жесткого диска через WMI класс
Информация SMART доступна только для локальных физических дисков (ATA /SATA устройств). Внешние LUN, подключенных через Fiber Channel, iSCSI, RAID или сетевые диски в основном не сообщают статус SMART.
Ошибка “Windows обнаружила неполадки жесткого диска”
В Windows по умолчанию включен мониторинг дисков службами диспетчера дилогических дисков (Logical Disk Manager) и Diagnostic Policy Service. И если один из дисков возвращает статус Predictive Failure, ОС запускает задание планировщика Microsoft-Windows-DiskDiagnosticResolver (\Microsoft\Windows\DiskDiagnostic), которое выводит сообщение:
Windows обнаружила неполадки жесткого диска Немедленно создайте резервную копию всех файлов для предотвращения потери информации. Затем свяжитесь с производителем компьютера для замены или ремонта жесткого диска.
Windows detected a hard disk problem Back up your files immediately to prevent information loss, and then contact the computer manufacturer to determine if you need to repair the disk.
В журнале событий при этом появляются сообщения вида:
The driver has detected that device \Device\Harddisk1\DR1 has predicted that it will fail. Immediately back up your data and replace your hard disk drive. A failure may be imminent.
Windows Disk Diagnostic detected a S.M.A.R.T. fault on disk .......... (volumes E:\). This disk might fail; back up your computer now. All data on the hard disk, including files, documents, pictures, programs, and settings might be lost if your hard disk fails. To determine if the hard disk needs to be repaired or replaced, contact the manufacturer of your computer. If you can't back up (for example, you have no CDs or other backup media), you should shut down your computer and restart when you have backup media available. In the meantime, do not save any critical files to this disk.
Статус
Predictive Failure
говорит о том, что одна из характеристик диска (например, механический износ) не соответствует эталонным значениям и велика вероятность отказа этого диска в будущем.
В этом случае рекомендуется выполнить резервное копирование данных с этого диска на отдельный носитель. Затем выполните проверку диска с помощью штатной SMART утилиты от производителя (или универсальными утилитами типа CrystalDiskInfo), проверьте носитель с помощью chkdsk.
Вы можете включить или отключить вывод этого сообщения пользователя с помощью специального параметра групповой политики Disk Diagnostic: Configure execution level в разделе GPO Administrative Templates -> System -> Troubleshooting and Diagnostics -> Disk Diagnostics.
Чаще всего для получения информации о состоянии дисков в Windows используют сторонни программы (например, CrystalDiskInfo, HDTune и т.д.). Такие программы, действительно позволяют получить много информации о дисках.
Например, я могу узнать оставшийся ресурс SSD. Текущее значение Total Host Writes – 507 Gb. Производитель гарантирует максимальный ресурс записи (TBW)для этой модели SSD 300 Тб. Значит диск изношен менее чем на 0.2%. Срок использования диска всего 108 часов.
Получение SMART параметров жесткого диска через WMI класс
В Windows вы можете получить доступ к данным SMART дисков с помощью встроенных средств.
Информацию о состоянии дисков компьютера можно посмотреть через панель управления Control Panel\System and Security\Security and Maintenance (в этом же разделе есть информацию о состоянии службы Windows Error Reporting).
В моем случае с дисками все ОК, т.к. в разделе Drive Status указано:
OK, All drives are working properly
.
Как мы уже говорили выше, Windows собирает информацию SMART с дисков и позволяет получать к ней доступ через WMI.
В BIOS/UEFI для дисков должна быть включена поддержка SMART.
Откройте командную строку с правами администратора и выполните следующую команду чтобы получить состояние всех дисков:
wmic diskdrive get status
В данном случае с дисками все хорошо. Если нет – будет статус bad, unknown или caution.
Получить информацию о вероятном отказе жесткого диска можно через WMI класс MSStorageDriver_FailurePredictStatus:
wmic /namespace:\\root\wmi path MSStorageDriver_FailurePredictStatus
Если контроллер диска не видит проблем с диском, значение PredictFailure должно быть равно FALSE.
Этот же класс можно опросить с помощью PowerShell:
Get-WmiObject -namespace root\wmi –class MSStorageDriver_FailurePredictStatus
Если значение PredictFailure = True, обратите внимание на причину ошибки, код которой указывается в параметре Reason. Расшифровка кода ошибки PredictFailure зависит от вендора. Информацию по некоторым кодам ошибок можно найти в wiki (https://en.wikipedia.org/wiki/S.M.A.R.T.#ATA_S.M.A.R.T._attributes).
Значения некоторых счетчиков надежности дисков можно получить с помощью следующего кода PowerShell:
Get-Disk | foreach { $_ | Get-StorageReliabilityCounter | Format-List }
Можно вывести информацию только об определенных характеристиках:
Get-PhysicalDisk | Get-StorageReliabilityCounter | Select-Object -Property DeviceID, Wear, ReadErrorsTotal, ReadErrorsCorrected, WriteErrorsTotal, WriteErrorsUncorrected, Temperature, TemperatureMax | FT
Также можно вывести общую информацию о дисках через Get-PhysicalDisk:
$(Get-PhysicalDisk | Select *)[0]
Ранее мы показывали как с помощью Get-PhysicalDisk получить информацию о неисправном диске в Windows Server S2D и заменить его:
Get-PhysicalDisk | Where-Object {$_.HealthStatus -ne ‘Healthy’}
С помощью данных WMI классов и командлетов PowerShell можно настроить сбор данных о состоянии дисков на компьютерах пользователей для проактивного мониторинга. Можно создать алерты для вашей системы мониторинга (например, zabbix, nagios, icinga и т.д.), compliance отчет SCCM через Configuration Baseline для или PowerShell Desired State Configuration (DSC), опрашивать состояние SMART на удаленных компьютерах скриптом через PowerShell Remoting (командлет Invoke-Command) или использовать что-то свое.
Have a noisy hard drive or two in your Windows Server? Experiencing less performance on your drives than usual? If so, you’ll want to check your hard drive health. In this guide, we’ll show you how you can check hard drive health in Windows Server with various tools like Disk Management, PowerShell, etc.
How to check hard drive health with the Disk Management tool
An easy way to check the health of the hard drives connected to your Windows Server is with the Disk Management tool. Disk Management is usually used to manage partitions, however, it can also tell you how your disks are.
To start, open up the Start Menu, search for “Create and format hard disk partitions,” and open it. Once it is open, look for the “Status” column. In this column, Windows will tell you if your drive is healthy or not.
If looking in the “Status” column isn’t enough, find the drive in the layout, and right-click on it. Select “Properties,” and locate the “General” tab. In this tab, find the “Device status” section. If your disk is healthy and working properly, it will say “This device is working properly.”
How to check hard drive health with PowerShell
Another way you can check hard drive health in Windows Server is via PowerShell. To start, open up a Windows PowerShell terminal. You can launch it via the Start Menu on the Windows Server desktop. Once it is open, use the “Get-PhysicalDisk” command.
Get-PhysicalDisk
After running the command above, PowerShell will output a table. This table will number all connected drives, show their serial number, media type, if they can be added to a storage pool, operational status, health status, etc.
To determine if your drives are operational, check the “OperationalStatus” column. If it says “OK,” your hard drive(s) can be utilized in Windows Server. If it says something other than “OK,” you’ll need to do some troubleshooting.
To determine if your drives are healthy, find the “HealthStatus” column. If your hard drive is healthy, it will say “Healthy” in this column. If the drive has “Unhealthy,” you may need to take a look at the drive. Lastly, if the “HealthStatus” column states “Warning,” you may want to replace the drive with a new one.
How to check hard drive health with GSmartControl
If the Disk Management tool or PowerShell doesn’t work for you, you can install a third-party program like GSmartControl. This program is useful, as it simplifies the process of checking your hard drive health. You can also use it to collect offline drive data.
To start, you must download and install GSmartControl on Windows Server. Head over to the official GSmartControl website download page. Once there, download the 64-bit installer to Windows Server. Then, open up the Explorer app.
Inside the Explorer app, find the “Downloads” folder, and click on it. Then, select the GsmartControl EXE to launch the installer. Go through the installer, and set up the software on Windows Server.
Once the software is installed on Windows Server, open up the Windows Start Menu, and launch the GsmartControl app. When it is launched, it will scan your server for connected hard drives.
Once the GSmartControl app is done scanning your server for connected hard drives, select a drive that you wish to check the health of. After selecting it, the information will appear under the “Basic health check” section.
To view an even more detailed rundown of a drive in GSmartControl, right-click on a drive and select the “View details” option. When you select “View details,” GSmartControl will show a more detailed readout of the drive.
How to error check your hard drive on Windows Server
Checking hard drive health helps to find out if something is critically wrong. However, sometimes, your hard drive isn’t in critical condition. Sometimes, there are just small errors that need to be fixed.
To run an error check on your hard drive in Windows Server, do the following. First, open up the Windows Explorer app on the Windows Server desktop. Then, find “This PC,” and select it.
On the “This PC” menu, locate the hard drive giving you issues. Then, right-click on the drive, and select “Properties.” Finally, select the “Tools” tab, and select the “Check” option to run an error check.
Selecting the “Check” button will bring up the “Error Checking” window. Click on the “Scan drive” button to scan the drive for errors. This scan may take some time to complete. When it finishes, your drive should be error-free!
Introduction
Monitoring the health of your hard disk drive (HDD) on a Windows Server is crucial to prevent data loss and ensure system reliability. This guide provides steps on how to check and monitor HDD health using built-in tools and third-party utilities. By regularly checking the HDD status, administrators can detect potential issues early and avoid downtime.
Prerequisite
- Administrator access to the Windows Server.
- Basic understanding of Windows tools and commands.
1. Open Windows Power Shell
Type diskmgmt.msc and press Enter to open up Disk Management Tools window.
2. Wait until the disks are loaded, then you can check the disk health for each disk.
If it reads “Healthy”, the HDD is good for use for a while. Be careful if the status reads “Unhealthy” as hardware failure could happen soon and thus replacing the unhealthy disk is recommended.
Conclusion
By following this guide, you can effectively monitor the health of your Windows Server’s HDD, identifying issues before they escalate. Regular checks ensure better server performance and data integrity.
Для считывания S.M.A.R.T. параметров жестких дисков локального компьютера существует множество программ. Описывать их я не буду, потому что ни одна из них не позволяет считать S.M.A.R.T. удаленно по сети, имея права администратора домена. Поиск по просторам интернета ничего путного и бесплатного мне не дал, поэтому мне пришлось подумать как эту задачу решить самому.
Недавно мне на глаза попалась небольшая консольная программка smartctl из комплекта smartmontools. Для того, чтобы запустить её на удаленном компьютере понадобится программа psexec, входящая в пакет PsTools от SysInternals.
Для работы я написал 2 скрипта:
net_smart.bat:
@echo on
del netlist.txt
net view >> netlist.txt
for /F "eol=K skip=3 tokens=1" %%i in (netlist.txt) do (
for %%j in (smartctl.*) do copy %%j %%i\admin$
psexec -s %%i smartctl.bat )
и smartctl.bat:
@Echo on
Set $DST=\\server\share\smart
md "%$DST%\%COMPUTERNAME%"
del smartctl.txt
smartctl.exe --scan >> smartctl.txt
for /F "tokens=1" %%i in (smartctl.txt) do smartctl.exe -a %%i >> "%$DST%\%COMPUTERNAME%\%DATE:~-4%-%DATE:~3,2%-%DATE:~0,2%_%TIME:~0,2%-%TIME:~3,2%.txt"
Файл net_smart.bat сканирует сеть, сохраняет список компьютеров в файл netlist.txt (предварительно его очистив) и затем поочередно на каждый компьютер копирует файлы smartctl.bat и smartctl.exe и при помощи программы psexec. Там, удаленно, запускает файл smartctl.bat, который считывает количество и имена установленных жестких дисков в smartctl.txt, затем последовательно считывается S.M.A.R.T. c каждого установленного в системе жесткого диска и складывает в папку в виде текстовых файлов, указанную в строке:
Set $DST=\\server\share\smart
файла smartctl.bat.
Хочу обратить внимание на то, что в строке
for /F "eol=K skip=3 tokens=1" %%i in (netlist.txt) do (
файла net_smart.bat символ К в параметре eol=K русский и должен быть в ДОС кодировке.
т.к. Антон заленился набросать данное решение описываю его здесь %)
Цель, считывать SMART-состояния жестких дисков и отправка отчетов ответственным.
Windows заботливо отслеживает состояние жёстких дисков и заполняет соответствующие свойства WMI:
root\wmi\MSStorageDriver_FailurePredictStatus\{HDDInstance}\PredictFailure
Не обойтись и без ограничений, в прочем ограничения эти связаны с заполнением самого класса: «MSStorageDriver_FailurePredictStatus»:
- Если устройство не ATA /SATA — есть вероятность что не получите состояние;
- Если диск подоткнули через USB док-станцию — см. предыдущий пункт;
- Hyper-V виртуальная машина — неа, «Not supported», нет такого класса.
Проверить текущие состояние можно с помощью команды wmic:
WMIC /namespace:\\root\WMI path MSStorageDriver_FailurePredictStatus get InstanceName,PredictFailure
Или PowerShell:
Get-WmiObject -Class MSStorageDriver_FailurePredictStatus -Namespace root\wmi | fl InstanceName,PredictFailure
Где:
«InstanceName» — Идентификатор диска
«PredictFailure» — найдены ли ошибки (True – ошибки обнаружены)
Несколько реализаций конечно же уже описаны, например:
https://habrahabr.ru/company/microsoft/blog/277999/
И много где ещё…
Но в случае статьи на habrahabr — не хочется привязываться к циклу Hardare Inventory, его расписанию, которое раз в 7 дней, по умолчанию. Надо бы по чаще снимать показания, а чаще делать Hardware Inventory — лишняя нагрузка на клиента. В случае статьи на isazonov.wordpress.com — есть одна особенность, связанная с типом получаемых данных по WMI. Как правильно заметил Илья, класс этот нифига не описан, а гадать на WMI — дело не благодарное, но мы про SCCM, поэтому поехали.
План:
- Создаем Configuration Item;
- Создаем Configuration Baseline;
- Распространяем Configuration Baseline на коллекцию устройств;
- Подписываемся на отчет.
ШАГ 1. Создаем Configuration Item
Идем в \Assets and Compliance\Overview\Compliance Settings\Configuration Items, создаем новый Configuration Item, со следующими значениями:
General:
Name: <Произвольный>
Type: Windows Desktops and Servers (custom)
Supported Platform:
Можно выбрать версии Windows к которым будем применять данное правило, т.к. мониторить мы будем только клиентские ОС, оставляем их.
Settings:
Создаем новую настройку и заполняем следующим образом:
Name: <Произвольное>
Setting type: WQL query
Data type: Boolean ** (см. конец поста и комментарии)
Namespace: root\wmi
Class: MSStorageDriver_FailurePredictStatus
Property: PredictFailure
Compliance Rule:
Создаем новое правило
Name: <Произвольное>
Select settings: выбираем созданный «Settings», он услужливо помечается словом «… (Current)»
Rule Type: оставляем «Value»
The setting must comply with the following rule: Eguals
the following values: False
Noncompliance severity for reports: Warning
ШАГ 2. Создаем Configuration Baseline
Идем в \Assets and Compliance\Overview\Compliance Settings\Configuration Baselines, создаем новый Configuration Baselines, со следующими значениями:
Name: <Произвольное>
Configuration Data: выбираем единственный, созданный CI на предыдущем шаге
ШАГ 3. Распространяем Configuration Baseline на коллекцию устройств
Щелкам правой кнопкой на вновь созданный CB (Configuration Baseline) / Deploy
Collection: Выбираем произвольную коллекцию устройств.
Simple schedule: Выбираем приемлемое время запуска проверки: 1 Days.
Лирическое отступление: Не вижу никакого смысла запускать проверку чаще, как собственно и реже, так же не вижу никакого смысла применять данную проверку на сервера, поскольку проверку здоровья там должно выполнять специализированное софт (ПО для RAID, SCOM, etc.), но никто не мешает, кроме ограничений, описанных в начале.
ШАГ 4. Подписываемся на отчет
Наблюдать за успешной и не успешной проверкой в консоли SCCM конечно интересно, но пользы от этого не много, поэтому не плохо бы получать отчеты о состоянии здоровья HDD. Получать мы их будем на почту с помощью стандартного функционала SCCM — подписки на отчёты.
В чате по SCCM (https://telegram.me/configmgr) есть «некие, неизвестные» Антон и Макс, которые знают запрос для спец. отчета, можно зайти в чат и потребовать от них выложить сей отчет в публичный доступ.
Мы же будем использовать универсальный отчет для DCM / Configuration Baselines.
Переходим в раздел \Monitoring\Overview\Reporting\Reports\Compliance and Settings Management
Находим отчет: «List of assets by compliance state for a configuration baseline» («Список активов по состоянию соответствия шаблонам базовых конфигурации»), нажимаем правой кнопкой / Create Subscription
Subscription Delivery:
Report delivery: E-mail
To/Сс/Bcc: e-mail адреса получателя отчета
Reply-To: — Не плохо бы указать ваш e-mail, на случай если у получателя отчета возникнет вопрос.
Subject: <Тема письма>
Comment: <Комментарии в письме>. Комментарии вставляются в начало письма.
Ставим галку «Include Report»
Render Format: На ваш вкус, я выбираю MHTML (web achieve), дабы читалось сразу в письме.
Subscription Schedule:
Заполняем значениями как вам считается правильным, чтобы получать отчет. Нет никакого смысла получать отчет чаще чем указано в ШАГ 3. Например, так: ***
Subscription Parameters:
Configuration Baseline: Выбираем созданный на шаге 3 — Configuration Baseline;
Configuration Item State: «None Compliance» («Не соответствует»);
Остальные значения по желанию.
Если все сделано, осталось дождаться отчета на почту. Что-то вроде этого:
Минус у такого отчета очевиден – мы получаем отчет по расписанию, а не по событию, но SCCM и не система мониторинга
Bonuses:
- Готовый Configuration Baseline, можно скачать тут.
- Если у вас есть настроенный SCSM (System Center Service Manager), то вряд ли вам вообще понадобиться данный пост… вы можете настроить создание инцидента на основе состояния Configuration Baseline – «How to Configure Desired Configuration Management to Generate Incidents«, и тогда исключаем минус с отчетом по расписанию.
—
* В картинках, как идентифицировать диск по InstanceName:
https://blogs.msdn.microsoft.com/san/2011/08/11/have-you-ever-wanted-to-know-if-your-disk-is-going-to-fail-before-it-does/
** Проверить какой тип возвращается в запросe можно через PowerShell:
((Get-WmiObject -Class MSStorageDriver_FailurePredictStatus -Namespace root\wmi).PredictFailure)[0].gettype().Name
*** Есть один неприятный момент связанный с отображением и заданием времени выполнения отчета по времени. В интерфейсе 12-часовой формат, но при этом не видно AM/PM. Так что имейте ввиду эту «особенность» при указании времени.