sg_inq - sends a SCSI INQUIRY or ATA IDENTIFY (PACKET) DEVICE command
and outputs the response
sg_inq [--ata] [--cmddt] [--descriptors] [--extended] [--help] [--hex]
[--id] [--len=LEN] [--maxlen=LEN] [--page=PG] [--raw] [--verbose]
[--version] [--vpd] DEVICE
sg_inq [-36] [-a] [-A] [-b] [-c] [-cl] [-d] [-e] [-h] [-H] [-i]
[-l=LEN] [-m] [-M] [-o=OPCODE_PG] [-p=VPD_PG] [-P] [-r] [-s] [-v] [-V]
[-x] [-36] [-?] DEVICE
This utility by default sends a SCSI INQUIRY command to the given
device and then outputs the response. All SCSI devices are meant to
respond to a "standard" INQUIRY command with at least a 36 byte
response (in SCSI 2 and higher). An INQUIRY is termed as "standard"
when both the EVPD and CmdDt (obsolete) bits are clear.
This utility supports two command line syntaxes, 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
An important "non-standard" INQUIRY page is the Device Identification
Vital Product Data (VPD) page [0x83]. Since SPC-3, support for this
page is mandatory. The --id option decodes this page. New VPD page
information is no longer being added to this utility. To get
information on new VPD pages see the sg_vpd(8) or sdparm(8) utilities.
If the DEVICE exists and the SCSI INQUIRY fails (because the SG_IO
ioctl is not supported) then an ATA IDENTIFY (PACKET) DEVICE is tried.
If it succeeds then device identification strings are output. The --raw
and --hex options can be used to manipulate the output. If the --ata
option is given then the SCSI INQUIRY is not performed and the DEVICE
is assumed to be ATA (or ATAPI).
The reference document used for interpreting an INQUIRY is T10/1713-D
Revision 11 (SPC-4, 14 May 2007) found at http://www.t10.org .
Obsolete items in the standard INQUIRY response are displayed in
brackets. The reference document for the ATA IDENTIFY (PACKET) DEVICE
command is ATA8-ACS found at http://www.t13.org .
Arguments to long options are mandatory for short options as well. The
options are arranged in alphabetical order based on the long option
Assume given DEVICE is an ATA or ATAPI device which can receive
ATA commands from the host operating system. Skip the SCSI
INQUIRY command and use either the ATA IDENTIFY DEVICE command
(for nonpacket devices) or the ATA IDENTIFY PACKET DEVICE
command. To show the response in hex, add a ’--verbose’ option.
This option is only available in Linux.
set the Command Support Data (CmdDt) bit (defaults to clear(0)).
Used in conjunction with the --page=PG option where PG specifies
the SCSI command opcode to query. When used twice (e.g. ’-cc’)
this utility forms a list by looping over all 256 opcodes (0 to
255 inclusive) only outputting a line for found commands. The
CmdDt bit is now obsolete. It has been replaced by the REPORT
SUPPORTED OPERATION CODES command, see the sg_opcodes(8)
decodes and prints the version descriptors found in a standard
INQUIRY response. There are up to 8 of them. Version descriptors
indicate which versions of standards and/or drafts the DEVICE
complies with. The normal components of a standard INQUIRY are
output (typically from the first 36 bytes of the response)
followed by the version descriptors if any.
-e see entry below for --vpd.
-E, -x, --extended
prints the extended INQUIRY VPD page [0x86].
print out the usage message then exit. When used twice, after
the usage message, there is a list of available abbreviations
than can be given to the --page=PG option.
rather than decode a standard INQUIRY response, a VPD page or
command support data; print out the response in hex to stdout.
Error messages and warnings are typically output to stderr. When
used twice with the ATA Information VPD page [0x89] decodes the
start of the response then output the ATA IDENTIFY (PACKET)
DEVICE response in hexadecimal bytes (not 16 bit words). When
used three times with the ATA Information VPD page [0x89] or the
--ata option, this utility outputs the ATA IDENTIFY (PACKET)
DEVICE response in hexadecimal words suitable for input to
’hdparm --Istdin’. See note below.
prints the device identification VPD page [0x83].
the number LEN is the "allocation length" field in the INQUIRY
cdb. This is the (maximum) length of the response to be sent by
the device. The default value of LEN is 0 which is interpreted
as: first request is for 36 bytes and if necessary execute
another INQUIRY if the "additional length" field in the response
indicates that more than 36 bytes is available. If LEN is
greater than 0 then only one INQUIRY command is performed. See
paragraph below about "36 byte INQUIRYs".
this option has the same action as the --len=LEN option. It has
been added for compatibility with the sg_vpd, sg_modes and
switch to older style options.
the PG argument can be either a number of an abbreviation for a
VPD page. To enumerate the available abbreviations for VPD pages
use ’-hh’ or a bad abbreviation (e.g, ’--page=xxx’). When the
--cmddt option is given (once) then PG is interpreted as an
opcode number (so VPD page abbreviations make little sense).
output the response in binary to stdout. Error messages and
warnings, if any, are sent to stderr.
increase level of verbosity. Can be used multiple times.
print out version string then exit.
set the Enable Vital Product Data (EVPD) bit (defaults to
clear(0)). Used in conjunction with the --page=PG option where
PG specifies the VPD page number to query. If the --page=PG is
not given then PG defaults to zero which is the "Supported VPD
pages" VPD page.
Some devices with weak SCSI command set implementations lock up when
they receive commands they don’t understand (or even response lengths
that they don’t expect). Such devices need to be treated carefully, use
the ’--len=36’ option. Without this option this utility will issue an
initial standard INQUIRY requesting 36 bytes of response data. If the
device indicates it could have supplied more data then a second INQUIRY
is issued to fetch the longer response. That second command may lock up
ATA or ATAPI devices that use a SCSI to ATA Translation layer (see SAT
at www.t10.org) may support the ATA Information VPD page. This returns
the IDENTIFY (PACKET) DEVICE response amongst other things. The ATA
Information VPD page can be fetched with ’--page=ai’.
In the INQUIRY standard response there is a ’MultiP’ flag which is set
when the device has 2 or more ports. Some vendors use the preceding
vendor specific (’VS’) bit to indicate which port is being accessed by
the INQUIRY command (0 -> relative port 1 (port "a"), 1 -> relative
port 2 (port "b")). When the ’MultiP’ flag is set, the preceding vendor
specific bit is shown in parentheses. SPC-3 compliant devices should
use the device identification VPD page (0x83) to show which port is
being used for access and the SCSI ports VPD page (0x88) to show all
available ports on the device.
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. disks and ATAPI
DVDs) can also be specified. For example "sg_inq /dev/sda" will work in
the 2.6 series kernels. From lk 2.6.6 other SCSI "char" device names
may be used as well (e.g. "/dev/st0m").
There are two major types of ATA devices: non-packet devices (e.g. ATA
disks) and packet devices (ATAPI). The majority of ATAPI devices are
CD/DVD/BD drives in which the ATAPI transport carries the MMC set (i.e.
a SCSI command set). Further, both types of ATA devices can be
connected to a host computer via a "SCSI" (or some other) transport.
When an ATA disk is controlled via a SCSI (or non-ATA) transport then
two approaches are commonly used: tunnelling (e.g. STP in Serial
Attached SCSI (SAS)) or by emulating a SCSI device (e.g. with a SCSI to
ATA translation layer, see SAT at www.t10.org ). Even when the physical
transport to the host computer is ATA (especially in the case of SATA)
the operating system may choose to put a SAT layer in the driver
"stack" (e.g. libata in Linux).
The main identifying command for any SCSI device is an INQUIRY. The
corresponding command for an ATA non-packet device is IDENTIFY DEVICE
while for an ATA packet device it is IDENTIFY PACKET DEVICE.
When this utility is invoked for an ATAPI device (e.g. a CD/DVD/BD
drive with "sg_inq /dev/hdc") then a SCSI INQUIRY is sent to the device
and if it responds then the response to decoded and output and this
utility exits. To see the response for an ATA IDENTIFY PACKET DEVICE
command add the --ata option (e.g. "sg_inq --ata /dev/hdc).
This utility doesn’t decode the response to an ATA IDENTIFY (PACKET)
DEVICE command, hdparm does a good job at that. The ’-HHH’ option has
been added for use with either the ’--ata’ or ’--page=ai’ option to
produce a format acceptable to "hdparm --Istdin". An example: ’sg_inq
--ata -HHH /dev/hdc | hdparm --Istdin’. See hdparm.
The exit status of sg_inq is 0 when it is successful. Otherwise see the
sg3_utils(8) man page.
OLDER COMMAND LINE OPTIONS
The options in this section were the only ones available prior to
sg3_utils version 1.23 . In sg3_utils version 1.23 and later these
older options can be selected by either setting the SG3_UTILS_OLD_OPTS
environment variable or using --old (or -O) as the first option.
-36 only requests 36 bytes of response data for an INQUIRY.
Furthermore even if the device indicates in its response it can
supply more data, a second (longer) INQUIRY is not performed.
This is a paranoid setting. Equivalent to ’--len=36’ in the
-a fetch the ATA Information VPD page [0x89]. Equivalent to
’--page=ai’ in the main description. This page is defined in SAT
(see at www.t10.org).
-A Assume given DEVICE is an ATA or ATAPI device. Equivalent to
--ata in the main description.
-b decodes the Block Limits VPD page [0xb0]. Equivalent to
’--page=bl’ in the main description. This page is defined in
SBC-2 (see www.t10.org).
-c set the Command Support Data (CmdDt) bit (defaults to clear(0)).
conjunction with the -o=OPCODE_PG option to specify the SCSI
command opcode to query. Equivalent to --cmddt in the main
-cl lists the command data for all supported commands (followed by
the command name) by looping through all 256 opcodes. This
option uses the CmdDt bit which is now obsolete. See the
sg_opcodes(8) utility. Equivalent to ’--cmddt --cmddt’ in the
-d decodes depending on context. If -e option is given, or any
option that implies -e (e.g. ’-i’ or ’-p=80’), then this utility
attempts to decode the indicated VPD page. Otherwise the
version descriptors (if any) are listed following a standard
INQUIRY response. In the version descriptors sense, equivalent
to --descriptors in the main description.
-e enable (i.e. sets) the Vital Product Data (EVPD) bit (defaults
to clear(0)). Used in conjunction with the -p=VPD_PG option to
specify the VPD page to fetch. If -p=VPD_PG is not given then
VPD page 0 (list supported VPD pages) is assumed.
-h outputs INQUIRY response in hex rather than trying to decode it.
Equivalent to --hex in the main description.
-H same action as -h. Equivalent to --hex in the main description.
-i decodes the Device Identification VPD page [0x83]. Equivalent to
--id in the main description. This page is made up of several
"designation descriptors". If -h is given then each descriptor
header is decoded and the identifier itself is output in hex.
To see the whole VPD 0x83 page response in hex use ’-p=83 -h’.
-m decodes the Management network addresses VPD page [0x85].
Equivalent to ’--page=mna’ in the main description.
-M decodes the Mode page policy VPD page [0x87]. Equivalent to
’--page=mpp’ in the main description.
-N switch to the newer style options.
used in conjunction with the -e or -c option. If neither given
then the -e option assumed. When the -e option is also given (or
assumed) then the argument to this option is the VPD page
number. The argument is interpreted as hexadecimal and is
expected to be in the range 0 to ff inclusive. Only VPD page 0
is decoded and it lists supported VPD pages and their names (if
known). To decode the mandatory device identification page
(0x83) use the -i option. A now obsolete usage is when the -c
option is given in which case the argument to this option is
assumed to be a command opcode number. Recent SCSI draft
standards have moved this facility to a separate command (see
sg_opcodes(8)). Defaults to 0 so if -e is given without this
option then VPD page 0 is output.
same action as -o=OPCODE_PG option described in the previous
entry. Since the opcode value with the CmdDt is now obsolete,
the main use of this option is to specify the VPD page number.
The argument is interpreted as hexadecimal and is expected to be
in the range 0 to ff inclusive. Defaults to 0 so if -e is given
without this option then VPD page 0 is output.
-P decodes the Unit Path Report VPD page [0xc0] which is EMC
specific. Equivalent to ’--page=upr’ in the main description.
-r outputs the response in binary to stdout. Equivalent to --raw
in the main description. Can be used twice (i.e. ’-rr’ (and
’-HHH’ has same effect)) and if used with the -A or -a option
yields output with the same format as "cat
/proc/ide/hd<x>/identify" so that it can then be piped to
-s decodes the SCSI Ports VPD page [0x88]. Equivalent to
’--page=sp’ in the main description.
-v increase level of verbosity. Can be used multiple times.
-V print out version string then exit.
-x decodes the Extended INQUIRY data VPD [0x86] page. Equivalent
to ’--page=ei’ in the main description.
-? output usage message and exit. Ignore all other parameters.
Written by Doug Gilbert
Report bugs to <dgilbert at interlog dot com>.
Copyright © 2001-2010 Douglas Gilbert
This software is distributed under the GPL version 2. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR
sg_opcodes(8), sg_vpd(8), sdparm(8), hdparm(8), sgdiag(scsirastools)