dwww Home | Manual pages | Find package

SG_INQ(8)                          SG3_UTILS                         SG_INQ(8)

NAME
       sg_inq - issue SCSI INQUIRY command and/or decode its response

SYNOPSIS
       sg_inq   [--ata]  [--block=0|1]  [--cmddt]  [--descriptors]  [--export]
       [--extended] [--force] [--help] [--hex] [--id] [--inhex=FN] [--len=LEN]
       [--long] [--maxlen=LEN] [--only] [--page=PG] [--raw] [--vendor] [--ver-
       bose] [--version] [--vpd] DEVICE

       sg_inq [-36] [-a] [-A] [-b] [--B=0|1] [-c] [-cl] [-d]  [-e]  [-f]  [-h]
       [-H]  [-i]  [-I=FN]  [-l=LEN] [-L] [-m] [-M] [-o] [-p=VPD_PG] [-P] [-r]
       [-s] [-u] [-v] [-V] [-x] [-36] [-?] DEVICE

DESCRIPTION
       This utility, when DEVICE is given, sends a SCSI INQUIRY command to  it
       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 (now obsolete) bits are clear.

       Alternatively the --inhex=FN option can be given. In this  case  FN  is
       assumed  to be a file name ('-' for stdin) containing ASCII hexadecimal
       representing an INQUIRY response.

       This utility supports two command line syntaxes. The preferred  one  is
       shown  first  in the synopsis and is described in the main OPTIONS sec-
       tion. A later section titled OLDER COMMAND LINE OPTIONS  describes  the
       second group of options.

       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 in-
       formation is no longer being added to this utility. To get  information
       on new VPD pages see the sg_vpd(8) or sdparm(8) utilities.

       In Linux, if the DEVICE exists and the SCSI INQUIRY fails (e.g. 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). For  more  information  see
       the ATA DEVICES section below.

       In  some operating systems a NVMe device (e.g. SSD) may be given as the
       DEVICE. For more information see the NVME DEVICES section below.

       The reference document used for interpreting an INQUIRY is T10/BSR  IN-
       CITS  502  Revision  19  which  is draft SPC-5 revision 19, 14 February
       2018). It can be found at http://www.t10.org .  Obsolete  and  reserved
       items  in  the standard INQUIRY response output are displayed in square
       brackets.

OPTIONS
       Arguments to long options are mandatory for short options as well.  The
       options are arranged in alphabetical order based  on  the  long  option
       name.

       -a, --ata
              Assume  given DEVICE is an ATA or ATAPI device which can receive
              ATA commands from the host operating system. Skip the  SCSI  IN-
              QUIRY  command  and  use  either the ATA IDENTIFY DEVICE command
              (for non-packet devices) or the ATA IDENTIFY PACKET DEVICE  com-
              mand.  To  show  the  response in hex, add a '--verbose' option.
              This option is only available in Linux.

       -B, --block=0|1
              this option controls how  the  file  handle  to  the  DEVICE  is
              opened.  If this argument is 0 then the open is non-blocking. If
              the argument  is  1  then  the  open  is  blocking.  In  Unix  a
              non-blocking  open  is  indicated  by  a O_NONBLOCK flag while a
              blocking open is indicated by the absence of that flag. The  de-
              fault  value depends on the operating system and the type of DE-
              VICE node. For Linux pass-throughs (i.e. the sg and bsg drivers)
              the default is 0.

       -c, --cmddt
              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  commands  that  are
              found.  The  CmdDt  bit is now obsolete; it has been replaced by
              the REPORT SUPPORTED OPERATION CODES  command,  see  the  sg_op-
              codes(8) utility.

       -d, --descriptors
              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)  fol-
              lowed by the version descriptors if any.

       -e     see entry below for --vpd.

       -f, --force
              As  a  sanity  check,  the normal action when fetching VPD pages
              other than page 0x0 (the "Supported VPD pages" VPD page), is  to
              first  fetch  page  0x0 and only if the requested page is one of
              the supported pages, to go ahead and fetch the requested page.
              When this option is given, skip checking of VPD page 0x0  before
              accessing  the  requested  VPD page. The prior check of VPD page
              0x0 is known to crash certain USB devices, so use with care.

       -u, --export
              prints out information obtained from the device. The output  can
              be modified by selecting a VPD page with PG (from --page=PG). If
              the  device  identification VPD page 0x83 is given it prints out
              information in the form: "SCSI_IDENT_<assoc>_<type>=<ident>"  to
              stdout.  If  the  device serial number VPD page 0x80 is given it
              prints out information in the form: "SCSI_SERIAL=<ident>". Other
              VPD pages are not supported. If no VPD page is given  it  prints
              out    information    in   the   form:   "SCSI_VENDOR=<vendor>",
              "SCSI_MODEL=<model>", and "SCSI_REVISION=<rev>", taken from  the
              standard  inquiry.  This may be useful for tools like udev(7) in
              Linux.

       -E, -x, --extended
              prints the extended INQUIRY VPD page [0x86].

       -h, --help
              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.

       -H, --hex
              rather than decode a standard INQUIRY response, a  VPD  page  or
              command support data; print out the response in hex and send the
              output  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 outputs 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 suit-
              able for input to 'hdparm --Istdin'.  See note below.
              To  generate  output  suitable for placing in a file that can be
              used by a later invocation with the --inhex=FN option,  use  the
              '-HHHH'   option   (e.g.   'sg_inq   -p   di  -HHHH  /dev/sg3  >
              dev_id.hex').

       -i, --id
              prints the device identification VPD page [0x83].

       -I, --inhex=FN
              FN is expected to be a file name (or '-' for stdin)  which  con-
              tains  ASCII  hexadecimal or binary representing an INQUIRY (in-
              cluding VPD page) response. This utility will then  decode  that
              response.  It is preferable to also supply the --page=PG option,
              if not this utility will attempt to guess  which  VPD  page  (or
              standard  INQUIRY)  that  the  response  is associated with. The
              hexadecimal should be arranged as 1 or 2 digits  representing  a
              byte  each  of  which is whitespace or comma separated. Anything
              from and including a hash mark to the end of a line is  ignored.
              If the --raw option is also given then FN is treated as binary.

       -l, --len=LEN
              the  number  LEN is the "allocation length" field in the INQUIRY
              cdb.  This is the (maximum) length of the response  returned  by
              the  device.  The default value of LEN is 0 which is interpreted
              as: first request is for 36 bytes and if necessary  execute  an-
              other  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  per-
              formed.   This  means  that the Serial Number (obtained from the
              Serial Number VPD pgae (0x80)) is not fetched and therefore  not
              printed.  See the NOTES section below about "36 byte INQUIRYs".

       -L, --long
              this option causes more information to be decoded from the Iden-
              tify command sent to a NVMe DEVICE.

       -m, --maxlen=LEN
              this  option  has the same action as the --len=LEN option above.
              It has been added for compatibility with  the  sg_vpd,  sg_modes
              and sg_logs utilities.

       -O, --old
              Switch to older style options. Please use as first option on the
              command line.

       -o, --only
              Do  not  attempt  to additionally retrieve the serial number VPD
              page (0x80) to enhance the output of a standard INQUIRY. So with
              this option given and no others, this utility will send a  stan-
              dard INQUIRY SCSI command and decode its response. No other SCSI
              commands will be sent to the DEVICE.  Without this option an ad-
              ditional  SCSI command is sent: a (non-standard) SCSI INQUIRY to
              fetch the Serial Number VPD page. However the Serial Number  VPD
              page  is  not mandatory (while the Device Identification page is
              mandatory but a billion USB keys ignore that) and may cause nui-
              sance error reports.
              For NVMe devices only the Identify controller is performed, even
              if the DEVICE includes a namespace identifier.  For  example  in
              FreeBSD given a DEVICE named /dev/nvme0ns1 then an Identify con-
              troller  is  sent to /dev/nvme0 and nothing is sent to its "ns1"
              (first namespace).

       -p, --page=PG
              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  op-
              code number (so VPD page abbreviations make little sense).
              If  PG  is  a  negative  number, then a standard INQUIRY is per-
              formed. This can be used to override some guessing logic associ-
              ated with the --inhex=FN option.
              If PG is not found in the 'Supported VPD pages' VPD  page  (0x0)
              then  EDOM is returned. To bypass this check use the --force op-
              tion.

       -r, --raw
              in the absence of --inhex=FN then the output response is in  bi-
              nary.   The  output should be piped to a file or another utility
              when this option is used. The binary is sent to stdout, and  er-
              rors are sent to stderr.
              If  used  with  --inhex=FN then the contents of FN is treated as
              binary.

       -s, --vendor
              output a standard INQUIRY response's vendor specific fields from
              offset 36 to 55 in ASCII. When used twice (i.e. '-ss') also out-
              put the vendor specific field from offset 96 in ASCII.  This  is
              only done if the data passes some simple sanity checks.

       -v, --verbose
              increase level of verbosity. Can be used multiple times.

       -V, --version
              print out version string then exit.

       -e, --vpd
              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. A more up to date decoding of VPD pages can be
              found in the sg_vpd(8) utility.

NOTES
       Some devices with weak SCSI command set implementations  lock  up  when
       they  receive  commands they don't understand (and some lock up if they
       receive 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 faulty devices.

       ATA  or ATAPI devices that use a SCSI to ATA Translation layer (see SAT
       at www.t10.org) may support the SCSI ATA INFORMATION VPD page. This re-
       turns 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 be-
       ing 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 and later 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").

       The number of bytes output by --hex and --raw is 36 bytes or the number
       given to --len=LEN (or --maxlen=LEN). That number  is  reduced  if  the
       "resid"  returned  by  the HBA indicates less bytes were sent back from
       DEVICE.

       The DEVICE is opened with a read-only  flag  (e.g.  in  Unix  with  the
       O_RDONLY flag).

ATA DEVICES
       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 con-
       nected 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.

NVME DEVICES
       Currently these device are typically SSDs (Solid State Disks)  directly
       connected  to a PCIe connector or via a specialized connector such as a
       M2 connector. Linux and FreeBSD treat NVMe storage devices as  separate
       from  SCSI  storage  with device names like /dev/nvme0n1 (in Linux) and
       /dev/nvme0ns1 (in FreeBSD). The NVM Express group has a document titled
       "NVM Express: SCSI Translation Reference" which defines a partial "SCSI
       to NVMe Translation Layer" often known by its acronym: SNTL.

       On operating systems where it is supported by this package, this  util-
       ity  will  detect  NVMe  storage devices directly connected and send an
       Identify controller NVMe Admin command and decode its response. A  NVMe
       controller  is  architecturally similar to a SCSI target device. If the
       NVMe DEVICE indicates a namespace then an Identify namespace NVMe Admin
       command is sent to that namespace and its response  is  decoded.  Name-
       spaces  are numbered sequentially starting from 1. Namespaces are simi-
       lar to SCSI Logical Units and their identifiers (nsid_s) can be thought
       of as SCSI LUNs. In the Linux and FreeBSD example  device  names  above
       the "n1" and the "ns1" parts indicate nsid 1 . If no namespace is given
       in  the  DEVICE  then  all  namespaces found in the controller are sent
       Identify namespace commands and the responses are decoded.

       To get more details in the response use the --long option. To only  get
       the controller's Identify decoded use the --only option.

       It  is  possible that even though the DEVICE presents as a NVMe device,
       it has a SNTL and accepts SCSI commands. In this case to  send  a  SCSI
       INQUIRY  command  (and  fetch its VPD pages) use 'sg_vpd -p sinq <dev>'
       (or to get VPD pages: 'sg_vpd -p <vpd_page> <dev>').

EXIT STATUS
       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 . 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.

       -36    only requests 36 bytes of response data for an INQUIRY. Further-
              more  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 OPTIONS  sec-
              tion.

       -a     fetch  the  ATA  Information  VPD  page  [0x89].  Equivalent  to
              '--page=ai' in the OPTIONS section. 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 OPTIONS section.

       -b     decodes  the  Block  Limits  VPD  page  [0xb0].   Equivalent  to
              '--page=bl'  in  the  OPTIONS  section.  This page is defined in
              SBC-2 (see www.t10.org) and later.

       -B=0|1 equivalent to --block=0|1 in OPTIONS section.

       -c     set the Command Support Data (CmdDt) bit (defaults to clear(0)).
              Used in conjunction with the -p=VPD_PG  option  to  specify  the
              SCSI  command  opcode to query. Equivalent to --cmddt in the OP-
              TIONS section.

       -cl    lists the command data for all supported commands  (followed  by
              the  command  name) by looping through all 256 opcodes. This op-
              tion uses the CmdDt bit which is now obsolete.  See  the  sg_op-
              codes(8)  utility.   Equivalent  to '--cmddt --cmddt' in the OP-
              TIONS section.

       -d     decodes depending on context. If -e option is given, or any  op-
              tion  that  implies -e (e.g. '-i' or '-p=80'), then this utility
              attempts to decode the indicated VPD page.  Otherwise  the  ver-
              sion  descriptors  (if  any) are listed following a standard IN-
              QUIRY response. In the version descriptors sense, equivalent  to
              --descriptors in the OPTIONS section.

       -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.

       -f     Equivalent to --force in the OPTIONS section.

       -h     outputs INQUIRY response in hex rather than trying to decode it.
              Equivalent to --hex in the OPTIONS section.

       -H     same action as -h.  Equivalent to --hex in the OPTIONS section.

       -i     decodes the Device Identification VPD page [0x83]. Equivalent to
              --id in the OPTIONS section. 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'.

       -I=FN  equivalent to --inhex=FN in the OPTIONS section.

       -l=LEN equivalent to --len=LEN in the OPTIONS section.

       -L     equivalent to --long in the OPTIONS section.

       -m     decodes the Management network addresses VPD page [0x85]. Equiv-
              alent to '--page=mna' in the OPTIONS section.

       -M     decodes the Mode page policy VPD  page  [0x87].   Equivalent  to
              '--page=mpp' in the OPTIONS section.

       -N, --new
              Switch to the newer style options.

       -o     equivalent to --only in the OPTIONS section.

       -p=VPD_PG
              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  num-
              ber.  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)).  De-
              faults  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  spe-
              cific.  Equivalent to '--page=upr' in the OPTIONS section.

       -r     outputs  the  response in binary to stdout.  Equivalent to --raw
              in the OPTIONS section.  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>/iden-
              tify" so that it can then be piped to "hdparm --Istdin".

       -s     decodes  the  SCSI  Ports  VPD  page  [0x88].    Equivalent   to
              '--page=sp' in the OPTIONS section.

       -u     equivalent to '--export' in the OPTIONS section.

       -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 OPTIONS section.

       -?     output usage message and exit. Ignore all other parameters.

EXAMPLES
       The examples in this page use Linux device names. For  suitable  device
       names  in  other  supported  Operating Systems see the sg3_utils(8) man
       page.

       To view the standard inquiry response use without options:

          sg_inq /dev/sda

       Some SCSI devices include version descriptors  indicating  the  various
       SCSI standards and drafts they support. They can be viewed with:

          sg_inq -d /dev/sda

       Modern  SCSI devices include Vital Product Data (VPD)pages which can be
       viewed with the SCSI INQUIRY command. To list the supported  VPD  pages
       (but not their contents) try:

          sg_inq -e /dev/sda

       Some  VPD pages can be read with the sg_inq utility but a newer utility
       called sg_vpd specializes in showing their contents. The sdparm utility
       can also be used to show the contents of VPD pages.

       Further examples of sg_inq together with some  typical  output  can  be
       found on http://sg.danny.cz/sg/sg3_utils.html web page.

ENVIRONMENT VARIABLES
       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 environ-
       ment variable is equivalent to using --old (or -O) as the first command
       line option.

AUTHOR
       Written by Douglas Gilbert

REPORTING BUGS
       Report bugs to <dgilbert at interlog dot com>.

COPYRIGHT
       Copyright © 2001-2021 Douglas Gilbert
       This  software is distributed under the GPL version 2. There is NO war-
       ranty; not even for MERCHANTABILITY or FITNESS FOR  A  PARTICULAR  PUR-
       POSE.

SEE ALSO
       sg_opcodes(8),   sg_vpd(8),  sg_logs(8),  sg_modes(8),  sdparm(8),  hd-
       parm(8), sgdiag(scsirastools)

sg3_utils-1.46                    March 2021                         SG_INQ(8)

Generated by dwww version 1.16 on Tue Dec 16 16:02:37 CET 2025.