Storage engineering tool · Log ID 02h
NVMe SMART Decoder
See how worn your SSD is, how hot it runs and whether it has logged any errors. The page opens on a made-up example drive that is already decoded, so you can read every number first. Then open the health file from your own NVMe SSD, including M.2 drives, and the same boxes show your numbers.
Runs entirely in your browser. The decoder sends and stores nothing, and your file never leaves this tab. Google Analytics counts every page on this site and sees only the page path.
| Byte | Field | Size |
|---|---|---|
| 00 | Critical Warning | 1 B |
| 01–02 | Composite Temperature (K) | 2 B |
| 03 | Available Spare | 1 B |
| 04 | Available Spare Threshold | 1 B |
| 05 | Percentage Used | 1 B |
| 32–47 | Data Units Read | 16 B |
| 48–63 | Data Units Written | 16 B |
| 128–143 | Power On Hours | 16 B |
| 144–159 | Unsafe Shutdowns | 16 B |
| 160–175 | Media and Data Integrity Errors | 16 B |
| 200–215 | Temperature Sensors 1 to 8 (K) | 8 x 2 B |
Decoded health log
The box holds the made-up example drive, decoded below. Load your own file, drag it onto the box or paste its contents to replace it.
You can drag a file onto this box.
Example data: a made-up drive with invented numbers, not real hardware.
Nothing is decoded. Paste a health file, load one, or reload the example.
Fields
| Field | Value | Converted | What it means |
|---|
Critical Warning bit map
Temperature
Endurance
The boxes start with the example drive's ratings, which are made up like the rest. Enter your drive's datasheet ratings to compare host writes with the rated TBW and project the remaining life.
Compare two snapshots
The file above is A. Paste a second health file as B, in any format this page reads, to see the change in every counter, the write rate in between and any new errors.
Identify Controller
Every NVMe drive also answers an Identify Controller command with a 4,096-byte description of itself, from model and firmware to temperature limits, power states and supported commands. This section decodes that raw structure for people who already have the dump, so it is Linux-first and more technical.
sudo nvme id-ctrl /dev/nvme0 -b | xxdsudo nvme id-ctrl /dev/nvme0 -b > id-ctrl.binThe first command prints a hex dump to paste below, and the second saves a binary file for Load a file. The -b flag asks nvme-cli for the raw structure, and getting it on Windows is not covered here.
The dump contains your drive's serial number and, on some drives, a vendor GUID. It is decoded inside this page and goes nowhere else.
You can drag a file onto this box.
Example data: a made-up controller with invented values, not real hardware.
Nothing is decoded. Paste a dump, load a file, or reload the example.
Fields
| Field | Value | Decoded | What it means |
|---|
Power states
| Power state | Max power | State | Entry latency | Exit latency | Idle power | Active power | Ranks |
|---|
Ranks are read throughput, read latency, write throughput and write latency, each placing this power state among the controller's others. A non-operational state does not process I/O commands, and workload 1 is an idle period with a burst of random writes while workload 2 is heavy sequential writes.
Get your drive's health file
Every NVMe SSD keeps a small health report inside itself, and a free tool called smartctl can save it as a file. It takes about two minutes and changes nothing on your drive.
Windows
Install smartctl (skip this if you already have it)
Press the Windows key, type PowerShell and press Enter. Paste this line into the blue window (right-click pastes) and press Enter:
winget install smartmontoolsSay yes if it asks. When it finishes, close the window.
Save the health files
Open PowerShell again, paste this whole block and press Enter. It saves one file for each NVMe drive in your PC onto your Desktop, named like
sda.jsonandsdb.json.$smartctl = "C:\Program Files\smartmontools\bin\smartctl.exe" & $smartctl --scan | Where-Object { $_ -match "-d nvme" } | ForEach-Object { $drive = ($_ -split " ")[0] $file = "$env:USERPROFILE\Desktop\" + $drive.Split("/")[-1] + ".json" & $smartctl -x -j -d nvme $drive | Out-File -Encoding utf8 $file "Saved $file" }You will see a "Saved" line for each drive.
Open one at the top of this page
Use Load a file in section 01 and pick a file from your Desktop. If you have several drives, open them one at a time.
Something went wrong? If it says "access denied", right-click PowerShell, choose Run as administrator and paste the block again. If it cannot find smartctl.exe, do the first step again.
Linux
Install smartctl (skip this if you already have it)
On Debian or Ubuntu run this. Other Linux systems name the package smartmontools too.
sudo apt install smartmontoolsSave the health file
Run this in a terminal.
/dev/nvme0is your first NVMe drive, andls /dev/nvme?lists them all.sudo smartctl -x -j /dev/nvme0 > nvme0.jsonOpen it at the top of this page
Use Load a file in section 01 and pick
nvme0.json.
Advanced: nvme-cli, plain text or a raw hex dump
The decoder also reads the output of nvme smart-log and a raw 512-byte log page, both Linux only. Plain-text output of smartctl -a or nvme smart-log can be pasted as it is.
sudo nvme smart-log /dev/nvme0 -o jsonsudo nvme get-log /dev/nvme0 --log-id=2 --log-len=512 -b | xxdKeep the file private. Besides the health numbers, it holds your drive's model and serial number, your operating system build, the local time, and the drive's PCI vendor and controller ID. This page never uploads it, but do not post the file publicly if the serial number matters to you. SATA SSDs and hard drives do not have this report.
What this does not tell you
The health log says nothing about TRIM, and the Identify Controller decoder shows only whether the drive accepts the Dataset Management command that carries it. To check that your system sends it, run TRIM Check (Is TRIM on?).
- Counters are the firmware's word.Every value is reported by the drive itself. Definitions, rounding and update timing differ between vendors, and nothing here is independently verified.
- Percentage Used is an estimate.It compares wear with the vendor's own model. It can pass 100 and the drive may keep working, or fail well before it reads 100. It does not predict a date.
- Host writes are not flash writes.Data Units Written counts what the host sent. Write amplification, which depends on workload and firmware, means the NAND absorbed more, and the log does not say how much.
- A clean log is not a health check.Zero media errors says nothing about data retention, firmware bugs, controller faults or power problems. It only says the drive has not counted an error.
- Retention is invisible.Whether data written today will read back in a year depends on wear, temperature and time unpowered. None of that is in this log.
- The status labels are this tool's rules of thumb.OK, Watch and Attention use conservative cut-offs (for example 70 °C and 80 °C, or spare within 10 points of its threshold). They are not vendor specifications. The drive's own temperature limits are in its Identify Controller data, which the decoder above can read.
- Identify Controller is what the firmware claims.The version, the feature bits and the capacity are the drive's own statements. A bit that says a command is supported does not show how well it works. Only common fields are decoded, and vendor names come from a short list of PCI IDs.
- One snapshot has no history.These are lifetime totals. To see a rate or a change, save two health files from the same drive at different times and paste them into the compare panel.