Learning how to check SSD health takes about 25 minutes and costs nothing, and it is the cheapest insurance you can buy for the files on your PC. Every NVMe drive keeps a built-in health record, which the smartmontools project documents as the NVMe SMART/Health Information log (Log Identifier 02h). That log tracks temperature, spare capacity, wear, unsafe shutdowns and media errors, so a failing drive usually leaves clues long before it disappears from Windows.
This tutorial walks you through a full SSD health check on Windows 11 in 13 steps. You will use four tools: the checks built into Windows, CrystalDiskInfo 9.9.3, the command-line smartctl from smartmontools 7.5, and Samsung Magician 9.0 as an example of a vendor utility. You will also learn what each number means, which warnings deserve a backup right now, and how to automate the routine with a free logging script.
If you just fitted a new drive, our walkthrough on how to install an NVMe SSD covers the hardware side. Run the health check on day one so you have a clean baseline, then repeat it monthly. By the end you will have a scheduled task that logs your drive’s wear, temperature and error counters to a CSV file every week.
Don't miss new tech stories on Google
Add Tech Insider once in the Google app and our stories appear in your news suggestions.
Why an SSD Health Check Matters Right Now
Hard drives fail loudly. They click, grind and slow down for weeks. SSDs fail quietly. A drive can look perfect in File Explorer on Monday and refuse to show up on Tuesday, because the controller, firmware, power path or connector gave out rather than the flash itself. That makes a routine SSD health check more valuable than it feels. You are not predicting the future. You are catching the slow problems (wear, rising error counts, heat) so a replacement happens on your schedule and not during a deadline.
There is one important limit to keep in mind from the start. According to an October 2026 post on the NVM Express site, a Windows result that says healthy does not prove a drive is fault-free, because intermittent controller, power, connector, firmware or motherboard problems can appear before any persistent warning shows up. Treat every green badge in this guide as a good sign and not as a guarantee. Backups stay mandatory.
The timing is also good for a refresh. CrystalDiskInfo shipped version 9.9.3 in October 2026, and its developer announced that the tool passed 100 million cumulative downloads. Windows 11 version 26H2 is now generally available, and we found no sign that it changes how drive health is exposed, so every step below works across the supported Windows 11 releases. The smartmontools project, which powers most monitoring tools on the market, remains actively maintained, with the newest stable release still 7.5 from April 30, 2025.
Here is what you will end up with after the 13 steps:
- A written inventory of every SSD in your PC, with model, interface and capacity.
- A baseline reading of wear, spare capacity, temperature and error counters.
- Three independent views of the same data (Windows, CrystalDiskInfo, smartctl) so you can spot disagreements.
- A self-test result and a file-system integrity check.
- A scheduled PowerShell logger, plus a Linux equivalent, that alerts you when something changes.
Prerequisites and Tool Versions
You do not need special hardware to learn how to check SSD health. Any SATA or NVMe SSD that is installed internally will work, and many external drives work too (Step 10 covers USB enclosures). You need administrator rights on the PC, an internet connection for the downloads, and a spare external drive or cloud folder for a backup. The table lists every tool with the version this guide was written against on October 22, 2026.
| Tool | Version used | Cost | Best for |
|---|---|---|---|
| Windows 11 | 26H2 (steps also apply to 25H2 and 24H2) | Included | Quick status, PowerShell counters |
| Windows PowerShell | 5.1 (built in) | Included | Scripting, scheduled logging |
| CrystalDiskInfo | 9.9.3 (October 11, 2026) | Free (MIT-licensed, standard download) | Graphical SMART overview |
| smartmontools (smartctl, smartd) | 7.5 (April 30, 2025) | Free (GPL) | Full logs, self-tests, JSON output |
| Samsung Magician | 9.0 | Free | Samsung SSDs only |
| Backup target | Any external drive or cloud folder | Varies | Protecting your data first |
A word on where to download. CrystalDiskInfo comes from its author’s site, Crystal Dew World, and the standard download is free. The developer’s 100-million-downloads announcement counts historical downloads from OSDN.net and SourceForge.net and excludes mirror and redistribution sites, which is a useful reminder that plenty of third-party mirrors exist. Skip them. Reports also mention a Microsoft Store edition listed at ¥1,000 in Japan, described as a way to support development, but you never need to pay for the standard desktop version.
Close any disk benchmarking tool before you start. Two programs polling the same drive can return stale or conflicting values, and a benchmark running in the background will also inflate your temperature reading. If you use a laptop, plug it into mains power so the drive does not enter aggressive power-saving states mid-test.
How SSD Health Data Works: SMART, the NVMe Log and Wear
Before you click anything, it helps to know where the numbers come from. SMART (Self-Monitoring, Analysis and Reporting Technology) is the long-standing reporting system built into drive firmware. SATA SSDs expose a table of numbered attributes, each with a current value, a worst value, a threshold and a raw value. NVMe SSDs use a different, standardized structure called the SMART/Health Information log. Every tool in this guide is just a different window onto one of those two data sources.
The NVMe health log, field by field
The smartmontools documentation lists the fields an NVMe drive reports: Critical Warning, temperature, Available Spare, Percentage Used, data read and written, power cycles, power-on hours, unsafe shutdowns, media and data integrity errors, and error log entries. These are the fields that matter, and they are defined by the NVMe standard, so they mean the same thing on any brand. If you are weighing drive types before a purchase, our NVMe vs SATA SSD comparison explains why the two interfaces report health differently.
| NVMe field | What it measures | Healthy pattern |
|---|---|---|
| Critical Warning | A bitmask of urgent conditions (low spare, over-temperature, reliability loss, read-only mode) | Zero |
| Temperature | Current composite temperature | Stable and well under the throttle point in your drive’s spec |
| Available Spare | Remaining reserve blocks as a percentage | Close to its starting value |
| Percentage Used | Vendor estimate of endurance consumed (can pass 100) | Low and rising slowly |
| Data Units Read / Written | Lifetime traffic in units of 1,000 x 512 bytes | Matches your usage |
| Power Cycles / Power On Hours | How often and how long the drive has run | Plausible for the drive’s age |
| Unsafe Shutdowns | Power losses without a clean shutdown | Low and not climbing quickly |
| Media and Data Integrity Errors | Unrecovered data integrity errors | Zero |
| Error Information Log Entries | Count of logged error records | Zero, or explained by a known event |
Why vendors disagree on wear
Percentage Used is the vendor’s own estimate of how much rated endurance the drive has consumed, so two brands can report different numbers for the same amount of writing. SATA drives complicate it further. A wear attribute may count down from 100 on one brand and count up from 0 on another, and the raw value can be a plain counter, a percentage or a packed hex number. Solidigm publishes its NVMe SMART attribute reference for its own drives, which shows how a manufacturer documents these fields. Keep the lesson in mind through the steps: compare a drive with its own history, not with a different brand.
Interpretation also depends on workload. A video-editing scratch drive and a drive that only holds a game library will wear at wildly different rates. A number that looks alarming for the library drive might be normal for the scratch drive. This is why Step 13 builds a log. Trends tell you more than any single reading.
Phase 1: Identify Your Drives and Protect Your Data (Steps 1-2)
The first phase takes five minutes. You need to know exactly what is installed, because every later step depends on the right drive name, and you need a backup in place before you run anything that touches a drive that might be struggling.
Step 1: List every drive and its interface
Open Windows Terminal or PowerShell as administrator (right-click Start and choose Terminal (Admin)). Run the command below. It lists each physical disk with its model, media type, bus type and size, which tells you whether you are dealing with NVMe, SATA or USB storage.
Get-PhysicalDisk | Select-Object DeviceId, FriendlyName, MediaType, BusType, HealthStatus, OperationalStatus, @{n='SizeGB';e={[math]::Round($_.Size/1GB)}} | Format-Table -AutoSize
Write down the DeviceId, FriendlyName and BusType for each SSD. A typical result on a two-drive desktop looks like this (illustrative output, your models will differ):
DeviceId FriendlyName MediaType BusType HealthStatus OperationalStatus SizeGB
-------- ------------ --------- ------- ------------ ----------------- ------
0 Samsung SSD 990 PRO SSD NVMe Healthy OK 1863
1 CT1000MX500SSD1 SSD SATA Healthy OK 932
The HealthStatus column here comes from the Windows storage stack. It only flips away from Healthy after the drive reports serious trouble, so a clean reading at this stage proves little. Its job is simply to give you a starting point.
Step 2: Back up before you test
Reading SMART data is safe and does not stress the drive. Self-tests in Step 11 and heavy file checks in Step 12 do add read load, and if a drive is already failing, any extra activity can tip it over. Make a copy of anything irreplaceable first. A simple, dependable option is Robocopy to an external drive:
robocopy "C:\Users\%USERNAME%\Documents" "E:\Backup\Documents" /E /R:1 /W:1 /XJ /LOG:"E:\Backup\documents-backup.log"
Change the source and destination to fit your layout, and repeat for Pictures, Desktop and any project folders. If Robocopy reports read errors on specific files, stop and note them. Files that fail to copy are an early sign of a bad region on the drive, and that evidence will matter when you reach the troubleshooting section. A quick rule for how much to back up: if losing the file would cost you an hour of work or a memory, copy it now.
Phase 2: Quick Checks With Windows 11 and CrystalDiskInfo (Steps 3-5)
These three steps give you a fast read from the operating system and a friendly graphical dashboard. For many people, this is where the SSD health check ends. It is also the best place to find obvious problems such as a red status badge or a temperature that sits uncomfortably high.
Step 3: Read the built-in Windows 11 drive status
Windows can show supported NVMe information in Settings. Open Settings, then System, then Storage, then Advanced storage settings, then Disks and volumes, and select your drive’s Properties. If the health details are missing for a SATA drive or a USB drive, that is normal. Move on to the PowerShell route, which exposes a similar family of counters more widely.
Get-PhysicalDisk | Get-StorageReliabilityCounter | Select-Object DeviceId, Temperature, Wear, PowerOnHours, ReadErrorsTotal, WriteErrorsTotal, ReadErrorsUncorrected, WriteErrorsUncorrected | Format-Table -AutoSize
Microsoft guidance, as reported in mid-October 2026, points to Get-PhysicalDisk and Get-StorageReliabilityCounter for temperature, wear, power-on hours and read/write error counters on a detected NVMe SSD. Illustrative output:
DeviceId Temperature Wear PowerOnHours ReadErrorsTotal WriteErrorsTotal ReadErrorsUncorrected WriteErrorsUncorrected
-------- ----------- ---- ------------ --------------- ---------------- --------------------- ----------------------
0 38 3 3106 0 0 0 0
1 34 24 2810 0 0 0 0
Blank fields are common. Not every drive or driver fills every counter, and some values only appear when the shell runs with administrator rights. Do not read blanks as errors. Read them as missing data, and let the next tools fill the gap.
Step 4: Install CrystalDiskInfo 9.9.3
Download CrystalDiskInfo from the official Crystal Dew World site. Choose the Standard Edition installer if you want a Start menu entry, or the ZIP (portable) package if you would rather run it from a USB stick without installing anything. The tool is open source under the MIT license, and the official download listing offers an installer, a ZIP package and the source code. Version 9.9.3 is the newest release at the time of writing.
Reports from Japanese outlets say 9.9.3 corrected the transfer-mode display for JMicron external controllers, improved SanDisk SSD support and updated the Traditional Chinese language files. Treat that changelog as secondhand, since the official page confirms the version and date but not every detail. The practical lesson is simple: if CrystalDiskInfo misreads an external SanDisk or JMicron-based enclosure, update to 9.9.3 before blaming the drive.
Launch the program. Windows will ask for permission because SMART queries need elevated access. Approve it. Within a second or two you should see a status panel with a coloured health badge, a temperature reading and a table of attributes below it.
Step 5: Read the CrystalDiskInfo dashboard correctly
The top of the window shows a Health Status badge (Good, Caution, Bad or Unknown) and a percentage on some drives. Underneath, the tabs along the top switch between multiple drives. For an NVMe SSD, check these rows in order: Health Status, Temperature, Available Spare, Available Spare Threshold, Percentage Used, Host Reads, Host Writes, Power On Hours, Unsafe Shutdowns and Media and Data Integrity Errors.
Three habits make the dashboard more useful. First, change the raw-value display to decimal under the Function menu’s Advanced Feature options (some counters default to hexadecimal, and a temperature of 0x26 is easy to misread). Second, compare Available Spare against its Threshold. The gap between the two is your remaining safety margin. Third, take a screenshot of the full window and save it with the date in the file name. That screenshot is your baseline for every later comparison.
One caution about the badge itself. CrystalDiskInfo summarizes many attributes into a single colour, and the rules behind that colour are conservative. A Good badge with a rising error counter deserves attention, and a Caution badge with a stable, explained counter may be tolerable. Always read the rows, not just the colour.
Phase 3: Go Deeper With smartctl and Vendor Tools (Steps 6-10)
Graphical tools are convenient, but the deepest way to check SSD health is smartctl, which gives you the raw log without any interpretation layer. It also supports ATA, SCSI, USB bridges and NVMe, works on Windows, Linux and macOS, and can output JSON for scripts. If CrystalDiskInfo and smartctl disagree, trust the log that smartctl prints and investigate why the other tool summarized it differently.
Step 6: Install smartmontools 7.5 with WinGet
smartmontools 7.5 is the newest stable release, published April 30, 2025, and the project moved its source from SourceForge SVN to GitHub on June 1, 2025. The software is free under the GPL. A Wingetly listing shows the package as installable through WinGet, and reporting from October 19 to 21, 2026 notes that the install needs machine scope and administrator approval through UAC. From an elevated terminal, run:
winget install --id smartmontools.smartmontools --scope machine
smartctl --version
The second command should print a banner that starts with smartctl 7.5. If the command is not found, close the terminal and open a new one so the updated PATH loads. Do not mistake the drive database version for the program version. smartmontools ships a separate database (drivedb.h) that identifies drive models, and the project updated it as recently as October 2026 with fixes such as a Patriot P210 identification. A newer database does not mean a newer smartctl.
Step 7: Pull the full NVMe health log
First find the device names smartctl uses, then query the NVMe drive. On Windows, NVMe drives appear as /dev/nvme0, /dev/nvme1 and so on.
smartctl --scan
smartctl -a /dev/nvme0
smartmontools has supported NVMe since version 6.5, although its wiki long described that support as experimental, and it is far more mature in 7.5. A trimmed, illustrative result looks like this:
=== START OF SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED
SMART/Health Information (NVMe Log 0x02)
Critical Warning: 0x00
Temperature: 38 Celsius
Available Spare: 100%
Available Spare Threshold: 10%
Percentage Used: 3%
Data Units Read: 18,442,310 [9.44 TB]
Data Units Written: 12,980,552 [6.65 TB]
Host Read Commands: 210,994,127
Host Write Commands: 160,432,009
Controller Busy Time: 412
Power Cycles: 287
Power On Hours: 3,106
Unsafe Shutdowns: 14
Media and Data Integrity Errors: 0
Error Information Log Entries: 0
Warning Comp. Temperature Time: 0
Critical Comp. Temperature Time: 0
Read it from the top. PASSED is the drive’s own overall verdict and it is a low bar. A Critical Warning of 0x00 means no urgent flags are set. Available Spare of 100% against a threshold of 10% means the reserve is untouched. Percentage Used of 3% means the drive has consumed a small slice of its rated endurance. The Data Units fields count in blocks of 1,000 x 512 bytes, and smartctl converts them to terabytes in brackets. Media and Data Integrity Errors and Error Information Log Entries should both stay at zero. Save the full text with smartctl -a /dev/nvme0 > nvme0-baseline.txt so you can compare it next month.
Step 8: Read SATA SSD attributes
For SATA drives, the attribute table replaces the NVMe log. Use the -A flag for just the table, or -x for the extended output with error and self-test logs.
smartctl -A /dev/sda
smartctl -x /dev/sda > sata-baseline.txt
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
5 Reallocated_Sector_Ct 0x0033 100 100 010 Pre-fail Always - 0
9 Power_On_Hours 0x0032 097 097 000 Old_age Always - 2810
12 Power_Cycle_Count 0x0032 099 099 000 Old_age Always - 311
177 Wear_Leveling_Count 0x0013 098 098 000 Pre-fail Always - 24
187 Reported_Uncorrect 0x0032 100 100 000 Old_age Always - 0
194 Temperature_Celsius 0x0022 066 048 000 Old_age Always - 34
197 Current_Pending_Sector 0x0032 100 100 000 Old_age Always - 0
199 UDMA_CRC_Error_Count 0x003e 100 100 000 Old_age Always - 0
Attribute names and numbers vary by manufacturer, so the table above is only a sample. A few families matter on almost every SATA SSD. Reallocated sectors and uncorrectable-error counters should stay at zero. Pending sectors should also be zero, and any rise deserves a backup. UDMA CRC errors usually point at a bad cable or port and not at the flash, so swap the cable before you condemn the drive. The wear attribute (here Wear_Leveling_Count) has a normalized VALUE that counts down toward its THRESH. A VALUE near the threshold means the drive is close to its rated endurance.
Step 9: Cross-check with your drive maker’s utility
Most manufacturers ship a management tool that reads the same firmware data and adds firmware updates. For Samsung drives that tool is Samsung Magician, currently version 9.0 on Samsung’s official pages. Samsung lists support for Windows 10 or later (Windows 11 included), macOS and an Android companion app for portable SSDs, and the company states that Linux is not supported. Magician offers drive-health monitoring, temperature, performance, optimization and firmware functions for Samsung SSDs.
Install it from Samsung’s own site, open the Drive Management view and compare three values with your smartctl output: the health or remaining-life figure, the temperature and the total bytes written. They should land within a rounding error of each other. If they do not, note the difference and keep the vendor tool’s number as the one that drives warranty conversations, since that is the figure the manufacturer will check. Other makers publish their own utilities on each model’s support page, and the same cross-check applies to them.
Firmware matters here. Vendor tools are also the safest way to apply firmware updates, which fix real reliability bugs on some models. Read the release notes first, back up, and never interrupt the update.
Step 10: Check SSDs inside USB enclosures
External and enclosure-mounted drives hide SMART data behind a USB bridge chip. Some bridges pass the commands through. Others block them, and the tool then shows Unknown or nothing at all. smartctl lets you pick the passthrough type with the -d flag. Try the common ones in order:
smartctl -a -d sat /dev/sdb
smartctl -a -d sntjmicron /dev/sdb
smartctl -a -d sntrealtek /dev/sdb
smartctl -a -d nvme /dev/sdb
The first suits most SATA enclosures. The next two target NVMe enclosures built on JMicron and Realtek bridge chips. If none of them work, the bridge simply does not expose the data, and you can test the drive by moving it into an internal slot or a different enclosure. Our comparison of DIY NVMe enclosures and portable SSDs explains how external builds differ from ready-made portable drives, which is worth reading if you build external drives often.
Phase 4: Self-Tests, Integrity Checks and Automation (Steps 11-13)
The first ten steps read what the drive already knows. The last three ask the drive to test itself, check that your data is intact and set up a routine so you never have to repeat the manual work.
Step 11: Run a drive self-test
SMART self-tests run inside the drive’s firmware. A short test takes a couple of minutes and checks the electronics and a sample of the media. An extended test scans far more and can take much longer on a big drive. Start the short test, wait for it to finish and read the self-test log:
smartctl -t short /dev/sda
smartctl -l selftest /dev/sda
smartctl -t long /dev/sda
On NVMe drives, self-test support depends on the model and firmware, and smartctl will tell you if the command is unsupported. When it works, a healthy log line reads Completed without error. Keep the PC awake and the drive idle during the test, because activity can pause or abort it. Avoid the extended test on a drive that already shows pending sectors or media errors until your backup is verified.
Step 12: Verify the file system and the Windows event log
A drive can pass every SMART test and still corrupt files if the connection is flaky. Windows records those problems in the System event log, and the file system keeps its own consistency checks. Run an online scan, then search the log for disk and NTFS errors from the last 30 days:
chkdsk C: /scan
Get-WinEvent -FilterHashtable @{LogName='System'; ProviderName='disk','Ntfs','stornvme'; StartTime=(Get-Date).AddDays(-30)} -ErrorAction SilentlyContinue | Select-Object TimeCreated, Id, ProviderName, LevelDisplayName, Message | Format-List
An empty result is the goal. Repeated entries from the disk or stornvme provider (for example event IDs such as 7, 11, 51 or 153) suggest timeouts, bad blocks or resets, and they match the intermittent failures that a health badge cannot catch. If you see them, reseat the drive, try a different M.2 slot or SATA cable and update the motherboard BIOS and chipset drivers. If the entries keep coming after that, treat the drive as suspect.
Step 13: Automate the check with a scheduled logger
One manual check is useful. A log that builds itself is better. The full script is in the project section below, and here is the short version of the job: a PowerShell script collects health counters for every disk, appends them to a CSV, writes a Windows Event Log warning if something degrades, and a scheduled task runs it every Sunday morning. The next section builds and registers it.
How to Read Your Results: Normal, Watch and Act
After the 13 steps you hold a stack of numbers, and the practical question is what to do about them. The table below sorts the most important fields into three response levels. The levels are an editorial rule of thumb for home and small-office use and not a manufacturer specification, so check your drive’s warranty terms for the official limits.
| Signal | Normal | Watch | Act now |
|---|---|---|---|
| Critical Warning | 0x00 | Not applicable | Any non-zero flag, back up immediately |
| Media and Data Integrity Errors | 0 | Not applicable | Any increase between checks |
| Available Spare vs Threshold | Near starting value | Falling steadily | At or near the threshold |
| Percentage Used | Low, slow growth | Growth faster than your expected workload | Approaching 100 |
| Unsafe Shutdowns | Few | Climbing after power cuts or crashes | Climbing with no clear cause (check PSU and cables) |
| Temperature | Stable idle and load pattern | Idle readings creeping up over months | Sustained readings at the drive’s throttle limit |
| Reallocated or pending sectors (SATA) | 0 | Small, stable count | Rising count |
| CRC errors (SATA) | 0 | Small, stable count | Rising count, replace the cable first |
| Event log disk errors | None | Single isolated event | Repeated events within days |
A few principles keep the table honest. A single odd reading means little, and a trend means a lot, so always compare with your baseline. Counts that only ever go up (errors, unsafe shutdowns, wear) matter most when they accelerate. Counters that should be flat (errors, spare consumption) matter the moment they move. And no table replaces the context of your own machine. If you recently had a power cut, a few extra unsafe shutdowns are explained. If nothing happened and the counter jumped, investigate the power supply, the cables and the motherboard slot.
Percentage Used deserves its own note because it frightens people. A drive at 100 has consumed its rated endurance, not died. Many drives keep working well beyond that number, and the NVMe specification allows the value to exceed 100. The warranty, however, is usually tied to either a time limit or a terabytes-written limit, so a drive near 100 is a drive to replace on your own schedule, with a fresh backup, before any real symptom shows up.
Complete Working Project: A Weekly SSD Health Logger
This project turns the manual routine into an automatic one. It has two parts. The Windows script uses only built-in PowerShell cmdlets, so it needs no installs. The Linux script uses smartctl and jq for people who run Linux desktops, home servers or a NAS. Both write history you can open in a spreadsheet and both flag the changes that matter.
Windows: Get-SsdHealth.ps1
Save the script as C:\Tools\Get-SsdHealth.ps1. It records one CSV row per disk per run, compares error counters with the previous row for the same serial number and writes a warning to the Application event log when a counter rises, a drive reports anything other than Healthy, or wear and temperature cross your own limits. The two limits are parameters, so set them to match your drive’s spec sheet and your tolerance.
param(
[string]$LogPath = "$env:ProgramData\SsdHealth\ssd-health.csv",
[int]$TempWarnC = 70,
[int]$WearWarnPct = 80
)
$ErrorActionPreference = 'Stop'
$dir = Split-Path $LogPath
if (-not (Test-Path $dir)) { New-Item -ItemType Directory -Path $dir | Out-Null }
if (-not [System.Diagnostics.EventLog]::SourceExists('SsdHealth')) {
New-EventLog -LogName Application -Source 'SsdHealth'
}
$previous = @{}
if (Test-Path $LogPath) {
Import-Csv $LogPath | ForEach-Object { $previous[$_.Serial] = $_ }
}
$rows = foreach ($disk in Get-PhysicalDisk) {
$c = $disk | Get-StorageReliabilityCounter
[pscustomobject]@{
Timestamp = (Get-Date).ToString('s')
Computer = $env:COMPUTERNAME
Model = $disk.FriendlyName
Serial = "$($disk.SerialNumber)".Trim()
BusType = $disk.BusType
Health = $disk.HealthStatus
Operational = ($disk.OperationalStatus -join '|')
TempC = $c.Temperature
WearPct = $c.Wear
PowerOnHours = $c.PowerOnHours
ReadErrors = $c.ReadErrorsTotal
WriteErrors = $c.WriteErrorsTotal
ReadUncorr = $c.ReadErrorsUncorrected
WriteUncorr = $c.WriteErrorsUncorrected
}
}
$alerts = @()
foreach ($r in $rows) {
if ($r.Health -ne 'Healthy') { $alerts += "$($r.Model): health is $($r.Health)" }
if ($r.TempC -and [int]$r.TempC -ge $TempWarnC) { $alerts += "$($r.Model): temperature $($r.TempC) C" }
if ($r.WearPct -and [int]$r.WearPct -ge $WearWarnPct) { $alerts += "$($r.Model): wear $($r.WearPct) percent" }
$p = $previous[$r.Serial]
if ($p) {
foreach ($f in 'ReadErrors','WriteErrors','ReadUncorr','WriteUncorr') {
if ($r.$f -and $p.$f -and ([int64]$r.$f -gt [int64]$p.$f)) {
$alerts += "$($r.Model): $f rose from $($p.$f) to $($r.$f)"
}
}
}
}
$rows | Export-Csv -Path $LogPath -Append -NoTypeInformation
if ($alerts.Count -gt 0) {
Write-EventLog -LogName Application -Source 'SsdHealth' -EventId 4101 -EntryType Warning -Message ($alerts -join "`n")
Write-Host "WARN: $($alerts.Count) alert(s)"
$alerts | ForEach-Object { Write-Host " - $_" }
} else {
Write-EventLog -LogName Application -Source 'SsdHealth' -EventId 4100 -EntryType Information -Message "SSD health check OK for $($rows.Count) disk(s)."
Write-Host "OK: $($rows.Count) disk(s) checked"
}
Test it once by hand from an elevated terminal. You should see an OK line and a new CSV file:
powershell -NoProfile -ExecutionPolicy Bypass -File C:\Tools\Get-SsdHealth.ps1
OK: 2 disk(s) checked
Now register the weekly task. Running it as SYSTEM gives the script the rights it needs to read the counters and create the event source:
$action = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument '-NoProfile -ExecutionPolicy Bypass -File C:\Tools\Get-SsdHealth.ps1'
$trigger = New-ScheduledTaskTrigger -Weekly -DaysOfWeek Sunday -At 9am
Register-ScheduledTask -TaskName 'SSD Health Log' -Action $action -Trigger $trigger -User 'SYSTEM' -RunLevel Highest
Open Task Scheduler and run the task once to confirm it works. Then open Event Viewer, go to Windows Logs, Application and filter by the SsdHealth source to see what the script logged.
Linux: ssd-health.sh and smartd
On Linux, smartctl can emit JSON, which jq turns into a clean log line per drive. The script below writes one JSON line per device and returns a non-zero exit code when it spots a Critical Warning, media errors or a failed SMART verdict, so cron or a systemd timer can trigger mail. Install the tools with your package manager, for example sudo apt install smartmontools jq.
#!/usr/bin/env bash
set -uo pipefail
LOG="${SSD_LOG:-/var/log/ssd-health.jsonl}"
STATUS=0
for dev in $(smartctl --scan | awk '{print $1}'); do
out=$(smartctl -a --json=c "$dev" 2>/dev/null || true)
[ -z "$out" ] && continue
echo "$out" | jq -c --arg dev "$dev" --arg ts "$(date -Is)" '{
ts: $ts,
dev: $dev,
model: .model_name,
serial: .serial_number,
passed: .smart_status.passed,
temp_c: .temperature.current,
power_on_hours: .power_on_time.hours,
nvme: (.nvme_smart_health_information_log // null)
}' >> "$LOG"
bad=$(echo "$out" | jq -r '
[ (.smart_status.passed == false),
((.nvme_smart_health_information_log.critical_warning // 0) != 0),
((.nvme_smart_health_information_log.media_errors // 0) != 0)
] | any')
if [ "$bad" = "true" ]; then
echo "ALERT: $dev reports a health problem" >&2
STATUS=1
fi
done
exit $STATUS
Make it executable and schedule it weekly with cron:
sudo install -m 0755 ssd-health.sh /usr/local/bin/ssd-health.sh
echo '0 9 * * 0 root /usr/local/bin/ssd-health.sh || mail -s "SSD health alert" [email protected] < /dev/null' | sudo tee /etc/cron.d/ssd-health
For continuous monitoring, smartmontools also ships smartd, a daemon that watches drives in the background and mails you when attributes change. A line per drive in /etc/smartd.conf is enough to start:
/dev/nvme0 -a -m [email protected]
/dev/sda -a -m [email protected] -s (S/../.././02|L/../../7/03)
The second line also schedules a short self-test every day at 2 a.m. and a long test every Sunday at 3 a.m. Restart the service with sudo systemctl restart smartd and check journalctl -u smartd to confirm it registered both drives.
Common Pitfalls When You Check SSD Health
Most bad conclusions about how to check SSD health come from the same handful of mistakes. Avoid these six and your readings will be reliable.
- Trusting the badge alone. A Good, Healthy or PASSED verdict only means no threshold has tripped yet. As the NVM Express guidance cited earlier stresses, intermittent faults can come before any persistent warning. Read the underlying fields and the event log.
- Comparing different brands directly. Percentage Used and wear attributes are vendor estimates with different scaling, so a 10 on one brand and a 10 on another are not the same amount of wear. Compare each drive with its own baseline.
- Misreading raw values. Some tools show raw values in hexadecimal by default, and some SATA attributes pack several numbers into one field. Switch to decimal and check the vendor documentation before panicking over a large number.
- Assuming the enclosure passes SMART through. A blank or Unknown result on a USB drive usually means the bridge chip blocked the request and not that the drive is fine or dead. Test with another passthrough type or an internal connection.
- Running heavy tests without a backup. Extended self-tests, full-surface scans and file-system repairs all add load. Back up first, especially if any warning has already appeared.
- Ignoring RAID and controller layers. Intel RST, VMD and hardware RAID controllers can hide the real NVMe device from Windows tools. The smartmontools project has been working in October 2026 on reading NVMe devices behind Intel RST on Windows, which shows the problem is real. Switch the controller mode only if you understand the consequences, and never without a backup.
A seventh trap deserves a mention: downloading monitoring tools from random mirror sites. Several third-party pages host stale or repackaged copies, and a monitoring utility runs with high privileges. Stick to the developer’s own site, the vendor’s support page or a package manager such as WinGet.
Troubleshooting: 11 Problems and Fixes
If a step did not behave, find the symptom in this list. Most of these appear in the first half hour of using these tools.
| # | Symptom | Likely cause | Fix |
|---|---|---|---|
| 1 | CrystalDiskInfo shows no drives or Unknown | Started without admin rights, or a controller hides the drive | Run as administrator. Check controller mode in BIOS. Update to 9.9.3. |
| 2 | smartctl says Permission denied | Non-elevated shell | Reopen Terminal as administrator (Windows) or use sudo (Linux). |
| 3 | smartctl: Unable to detect device type | USB bridge or RAID layer | Add -d sat, -d sntjmicron, -d sntrealtek or -d nvme as shown in Step 10. |
| 4 | Get-StorageReliabilityCounter returns blanks | Driver or drive does not fill every counter | Run elevated, then use smartctl or the vendor tool for the missing fields. |
| 5 | winget install smartmontools fails | No admin approval or machine scope missing | Use an elevated terminal with –scope machine and accept the UAC prompt. |
| 6 | Samsung Magician does not list your drive | Non-Samsung drive, outdated app or an unsupported OS | Install the current Magician 9.0. Use CrystalDiskInfo or smartctl for other brands. |
| 7 | Windows says Healthy but the drive drops out or the PC freezes | Intermittent connector, power, firmware or slot problem | Reseat the drive, try another M.2 slot or cable, update BIOS and firmware, and read the event log. |
| 8 | Temperature reads 0 or jumps wildly | Sensor not exposed through a bridge, or raw hex display | Switch the raw view to decimal and compare with smartctl on a direct connection. |
| 9 | Percentage Used shows more than 100 | Drive passed its rated endurance (allowed by the NVMe spec) | Back up now and plan a replacement. Check the warranty terms. |
| 10 | Self-test aborts or never finishes | System slept, drive was busy, or the firmware does not support the test | Disable sleep, close other programs and retry. On NVMe, confirm test support in the smartctl output. |
| 11 | UDMA CRC errors keep rising on a SATA SSD | Bad cable or port | Replace the cable, move to a different port and re-baseline the counter. |
If you work through the list and the drive still behaves badly, collect evidence before you contact the manufacturer. Save the full smartctl -x output, a CrystalDiskInfo screenshot, the Robocopy log from Step 2 and any disk or stornvme events from Step 12. Support teams move faster with data, and a complete bundle often speeds up a warranty claim.
Advanced Tips for Power Users
Once the basics are in place, a few extra habits make your monitoring sharper. They matter most on workstations, servers and drives that carry valuable data.
- Query the NVMe log with a second tool. On Linux,
nvme smart-log /dev/nvme0from nvme-cli reads the same log 02h that smartctl reads. If both agree, a tool bug is unlikely. - Graph the CSV. Open the CSV from the project in Excel or Google Sheets and chart WearPct and PowerOnHours over time. The slope tells you when a drive will reach your replacement point far better than any single reading.
- Keep the drive database current. smartctl identifies drives through drivedb.h. On Linux,
sudo update-smart-drivedbrefreshes it, which fixes attribute names for newer models. - Watch temperature under load, not just idle. Run a large file copy and read the temperature at the end. A drive that climbs steadily under sustained writes may need a heatsink or better case airflow.
- Use the JSON output for fleets.
smartctl -a --json=cfeeds Prometheus exporters, Zabbix and custom dashboards if you manage more than a couple of machines. - Separate the signals. Wear tells you about the flash, unsafe shutdowns tell you about power, and CRC errors tell you about cabling. Treating them separately helps you fix the right component.
- Keep monitoring beyond the OS. Enterprise teams increasingly lean on NVMe Management Interface telemetry. NVM Express described this work in October 2026 for AI data centers, but it is a management layer on top of the ordinary health log and does not replace it for a home PC.
For more hands-on guides covering storage, GPUs and PC building, browse the hardware section. If a drive does fail the health check, the repair path is usually a clone to a new drive, a fresh install and a restore from your backup, in that order.
One last tip concerns replacements. When a drive passes its warranty window or reaches your chosen wear limit, do not wait for a failure. Order the new drive, clone or reinstall at a convenient time and keep the old drive for non-critical storage only if it still reads clean. A drive that has moved from the Watch column to the Act-now column should not hold your only copy of anything.
The Takeaway
Knowing how to check SSD health comes down to a short, repeatable routine. Read the Windows status, open CrystalDiskInfo 9.9.3, pull the full log with smartctl 7.5, cross-check with your drive maker’s tool and record the numbers. Add a self-test and an event-log search, then let a scheduled script keep the history. The numbers cannot promise a drive will survive next week, but they can show you slow decay early and give you time to act.
Do the first pass today and put the screenshot and the smartctl text file in a folder named with the date. Run the logger weekly, and review the CSV once a month. Combined with a tested backup, that routine covers the failures you can see coming, and it limits the damage from the ones you cannot.
Frequently Asked Questions
How do I check SSD health in Windows 11 without installing anything?
Open an administrator PowerShell window and run Get-PhysicalDisk | Get-StorageReliabilityCounter to see temperature, wear, power-on hours and error counters. You can also open Settings, System, Storage, Advanced storage settings, Disks and volumes and check the drive’s Properties when your drive and driver support it. These views are limited, so add CrystalDiskInfo or smartctl for a fuller picture.
Is CrystalDiskInfo safe and free?
The standard desktop version of CrystalDiskInfo is free and the project is open source under the MIT license. The newest release is 9.9.3, from October 11, 2026. Download it only from the developer’s own site, Crystal Dew World, and avoid third-party mirrors. A paid Microsoft Store edition exists in some regions, but it only supports development and adds nothing you need.
What is a good Percentage Used value for an NVMe SSD?
Lower is better, and what matters is the trend. Percentage Used is the vendor’s estimate of consumed endurance, and the value can pass 100 without the drive failing instantly. Compare each reading with the previous one for the same drive, and plan a replacement and a fresh backup well before it approaches 100.
Can an SSD fail without any SMART warning?
Yes. NVM Express guidance from October 2026 says a Windows healthy result does not prove an SSD is fault-free, because controller, power, connector, firmware or motherboard problems can be intermittent. SMART data catches wear and many error trends, but sudden failures can still happen. A backup is the only real protection.
How often should I run an SSD health check?
Run a full manual check when you install a drive to set a baseline, then check monthly for a personal PC. Use the scheduled logger from this guide to collect a weekly reading automatically. Check immediately after crashes, power cuts, blue screens or any disk error in the event log.
Does smartctl work with NVMe drives on Windows?
Yes. smartmontools has supported NVMe since version 6.5, and the current stable release is 7.5 from April 30, 2025. On Windows, NVMe drives appear as /dev/nvme0 and similar names. Install it with WinGet from an elevated terminal, and use smartctl --scan to list the devices.
Do I need Samsung Magician if I use CrystalDiskInfo?
No, but it is useful on Samsung drives. Samsung Magician 9.0 handles firmware updates and presents the manufacturer’s own health and temperature view, which is helpful in warranty conversations. CrystalDiskInfo and smartctl work across brands, so use them as the common baseline and the vendor tool as the second opinion.
My SSD health is 100% but Windows still freezes. What now?
Check the Windows System event log for disk, Ntfs and stornvme entries, then reseat the drive, try another M.2 slot or SATA cable, and update the BIOS, chipset drivers and drive firmware. Intermittent connection and power problems often leave SMART data clean. If the freezes continue after those fixes, test the drive in another PC to separate the drive from the motherboard.





