xref: /freebsd/contrib/smart/smart.8 (revision 7419d6e463fee40f0f52cd5bc46a93cbb7ac6114)
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