How to Use smartctl in Linux to Monitor S.M.A.R.T. Drive Health, NVMe Endurance, and Disk Failures

Architectural Overview of S.M.A.R.T. and the smartmontools Subsystem

Self-Monitoring, Analysis, and Reporting Technology (S.M.A.R.T.) is an industry-standard diagnostic subsystem embedded directly within the firmware of hard disk drives (HDDs) and solid-state drives (SSDs). In Linux environments, the canonical toolset for communicating with drive microcode is smartmontools, which provides two primary utilities: smartctl (an interactive command-line control utility) and smartd (a background daemon that monitors hardware metrics continuously and dispatches warning notifications upon threshold breaches).

Storage bus protocols dictate how smartctl queries storage media. Legacy ATA, Serial ATA (SATA), and Serial Attached SCSI (SAS) devices present fixed vendor attribute tables with normalised values, worst-case scores, and operational failure thresholds. In contrast, Non-Volatile Memory Express (NVMe) solid-state storage uses a streamlined, standardised telemetry architecture specified by the NVM Express consortium, bypassing legacy attribute tables in favour of unified byte health logs, available spare ratios, and percentage used indicators.

Storage Interface Kernel Device Node smartctl Device Type Flag Primary Diagnostic Mechanism Key Reliability Metric
SATA / AHCI HDD /dev/sdX -d ata (or auto-detected) Attribute table (0x01 to 0xFF) Reallocated Sectors, Pending Sectors
SATA SSD /dev/sdX -d sat Vendor-specific flash attributes Media Wearout Indicator, Erase Fail Count
SAS Enterprise HDD/SSD /dev/sdX -d scsi SCSI sense data and log sense pages Non-medium error counts, Grown defect list
PCIe NVMe SSD /dev/nvmeXn1 -d nvme NVMe SMART / Health Information Log Available Spare, Percentage Used, Media Errors
Hardware RAID Controller /dev/sdX or /dev/bus/X -d megaraid,N, -d cciss,N Passthrough commands to physical disks Physical drive metrics behind logical volumes

Installing smartmontools and Querying Device Metadata

Prior to querying drive microcode, ensure that smartmontools is installed and the S.M.A.R.T. capability is enabled on the target controller.

# Install smartmontools on Debian/Ubuntu systems
sudo apt-get update && sudo apt-get install -y smartmontools

# Install smartmontools on RHEL/AlmaLinux/Rocky Linux
sudo dnf install -y smartmontools

# Enable S.M.A.R.T. monitoring on a specific SATA device
sudo smartctl -s on /dev/sda

To inspect fundamental drive metadata—such as model family, serial number, firmware revision, ATA standard compliance, and overall health status—execute the basic query flags:

# Display device identity and firmware details
sudo smartctl -i /dev/sda

# Execute a fast health assessment query
sudo smartctl -H /dev/sda

If the drive returns SMART overall-health self-assessment test result: PASSED, the drive firmware has not detected an internal attribute that has crossed its fatal manufacturer threshold. However, passing this baseline check does not guarantee structural reliability; system administrators must audit individual raw attribute values.

Critical SATA SMART Attributes and Failure Thresholds

To inspect the complete table of telemetry registers on SATA drives, execute sudo smartctl -A /dev/sda. The table returns distinct metrics categorized as either Pre-fail (attributes whose exhaustion indicates impending hardware failure within 24 hours) or Old_age (metrics tracking routine component wear and tear).

ID Attribute Name Metric Type Criticality Diagnostic Significance
5 Reallocated_Sector_Ct Pre-fail Critical Count of damaged physical sectors retired and remapped to spare reserve tracks.
187 Reported_Uncorrect Pre-fail High Errors that could not be recovered using hardware Error Correction Code (ECC).
194 Temperature_Celsius Old_age Moderate Internal drive thermal sensor reading. Operating over 55°C accelerates drive failure.
197 Current_Pending_Sector Old_age Critical Unstable sectors waiting to be remapped upon the next write operation.
198 Offline_Uncorrectable Old_age Critical Sectors failing offline background self-tests; definitive indicator of platter surface degradation.
199 UDMA_CRC_Error_Count Old_age Low/Moderate Checksum errors during bus transfer; almost universally caused by faulty SATA cabling.

Inspecting PCIe NVMe SSD Health and Flash Endurance

NVMe solid-state drives do not present numerical ID attribute tables. Instead, smartctl queries the NVMe controller directly using native kernel ioctls:

# Query NVMe health and endurance telemetry
sudo smartctl -a /dev/nvme0n1

The output returns standardised NVMe health metrics. The most critical operational values include:

  • Critical Warning: A bitmask indicating critical drive states (such as spare capacity falling below threshold, reliability degradation, read-only fallback mode, or volatile memory backup failures). A value of 0x00 represents normal operation.
  • Available Spare: The percentage of remaining unallocated flash blocks available to replace worn physical blocks. A fresh SSD reports 100%. When this drops below the Available Spare Threshold (commonly 10%), replacement is mandatory.
  • Percentage Used: An endurance estimation calculation reflecting manufacturer TBW (Terabytes Written) specifications. 100% indicates the flash media has reached its design endurance limit, though write operations may continue until physical blocks degrade.
  • Media and Data Integrity Errors: The number of times the controller encountered unrecoverable data integrity errors where ECC correction failed. Any non-zero count requires immediate backup and drive decommissioning.

Executing Background Self-Tests and Analysing Execution Logs

Drive microcode can run active diagnostics in the background while the storage subsystem continues servicing operating system I/O requests.

# Initiate a short self-test (checks electrical subsystems, servo mechanisms, and small surface sample; ~2 mins)
sudo smartctl -t short /dev/sda

# Initiate an extended surface scan (reads every logical block address across entire platter/flash; 1 to 8+ hours)
sudo smartctl -t long /dev/sda

# Abort an active background diagnostic test
sudo smartctl -X /dev/sda

# Inspect self-test execution status and historical test logs
sudo smartctl -l selftest /dev/sda

When inspecting the self-test log, check the Status column. A result of Completed without error confirms the read heads or flash controllers successfully accessed the media. A status of Completed: read failure accompanied by a specific LBA_of_first_error confirms unrecoverable sector corruption.

Automating Disk Health Monitoring and Alerting with smartd

To avoid manual command-line polling, configure the smartd daemon to run self-tests on a scheduled cron basis and dispatch email warnings to systems administrators upon hardware failure.

Step 1: Configure /etc/smartd.conf

Open /etc/smartd.conf in your text editor. Comment out default auto-scan directives (e.g., DEVICESCAN) and define explicit directives for each physical storage drive:

# /etc/smartd.conf configuration directive:
# -d ata: drive type
# -a: monitor all default SMART metrics
# -o on: enable automatic offline data collection
# -S on: enable automatic attribute autosave
# -s (S/../.././02|L/../../6/03): schedule Short test daily at 02:00, Long test Saturdays at 03:00
# -m [email protected]: send failure email notifications
# -M test: send a test email upon daemon initialisation

/dev/sda -d ata -a -o on -S on -s (S/../.././02|L/../../6/03) -m [email protected]
/dev/nvme0n1 -d nvme -a -s (S/../.././02|L/../../6/03) -m [email protected]

Step 2: Enable and Start the Systemd Service

Activate the smartd daemon to enforce automated monitoring across operating system reboots:

# Validate configuration syntax
sudo smartd -q onecheck

# Enable and start the systemd unit
sudo systemctl enable --now smartmontools.service

# Verify active daemon monitoring status
sudo systemctl status smartmontools.service

Troubleshooting smartctl and Hardware Diagnostic Faults

Symptom / Error Probable Root Cause Technical Diagnostic Step Resolution Procedure
Device: /dev/sda, not capable of SMART S.M.A.R.T. disabled in BIOS/UEFI or USB bridge blocking ATA commands Run sudo smartctl -s on /dev/sda; check bridge controller chipset Enable S.M.A.R.T. in motherboard firmware; use -d sat or -d usb for external enclosures
Read SMART Data Failed: scsi error unsupported field in scsi cdb Device is behind hardware RAID controller (e.g., MegaRAID) Run lspci | grep -i raid to identify RAID controller architecture Target physical drive behind controller using smartctl -a -d megaraid,0 /dev/sda
Current_Pending_Sector non-zero, but self-test passes Drive detected bad sector during read but has not rewritten address yet Check raw value of ID 197 and run smartctl -t long Perform full block overwrite via dd if=/dev/zero of=/dev/sda (data destructive) to force remap
JSON parsing errors in automation scripts Legacy output format parsed with regex instead of structured parser Check smartctl --version for JSON output support Invoke smartctl -j -a /dev/sda and pipe structured JSON directly to jq

Get the best tech tips delivered straight to your inbox.

Join thousands of readers mastering Apple, Google, Microsoft, and Linux.