sg_senddiag - performs a SCSI SEND DIAGNOSTIC command
sg_senddiag [--doff] [--extdur] [--help]
[--hex] [--list] [--maxlen=LEN] [--page=PG]
[--pf] [--raw=H,H...] [--raw=-] [--selftest=ST]
[--test] [--timeout=SECS] [--uoff] [--verbose]
[--version] DEVICE
sg_senddiag [-doff] [-e] [-h]
[-H] [-l] [-pf] [-raw=H,H...] [-raw=-]
[-s=ST] [-t] [-T=SECS] [-uoff] [-v]
[-V] [-?] DEVICE
This utility sends a SCSI SEND DIAGNOSTIC command to the DEVICE. It can
issue self-tests, find supported diagnostic pages or send arbitrary diagnostic
pages.
When the --list option and a DEVICE are given then
the utility sends a SCSI RECEIVE DIAGNOSTIC RESULTS command to fetch the
response (i.e. the page numbers of supported diagnostic pages).
When the --list option is given without a DEVICE
then a list of diagnostic page names and their numbers, known by this
utility, are listed.
This utility supports two command line syntax-es, the preferred
one is shown first in the synopsis and explained in this section. A later
section on the old command line syntax outlines the second group of
options.
Arguments to long options are mandatory for short options as well.
- -d, --doff
- set the Device Offline (DevOffL) bit (default is clear). Only significant
when --test option is set for the default self-test. When set other
operations on any logical units controlled by the this device server
(target) may be affected (delayed) while a default self-test is
underway.
- -e, --extdur
- outputs the expected extended self-test duration. The duration is given in
seconds (and minutes in parentheses). This figure is obtained from mode
page 0xa (i.e. the control mode page).
- -h, --help
- print usage message then exit.
- -H, --hex
- outputs response from RECEIVE DIAGNOSTIC RESULTS in hex rather than decode
it. Only the Supported Diagnostic Pages diagnostic page (i.e. page_code=0)
is decoded; other pages (e.g. those used by SES) are output in hex.
If --hex is used once, the hex output has a relative address at the
start of each line. If --hex is used twice, then ASCII is shown to
the right of each line of hex. If --hex is used three time or more,
only the hex is output, in two character pairs (i.e. a byte) space
separated and up to 16 bytes per line. This latter form, if placed in a
file or piped through to another invocation, is suitable for the
--raw=- option.
- -l, --list
- when a DEVICE is also given lists the names of all diagnostic pages
supported by this device. The request is sent via a SEND DIAGNOSTIC
command (with the "pF" bit set) and the response is fetched by a
RECEIVE DIAGNOSTIC RESULTS command. When used in the absence of a
--list argument then a list of diagnostic page names and their
numbers, known by this utility, are listed.
- -m, --maxlen=LEN
- where LEN is the value placed in the parameter list length field of
a SEND DIAGNOSTIC command or in the allocation length field of a RECEIVE
DIAGNOSTIC RESULTS command. This only occurs when the other options imply
there will be data sent or received by the command. The default value is
4096 bytes. LEN cannot exceed 65535 or 0xffff in hexadecimal.
- -O, --old
- Switch to older style options. Please use as first option.
- -P, --page=PG
- where PG is the RECEIVE DIAGNOSTIC RESULTS command page code field.
If this option is given the PCV bit in that command is set. When this
option is given then no SEND DIAGNOSTIC command is sent (unlike
--list). If PG is 0 then the response is decoded as if it is
the SPC Supported Diagnostic pages diagnostic page. Other PG values
(i.e. 1 to 255) have their responses output in hex.
- -p, --pf
- set Page Format (PF) bit. By default it is clear (i.e. 0) unless the list
--list option is given in which case the Page Format bit is set (as
required by SPC-3).
- -r, --raw=H,H...
- string of comma separated hex numbers each of which should resolve to a
byte value (i.e. 0 to ff inclusive). A (single) space separated string of
hex bytes is also allowed but the list needs to be in quotes. This
sequence forms a diagnostic page to be sent with the SCSI SEND DIAGNOSTIC
command. Mostly likely the --pf option should also be given.
- -r, --raw=-
- reads sequence of bytes from stdin. The sequence may be comma, space, tab
or linefeed (newline) separated. If a line contains "#" then the
remaining characters on that line are ignored. Otherwise each non
separator character should resolve to a byte value (i.e. 0 to ff
inclusive). This sequence forms a diagnostic page to be sent with the SCSI
SEND DIAGNOSTIC command. Mostly likely the --pf option should also
be given.
- -s, --selftest=ST
- where ST is the self-test code. The default value is 0 which is
inactive. Some other values:
1 : background short self-test
2 : background extended self-test
4 : aborts a (background) self-test that is in progress
5 : foreground short self-test
6 : foreground extended self-test
This option is mutually exclusive with default self-test (i.e. can't have
(ST > 0) and --test).
- -t, --test
- sets the _default_ Self Test (SelfTest) bit. By default this is clear (0).
The --selftest=ST option should not be active together with this
option. Both the --doff and/or --uoff options can be used
with this option.
- -T, --timeout=SECS
- where SECS is a timeout value (in seconds) for foreground self-test
operations. The default value is 7200 seconds (2 hours) and any values of
SECS less than the default are ignored.
- -u, --uoff
- set the Unit Offline (UnitOffL) bit (default is clear). Only significant
when --test option is set for the default self-test. When set other
operations on this logical unit may be affected (delayed) while a default
self-test is underway. Some devices (e.g. Fujitsu disks) do more tests
when this bit is set.
- -v, --verbose
- increase level of verbosity. Can be used multiple times.
- -V, --version
- print out version string then exit.
All devices should support the default self-test. The 'short' self-test codes
should complete in 2 minutes or less. The 'extended' self-test codes' maximum
duration is vendor specific (e.g. a little over 10 minutes with the author's
disks). The foreground self-test codes wait until they are completed while the
background self-test codes return immediately. The results of both foreground
and background self-test codes are placed in the 'self-test results' log page
(see sg_logs(8)). The SCSI command timeout for this utility is set to 60
minutes to allow for slow foreground extended self-tests.
If the DEVICE is a disk then no file systems residing on
that disk should be mounted during a foreground self-test. The reason is
that other SCSI commands may become queued behind the foreground self-test
and timeout.
When the --raw=H,H... option is given then self-tests
should not be selected. However the --pf (i.e. "page
format") option should be given. The length of the diagnostic page to
be sent is derived from the number of bytes given to the --raw=H,H...
option. The diagnostic page code (number) should be the first byte of the
sequence (i.e. as dictated by SPC-3 diagnostic page format). See the
EXAMPLES section below.
Arbitrary diagnostic pages can be read (in hex) with the sg_ses(8)
utility (not only those defined in SES-2).
If the utility is used with no options (e.g. "sg_senddiag
/dev/sg1") Then a degenerate SCSI SEND DIAGNOSTIC command is sent with
zero in all its fields apart from the opcode. Some devices report this as an
error while others ignore it. It is not entirely clear from SPC-3 if it is
invalid to send such a command.
In the 2.4 series of Linux kernels the DEVICE must be a
SCSI generic (sg) device. In the 2.6 series block devices (e.g. SCSI disks
and DVD drives) can also be specified.
To access SCSI enclosures see the sg_ses(8) utility. sg_ses uses
the SCSI SEND DIAGNOSTIC and RECEIVE DIAGNOSTIC RESULTS commands as outlined
in the SES-2 (draft) standard.
The exit status of sg_senddiag is 0 when it is successful. Otherwise see the
sg3_utils(8) man page.
The options in this section were the only ones available prior to sg3_utils
version 1.23 . Since then this utility defaults to the newer command line
options which can be overridden by using --old (or -O) as the
first option. See the ENVIRONMENT VARIABLES section for another way to force
the use of these older command line options.
- -doff
- set the Device Offline (DevOffL) bit (default is clear). Only significant
when -t option is set for the default self-test. Equivalent to
--doff in the main description.
- -e
- outputs the expected extended self-test duration. Equivalent to
--extdur in the main description.
- -h
- outputs response from RECEIVE DIAGNOSTIC RESULTS in hex rather than decode
it.
- -H
- outputs response from RECEIVE DIAGNOSTIC RESULTS in hex rather than decode
it.
- -l
- when a DEVICE is also given lists the names of all diagnostic pages
supported by this device. The request is sent via a SEND DIAGNOSTIC
command (with the "pf" bit set) and the response is fetched by a
RECEIVE DIAGNOSTIC RESULTS command. When used in the absence of a
DEVICE argument then a list of diagnostic page names and their
numbers, known by this utility, are listed.
- -N, --new
- Switch to the newer style options.
- -pf
- set Page Format (PF) bit. By default it is clear (i.e. 0) unless the
-l option is given in which case the Page Format bit is set (as
required by SPC-3).
- -raw=H,H...
- string of comma separated hex numbers each of which should resolve to a
byte value (i.e. 0 to ff inclusive). This sequence forms a diagnostic page
to be sent with the SCSI SEND DIAGNOSTIC command. Mostly likely the
-pf option should also be given.
- -raw=-
- reads sequence of bytes from stdin. The sequence may be comma, space, tab
or linefeed (newline) separated. If a line contains "#" then the
remaining characters on that line are ignored. Otherwise each non
separator character should resolve to a byte value (i.e. 0 to ff
inclusive). This sequence forms a diagnostic page to be sent with the SCSI
SEND DIAGNOSTIC command. Mostly likely the -pf option should also
be given.
- -s=ST
- where ST is the self-test code. The default value is 0 which is
inactive. A value of 1 selects a background short self-test; 2 selects a
background extended self-test; 5 selects a foreground short self-test; 6
selects a foreground extended test. A value of 4 will abort a (background)
self-test that is in progress. This option is mutually exclusive with
default self-test (i.e. -t).
- -t
- sets the _default_ Self Test (SelfTest) bit. By default this is clear (0).
The -s=ST option should not be active together with this option.
Both the -doff and/or -uoff options can be used with this
option.
- -T=SECS
- where SECS is a timeout value (in seconds) for foreground self-test
operations. See the --timeout=SECS option above.
- -uoff
- set the Unit Offline (UnitOffL) bit (default is clear). Equivalent to
--uoff in the main description.
- -v
- increase level of verbosity. Can be used multiple times.
- -V
- print out version string then exit.
- -?
- output usage message. Ignore all other parameters.
The examples sub-directory in the sg3_utils packages contains two example
scripts that turn on the CJTPAT (jitter pattern) on some SAS disks (one script
for each phy). One possible invocation for phy 1 is:
sg_senddiag --pf --raw=- /dev/sg2 < sdiag_sas_p1_cjtpat.txt
There is also an example script that turns on the IDLE pattern.
Once a test pattern has been started it can be turned off by resetting the
phy or with the STOP phy pattern function:
sg_senddiag --pf --raw=- /dev/sg2 < sdiag_sas_p1_stop.txt
Since sg3_utils version 1.23 the environment variable SG3_UTILS_OLD_OPTS can be
given. When it is present this utility will expect the older command line
options. So the presence of this environment variable is equivalent to using
--old (or -O) as the first command line option.
Written by Douglas Gilbert
Report bugs to <dgilbert at interlog dot com>.
Copyright © 2003-2018 Douglas Gilbert
This software is distributed under the GPL version 2. There is NO warranty; not
even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
sg_ses(8), sg_logs(8), smartmontools(see net)