A list of SCSI and storage utility programs can be found on this
tools page.
Utility name |
Main SCSI commands invoked |
CLI |
Ported |
Notes |
sginfo [legacy, use sdparm] |
MODE SENSE/SELECT, READ
DEFECT [6, 10] [RD: 10, 12] |
adhoc |
symbolic decoding (optional
changing) of mode pages. Can also output (disk) defect
lists. Port of older scsiinfo
utility. |
|
sgm_dd |
READ, WRITE [6, 10, 12, 16] |
dd |
sg_dd variant that uses
memory mapped IO (only on Linux sg devices) |
|
sgp_dd |
READ, WRITE [6, 10, 12, 16] |
dd |
sg_dd variant that uses POSIX
threads |
|
sg_bg_ctl |
BACKGROUND CONTROL |
getopt |
f,s,t,w | start/stop advance background control
operations on disk |
sg_compare_and_write |
COMPARE AND WRITE |
getopt |
f,s,t,w | if compare successful then write |
sg_copy_results |
RECEIVE COPY RESULTS |
getopt |
used to get the results from the previous
sg_xcopy (EXTENDED COPY(LID1)) |
|
sg_dd |
READ, WRITE [6, 10, 12, 16] |
dd |
Unix dd command variant, uses
SG_IO ioctl to send SCSI commands to copy data. See the sg_dd page. Newer ddpt utility adds features and is
ported to "f,s,w" |
|
sg_decode_sense |
getopt |
f,s,t,w |
decodes sense data given as a
string of hexadecimal bytes or in binary |
|
sg_emc_trespass |
MODE SELECT |
adhoc |
utility specialized for EMC
Clariion series |
|
sg_format |
FORMAT UNIT (SBC) and FORMAT MEDIUM (SSC) |
getopt |
f,s,t,w |
format or resize a SCSI disk
(with FORMAT UNIT). Alternatively sg_format can format a
tape (with FORMAT MEDIUM) |
sg_get_config |
GET CONFIGURATION |
getopt |
f,s,t,w | fetch features and profiles
of a cd/dvd drive and/or its current media |
sg_get_lba_status |
GET LBA STATUS |
getopt |
f,s,t,w |
logical block provisioning
support |
sg_ident |
REPORT/SET IDENTIFYING
INFORMATION |
getopt |
f,s,t,w | default is to report (fetch)
the device identifier. With the '--set' option a new identifier is sent
to the device. |
sg_inq |
INQUIRY |
getopt+ |
f,s,t,w | fetch standard response, VPD
pages or version descriptors. Also can perform IDENTIFY
(PACKET) DEVICE ATA command. VPD page decoding also
performed by sg_vpd and sdparm. |
sg_logs |
LOG SENSE |
getopt+ |
f,s,t,w | fetch log sense pages, decode
standard and some vendor pages |
sg_luns |
REPORT LUNS |
getopt |
f,s,t,w | fetch luns reported by a
device (lun 0 or "well known lu") |
sg_map |
INQUIRY |
adhoc |
shows mapping between sg
devices and primary device node (if any). Instead of using
sg_map, in lk 2.6 and later the lsscsi utility is
recommended. |
|
sg_map26 |
getopt |
maps between single Linux sg device and primary device node (and vice versa). Also does mapping in to, and out of, sysfs. For the Linux 2.6 series and later. Instead of using sg_map26, the lsscsi utility is recommended. | ||
sg_modes |
MODE SENSE [6, 10] |
getopt+ |
f,s,t,w | fetch mode pages (output
mainly in hex, to decode output use sdparm) |
sg_opcodes |
REPORT SUPPORTED OPERATION
CODES |
getopt+ |
f,s,t,w |
fetch supported SCSI commands
or supported task management functions |
sg_persist |
PERSISTENT RESERVE IN/OUT |
getopt |
f,s,t,w | control persistent
reservations and report reservation status |
sg_prevent |
PREVENT ALLOW MEDIUM REMOVAL |
getopt |
f,s,t,w | control media removal, mainly
for those SCSI devices which have removable media (e.g.
CD/DVD and tape drives) |
sg_raw |
<user specified> |
getopt |
f,s,t,w |
send user supplied cdb |
sg_rbuf |
READ BUFFER |
getopt+ |
read from SCSI device cache.
Typically for testing the SCSI transport (for throughput or
errors) |
|
sg_rdac |
MODE SENSE/SELECT [6, 10] |
adhoc |
f,s,t,w | display or modify RDAC
redundant controller mode page |
sg_read |
READ [6, 10, 12, 16] |
dd |
read continually from same
offset. Syntax similar to sg_dd (without write side). Can
test SCSI device cache and transport performance. |
|
sg_read_attr |
READ ATTRIBUTE |
getopt+ | getopt+ | fetch and decode attributes. Modern tape
systems implement this SCSI command. |
sg_readcap |
READ CAPACITY [10, 16] |
getopt+ |
f,s,t,w | fetch the number of blocks
and the individual block size for disks and CD/DVD media |
sg_read_buffer |
READ BUFFER(10) and READ BUFFER(16) |
getopt |
f,s,t,w |
retrieve descriptors, error
history or data from device. |
sg_read_long |
READ LONG |
getopt |
f,s,t,w | read data from given LBA
which includes the block and ECC data. |
sg_reassign |
REASSIGN BLOCKS |
getopt |
f,s,t,w | reassign a LBA from one
sector on a disk (typically damaged) to a new (spare)
sector. User data copied if it is recoverable. |
sg_referrals |
REPORT REFERRALS |
getopt |
f,s,t,w | report data segment
accessibility from target port groups |
sg_rep_zones |
REPORT ZONES |
getopt |
f,s,t,w |
sends this command to a ZBC (SMR) device and
decodes the result. A SAT layer may translate SCSI ZBC
commands to ATA ZAC commands that a disk understands |
sg_requests |
REQUEST SENSE |
getopt |
f,s,t,w | fetch sense data from the
given device. Modern uses include getting a progress
indication (e.g. during a format) or finding the power
condition state. |
sg_reset |
- |
adhoc |
Issue a driver, (SCSI) bus or
device (target or lun?) reset. |
|
sg_reset_wp |
RESET WRITE POINTER |
getopt |
f,s,t,w |
sends this command to a ZBC (aka shared
magnetic recording [SMR]) device. The corresponding ATA
standard is known as ZAC. |
sg_rmsn |
READ MEDIA SERIAL NUMBER |
getopt |
f,s,t,w | Relatively new command added
to SPC-3. Format of response is vendor specific so this
utility outputs it in hex (default) or binary. |
sg_rtpg |
REPORT TARGET PORT GROUPS |
getopt |
f,s,t,w | Specialized for multi-ported
SCSI devices where one port (or a group of them) is
preferred for IO over another (or others). |
sg_safte | READ BUFFER | getopt | f,s,t,w | fetch information from a SAF-TE processor |
sg_sanitize |
SANITIZE |
getopt |
f,s,t,w |
Send SCSI SANITIZE command |
sg_sat_identify |
ATA PASS-THROUGH [12, 16] |
getopt |
f,s,t,w |
Send ATA IDENTIFY DEVICE or IDENTIFY PACKET DEVICE commands via the SAT ATA PASS-THROUGH SCSI command. |
sg_sat_phy_event |
ATA PASS-THROUGH [12, 16] |
getopt |
f,s,t,w | Sends an ATA READ LOG EXT
command via a SAT to fetch log page 11h which contains SATA
phy event counters. |
sg_sat_read_gplog |
ATA PASS-THROUGH [12, 16] |
getopt |
f,s,t,w | Sends an ATA READ LOG (DMA) EXT command via a
SAT to fetch a log page |
sg_sat_set_features |
ATA PASS_THROUGH [12, 16] |
getopt |
f,s,t,w | Sends ATA SET FEATURES
command via SAT |
sg_scan [.c.linux] |
[INQUIRY] |
adhoc |
Linux only |
maps each sg device name to the corresponding numeric <host, channel, target, lun> tuple. In lk 2.6 series the "lsscsi -g" command is similar. |
sg_scan [.c.win32] |
[INQUIRY] |
getopt |
win32 only |
shows one device per line,
with the device's various names and INQUIRY response string
on that line. |
sg_senddiag |
SEND DIAGNOSTIC |
getopt+ |
f,s,t,w | Issues either a default self
test or a short/extended foreground/background self test.
With no arguments it uses RECEIVE DIAGNOSTIC RESULTS to list
all supported diagnostic pages. |
sg_ses |
SEND/RECEIVE DIAGNOSTIC |
getopt |
f,s,t,w | Fetches status diagnostic
pages from, and sends some control pages to, a SCSI
Enclosure Services (SES) device. See the sg_ses page. |
sg_ses_microcode |
SEND/RECEIVE DIAGNOSTIC | getopt |
f,s,t,w | This microcode (firmware) download (to
device) is SES specific. A more general way, typically used
with disks, is with sg_write_buffer. |
sg_start |
START STOP UNIT |
getopt+ |
f,s,t,w | Controls the power condition
state of a SCSI device. Primary use is to spin up and down
SCSI disks. Can also load and eject removable media. |
sg_stpg |
SET TARGET PORT GROUPS | getopt |
f,s,t,w | Specialized for multi-ported SCSI devices where one port (or a group of them) is preferred for IO over another (or others). |
sg_sync |
SYNCHRONIZE CACHE [10, 16] |
getopt |
f,s,t,w | Causes disk caches to be
flushed to media |
sg_test_rwbuf |
READ/WRITE BUFFER |
getopt |
Random pattern written to
SCSI device buffer then read back and checked. Used in
testing for data corruption. |
|
sg_timestamp |
REPORT/SET TIMESTAMP |
getop |
f,s,t,w |
Report or set timestamp which is a 48 bit
unsigned integer containing the number of milliseconds since
1970-01-01 00:00:00 UTC |
sg_turs |
TEST UNIT READY |
getopt+ |
f,s,t,w | Issue one or more Test Unit
Ready commands. Can be used to time SCSI command overhead. |
sg_unmap |
UNMAP |
getopt |
f,s,t,w |
logical block provisioning
support ("Trim" in the ATA world) |
sg_verify | VERIFY [10, 16] |
getopt |
f,s,t,w | reads indicated blocks on a SCSI disks, stops on the first error found. Does not yield any data. Useful for media scans. |
sg_vpd |
INQUIRY |
getopt |
f,s,t,w |
Decodes standard and some
vendor Vital Product Data (VPD) pages. |
sg_write_buffer |
WRITE BUFFER |
getopt |
f,s,t,w |
write data; can be used to
download firmware |
sg_write_long |
WRITE LONG [10, 16] |
getopt |
f,s,t,w | writes to a LBA, data which
includes the block and ECC data. Suitable data typically
fetched by prior sg_read_long utility. |
sg_write_same |
WRITE SAME [10, 16, 32] |
getopt |
f,s,t,w |
writes a single block to one
or more (consecutive) LBAs. Also supports some logical block
provisioning options. |
sg_write_verify |
WRITE AND VERIFY [10, 16] |
getopt |
f,s,t,w |
send one or more commands to consecutive
LBAs, reading data from a given file or stdin. |
sg_wr_mode |
MODE SELECT [6, 10] |
getopt |
f,s,t,w | writes mode pages supplied in
ASCII hex (e.g. from "sg_modes
-r") to the SCSI device. See sdparm for another method of
setting mode page parameters. |
sg_xcopy |
EXTENDED COPY(LID1) |
dd |
Uses the EXTENDED COPY(LID1) command to copy
between disks. Note: the ddpt
utility contains this functionality and adds ODX (a subset
of XCOPY(LID4)) capability. ddpt is ported to f,s,w. |
|
sg_zone |
CLOSE ZONE, FINISH ZONE, OPEN ZONE |
getopt |
f,s,t,w |
Sends one of these commands to the given ZBC
device. See related sg_rep_zones and sg_reset_wp. |
script name |
<devices> on cl |
Description
|
rescan-scsi-bus.sh | 0 |
copy of Kurt Garloff's useful script with
additions from Suse amongst others |
scsi_logging_level |
0 |
create, get or set Linux scsi logging level |
scsi_mandat |
1 |
check for mandatory SCSI command support |
scsi_readcap |
1 or more |
use SCSI READ CAPACITY command on each given
device |
scsi_ready |
1 or more |
use SCSI TEST UNIT READY on each given
<device> |
scsi_satl |
1 |
check for SCSI to ATA Translation Layer
(SATL) support |
scsi_start |
1 or more |
use SCSI START STOP UNIT command to start
each <device> |
scsi_stop |
1 or more |
use SCSI START STOP UNIT command to stop each <device> |
scsi_temperature |
1 or more |
use SCSI LOG SENSE command to fetch
temperature of each <device> |
Utility |
Main SCSI commands invoked |
directory |
CLI |
Ported |
Notes |
ddpt |
READ, WRITE |
--> |
dd |
f,s,w |
dd variant, rewrite of sg_dd. In its
own package: ddpt |
hxascdmp |
- |
utils |
adhoc |
f,s,w |
converts stdin (assumed
binary) to ASCII hex and ASCII, sending its output to stdout
(like the Unix od
command and hexdump
in BSD) |
sas_disk_blink | MODE SELECT | --> | script in sdparm package. It blinks the ready LED on a SAS disk | ||
scsi_inquiry |
INQUIRY |
examples |
adhoc |
uses deprecated
SCSI_IOCTL_SEND_COMMAND ioctl |
|
sdparm |
MODE SENSE/SELECT, INQUIRY |
--> |
getopt |
f,s,t,w |
was in the sg3_utils package
for a while; now in own package, see sdparm
. sdparm manipulates mode pages, reads VPD pages and sends
simple commands |
sg_chk_asc |
- |
utils |
getopt |
f,s |
check asc/ascq codes from www.t10.org page against
sg3_utils internal table |
sg__sat_identify |
ATA PASS-THROUGH |
examples |
adhoc |
Simpler version of
sg_sat_identify that uses the Linux SG_IO ioctl directly. |
|
sg__sat_phy_event |
ATA PASS-THROUGH | examples |
getopt |
Simpler version of sg_sat_phy_event | |
sg__sat_set_features | ATA PASS_THROUGH | examples | getopt |
Simpler version of sg_sat_set_features that uses the Linux SG_IO ioctl directly. | |
sg_simple1,2,3,4,5 |
INQUIRY, TEST UNIT READY |
examples |
adhoc |
Simple code examples of using
the scsi generic (sg) driver interface |
|
sg_simple16 |
READ |
examples |
adhoc |
Simple code example of
sending a 16 byte cdb SCSI READ command |
|
smp_discover |
SAS SMP commands |
--> |
f,s |
discover phy attachments within a SAS
expander. In separate package: smp_utils |
Exit status |
Description |
0 |
no error detected. Utility
completed successfully |
1 |
syntax error in command line options or their arguments, or an illegal combination of options |
2 |
the device reports that it is not ready for the operation requested. The device may be in the process of becoming ready (e.g. spinning up but not at speed) so the utility may work a little while later |
3 |
the device reports a medium or hardware error (or a blank check). For example an attempt to read a corrupted block on a disk will yield this value |
5 |
the device reports an "illegal request" with an additional sense code other than "invalid operation code". This is often a supported command with a field set requesting an unsupported capability. For commands that require a "service action" field (e.g. READ CAPACITY(16) ) this value can indicate that the command is not supported |
6 |
the device reports a "unit attention" condition. This usually indicates that something, unrelated to the requested command, has occurred (e.g. a device reset) potentially before the current SCSI command was sent. The requested command has not been executed by the device. Note that unit attention conditions are usually only reported once by a device |
7 |
the device reports a "data
protect" sense key. This implies some mechanism has blocked
writes (or possibly all access to the media). |
9 |
the device reports an illegal request with an additional sense code of "invalid operation code" which means that the device doesn't support the requested command |
10 |
the device reports a "copy aborted" sense key |
11 |
the device (or transport) reports an aborted command. In some cases this can be caused by congestion on the transport and retrying the command may be successful |
14 |
the device reports a "miscompare" sense key.
sg_verify and sg_compare_and_write may report this.
Introduced in version 1.37 |
15 |
the utility is unable to open, close or use the given device or another file. The given file name could be incorrect or there may be permission problems. Adding the '-v' option may give more information |
20 |
the device reports it has a check condition but "no sense". Some polling commands (e.g. REQUEST SENSE) can react this way. It is unlikely that this value will occur as an exit status |
21 |
the device reports a "recovered error". The requested command was successful. Most likely a utility will report a recovered error to stderr and continue, probably leaving the utility with an exit status of 0 |
24 |
the device reports a SCSI status of
"reservation conflict". This implies that some other
initiator holds a reservation on this device; that
reservation may block writes or almost all access to that
device via the current initiator |
25 |
the device reports a SCSI status of
"condition met". Currently only the PRE-FETCH command (see
SBC-4) yields this status. |
26 |
the device reports a SCSI status of "busy".
SAM-5 defines this status as the logical unit is temporarily
unable to process a command. It is recommended to
re-issue the command. |
27 |
the device reports a SCSI status of "task set
full". |
28 |
the device reports a SCSI status of "ACA
active". ACA is "auto contingent allegiance" and is seldom
used. |
29 |
the device reports a SCSI status of "task
aborted". SAM-5 says: "This status shall be returned if a
command is aborted by a command or task management
function on another I_T nexus and the Control mode page TAS
bit is set to one". |
33 |
the command sent to the device has timed out. This occurs in Linux, in other ports a command timeout will appear as a transport (or OS) error |
40 |
the command sent to device has received an
"aborted command" sense key with an additional sense code of
0x10. This is related to problems with
protection information (PI or DIF). Examples include reading
unmapped blocks or blocks that have never been written to
(since the last format) |
97 |
the response to a SCSI command failed sanity checks |
98 |
the device reports it has a check condition but the error doesn't fit into any of the above categories |
99 |
any errors that can't be categorized into values 1 to 98 may yield this value. This includes transport and operating system errors |
126 |
utility found but could not be executed.
Possibly a permissions problem or executable is for a
different architecture |
127 |
utility not found |
128+ <signum> |
utility was interrupted by signal
<signum> |
255 |
utility tried to yield an exit status of 255
or higher |
Example: given these 3 SCSI devices:
$ cat /proc/scsi/scsi
Attached devices:
Host: scsi1 Channel: 00 Id: 00
Lun: 00
Vendor: SEAGATE
Model: ST318451LW Rev: 0003
Type:
Direct-Access
ANSI SCSI revision: 03
Host: scsi2 Channel: 00 Id: 04
Lun: 00
Vendor: PIONEER
Model: DVD-ROM DVD-303 Rev: 1.10
Type:
CD-ROM
ANSI SCSI revision: 02
Host: scsi2 Channel: 00 Id: 06
Lun: 00
Vendor:
YAMAHA Model:
CRW4416S Rev:
1.0g
Type:
CD-ROM
ANSI SCSI revision: 02
then the output from sg_scan is:
$ sg_scan
/dev/sg0: scsi1 channel=0 id=0
lun=0 type=0
/dev/sg1: scsi2 channel=0 id=4 lun=0 type=5
/dev/sg2: scsi2 channel=0 id=6
lun=0 type=5
INQUIRY data can be added to that output with the '-i' option. The sg_map
utility shows the mapping between scsi generic (sg) devices and
the corresponding primary device node. For some peripheral device
types, SCSI enclosures for example, there is no mapping and the
enclosure device must be accessed via a sg device node.
$ sg_map
/dev/sg0 /dev/sda
/dev/sg1 /dev/scd0
/dev/sg2 /dev/scd1
sg_utils version |
tarballs |
rpm source rpms ** |
i386 rpm binaries ** |
1.02 | sg_utils-1.02.tgz | sg_utils-1.02-1.src.rpm | sg_utils-1.02-1.i386.rpm |
Return to main page.
Last updated: 4th July 2016