Go to main content

man pages section 8: System Administration Commands

Exit Print View

Updated: Thursday, June 13, 2019

sg_vpd (8)


sg_vpd - fetch SCSI VPD page and/or decode its response


sg_vpd  [--all]  [--enumerate]  [--help] [--hex] [--ident] [--inhex=FN]
[--long] [--maxlen=LEN]  [--page=PG]  [--quiet]  [--raw]  [--vendor=VP]
[--verbose] [--version] [DEVICE]


SG_VPD(8)                          SG3_UTILS                         SG_VPD(8)

       sg_vpd - fetch SCSI VPD page and/or decode its response

       sg_vpd  [--all]  [--enumerate]  [--help] [--hex] [--ident] [--inhex=FN]
       [--long] [--maxlen=LEN]  [--page=PG]  [--quiet]  [--raw]  [--vendor=VP]
       [--verbose] [--version] [DEVICE]

       This  utility, when DEVICE is given, fetches a Vital Product Data (VPD)
       page and decodes it or outputs it in ASCII hexadecimal or  binary.  VPD
       pages are fetched with a SCSI INQUIRY command.

       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  a  VPD  page  response. If the --raw option is also given
       then binary input is assumed (rather than ASCII hexadecimal).

       Probably the most important page is the Device Identification VPD  page
       (page  number:  0x83).  Since  SPC-3,  support  for  this page has been
       flagged as mandatory. This page can be fetched  by  using  the  --ident

       The reference document used for interpreting VPD pages (and the INQUIRY
       standard response) is T10/BSR INCITS 502 Revision  08  which  is  draft
       SPC-5   revision   08,   25   January   2016).   It  can  be  found  at
       http://www.t10.org .

       When no options are given, other than a DEVICE, then the "Supported VPD
       pages" (0x0) VPD page is fetched and decoded.

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

       -a, --all
              decode  all  VPD  pages.  When  used with DEVICE the pages to be
              decoded are found in the "Supported VPD pages" VPD  page.  Pages
              that  cannot  be  decoded  are  displayed in hex; add the --long
              option to have ASCII displayed to the right of each line of hex.
              If this option is used with the --inhex=FN option then the  file
              FN  is  assumed  to contain 1 or more VPD pages (in ASCII hex or
              binary).  Decoding continues until the file is exhausted (or  an
              error  occurs).  Sanity  checks  are  aplied  on each VPD page's
              length and the ascending order of VPD page numbers (required  by
              SPC-4) so bad data may be detected.
              If  the  --page=PG  option  is also given then no VPD page whose
              page number is greater than PG (or its  numeric  equivalent)  is

       -e, --enumerate
              list  the names of the known VPD pages, first the standard pages
              (i.e.  those defined by T10), then the  vendor  specific  pages.
              Each  group is sorted in abbreviation order. The DEVICE and most
              other options are ignored and this utility exits  after  listing
              the VPD page names. May be used together with --page=PG where PG
              is numeric. If so, it searches for the summary lines of all  VPD
              pages  whose  number matches PG. May be used with --vendor=VP to
              restrict output to known vendor specific pages for  vendor/prod-
              uct VP.

       -h, --help
              outputs  the usage message summarizing command line options then
              exits.  Ignores DEVICE if given.

       -H, --hex
              outputs the requested VPD page in ASCII hexadecimal. Can be used
              multiple times, see section on the ATA information vpd page.
              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_vpd   -p   di  -HHHH  /dev/sg3  >
              dev_id.hex'). The  reason  '-HHHH'  is  used  is  to  flag  that
              unadorned hexadecimal (without other text or address offsets) is
              sent to stdout.

       -i, --ident
              decode the device identification (0x83) VPD page. When used once
              this  option  has the same effect as '--page=di'. When use twice
              then the short form of the device identification VPD page's log-
              ical  unit designator is decoded. In the latter case this option
              has the same effect as '--quiet --page=di_lu'.

       -I, --inhex=FN
              FN is expected to be a file name (or '-' for stdin)  which  con-
              tains  ASCII hexadecimal or binary representing a VPD page (or a
              standard INQUIRY) 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) the response is associated with. The hexadeci-
              mal 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  line  is  ignored.  If  the
              --raw option is also given then FN is treated as binary.

       -l, --long
              when  decoding  some  VPD  pages, give a little more output. For
              example the ATA Information VPD page only  shows  the  signature
              (in  hex)  and  the  IDENTIFY (PACKET) DEVICE (in hex) when this
              option is given.

       -m, --maxlen=LEN
              where LEN is the (maximum)  response  length  in  bytes.  It  is
              placed  in the cdb's "allocation length" field. If not given (or
              LEN is zero) then 252 is used (apart from  the  ATA  Information
              VPD  page  which defaults to 572) and, if the response indicates
              this value is insufficient, another INQUIRY command is sent with
              a  larger value in the cdb's "allocation length" field.  If this
              option is given and LEN is greater than 0 then only one  INQUIRY
              command is sent. Since many simple devices implement the INQUIRY
              command badly (and do not support VPD  pages)  then  the  safest
              value to use for LEN is 36. See the sg_inq man page for the more

       -p, --page=PG
              where PG is the VPD page to be decoded or output. The  PG  argu-
              ment  can  either be an abbreviation, a number or a pair or num-
              bers/abbreviations separated by a comma. The VPD page  abbrevia-
              tions  can  be seen by using the --enumerate option. If a number
              is given it is assumed to be decimal unless it has a hexadecimal
              indicator  which  is either a leading '0x' or a trailing 'h'. If
              one number is given then it is assumed to be a VPD page  number.
              If  two numbers (or abbreviations) are given then the second one
              is the same as VP (see the --vendor=VP option). If  this  option
              is  not  given (nor '-i', '-l' nor '-V') then the "Supported VPD
              pages" (0x0) VPD page is fetched and decoded. If PG is  '-1'  or
              'sinq' then the standard INQUIRY response is output. This option
              may also be used with the --enumerate (see its description).

       -q, --quiet
              suppress the amount of decoding output.

       -r, --raw
              if not used with --inhex=FN then output requested  VPD  page  in
              binary.  The output should be piped to a file or another utility
              when this option is used. The binary  is  sent  to  stdout,  and
              errors are sent to stderr.
              if  used  with  --inhex=FN then the contents of FN is treated as

       -M, --vendor=VP
              where VP is a vendor (e.g. "sea" for Seagate) or  vendor/product
              acronym (e.g. "hp3par" for the 3PAR array from HP). Many vendors
              have re-used the numbers at the beginning of the vendor specific
              VPD  page  range  (e.g.   page 0xc0) and this option is a way of
              selecting only those which are of interest. Using a VP of  "xxx"
              will list the available acronyms.
              If  this option is used with --page=PG and PG is an acronym then
              this option is ignored. If PG is a number (e.g. 0xc0) then VP is
              used to choose the which vendor specific page (e.g. sharing page
              number 0xc0) to decode.

       -v, --verbose
              increases the level or verbosity.

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

       This VPD page (0x89 or 'ai') is defined by the SCSI to ATA  Translation
       standard.  It contains information about the SAT layer, the "signature"
       of the ATA device and the response to the ATA IDENTIFY (PACKET)  DEVICE
       command. The latter part has 512 bytes of identity, capability and set-
       tings data which the hdparm utility is capable  of  decoding  (so  this
       utility doesn't decode it).

       To  unclutter  the output for this page, the signature and the IDENTIFY
       (PACKET) DEVICE response are not output unless the  --long  option  (or
       --hex or --raw) are given. When the --long option is given the IDENTIFY
       (PACKET) DEVICE response is output as 256 (16  bit)  words  as  is  the
       fashion  for ATA devices. To see that response as a string of bytes use
       the '-HH' option. To format the output suitable for  hdparm  to  decode
       use  either  the  '-HHH' or '-rr' option. For example if 'dev/sdb' is a
       SATA disk behind a SAT layer then this  command:  'sg_vpd  -p  ai  -HHH
       /dev/sdb  |  hdparm  --Istdin'  should decode the ATA IDENTIFY (PACKET)
       DEVICE response.

       See attributes(7) for descriptions of the following attributes:

       |Availability   | system/storage/sg3_utils |
       |Stability      | Pass-through uncommitted |
       Since some VPD pages (e.g. the Extended INQUIRY page)  depend  on  set-
       tings  in  the  standard  INQUIRY  response,  then the standard INQUIRY
       response is output as a pseudo VPD page when  PG  is  set  to  '-1'  or
       'sinq'.  Also  the  decoding  of some fields (e.g. the Extended INQUIRY
       page's SPT field) is expanded when the '--long' option is  given  using
       the standard INQUIRY response information (e.g. the PDT and the PROTECT

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

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

       The exit status of sg_vpd is 0 when it is successful. Otherwise see the
       sg3_utils(8) man page.

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

       To see the VPD pages that a device supports, use with no  options.  The
       command line invocation is shown first followed by a typical response:

          # sg_vpd /dev/sdb
       Supported VPD pages VPD page:
         Supported VPD pages [sv]
         Unit serial number [sn]
         Device identification [di]
         Extended inquiry data [ei]
         Block limits (SBC) [bl]

       To  see  the  VPD page numbers associated with each supported page then
       add the '--long' option to the above command line. To view a  VPD  page
       either its number or abbreviation can be given to the '--page=' option.
       The page name abbreviations are shown within square brackets above.  In
       the next example the Extended inquiry data VPD page is listed:

          # sg_vpd --page=ei /dev/sdb
       extended INQUIRY data VPD page:
         WU_SUP=0 CRD_SUP=0 NV_SUP=0 V_SUP=0
         P_I_I_SUP=0 LUICLR=0 R_SUP=0 CBCS=0
         Multi I_T nexus microcode download=0
         Extended self-test completion minutes=0
         POA_SUP=0 HRA_SUP=0 VSA_SUP=0

       To  check  if  any  protection  types  are  supported by a disk use the
       '--long' option on the Extended inquiry data VPD page:

          # sg_vpd --page=ei --long /dev/sdb
          extended INQUIRY data VPD page:
            SPT=1 [protection types 1 and 2 supported]

       Search for the name (and acronym) of all pages that share VPD page num-
       ber 0xb0 .

          # sg_vpd --page=0xb0 --enumerate
          Matching standard VPD pages:
            bl         0xb0      Block limits (SBC)
            oi         0xb0      OSD information
            sad        0xb0      Sequential access device capabilities (SSC)

       Some  examples follow using the "--all" option. Send an ASCII hexadeci-
       mal representation of all VPD pages to a file:

          # sg_vpd --all -HHHH /dev/sg3 > all_vpds.hex

       At some later time that file could be decoded with:

          # sg_vpd --all --inhex=all_vpds.hex

       To do the equivalent as the previous example but use a file  containing

          # sg_vpd --all --raw /dev/sg3 > all_vpds.bin
          # sg_vpd --all --raw --inhex=all_vpds.bin

       Notice  that "--raw" must be given with the second (--inhex) invocation
       to alert the utility that all_vpds.bin contains binary  as  it  assumes
       ASCII  hexadecimal  by  default.  Next we only decode T10 specified VPD
       pages excluding vendor specific VPD pages that  start  at  page  number

          # sg_vpd --all --page=0xbf --raw --inhex=all_vpds.bin

       Further       examples       can       be       found       on      the
       http://sg.danny.cz/sg/sg3_utils.html web page.

       Written by Douglas Gilbert

       Report bugs to <dgilbert at interlog dot com>.

       Copyright (C) 2006-2016 Douglas Gilbert
       This software is distributed under a FreeBSD license. There is NO  war-
       ranty;  not  even  for MERCHANTABILITY or FITNESS FOR A PARTICULAR PUR-

       sg_inq(sg3_utils), sg3_utils(sg3_utils), sdparm(sdparm), hdparm(hdparm)

       This    software    was    built    from    source     available     at
       https://github.com/oracle/solaris-userland.    The  original  community
       source was downloaded from  http://sg.danny.cz/sg/p/sg3_utils-1.42.tgz

       Further information about this software can be found on the open source
       community website at http://sg.danny.cz/sg/sg3_utils.html.

sg3_utils-1.42                   February 2016                       SG_VPD(8)