Skip site navigation (1)Skip section navigation (2)

  
 
  

home | help
SG_VPD(8)			    SG3_UTILS			       SG_VPD(8)

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

SYNOPSIS
     sg_vpd   [--all]	[--enumerate]  [--examine]  [--force]  [--help]  [--hex]
     [--ident]	  [--inhex=FN]	  [--json[=JO]]     [--js-file=JFN]	[--long]
     [--maxlen=LEN]  [--page=PG]  [--quiet]  [--raw]  [--sinq_inraw=RFN] [--ven-
     dor=VP] [--verbose] [--version] [DEVICE]

DESCRIPTION
     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 as-
     sumed to be a file name ('-' for stdin) containing ASCII hexadecimal repre-
     senting 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 option.

     The reference document used for interpreting VPD  pages  (and  the  INQUIRY
     standard  response)  is  T10/BSR INCITS 566 Revision 6 which is draft SPC-6
     dated 22 October 2021. It can be found at https://www.t10.org .

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

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

     -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 applied on each VPD page's length and the ascend-
	    ing 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 decoded.

     -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 op-
	    tions  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/product VP.

     -E, --examine
	    scan part of all of the VPD space (page numbers  0x0  to  0xff)  and
	    output  any  pages	found.	If  this  option is given once, the scan
	    starts at page 0x80; if it is given twice, the scan starts	at  0x0;
	    and  if given three times the scan starts at 0xc0. This option takes
	    no notice of the contents of VPD page 0x0  which  should  contain  a
	    list  of all supported VPD pages. Some vendors either forget to list
	    some standard pages or perhaps purposely don't list vendor	specific
	    pages which are in the range 0xc0 to 0xff.
	    If	the --page=PG option is not given then the scan finishes at page
	    0xff. if the --page=PG option is given then  the  scan  finishes  at
	    page PG. A check is made before the scan to make sure the start page
	    is	less than or equal to the finish page; if not the start and fin-
	    ish page numbers are swapped.
	    The sdparm utility which lists mode and VPD pages also has a --exam-
	    ine option will similar functionility. Note  that  T10  has  changed
	    most  of the pages that list supported pages (e.g. VPD, mode and log
	    pages; supported commands) to add the weasel words "may or	may  not
	    list all ...".

     -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 sup-
	    ported pages, to go ahead and fetch the requested page.
	    When this option is given, skip checking of VPD page 0x0 before  ac-
	    cessing  the  requested VPD page. The prior check of VPD page 0x0 is
	    known to crash certain USB devices, so use with care.

     -h, --help
	    outputs the usage message summarizing command line options then  ex-
	    its.  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 logical  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	contains
	    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 util-
	    ity  will  attempt to guess which VPD page (or standard INQUIRY) 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
	    line  is  ignored.	If  the  --raw	option	is also given then FN is
	    treated as binary.

     -j[=JO], --json[=JO]
	    output is in JSON format instead of plain text form. Note that argu-
	    ments to the short and long form  are  themselves  optional  and  if
	    present  start  with  "=" and no whitespace is permitted around that
	    "=".
	    See sg3_utils_json manpage or use '?' for JO to get a summary.

     -J, --js-file=JFN
	    output is in JSON format and it is sent to a file named JFN. If that
	    file exists then it is truncated. By default,  the	JSON  output  is
	    sent to stdout.
	    When  this	option	is  given, the --json[=JO] option is implied and
	    need not be given. The --json[=JO] option may still be needed to set
	    the JO parameter to non-default values.

     -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  de-
	    faults to 572) and, if the response indicates this value is insuffi-
	    cient,  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 sup-
	    port VPD pages) then the safest value to use for LEN is 36. See  the
	    sg_inq(8) man page for the more information.

     -p, --page=PG
	    where  PG  is  the VPD page to be decoded or output. The PG argument
	    can either be an abbreviation, a number or a pair or  numbers/abbre-
	    viations  separated  by  a	comma. The VPD page abbreviations can be
	    seen by using the --enumerate option. If a number is given it is as-
	    sumed 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 abbrevia-
	    tions) 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).
	    If PG is not found in the 'Supported VPD pages' VPD page (0x0)  then
	    EDOM is returned. To bypass this check use the --force option.

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

     -r, --raw
	    if	not  used  with --inhex=FN then output requested VPD page 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 errors are
	    sent to stderr.
	    if used with --inhex=FN then the contents of FN is	treated  as  bi-
	    nary.

     -Q, --sinq_inraw=RFN
	    where  RFN is a filename containing binary standard INQUIRY response
	    data that matches either DEVICE or FN. Linux  places  this	standard
	    INQUIRY  response in its sysfs pseudo filesystem. A typical location
	    is at /sys/class/scsi_device/<hctl>/device/inquiry where <hctl> is a
	    four part numeric tuple separated  by  colons.  This  tuple  distin-
	    guishes  the device from any others on the system. Linux also places
	    some VPD page responses in binary in the same directory  with  names
	    like  "vpd_pg83"  where the last two digits form the hexadecimal VPD
	    page number whose binary contents are therein.
	    Some VPD pages (e.g. the Extended Inquiry VPD page) depend on  know-
	    ing  the  settings in the standard INQUIRY response to interpret the
	    fields in that VPD page. This option together with the --all,  --ex-
	    amine  or --page=PG allows this utility to process both the standard
	    INQUIRY response and VPD pages in the same invocation.
	    The --raw option has no effect on this option. The	DEVICE	argument
	    may be given with this option.

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

ATA INFORMATION VPD PAGE
     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 com-
     mand. The latter part has 512 bytes of identity,  capability  and	settings
     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.

NOTES
     Since some VPD pages (e.g. the Extended INQUIRY page) depend on settings 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	informa-
     tion (e.g. the PDT and the PROTECT fields).

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

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

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  see the VPD pages that a device supports, use with no options. The com-
     mand 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 ex-
     ample the Extended inquiry data VPD page is listed:

	# sg_vpd --page=ei /dev/sdb
	extended INQUIRY data VPD page:
	  ACTIVATE_MICROCODE=0 SPT=0 GRD_CHK=0 APP_CHK=0 REF_CHK=0
	  UASK_SUP=0 GROUP_SUP=0 PRIOR_SUP=0 HEADSUP=1 ORDSUP=1 SIMPSUP=1
	  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:
	  ACTIVATE_MICROCODE=0
	  SPT=1 [protection types 1 and 2 supported]
	  GRD_CHK=1
	  ....

     Search  for  the name (and acronym) of all pages that share VPD page number
     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  hexadecimal
     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 bi-
     nary:

	# 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 exclud-
     ing vendor specific VPD pages that start at page number 0xc0:

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

     In Linux, binary images of some important VPD page responses (e.g.  0,  80h
     and 83h) are cached in files within the sysfs pseudo file system. Since VPD
     pages hardly ever change their contents, decoding those files will give the
     same  output  as  probing	the  device with the added benefit that decoding
     those files doesn't need root permissions. The long  and  short  forms  are
     shown:

	sg_vpd --raw --inhex=/sys/class/scsi_generic/sg3/device/vpd_pg83

	sg_vpd -rI /sys/class/scsi_generic/sg3/device/vpd_pg83

     If  /dev/sg3  is  a disk at 2:0:0:0 , then this invocation should give more
     verbose output but essentially the same as the previous two examples.

	sg_vpd -v -r -I /sys/class/scsi_disk/2:0:0:0/device/vpd_pg83

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

AUTHOR
     Written by Douglas Gilbert

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

COPYRIGHT
     Copyright (C) 2006-2023 Douglas Gilbert
     This software is distributed under a BSD-2-Clause license. There is NO war-
     ranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

SEE ALSO
     sg_inq(sg3_utils), sg3_utils(sg3_utils), sdparm(sdparm), hdparm(hdparm)

sg3_utils-1.48			   April 2023			       SG_VPD(8)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=sg_vpd&sektion=8&manpath=FreeBSD+Ports+15.1.quarterly>

home | help