1*7419d6e4SChuck Tuffli.\" 2*7419d6e4SChuck Tuffli.\" SPDX-License-Identifier: BSD-2-Clause 3*7419d6e4SChuck Tuffli.\" 4*7419d6e4SChuck Tuffli.\" Copyright (c) 2021-2026 Chuck Tuffli 5*7419d6e4SChuck Tuffli.\" 6*7419d6e4SChuck Tuffli.\" Redistribution and use in source and binary forms, with or without 7*7419d6e4SChuck Tuffli.\" modification, are permitted provided that the following conditions 8*7419d6e4SChuck Tuffli.\" are met: 9*7419d6e4SChuck Tuffli.\" 1. Redistributions of source code must retain the above copyright 10*7419d6e4SChuck Tuffli.\" notice, this list of conditions and the following disclaimer. 11*7419d6e4SChuck Tuffli.\" 2. Redistributions in binary form must reproduce the above copyright 12*7419d6e4SChuck Tuffli.\" notice, this list of conditions and the following disclaimer in the 13*7419d6e4SChuck Tuffli.\" documentation and/or other materials provided with the distribution. 14*7419d6e4SChuck Tuffli.\" 15*7419d6e4SChuck Tuffli.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 16*7419d6e4SChuck Tuffli.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17*7419d6e4SChuck Tuffli.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18*7419d6e4SChuck Tuffli.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19*7419d6e4SChuck Tuffli.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20*7419d6e4SChuck Tuffli.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21*7419d6e4SChuck Tuffli.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22*7419d6e4SChuck Tuffli.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23*7419d6e4SChuck Tuffli.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24*7419d6e4SChuck Tuffli.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25*7419d6e4SChuck Tuffli.\" SUCH DAMAGE. 26*7419d6e4SChuck Tuffli.\" 27*7419d6e4SChuck Tuffli.\" Note: The date here should be updated whenever a non-trivial 28*7419d6e4SChuck Tuffli.\" change is made to the manual page. 29*7419d6e4SChuck Tuffli.Dd February 14, 2026 30*7419d6e4SChuck Tuffli.Dt SMART 8 31*7419d6e4SChuck Tuffli.Os 32*7419d6e4SChuck Tuffli.Sh NAME 33*7419d6e4SChuck Tuffli.Nm smart , 34*7419d6e4SChuck Tuffli.Nm diskhealth 35*7419d6e4SChuck Tuffli.Nd monitor disk health from a storage device via SMART 36*7419d6e4SChuck Tuffli.Sh SYNOPSIS 37*7419d6e4SChuck Tuffli.Nm 38*7419d6e4SChuck Tuffli.Op Fl dhitvx 39*7419d6e4SChuck Tuffli.Oo Fl a Ar page:attribute Ns Oo , Ns Ar page:attribute Oc Ns ... Oc 40*7419d6e4SChuck Tuffli.Op Fl Fl debug 41*7419d6e4SChuck Tuffli.Ar device 42*7419d6e4SChuck Tuffli.Nm diskhealth 43*7419d6e4SChuck Tuffli.Op Fl Dhitvx 44*7419d6e4SChuck Tuffli.Oo Fl a Ar page:attribute Ns Oo , Ns Ar page:attribute Oc Ns ... Oc 45*7419d6e4SChuck Tuffli.Op Fl Fl debug 46*7419d6e4SChuck Tuffli.Ar device 47*7419d6e4SChuck Tuffli.Sh DESCRIPTION 48*7419d6e4SChuck TuffliThe 49*7419d6e4SChuck Tuffli.Nm 50*7419d6e4SChuck Tufflicommand allows the user to monitor the various information reported 51*7419d6e4SChuck Tuffliby Self-Monitoring, Analysis and Reporting Technology (SMART) present 52*7419d6e4SChuck Tufflion most ATA, SCSI, and NVMe storage media. 53*7419d6e4SChuck TuffliBecause the structure of this information varies across protocols, 54*7419d6e4SChuck Tuffli.Nm 55*7419d6e4SChuck Tufflinormalizes entries using the format: 56*7419d6e4SChuck Tuffli.Bd -literal 57*7419d6e4SChuck Tuffli <Page ID> <Attribute ID> <Value> <Thresholds> 58*7419d6e4SChuck Tuffli.Ed 59*7419d6e4SChuck Tuffli.Pp 60*7419d6e4SChuck TuffliFields are tab-delimited by default, but the command can output 61*7419d6e4SChuck Tufflidata in any format supported by 62*7419d6e4SChuck Tuffli.Xr libxo 3 . 63*7419d6e4SChuck Tuffli.Pp 64*7419d6e4SChuck TuffliBecause ATA does not have log pages, 65*7419d6e4SChuck Tuffli.Nm 66*7419d6e4SChuck Tuffliuses the Command Feature field value in place of the log page ID. 67*7419d6e4SChuck TuffliFor SMART READ DATA, this value is 208 / 0xd0. 68*7419d6e4SChuck TuffliNote that devices choose which attribute ID values they support, their 69*7419d6e4SChuck Tufflidescriptions, and the format of the data. 70*7419d6e4SChuck TuffliThe three values displayed with the 71*7419d6e4SChuck Tuffli.Fl Fl threshold 72*7419d6e4SChuck Tufflioption are: 73*7419d6e4SChuck Tuffli.Pp 74*7419d6e4SChuck Tuffli.Bl -dash -compact -offset indent 75*7419d6e4SChuck Tuffli.It 76*7419d6e4SChuck TuffliStatus flags (byte offset 1, 2 bytes) 77*7419d6e4SChuck Tuffli.It 78*7419d6e4SChuck TuffliNominal attribute value (byte offset 3, 1 byte) 79*7419d6e4SChuck Tuffli.It 80*7419d6e4SChuck TuffliWorst Ever attribute value (byte offset 4, 1 byte) 81*7419d6e4SChuck Tuffli.El 82*7419d6e4SChuck Tuffli.Pp 83*7419d6e4SChuck TuffliAdditionally, 84*7419d6e4SChuck Tuffli.Nm 85*7419d6e4SChuck Tufflireports the value of the SMART STATUS command (Command Feature field 86*7419d6e4SChuck Tufflivalue 218 / 0xda). 87*7419d6e4SChuck TuffliAs this command does not return any data, 88*7419d6e4SChuck Tufflithe command represents this entry with a synthetic attribute 89*7419d6e4SChuck TuffliID of 0, and it uses the command status (0 or 1) as the attribute 90*7419d6e4SChuck Tufflivalue. 91*7419d6e4SChuck Tuffli.Pp 92*7419d6e4SChuck TuffliNVMe devices support the SMART/Health log page (Page ID 2 / 0x2). 93*7419d6e4SChuck TuffliThe data returned in this log page is not structured as attribute IDs. 94*7419d6e4SChuck TuffliInstead, 95*7419d6e4SChuck Tuffli.Nm 96*7419d6e4SChuck Tuffliuses the byte offset of each field as the attribute ID. 97*7419d6e4SChuck TuffliFor example, 98*7419d6e4SChuck Tufflibyte 3 is the Available Spare. 99*7419d6e4SChuck TuffliThus, for NVMe, attribute ID 3 is 100*7419d6e4SChuck TuffliAvailable Spare. 101*7419d6e4SChuck TuffliNote that NVMe health data does not include threshold 102*7419d6e4SChuck Tufflivalues, and as a result, the command will ignore the 103*7419d6e4SChuck Tuffli.Fl Fl threshold 104*7419d6e4SChuck Tufflioption. 105*7419d6e4SChuck Tuffli.Pp 106*7419d6e4SChuck TuffliSCSI devices can support a number of log pages which report drive 107*7419d6e4SChuck Tufflihealth. 108*7419d6e4SChuck TuffliThe command will report the following pages: 109*7419d6e4SChuck Tuffli.Pp 110*7419d6e4SChuck Tuffli.Bl -dash -compact -offset indent 111*7419d6e4SChuck Tuffli.It 112*7419d6e4SChuck TuffliWrite Errors (Page ID 2 / 0x2) 113*7419d6e4SChuck Tuffli.It 114*7419d6e4SChuck TuffliRead Errors (Page ID 3 / 0x3) 115*7419d6e4SChuck Tuffli.It 116*7419d6e4SChuck TuffliVerify Errors (Page ID 5 / 0x5) 117*7419d6e4SChuck Tuffli.It 118*7419d6e4SChuck TuffliNon-medium Errors (Page ID 6 / 0x6) 119*7419d6e4SChuck Tuffli.It 120*7419d6e4SChuck TuffliLast N Errors (Page ID 7 / 0x7) 121*7419d6e4SChuck Tuffli.It 122*7419d6e4SChuck TuffliTemperature (Page ID 13 / 0xd) 123*7419d6e4SChuck Tuffli.It 124*7419d6e4SChuck TuffliStart-stop Cycles (Page ID 14 / 0xe) 125*7419d6e4SChuck Tuffli.It 126*7419d6e4SChuck TuffliInformational Exceptions (Page ID 47 / 0x2f) 127*7419d6e4SChuck Tuffli.El 128*7419d6e4SChuck Tuffli.Pp 129*7419d6e4SChuck TuffliNote that all log pages are optional, and a particular drive 130*7419d6e4SChuck Tufflimay not support all these pages. 131*7419d6e4SChuck TuffliFor SCSI devices, the Attribute ID 132*7419d6e4SChuck Tufflimaps to the SCSI parameter code defined by the command. 133*7419d6e4SChuck TuffliParameter 134*7419d6e4SChuck Tufflicodes are integer values from 0 to N, and, by themselves, are ambiguous 135*7419d6e4SChuck Tufflioutside the context of a particular log page. 136*7419d6e4SChuck TuffliNote that SCSI health data 137*7419d6e4SChuck Tufflidoes not include threshold values, and as a result, the command will 138*7419d6e4SChuck Tuffliignore the 139*7419d6e4SChuck Tuffli.Fl Fl threshold 140*7419d6e4SChuck Tufflioption. 141*7419d6e4SChuck Tuffli.Pp 142*7419d6e4SChuck TuffliThe following options are available: 143*7419d6e4SChuck Tuffli.Bl -tag -width "-d argument" 144*7419d6e4SChuck Tuffli.It Fl a Ar page:attribute , Fl Fl attribute= Ns Ar page:attribute 145*7419d6e4SChuck TuffliA comma-separated list of attributes to display. 146*7419d6e4SChuck TuffliIf page is missing, display the matching attribute from any page. 147*7419d6e4SChuck Tuffli.It Fl d , Fl Fl decode 148*7419d6e4SChuck TuffliDecode the attribute ID values. 149*7419d6e4SChuck TuffliThis is the default when invoked as 150*7419d6e4SChuck Tuffli.Nm diskhealth . 151*7419d6e4SChuck Tuffli.It Fl D , Fl Fl no-decode 152*7419d6e4SChuck TuffliDo not decode the attribute ID values. 153*7419d6e4SChuck TuffliThis is the default when invoked as 154*7419d6e4SChuck Tuffli.Nm . 155*7419d6e4SChuck Tuffli.It Fl h , Fl Fl help 156*7419d6e4SChuck TuffliPrints a usage message and exits. 157*7419d6e4SChuck Tuffli.It Fl i , Fl Fl info 158*7419d6e4SChuck TuffliPrint general device information. 159*7419d6e4SChuck Tuffli.It Fl t , Fl Fl threshold 160*7419d6e4SChuck TuffliAlso print the threshold values. 161*7419d6e4SChuck Tuffli.It Fl v , Fl Fl version 162*7419d6e4SChuck TuffliPrint the version and copyright. 163*7419d6e4SChuck Tuffli.It Fl x , Fl Fl hex 164*7419d6e4SChuck TuffliPrint the values in hexadecimal. 165*7419d6e4SChuck Tuffli.It Ar device 166*7419d6e4SChuck TuffliAn explicit device path 167*7419d6e4SChuck Tuffli.Pq Pa /dev/ada0 168*7419d6e4SChuck Tufflior GEOM provider 169*7419d6e4SChuck Tuffli.Pq Pa ada0 170*7419d6e4SChuck Tuffli. 171*7419d6e4SChuck Tuffli.El 172*7419d6e4SChuck Tuffli.El 173*7419d6e4SChuck Tuffli.Sh EXIT STATUS 174*7419d6e4SChuck Tuffli.Ex -std 175*7419d6e4SChuck Tuffli.Sh EXAMPLES 176*7419d6e4SChuck TuffliPrint all SMART READ DATA and SMART STATUS including the 177*7419d6e4SChuck Tufflithreshold values for ATA drive ada0. 178*7419d6e4SChuck Tuffli.Pp 179*7419d6e4SChuck Tuffli.Dl # smart -t ada0 180*7419d6e4SChuck Tuffli.Pp 181*7419d6e4SChuck TuffliPrint only attribute ID 5 ("Reallocated Sectors Count") for 182*7419d6e4SChuck TuffliATA drive ada0. 183*7419d6e4SChuck Tuffli.Pp 184*7419d6e4SChuck Tuffli.Dl # smart -a 5 ada0 185*7419d6e4SChuck Tuffli.Pp 186*7419d6e4SChuck TuffliPrint attribute IDs 5 ("Reallocated Sectors Count") and 171 187*7419d6e4SChuck Tuffli("SSD Program Fail") for ATA drive ada0. 188*7419d6e4SChuck Tuffli.Pp 189*7419d6e4SChuck Tuffli.Dl # smart -a 5,171 ada0 190*7419d6e4SChuck Tuffli.Pp 191*7419d6e4SChuck TuffliPrint all health pages supported by SCSI device da0 including: 192*7419d6e4SChuck Tuffli.Bl -dash -compact -offset indent 193*7419d6e4SChuck Tuffli.It 194*7419d6e4SChuck TuffliWrite Errors 195*7419d6e4SChuck Tuffli.It 196*7419d6e4SChuck TuffliRead Errors 197*7419d6e4SChuck Tuffli.It 198*7419d6e4SChuck TuffliVerify Errors 199*7419d6e4SChuck Tuffli.It 200*7419d6e4SChuck TuffliNon-medium Errors 201*7419d6e4SChuck Tuffli.It 202*7419d6e4SChuck TuffliLast N Errors 203*7419d6e4SChuck Tuffli.It 204*7419d6e4SChuck TuffliTemperature 205*7419d6e4SChuck Tuffli.It 206*7419d6e4SChuck TuffliStart-stop Cycles 207*7419d6e4SChuck Tuffli.It 208*7419d6e4SChuck TuffliInformational Exceptions 209*7419d6e4SChuck Tuffli.El 210*7419d6e4SChuck Tuffli.Pp 211*7419d6e4SChuck Tuffli.Dl # smart da0 212*7419d6e4SChuck Tuffli.Pp 213*7419d6e4SChuck TuffliPrint all Health log page entries in hexadecimal for NVMe 214*7419d6e4SChuck Tufflidevice nda0. 215*7419d6e4SChuck Tuffli.Pp 216*7419d6e4SChuck Tuffli.Dl # smart -x nda0 217*7419d6e4SChuck Tuffli.Sh DIAGNOSTICS 218*7419d6e4SChuck TuffliThe command may fail for one of the following reasons: 219*7419d6e4SChuck Tuffli.Bl -diag 220*7419d6e4SChuck Tuffli.It "No output displayed" 221*7419d6e4SChuck TuffliThe device does not support health data. 222*7419d6e4SChuck Tuffli.It "CAMGETPASSTHRU ioctl failed" 223*7419d6e4SChuck Tuffli.Nm 224*7419d6e4SChuck Tufflirelies on 225*7419d6e4SChuck Tuffli.Xr cam 4 226*7419d6e4SChuck Tufflito retrieve data from devices and will display this message if the 227*7419d6e4SChuck Tufflidevice does not have a passthrough driver. 228*7419d6e4SChuck TuffliThis can happen, for 229*7419d6e4SChuck Tuffliexample, if the system uses the 230*7419d6e4SChuck Tuffli.Xr nvd 4 231*7419d6e4SChuck TuffliNVMe driver instead of the 232*7419d6e4SChuck Tuffli.Xr nda 4 233*7419d6e4SChuck Tufflidriver. 234*7419d6e4SChuck Tuffli.El 235*7419d6e4SChuck Tuffli.Sh SEE ALSO 236*7419d6e4SChuck Tuffli.Xr libxo 3 , 237*7419d6e4SChuck Tuffli.Xr cam 4 , 238*7419d6e4SChuck Tuffli.Xr nda 4 , 239*7419d6e4SChuck Tuffli.Xr nvd 4 240*7419d6e4SChuck Tuffli.Sh AUTHORS 241*7419d6e4SChuck TuffliThis 242*7419d6e4SChuck Tuffliutility was written by 243*7419d6e4SChuck Tuffli.An Chuck Tuffli Aq Mt chuck@FreeBSD.org . 244*7419d6e4SChuck Tuffli.Sh BUGS 245*7419d6e4SChuck TuffliProbably. 246