Provided by: sg3-utils_1.17-2_i386
sg_inq - outputs data retrieved from the SCSI INQUIRY or ATA IDENTIFY
(PACKET) DEVICE command
sg_inq [-a] [-A] [-b] [-c] [-cl] [-d] [-e] [-h] [-H] [-i] [-m] [-m]
[-o=<opcode_page>] [-p=<vpd_page>] [-P] [-r] [-s] [-v] [-V] [-x] [-36]
This utility by default sends an INQUIRY SCSI 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 bits are clear.
An important "non-standard" INQUIRY page is the Device Identification
Vital Product Data (VPD) page (page number: 0x83). Since SPC-3, support
for this page has been flagged as mandatory. The ’-i’ option decodes
If <device> exists and the SCSI INQUIRY fails (because the SG_IO ioctl
is unknown) then an ATA IDENTIFY (PACKET) DEVICE is tried. If it
succeeds then device identification strings are output. If the "-r"
option is given then the 512 byte IDENTIFY response is output in
binary. If the "-H" (or "-h") option is given then the 512 byte
response is output in ASCII hex, grouped as 256 16 bit words, 8 words
per line. If the "-A" option is given then the SCSI INQUIRY is not
performed and the device is assumed to be ATA (or ATAPI). This allows
ATAPI transport information to be found for ATAPI cd/dvd drives; since
without this option such drives respond to a SCSI INQUIRY command.
The reference document used for interpreting an INQUIRY is T10/1713-D
Revision 2 (SPC-4, 15 September 2005) 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 .
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. See the
-a decodes the ATA Information Vital Product Data (VPD) page
[0x89]. If ’-H’ is given then the whole page as ASCII hex
bytes; with ’-HH’ the IDENTIFY (PACKET) DEVICE response is
output in ASCII hex bytes; and without either the IDENTIFY
(PACKET) DEVICE response is output in 16 bit ASCII hex words.
This page is defined in SAT (revision 5) at www.t10.org .
-A Assume given <device> is an ATA or ATAPI device which can
receive ATA passthrough 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.
-b decodes the Block Limits Vital Product Data (VPD) page [0xb0].
This page is defined in SBC-2 (revision 16) at www.t10.org .
-c set the Command Support Data (CmdDt) bit (defaults to clear(0)).
Used in conjunction with the ’-o=<opcode>’ option to specify the
SCSI command opcode to supply the support data for. The command
support data is a mask of the same length as the command with
bits set in positions that are modifiable. For example, ’12 03
ff 00 ff 01’ shows the device supports the EVPD and CmdDt bits
[byte 1, bits 0 and 1] in an INQUIRY command. The CmdDt bit is
now obsolete. It has been replaced by the REPORT SUPPORTED
OPERATION CODES command which is accessed via the sg_opcodes
-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
-d lists version descriptors (if any) after a standard INQUIRY
response. There are up to 8 version descriptors in the upper
bytes of a standard INQUIRY, If the code is recognised then the
corresponding string is output. Version descriptors are
versions of standards and drafts that the device claims to
comply with (e.g. SAM, SPC, SBC, SPI, FCP, SAS etc).
-e enable (i.e. sets) the Vital Product Data (EVPD) bit (defaults
to clear(0)). Used in conjunction with the ’-p=<vpd_page>’
option to specify the VPD page to fetch. If ’-p’ is not given
then VPD page 0 (list supported VPD pages) is assumed. Support
for VPD page 0 and page 0x83 (device identification) have been
made mandatory in SPC-3 .
-h outputs INQUIRY response in hex rather than trying to decode it.
When used with ’-i’ outputs partially decoded device
identification descriptors with the identifier itself output in
hex. When selected, ATA IDENTIFY responses are output in 16 bit
words if ’-h’ is given; they are output in bytes when ’-hh’ (or
’-HH’) is given. The ’-hh’ option has a similar effect on the
ATA information VPD page decoding (i.e. when the ’-a’ option is
-H same action as "-h". For compatibility with many other sg3_utils
programs in which "-H" is for hex output.
-i decodes the Device Identification Vital Product Data (VPD) page
[0x83]. This page is made up of several "identification
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’. Since SPC-3,
support for the device identification VPD page is mandatory.
-m decodes the Management network addresses Vital Product Data
(VPD) page [0x85]. This page is made up of several "network
service descriptors". If ’-h’ is given then each descriptor
payload is output in hex.
-M decodes the Mode page policy Vital Product Data (VPD) page
[0x87]. This page is made up of several "mode page policy
descriptors". If ’-h’ is given then each descriptor payload is
output in hex.
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 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 (see sg_opcodes). Defaults
to 0 so if ’-e’ is given without ’-o=’ then VPD page 0 is
same action as ’-o=<opcode_page>’ option described above. 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
’-p=’ then VPD page 0 is output.
-P decodes the Unit Path Report Vital Product Data (VPD) page
[0xc0], which is specific to selected EMC devices. To see the
whole VPD 0xc0 page response in hex use ’-p=c0 -h’.
-r outputs the INQUIRY response in binary. If the SCSI INQUIRY has
failed and an ATA IDENTIFY succeeds then the 512 bytes of the
IDENTIFY response is output in binary. Overrides the various VPD
decoding options. Standard output should be redirected to a file
or some other program that can process binary data.
-s decodes the SCSI Ports Vital Product Data (VPD) page [0x88]. The
response contains information about the target (or rarely the
initiator) ports associated with the addressed device server
(i.e. the target). In practice this is a way to find all target
port addresses of a dual ported disk. If ’-h’ is given then
each target (and/or initiator) descriptor is output in hex. To
see the whole VPD 0x88 page response in hex use ’-p=88 -h’.
-v verbose: print out cdb of issued commands prior to execution.
’-vv’ and ’-vvv’ are also accepted yielding greater verbosity.
For ATA disks the identity response (256 16 bit words) is output
when this option is given.
-V print out version string
-x decodes the Extended INQUIRY data Vital Product Data (VPD)
[0x86] page. If ’-h’ is given then prints out VPD page in hex
which is similar to using ’-p=86 -h’.
-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.
-? output usage message and exit. Ignore all other parameters.
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,
hence the ’-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
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 given 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 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 (typically via 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 linux operating system may choose to put a SAT layer in the driver
"stack" (e.g. libata).
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 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 ’-A’ option (e.g. "sg_inq -A /dev/hdc) and to see the response
in hex add the "-H" option as well (e.g. "sg_inq -A -H /dev/hdc").
Written by Doug Gilbert
Report bugs to <dgilbert at interlog dot com>.
Copyright © 2001-2005 Douglas Gilbert
This software is distributed under the GPL version 2. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR
sgdiag(scsirastools), sg_opcodes(sg3_utils), sg_modes(sg3_utils),