SMART Stats for Your SSD and HDD on Linux, macOS and Windows

These stats let you see the health of your drives along with useful stats like temperatures and how long it's been powered on.
Prefer video? Here it is on YouTube.
Knowing the health of your drive, such as how much wear and tear has happened on your SSD is very useful information. It can help plan how long a drive will last as long as it doesn’t die from an unexpected hardware failure.
Useful stats to know are:
- Percent lifetime remaining
- How many hours it’s been powered on over its life
- How many times it’s been power cycled (turned on and off)
- How many bytes were written
- Error counts
- Temperature readings (current, min, max, etc.)
- Serial number, firmware and other hardware related versions
# CrystalDiskInfo on Windows
Let’s start with the quick one.
I stopped using Windows in 2025 but when I used it, I was a fan of CrystalDiskInfo which you can download for free from https://sourceforge.net/projects/crystaldiskinfo/. That link includes screenshots.
There’s not a whole lot to go over. Once you install it, you can run it and it will give you all sorts of stats about your drives.
I’ve explained what some of the stats are below, so even if you’re using
Windows with CrystalDiskInfo you can scroll down below and find explanations
about some of the SMART stats. You can press Ctrl + f to search for “the
table below” in your browser and read down from there.
With that said, Smartmontools also works on Windows which is what I use on both Linux and macOS. Feel free to use this if you prefer command line tools!
# Smartmontools on Linux / macOS
Smartmontools is available on most Linux distros and macOS. Technically it also runs on Windows too if you’re interested!
For example, here’s a few popular copy / paste’able commands to install it:
If you’re using DotFriedRice, it’s already set up for you!
sudo pacman -Syu smartmontools
sudo apt-get install smartmontools
brew install smartmontools
You can verify it’s installed by running: smartctl --version
Identify Your Disks
At the end of the day, we want to know the device path such as /dev/sda on
Linux or /dev/disk0 on macOS. These paths may be different on your machine.
On Linux you can run:
lsblk --paths --output NAME,SIZE,VENDOR,MODEL
# Here's the output on my machine running Arch Linux with 3 physical drives:
NAME SIZE VENDOR MODEL
/dev/sda 238.5G ATA Crucial_CT256MX100SSD1
├─/dev/sda1 1G
└─/dev/sda2 237.5G
/dev/sdb 931.5G ATA WDC WD10EZEX-22BN5A0
└─/dev/sdb1 931.5G
/dev/sdc 931.5G WD WDC WD10JMVW-11AJGS4
└─/dev/sdc1 931.5G
/dev/zram0 4G
On macOS you can run diskutil list which will list back your disks. I
don’t have a way to show this but I’m sure you’ll find it. On my company issued
M4 MBP it has /dev/disk0.
Enable SMART stats
For all smartctl commands below, I’m going to be using sudo since that’s
necessary on Linux. If you’re on macOS you can omit sudo.
Check if it’s enabled:
Check to see if SMART support is enabled for your drive(s). You’ll want to check the last line of output. If it’s not enabled, don’t sweat it, it’s easy to enable.
Replace /dev/sda with your path if it’s different. I’ve included the outputs
for both my internal SSD and HDD. I omit /dev/sdc which is an external HDD,
it has it enabled but it’s not important to show everything here. I just wanted
to demonstrate that SMART stats can be shown for both SSDs and HDDs.
sudo smartctl --info /dev/sda
=== START OF INFORMATION SECTION ===
Model Family: Crucial/Micron Client SSDs
Device Model: Crucial_CT256MX100SSD1
Serial Number: 14370D313991
LU WWN Device Id: 5 00a075 10d313991
Firmware Version: MU01
User Capacity: 256,060,514,304 bytes [256 GB]
Sector Sizes: 512 bytes logical, 4096 bytes physical
Rotation Rate: Solid State Device
Form Factor: 2.5 inches
TRIM Command: Available, deterministic, zeroed
Device is: In smartctl database 7.5/5706
ATA Version is: ACS-2, ATA8-ACS T13/1699-D revision 6
SATA Version is: SATA 3.1, 6.0 Gb/s (current: 6.0 Gb/s)
Local Time is: Fri Jul 17 09:45:09 2026 EDT
SMART support is: Available - device has SMART capability.
SMART support is: Enabled
sudo smartctl --info /dev/sdb
=== START OF INFORMATION SECTION ===
Model Family: Western Digital Blue (CMR)
Device Model: WDC WD10EZEX-22BN5A0
Serial Number: WD-WCC3F1JAPXD9
LU WWN Device Id: 5 0014ee 2b61924e9
Firmware Version: 01.01A01
User Capacity: 1,000,204,886,016 bytes [1.00 TB]
Sector Sizes: 512 bytes logical, 4096 bytes physical
Rotation Rate: 7200 rpm
Device is: In smartctl database 7.5/5706
ATA Version is: ACS-2, ACS-3 T13/2161-D revision 3b
SATA Version is: SATA 3.1, 6.0 Gb/s (current: 6.0 Gb/s)
Local Time is: Fri Jul 17 09:45:11 2026 EDT
SMART support is: Available - device has SMART capability.
SMART support is: Enabled
Enable SMART stats:
If it’s not enabled you can run sudo smartctl --smart on /dev/sda, it will
persist across reboots since it sends the instruction straight to your drive’s
firmware. Most drives will persist that, personally I’ve never encountered a
drive that didn’t persist this.
Basic Health Check
If you want a basic self assessment test you can run this:
sudo smartctl --health /dev/sda
=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED
Keep in mind there could still be issues with your drive while passing. Still, a quick high level test like the above could be handy if you’re not interested in the nitty gritty.
Full Check
Here’s the full stats on my SSD. You can use --all instead of --xall to get
legacy stats. I personally have a very old SSD and HDD, both are from 2014. The
newer --xall flag includes more information.
On macOS your output will have a lot less information but the important stats will be there, they’ll be identified slightly different but I’m sure you’ll be able to correlate them to the lines below.
Here’s the full dump of information, I’ve broken it up a little bit so it can
be commented on in chunks. If you see lines with # ... with surrounding empty
lines, those are my comments and not part of the official output.
sudo smartctl --xall /dev/sda
# In general, seeing the firmware and various hardware information is good to
# know in case you need to reference it somewhere.
=== START OF INFORMATION SECTION ===
Model Family: Crucial/Micron Client SSDs
Device Model: Crucial_CT256MX100SSD1
Serial Number: 14370D313991
LU WWN Device Id: 5 00a075 10d313991
Firmware Version: MU01
User Capacity: 256,060,514,304 bytes [256 GB]
Sector Sizes: 512 bytes logical, 4096 bytes physical
Rotation Rate: Solid State Device
Form Factor: 2.5 inches
TRIM Command: Available, deterministic, zeroed
Device is: In smartctl database 7.5/5706
ATA Version is: ACS-2, ATA8-ACS T13/1699-D revision 6
SATA Version is: SATA 3.1, 6.0 Gb/s (current: 6.0 Gb/s)
Local Time is: Fri Jul 17 09:39:28 2026 EDT
SMART support is: Available - device has SMART capability.
SMART support is: Enabled
AAM feature is: Unavailable
APM level is: 254 (maximum performance)
Rd look-ahead is: Enabled
Write cache is: Enabled
DSN feature is: Unavailable
ATA Security is: Unavailable
=== START OF ENABLE/DISABLE COMMANDS SECTION ===
SMART Enabled.
=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED
General SMART Values:
Offline data collection status: (0x80) Offline data collection activity
was never started.
Auto Offline Data Collection: Enabled.
Self-test execution status: ( 0) The previous self-test routine completed
without error or no self-test has ever
been run.
Total time to complete Offline
data collection: ( 1190) seconds.
Offline data collection
capabilities: (0x7b) SMART execute Offline immediate.
Auto Offline data collection on/off support.
Suspend Offline collection upon new
command.
Offline surface scan supported.
Self-test supported.
Conveyance Self-test supported.
Selective Self-test supported.
SMART capabilities: (0x0003) Saves SMART data before entering
power-saving mode.
Supports SMART auto save timer.
Error logging capability: (0x01) Error logging supported.
General Purpose Logging supported.
Short self-test routine
recommended polling time: ( 2) minutes.
Extended self-test routine
recommended polling time: ( 3) minutes.
Conveyance self-test routine
recommended polling time: ( 3) minutes.
SCT capabilities: (0x0035) SCT Status supported.
SCT Feature Control supported.
SCT Data Table supported.
# In general, the table below contains a lot of useful information!
SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME FLAGS VALUE WORST THRESH FAIL RAW_VALUE
1 Raw_Read_Error_Rate POSR-K 100 100 000 - 0
# Ideally you'll want 0 as the count here. These are NAND blocks that have been
# permanently retired and replaced with spare blocks. A small number isn't
# necessarily a problem, but if the count keeps increasing it may indicate flash
# wear or degradation.
5 Reallocate_NAND_Blk_Cnt PO--CK 100 100 000 - 0
# This drive has been powered on for a little over 11.5 years because I keep
# my computer on 24 / 7. It has been power cycled 159 times in those 11.5 years
# since it includes reboots and power outages.
9 Power_On_Hours -O--CK 100 100 000 - 100974
12 Power_Cycle_Count -O--CK 100 100 000 - 159
171 Program_Fail_Count -O--CK 100 100 000 - 0
172 Erase_Fail_Count -O--CK 100 100 000 - 0
173 Ave_Block-Erase_Count -O--CK 054 054 000 - 1388
# This is how many times the power has been hard cut, such as during an outage.
# I didn't always have a UPS (universal power supply) that worked. It also
# accounts for hard software locks where your machine needs to be power cycled.
174 Unexpect_Power_Loss_Ct -O--CK 100 100 000 - 63
180 Unused_Reserve_NAND_Blk PO--CK 000 000 000 - 2159
183 SATA_Interfac_Downshift -O--CK 100 100 000 - 0
184 Error_Correction_Count -O--CK 100 100 000 - 0
187 Reported_Uncorrect -O--CK 100 100 000 - 0
# Knowing stats about your temps is always handy. I live in NY so it gets quite
# hot in the summers, as high as 100f / 38c. I don't always turn the A/C on.
194 Temperature_Celsius -O---K 063 050 000 - 37 (Min/Max 15/50)
196 Reallocated_Event_Count -O--CK 100 100 000 - 0
# Ideally you'll want 0 as the count here. These are blocks / sectors that have
# experienced read errors and are waiting to be retested. The count may decrease
# if the drive is later able to read or rewrite the data successfully.
197 Current_Pending_ECC_Cnt -O--CK 100 100 000 - 0
# Ideally you'll want 0 as the count here. It indicates there are blocks / sectors
# that could not be read or corrected during offline testing. A non-zero value
# often accompanies data loss.
198 Offline_Uncorrectable ----CK 100 100 000 - 0
# I have a SATA SSD, and this could be related to a poor connection, this isn't
# related to data loss or a reason to freak out. When I switched to Linux I had
# issues around how Linux managed this SATA connection which caused occasional
# freezes for 10s but it's been resolved since then and hasn't increased in 6 months.
199 UDMA_CRC_Error_Count -O--CK 100 100 000 - 14
# This one is very important, it's how long your SSD will last for since they
# have a finite life. In my case, in those 11.5 years I have 46% left. In other
# words, I've consumed 54% of its write endurance. It's not guaranteed to die
# at 100% consumption, it's what it's rated at by the manufacturer. It can also
# start having trouble earlier.
#
# If you start to see this number getting low, certainly make sure your data is
# backed up and be prepared to on average get a new drive.
202 Percent_Lifetime_Remain P---CK 054 054 000 - 46
206 Write_Error_Rate -OSR-- 100 100 000 - 0
210 Success_RAIN_Recov_Cnt -O--CK 100 100 000 - 0
# Newer drives might show this as TBA (total bytes written), but if you're
# curious you can calculate that from the LBA along with the sector size which
# you can see up top in "Sector Size", which in my case is 512.
#
# You can calculate LBA to TBW with this formula:
#
# (TOTAL_LBAs * SECTOR_SIZE) / 1_TERABYTE_IN_BYTES = N TB
#
# In my case that would be:
#
# (138615507845 * 512) / 1000000000000 = ~70.9 TB
246 Total_LBAs_Written -O--CK 100 100 000 - 138615507845
247 Host_Program_Page_Count -O--CK 100 100 000 - 2232353815
248 FTL_Program_Page_Count -O--CK 100 100 000 - 1684185261
||||||_ K auto-keep
|||||__ C event count
||||___ R error rate
|||____ S speed/performance
||_____ O updated online
|______ P prefailure warning
General Purpose Log Directory Version 1
SMART Log Directory Version 1 [multi-sector log support]
Address Access R/W Size Description
0x00 GPL,SL R/O 1 Log Directory
0x01 SL R/O 1 Summary SMART error log
0x02 SL R/O 51 Comprehensive SMART error log
0x03 GPL R/O 16383 Ext. Comprehensive SMART error log
0x04 GPL,SL R/O 255 Device Statistics log
0x06 SL R/O 1 SMART self-test log
0x07 GPL R/O 1 Extended self-test log
0x09 SL R/W 1 Selective self-test log
0x10 GPL R/O 1 NCQ Command Error log
0x11 GPL R/O 1 SATA Phy Event Counters log
0x13 GPL R/O 1 SATA NCQ Send and Receive log
0x24 GPL R/O 429 Current Device Internal Status Data log
0x25 GPL R/O 145 Saved Device Internal Status Data log
0x30 GPL,SL R/O 9 IDENTIFY DEVICE data log
0x80-0x9f GPL,SL R/W 16 Host vendor specific log
0xa0 GPL VS 2000 Device vendor specific log
0xa0 SL VS 208 Device vendor specific log
0xa1-0xbf GPL,SL VS 1 Device vendor specific log
0xc0 GPL,SL VS 80 Device vendor specific log
0xc1-0xdf GPL,SL VS 1 Device vendor specific log
0xe0 GPL,SL R/W 1 SCT Command/Status
0xe1 GPL,SL R/W 1 SCT Data Transfer
# Ideally you'll want to see no errors logged and completed without errors.
SMART Extended Comprehensive Error Log Version: 1 (16383 sectors)
No Errors Logged
SMART Extended Self-test Log Version: 1 (1 sectors)
Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error
# 1 Vendor (0xff) Completed without error 00% 17120 -
# 2 Vendor (0xff) Completed without error 00% 16326 -
# 3 Vendor (0xff) Completed without error 00% 16078 -
# 4 Vendor (0xff) Completed without error 00% 15963 -
# 5 Vendor (0xff) Completed without error 00% 15843 -
# 6 Vendor (0xff) Completed without error 00% 15738 -
# 7 Vendor (0xff) Completed without error 00% 15602 -
# 8 Vendor (0xff) Completed without error 00% 15501 -
# 9 Vendor (0xff) Completed without error 00% 15402 -
#10 Vendor (0xff) Completed without error 00% 15307 -
#11 Vendor (0xff) Completed without error 00% 15210 -
#12 Vendor (0xff) Completed without error 00% 15124 -
#13 Vendor (0xff) Completed without error 00% 15067 -
#14 Vendor (0xff) Completed without error 00% 15004 -
#15 Vendor (0xff) Completed without error 00% 14938 -
#16 Vendor (0xff) Completed without error 00% 14880 -
#17 Vendor (0xff) Completed without error 00% 14823 -
#18 Vendor (0xff) Completed without error 00% 14767 -
#19 Vendor (0xff) Completed without error 00% 14711 -
SMART Selective self-test log data structure revision number 1
SPAN MIN_LBA MAX_LBA CURRENT_TEST_STATUS
1 0 0 Not_testing
2 0 0 Not_testing
3 0 0 Not_testing
4 0 0 Not_testing
5 0 0 Not_testing
Selective self-test flags (0x0):
After scanning selected spans, do NOT read-scan remainder of disk.
If Selective self-test is pending on power-up, resume after 0 minute delay.
# Here's quite a bit more details about temperatures.
SCT Status Version: 3
SCT Version (vendor specific): 1 (0x0001)
Device State: Active (0)
Current Temperature: 37 Celsius
Power Cycle Min/Max Temperature: 32/46 Celsius
Lifetime Min/Max Temperature: 15/50 Celsius
Under/Over Temperature Limit Count: 0/0
SCT Temperature History Version: 2
Temperature Sampling Period: 1 minute
Temperature Logging Interval: 1 minute
Min/Max recommended Temperature: 0/70 Celsius
Min/Max Temperature Limit: -5/75 Celsius
Temperature History Size (Index): 478 (400)
Index Estimated Time Temperature Celsius
401 2026-07-17 01:42 37 ******************
... ..( 23 skipped). .. ******************
425 2026-07-17 02:06 37 ******************
426 2026-07-17 02:07 38 *******************
... ..( 42 skipped). .. *******************
469 2026-07-17 02:50 38 *******************
470 2026-07-17 02:51 37 ******************
471 2026-07-17 02:52 37 ******************
472 2026-07-17 02:53 38 *******************
... ..( 2 skipped). .. *******************
475 2026-07-17 02:56 38 *******************
476 2026-07-17 02:57 37 ******************
... ..(401 skipped). .. ******************
400 2026-07-17 09:39 37 ******************
SCT Error Recovery Control command not supported
# This contains a subset of information above but formatted differently.
Device Statistics (GP Log 0x04)
Page Offset Size Value Flags Description
0x01 ===== = = === == General Statistics (rev 1) ==
0x01 0x008 4 159 --- Lifetime Power-On Resets
0x01 0x010 4 100974 --- Power-on Hours
0x01 0x018 6 138615507845 --- Logical Sectors Written
0x01 0x020 6 2763115913 --- Number of Write Commands
0x01 0x028 6 78923585921 --- Logical Sectors Read
0x01 0x030 6 1014927968 --- Number of Read Commands
0x04 ===== = = === == General Errors Statistics (rev 1) ==
0x04 0x008 4 0 --- Number of Reported Uncorrectable Errors
0x04 0x010 4 102 --- Resets Between Cmd Acceptance and Completion
0x05 ===== = = === == Temperature Statistics (rev 1) ==
0x05 0x008 1 37 --- Current Temperature
0x05 0x010 1 37 --- Average Short Term Temperature
0x05 0x018 1 38 --- Average Long Term Temperature
0x05 0x020 1 50 --- Highest Temperature
0x05 0x028 1 16 --- Lowest Temperature
0x05 0x030 1 44 --- Highest Average Short Term Temperature
0x05 0x038 1 16 --- Lowest Average Short Term Temperature
0x05 0x040 1 40 --- Highest Average Long Term Temperature
0x05 0x048 1 23 --- Lowest Average Long Term Temperature
0x05 0x050 4 - --- Time in Over-Temperature
0x05 0x058 1 70 --- Specified Maximum Operating Temperature
0x05 0x060 4 - --- Time in Under-Temperature
0x05 0x068 1 0 --- Specified Minimum Operating Temperature
0x06 ===== = = === == Transport Statistics (rev 1) ==
0x06 0x008 4 0 --- Number of Hardware Resets
0x06 0x010 4 0 --- Number of ASR Events
0x06 0x018 4 14 --- Number of Interface CRC Errors
0x07 ===== = = === == Solid State Device Statistics (rev 1) ==
0x07 0x008 1 5 N-- Percentage Used Endurance Indicator
|||_ C monitored condition met
||__ D supports DSN
|___ N normalized value
Pending Defects log (GP Log 0x0c) not supported
SATA Phy Event Counters (GP Log 0x11)
ID Size Value Description
0x0001 4 0 Command failed due to ICRC error
0x000a 4 3 Device-to-host register FISes sent due to a COMRESET
Newer SSDs may even show more information. I haven’t updated my main desktop since 2014 because things are working quite nicely for software development and creating videos. Here’s a list of my hardware and the tools I use.
The video below shows using smartctl on Linux.
# Demo Video
Timestamps
- 0:17 – CrystalDiskInfo on Windows
- 0:56 – Installing Smartmontools on Linux and macOS
- 1:37 – Identifying your disks
- 2:22 – Enable SMART stats if needed
- 3:21 – Running a basic self assessment test
- 3:39 – Getting a ton of SMART stats on your drive
- 4:00 – Device information
- 4:26 – Important SMART stats for lifetime, power and errors
- 9:14 – Calculating total bytes written
- 10:42 – No errors hopefully
- 10:54 – Extended temperature information
- 11:14 – Subset of similar SMART info
- 11:38 – SMART stats are available on HDDs too
How do you monitor your drive’s health? Let me know below.