home | help
SDPARM(8)			     SDPARM			       SDPARM(8)

NAME
     sdparm  -	access	SCSI  modes pages; read VPD pages; send simple SCSI com-
     mands.

SYNOPSIS
     sdparm  [--all]  [--dbd]  [--examine]  [--flexible]   [--get=STR]	 [--hex]
     [--long]  [--num-desc] [--out-mask=OM] [--page=PG[,SPG]] [--quiet] [--read-
     only] [--six] [--transport=TN] [--vendor=VN] [--verbose] DEVICE [DEVICE...]

     sdparm [--clear=STR] [--defaults] [--dummy] [--flexible]  [--page=PG[,SPG]]
     [--quiet]	 [--readonly]	[--save]  [--set=STR]  [--six]	[--transport=TN]
     [--vendor=VN] [--verbose] DEVICE [DEVICE...]

     sdparm --command=CMD [--hex] [--long] [--readonly] [--verbose] DEVICE  [DE-
     VICE...]

     sdparm  --inquiry	[--all]  [--examine]  [--flexible]  [--hex] [--num-desc]
     [--page=PG[,SPG]] [--quiet] [--readonly] [--transport=TN]	[--verbose]  DE-
     VICE [DEVICE...]

     sdparm --enumerate [--all] [--inquiry] [--long] [--page=PG[,SPG]] [--trans-
     port=TN] [--vendor=VN]

     sdparm   --inhex=FN   [--all]  [--flexible]  [--hex]  [--inquiry]	[--long]
     [--pdt=DT] [--raw] [--six] [--transport=TN] [--vendor=VN] [--verbose]

     sdparm --wscan [--verbose]

     sdparm [--help] [--version]

DESCRIPTION
     This utility fetches and potentially changes SCSI device (e.g.  disk)  mode
     pages.  Inquiry  data  including Vital Product Data (VPD) pages can also be
     displayed. Commands associated with starting and stopping the medium; load-
     ing and unloading the medium; and other housekeeping functions may also  be
     issued by this utility.

     The  first invocation shown in the synopsis is for accessing (i.e. reading)
     mode page fields held on the DEVICE. The second form is for  changing  mode
     page fields held on the DEVICE. The third form is for executing some simple
     SCSI  commands. The fourth form (i.e.  the '--inquiry ...	DEVICE' form) is
     for fetching and decoding VPD pages from the given DEVICE. The  --enumerate
     form is for listing out mode or VPD field data held by this utility (and if
     a	DEVICE is given then it is ignored). The --inhex=FN form decodes mode or
     VPD response data provided in the named file (or  from  stdin  if	FN=-  is
     given);  that  data may either be in hexadecimal or binary. The second last
     form is for Windows only and lists the available storage device names;  see
     the  OPTIONS  entry  for --wscan. The final form is to provide command line
     help or the version number (and date) of this utility.

     If no options (other than DEVICE) are given then a selection of common mode
     page fields for that device are listed. If the --long option is also  given
     then  a  description  of the fields is placed on the right of each line. If
     the --all option is given then all known mode page fields for  that  device
     are  listed.  Individual  fields can be displayed with the --get=STR option
     (e.g. '--get=WCE' to fetch the state of the Writeback Cache Enable field).

     This utility completes with an exit status of 0 when successful. For  other
     values see the EXIT STATUS section below.

     One or more DEVICE arguments can be given. The utility will essentially ap-
     ply  the  given options to each DEVICE in the list. If a error is detected,
     it is noted and the utility continues. Error value 5 (file  open  or  close
     problem)  is  treated as lower priority when other errors are detected. The
     exit status is the most recently  detected  error	value  (excluding  error
     value  5  if  other  errors have been detected). If all actions succeed the
     exit status is zero.

     By default this utility shows mode pages that are common to  all  transport
     protocols.  These	are termed as "generic" mode pages. If there is no match
     on a generic mode page name or field then those pages specific to	the  SAS
     transport are checked.  Transport protocol specific mode pages are selected
     with  the	--transport=TN	option. See the TRANSPORT section below.  Vendor
     specific mode pages are selected with the --vendor=VN option.  See the VEN-
     DORS section below.

     Although originally for SCSI disks (or storage devices that appear  to  the
     OS  as  SCSI disks) many of the mode pages are for other SCSI device types.
     These include CD/DVD players that use the ATAPI (or any  other)  transport,
     SCSI tapes drives and SCSI enclosures.

     When  the	--inquiry  option is given without a page number then the Device
     Identification VPD page (page number 0x83) is requested and if found it  is
     decoded  and  output.  If	no  page number is given and the --all option is
     given then a list of VPD page names (but not their contents)  supported  by
     the  DEVICE  is  output.  When both the --inquiry and --page=PG options are
     given then the VPD page can be specified as an abbreviation (e.g. "sp"  for
     the SCSI ports VPD page) or numerically (e.g. "0x88"). If a VPD page is re-
     turned  by  the  DEVICE  but sdparm cannot decode it or the --hex option is
     given then it is output in hex.

OPTIONS
     Mandatory arguments to long options are  mandatory  for  short  options  as
     well.   If an option takes a numeric argument then that argument is assumed
     to be decimal unless otherwise indicated (e.g. with a  leading  "0x"  or  a
     trailing "h"). The options are in alphabetical order, based on the long op-
     tion name.

     -a, --all
	    output  all recognized fields for the device type (e.g. disk) of the
	    DEVICE. Without this option (or the --page=PG[,SPG] option) the  de-
	    fault action is to output a relatively small number of commonly used
	    fields  from  different pages. When a specific (mode) page number is
	    given with the --page=PG[,SPG] option then all the	fields	of  that
	    page  are  output  (irrespective of the setting of this option). For
	    this option's action when used with the --enumerate option	see  the
	    ENUMERATE section below.
	    When  used together with the --inquiry option and a DEVICE, the Sup-
	    ported VPD Pages VPD page [0x0] is output. When this option is  used
	    twice  (short  form:  '-iaa') then all VPD pages (listed in the Sup-
	    ported VPD Pages VPD page) are output.
	    By default --inhex=FN will only decode the first mode page found  in
	    FN.  With  this  option, more mode pages will be decoded if present.
	    When --transport=TN or --vendor=VN is also given  then  if	a  given
	    mode  page	is  not defined for that transport or vendor, then it is
	    decoded as a generic mode page.

     -c, --clear=STR
	    In its simplest form STR contains a field acronym_name  or	a  field
	    numerical  descriptor.  In the absence of an explicit value argument
	    (e.g. '--clear=WCE=1'), the field has its  value  cleared  to  zero.
	    See the PARAMETERS section below.

     -C, --command=CMD
	    Perform  given CMD. See section below on COMMANDS. To enumerate sup-
	    ported commands use '-e -C x' (using any CMD name, valid  or  other-
	    wise).

     -B, --dbd
	    disable  block  descriptors.  This	is a bit in MODE SENSE cdbs that
	    rarely needs to be set. One known case is a MODE SENSE 6 issued to a
	    Reduced Block Commands (RBC) device where the RBC standard	says  it
	    shall be set.

     -D, --defaults
	    sets  the  given  mode  page  to  its  default  values. Requires the
	    --page=PG[,SPG] option to be given to specify the mode page. To make
	    the default mode page values also the saved mode  page  values,  use
	    the --save option as well.
	    when  this	option	is  used  twice, the current values in all modes
	    pages are reverted to their defaults. If the --save option is  given
	    as	well,  then  the current and saved values in all modes pages are
	    reverted to their defaults. This feature uses the  RTD  bit  in  the
	    MODE SELECT command which was added in draft SPC-5 revision 11.

     -d, --dummy
	    when  set  inhibits  changes being placed in the DEVICE's mode page.
	    Instead the mode data that would have been sent  to  a  MODE  SELECT
	    command,  is  output  in  ASCII  hex  to the console. This option is
	    mainly for testing.

     -e, --enumerate
	    lists out descriptive information about the pages and  fields  known
	    to this utility. Ignores the DEVICE argument and other options apart
	    from  the  --all, --inquiry, --long, --page=PG[,SPG], --transport=TN
	    and --vendor=VN. If --enumerate is given without other options  then
	    the  known	(generic) mode pages are listed.  See the ENUMERATE sec-
	    tion below.

     -E, --examine
	    for mode pages only those with known field names are probed when the
	    --all option is given. For VPD pages  only	those  pages  listed  in
	    "Supported VPD pages page" are decoded. In both cases some pages may
	    be	missed. With this option (i.e. --examine) all mode and VPD pages
	    can be probed.
	    For mode pages, this option will probe all mode pages from page num-
	    ber 0x0 to 0x3e. To probe mode subpages give a mode page number with
	    --page=PG and then all subpages (from 0x0 to 0xfe) are probed.
	    For VPD pages, use this option with --inquiry. This will  cause  all
	    VPD  pages	from  0x0 to 0xbf to be probed by default. A sequence of
	    VPD pages can be probed with --page=PG[,SPG] in which case VPD pages
	    from PG (lower number) to SPG (high number)  inclusive  are  probed.
	    Vendor specific VPD pages run from 0xc0 to 0xff and can be probed by
	    setting SPG from 0xc0 to 0xff.

     -f, --flexible
	    Some  devices,  bridges and/or drivers attempt crude transformations
	    between mode sense 6 and 10 byte commands without correctly rebuild-
	    ing the response.  This will cause the  response  to  be  mis-inter-
	    preted  (usually  with  an	error saying the response is malformed).
	    With this option, the length of the response is checked, and  if  it
	    looks  wrong,  various  corrections  are attempted. This option will
	    also allow mode pages that don't belong to the current device's  pe-
	    ripheral type to be listed.

     -g, --get=STR
	    In	its  simplest  form STR contains a field acronym_name or a field
	    numerical descriptor. The field is fetched from mode page.	See  the
	    PARAMETERS	section  below.  The --long and --hex options effect the
	    output format. Also if a value of "1" is given (e.g.  '--get=WCE=1')
	    only  the current value is output (i.e. not the change mask, the de-
	    fault value and the saved value).

     -h, --help
	    output the usage message then exit.

     -H, --hex
	    rather than trying to decode mode (or VPD) pages, print them out  in
	    hex.  When used with the --get=STR option the corresponding current,
	    changeable, default and saved values are output in hex, prefixed  by
	    "0x"  and  space  separated.  If  a  value	of "1" is given with the
	    --get=STR option (e.g. '--get=WCE=1') then only the current value is
	    output in hex, prefixed by "0x". If a value of "2" is given with the
	    --get=STR option then only the current value is output as a (signed)
	    integer. This option can be used multiple times (e.g. '-HH'). Useful
	    with the ATA Information VPD page which usually outputs its IDENTIFY
	    (PACKET) DEVICE response in 16 bit hex  words;  with  '-HH'  outputs
	    that response in hex bytes; with '-HHH' outputs the same response in
	    a format suitable for 'hdparm --Istdin' to decode.
	    Mode  page output with the '-HHH' option is suitable for a later in-
	    vocation of sdparm with the --inhex=FN option.

     -i, --inquiry
	    output a VPD page which is in the response of a SCSI INQUIRY command
	    sent to DEVICE. In the absence of this option the default action  is
	    to	output	mode pages. If the --inquiry option is given without the
	    --page=PG[,SPG] option  then  the  device  identification  VPD  page
	    (0x83)  is	decoded  and output. If this option and the --all option
	    are given then the supported VPD pages page  (0x0)	is  decoded  and
	    output.

     -I, --inhex=FN
	    FN	is  expected to be a file name (or '-' for stdin) which contains
	    ASCII hexadecimal (or binary)  representing  the  response	to  MODE
	    SENSE(10).	 If  --six  is	also  given  then the response from MODE
	    SENSE(6) is assumed. A MODE SENSE response contains a mode parameter
	    header, then 0 or more block descriptors followed  by  one	or  more
	    mode pages. This utility will only decode the first mode page unless
	    the  --all	option	is given. In order to decode a mode page the pe-
	    ripheral device type is often needed and can be  supplied  with  the
	    --pdt=DT option. If the --pdt=DT is not given then a mode page found
	    in	two  device  type  standards  (e.g.  SBC and SSC) may be decoded
	    twice.
	    If --inquiry is given then FN is interpreted as the response data of
	    a single VPD page.
	    The hexadecimal in FN should be arranged as 1 or 2 digits represent-
	    ing 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 given then FN is treated as binary.

     -l, --long
	    output extra information. In the case of mode page fields a descrip-
	    tion  (with  units	if  applicable)  is output to the right. If used
	    twice, then for some fields more information  about  its  values  is
	    given on one or more following lines, each prefixed by a tab charac-
	    ter. For usage with --enumerate see the ENUMERATE section below.
	    When this option is used along with --command=capacity then the READ
	    CAPACITY(16)  is  sent  to the DEVICE and if successful its extended
	    response is output.

     -n, --num-desc
	    for a mode page that can have descriptors, the number of descriptors
	    for the given page on the DEVICE is output. Otherwise 0 is output.

     -o, --out-mask=OM
	    OM is a bit mask for mode page selections that will be  printed/out-
	    put.   The	0x1  value  is	for the 'current' values, 0x2 is for the
	    'changeable' values, 0x4 is for the 'default' values and 0x8 is  for
	    the 'saveable' values.  The default value is 0xf (i.e. the OR of all
	    four  values  set).  The option is useful for limiting the amount of
	    output with the '-HHH'.

     -p, --page=PG[,SPG]
	    supply the page number (PG) and optionally the sub page number (SPG)
	    of the mode (or VPD) page to fetch. These numbers are interpreted as
	    decimal unless prefixed with "0x" or a trailing.  Sub  page  numbers
	    are  only valid for mode pages (not VPD pages). Alternatively an ab-
	    breviation for a page can be given (see next entry).

     -p, --page=STR
	    a two or three letter abbreviation for a page can  be  given.  Known
	    mode page abbreviations are checked first followed by known VPD page
	    abbreviations.   For  example  '--page=ca'	matches the caching mode
	    page. If no match is found then an error is issued	and  a	list  of
	    possibilities  in  the  current  context  is given (so '-p x' can be
	    quite useful). If the STR matches a known VPD page abbreviation then
	    the --inquiry option is assumed. For usage with --enumerate see  the
	    ENUMERATE section below.

     -P, --pdt=DT
	    This  option is only active when the --inhex=FN option is given.  DT
	    is the peripheral Device Type, a value between 0 and 31 and  can  be
	    found  in  the response to the INQUIRY command. The default value is
	    -1 (which may also be given for DT) and it	is  interpreted  as  SPC
	    (i.e. common mode pages) or as a wild card. If available this option
	    should be supplied with the --inhex=FN option.

     -q, --quiet
	    suppress  output  of device name followed by the vendor, product and
	    revision strings fetched from an INQUIRY response. Without this  op-
	    tion  such	a line is typically the first line output by sdparm. Re-
	    duces output from the device identification VPD page,  typically  to
	    one  line  (or  none)  for	each  of  di_lu,  di_port, di_target and
	    di_asis.
	    If this option is used twice then additionally mode page output sup-
	    presses the changeable, default and saved values  that  are  usually
	    shown in braces, if available.

     -r, --readonly
	    override  other  logic to open DEVICE in read-only mode. The default
	    setting of the open read-only/read-write mode depends on the  opera-
	    tion  requested  (e.g.  a  --set=STR operation by default will try a
	    read-write mode open on DEVICE). This option may be useful if a com-
	    mand is being sent to an ATA disk via a SCSI command set. For  exam-
	    ple  in  Linux '-C stop' may require this option to stop an ATA disk
	    being restarted immediately.

     -R, --raw
	    this option is only active when used  with	the  --inhex=FN  option.
	    When this option is given then the file FN is interpreted as binary;
	    the default action (i.e. when this option is not given) is to inter-
	    pret FN as ASCII hexadecimal.

     -S, --save
	    when  a mode page is being modified (by using the --clear=STR and/or
	    --set=STR options) then the default action is  to  modify  only  the
	    current  values mode page. When this option is given then the corre-
	    sponding value(s) in the saved values mode page is also changed. The
	    next time the device is power cycled (or  reset)  the  saved  values
	    mode  page becomes (i.e. is copied to) the current values mode page.
	    This option sets the SP field in the MODE SELECT command. See  NOTES
	    section below.

     -s, --set=STR
	    in	its  simplest  form STR contains a field acronym_name or a field
	    numerical descriptor. In the absence  of  an  explicit  value,  each
	    acronym_name  has  its  value set to (all) ones. This means a 16 bit
	    field will be set to 0xffff which is 65535 in decimal. Alternatively
	    each acronym_name or numerical descriptor may be followed by  "=<n>"
	    where <n> is the value to set that field to. See the PARAMETERS sec-
	    tion below.

     -6, --six
	    The  default  action of this utility is to issue MODE SENSE and MODE
	    SELECT SCSI commands with 10 byte cdbs. When this  option  is  given
	    the  6 byte cdb variants are used. RBC and old SCSI devices may need
	    this option. This utility outputs a suggestion to use this option if
	    the SCSI status indicates that the 10 byte cdb variant is  not  sup-
	    ported.
	    The  SPC-4	standard  (and SPC-5 drafts) include a note stating that
	    implementers migrate away from the	SCSI  MODE  SELECT(6)  and  MODE
	    SENSE(6)  commands	in  favour  of	the 10 byte variants (e.g.  MODE
	    SEMSE(10)).

     -t, --transport=TN
	    Specifies the transport protocol where TN is either a number in  the
	    range 0 to 15 (inclusive) or an abbreviation (e.g. "fcp" for the Fi-
	    bre  Channel  Protocol).  Some  transports accept multiple abbrevia-
	    tions, for example srp (SCSI RDMA Protocol) and ib	(short	for  In-
	    finiBand)  both  are accepted for transport protocol 0x4 . Also both
	    upper and lower case are accepted so iscsi and  iSCSI  are	accepted
	    for  transport  protocol  0x5  . One way to list available transport
	    protocols numbers and their associated abbreviations is to	give  an
	    invalid  transport	protocol name such as '-t x'; another way is '-e
	    -l'.  N.B. The --all option may still be needed to show  all  avail-
	    able fields.

     -M, --vendor=VN
	    Specifies the vendor (i.e. manufacturer) where VN is either a number
	    (0	or  more) or an abbreviation (e.g. "sea" for Seagate disk vendor
	    specific).	For tape drives "lto5" and "lto6" are  treated	as  ven-
	    dors. One way to list the available vendor numbers and their associ-
	    ated  abbreviations  is to give an invalid vendor number such as '-M
	    x'; another way is '-e -l'.
	    This option only effects mode page decodes, not VPD pages. For  ven-
	    dor specific VPD pages see the sg_vpd utility.

     -v, --verbose
	    increase  the level of verbosity, (i.e. debug output). In some cases
	    more decoding is done (e.g. fields within  a  standard  INQUIRY  re-
	    sponse).

     -V, --version
	    print the version string and then exit.

     -w, --wscan
	    this  option  is  available in Windows only. It lists storage device
	    names and the corresponding volumes, if any. When used twice it adds
	    the "bus type" of the closest transport (e.g. a SATA disk in  a  USB
	    connected  enclosure has bus type Usb). When used three times a SCSI
	    adapter scan is added. When used four times only a SCSI adapter scan
	    is shown.  See examples below and the "Win32 port"	section  in  the
	    README file.

NOTES
     The  reference  document  used for interpreting mode and VPD pages (and the
     INQUIRY standard response) is T10/BSR INCITS 502  Revision  17  (SPC-5,  19
     September	2017)  found at http://www.t10.org . Obsolete and reserved items
     in the standard INQUIRY response output are displayed in  brackets.  Recent
     drafts  of other T10 documents are also used: SBC-4 (disks), SSC-5 (tapes),
     SPL-5 (SAS transport) and SAT-4 (SCSI to ATA Translation).

     A mode page for which no abbreviation is known (e.g. a vendor specific mode
     page) can	be  listed  in	hexadecimal  by  using	the  option  combination
     '--page=PG --hex'.

     Numbers input to sdparm (e.g. in the command line arguments) are assumed to
     be  in decimal unless there is a hexadecimal indicator. A hexadecimal indi-
     cator is either a leading '0x' or '0X' (i.e. the C language convention)  or
     a	trailing  'h'  or 'H' (i.e. the convention used at www.t10.org ). In the
     case of --page= either a string or number is expected, so hex numbers  like
     'ch' (12) should be prefixed by a zero (e.g. '0ch').

     The SPC-4 draft (rev 2) says that devices that implement no distinction be-
     tween current and saved pages can return an error (ILLEGAL REQUEST, invalid
     field  in	cdb)  if  the SP bit (which corresponds to the --save option) is
     _not_ set. In such cases the --save option needs to be given.

     If the --save option is given but the existing mode page indicates (via its
     PS bit) that the page is not saveable, then this utility generates an error
     message. That message suggests to try again without the --save option.

     Since the device identification VPD page  (acronym_name  "di")  potentially
     contains  a  lot  of  diverse  designators, several associated acronyms are
     available. They are "di_lu" for designators associated with  the  addressed
     logical  unit,  "di_port"	for  designators associated with the target port
     (which the command arrived via) and "di_target" for designators  associated
     with  the	target	device. When "di" is used designators are grouped by lu,
     then port and then target device.	To see all designators	decoded  in  the
     order that they appear in the VPD page use "di_asis".

     Only  those VPD pages defined by t10.org are decoded by this utility. SPC-4
     sets aside VPD pages codes from 0xc0 to 0xff (inclusive)  for  vendor  spe-
     cific pages some of which are decoded in the sg_vpd utility.

     To see all VPD pages supported by a DEVICE use 'sg_vpd --all'.

     In  the  linux  kernel  2.6 and 3 series any device node that understands a
     SCSI command set (e.g. SCSI disks and CD/DVD drives) may be specified. More
     precisely the driver that "owns" the device node  must  support  the  SG_IO
     ioctl. In the lk 2.4 series only SCSI generic (sg) device nodes support the
     SG_IO  ioctl.  However  in  the  lk  2.4 series other SCSI device nodes are
     mapped within this utility to their corresponding sg device  nodes.  So  if
     there  is	a SCSI disk at /dev/sda then 'sdparm /dev/sda' will work in both
     the lk 2.4 series and later. However if there is an ATAPI cd/dvd  drive  at
     /dev/hdc  then  'sdparm  /dev/hdc'  will only work in the lk 2.6 series and
     later.

     In the Linux 2.6 and 3 series, especially with ATA disks, using  sdparm  to
     stop  (spin  down)  a  disk may not be sufficient and other mechanisms will
     start the disk again some time later. The user might additionally mark  the
     disk  as  "offline" with 'echo offline > /sys/block/sda/device/state' where
     sda is the block name of the disk. To restart the disk "offline" can be re-
     placed with "running".

PARAMETERS
     In their simplest form the --clear=, --get= and --set=  options  (or  their
     short forms) take an acronym_name such as "WCE". In the case of '--get=WCE'
     the  value  of  "Writeback  Cache	Enable" in the caching mode page will be
     fetched. In the case of '--set=WCE' that bit will be set (to one).  In  the
     case  of  '--clear=WCE'  that  bit  will  be  cleared  (to  zero).  When an
     acronym_name is given then the mode page is imputed from that  acronym_name
     (e.g. WCE is in the caching mode page).

     Instead  of an acronym_name a field within a mode page can be described nu-
     merically with a <start_byte>:<start_bit>:<num_bits> tuple. These	are  the
     <start_byte>  (origin 0) within the mode page, a <start_bit> (0 to 7 inclu-
     sive) and <num_bits> (1 to 64 inclusive). For example, the low level repre-
     sentation of the RCD bit (the "Read Cache Disable bit in the  caching  mode
     page)  is	"2:0:1".  The  <start_byte> can optionally be given in hex (e.g.
     '--set=0x2:0:1' or '--set=2h:0:1'). With this form the  --page=  option  is
     required to establish which mode page is to be used.

     Either  form  can	optionally  be followed by "=<val>". By default <val> is
     decimal but can be given in hex in the normal fashion. Here are some  exam-
     ples: '--set=2h:0:1=1h' and '-s MRIE=0x3'. When the acronym_name or numeric
     form  following  --clear=	is not given an explicit '=<val>' then the value
     defaults to zero. When the acronym_name or numeric form following --set= is
     not given an explicit '=<val>' then the value defaults to "all ones"  (i.e.
     as   many	 as   <num_bits>   permits).   For   example  '--clear=WCE'  and
     '--clear=WCE=0' have the same meaning: clear Writeback Cache Enable or, put
     more simply: turn off the writeback cache.

     Multiple fields within the same mode page can be changed by giving a  comma
     separated	list  of  acronym_names  and/or the numerical form. For example:
     '--set=TEST,MRIE=6'.

     Some mode page have multiple  descriptors.  They  typically  have	a  fixed
     header section at the start of the mode page that includes a field contain-
     ing  the number of descriptors that follow. Following the header is a vari-
     able number of descriptors. An example is the SAS Phy Control and	Discover
     mode page. An acronym_name may include a trailing '.<num>' where "<num>" is
     a	descriptor number (origin 0). For example '-t sas -g PHID.0' and '-t sas
     -g PHID' will yield the phy identifier of the first descriptor of the above
     mode page; '-t sas -g PHID.1' will yield the phy identifier of  the  second
     descriptor.

ENUMERATE
     The  --enumerate  option  essentially  dumps out static information held by
     this utility. A list of --enumerate variants and their actions follows. For
     brevity subsequent examples of options are shown in their shorter form.

	 --enumerate	      list generic mode page information
	 -e --all	      list generic mode page contents
			      (i.e. parameters)
	 -e --page=rw	      list contents of read write error
			      recovery mode page
	 -e --inquiry	      list VPD pages this utility can decode
	 -e --long	      list generic mode pages, transport
			      protocols, mode pages for each
			      supported transport protocol and
			      supported commands
	 -e -l --all	      additionally list the contents of
			      each mode page
	 -e --transport=fcp   list mode pages for the fcp
			      transport protocol
	 -e -t fcp --all      additionally list the contents of
			      each mode page
	 -e --vendor=sea      list vendor specific mode pages for
			      "sea" (Seagate)
	 -e -M sea --all      additionally list the contents of vendor
			      specific mode pages for "sea" (Seagate)
	 -e -p pcd -l	      list contents of SAS phy control and
			      discovery mode page plus (due to "-l")
			      some descfriptor format information

     When known mode pages are listed (via the --enumerate   option)  each  line
     starts  with  a  two  or three letter abbreviation. This is followed by the
     page number (in hex prefixed by "0x") optionally followed by  a  comma  and
     the  subpage number. Finally the descriptive name of the mode page (e.g. as
     found in SPC-4) is output.

     When known parameters (fields) of a mode page are listed, each line  starts
     with  an acronym (indented a few spaces). This will match (or be an acronym
     for) the description for that field found in the  (draft)	standards.  Next
     are  three  numbers, separated by colons, surrounded by brackets. These are
     the start byte (in hex, prefixed by "0x") of the  beginning  of  the  field
     within the mode page; the starting bit (0 through 7 inclusive) and then the
     number  of  bits.	The  descriptive  name	of the parameter (field) is then
     given. If appropriate the descriptive  name  includes  units  (e.g.  "(ms)"
     means the units are milliseconds). Adding the '-ll' option will list infor-
     mation about possible field values for selected mode page parameters.

     Mode  parameters  for which the num_bits is greater than 1 can be viewed as
     unsigned integers. Often 16 and  32  bit  fields  are  set  to  0xffff  and
     0xffffffff respectively (all ones) which usually has a special meaning (see
     drafts).  This  utility  outputs  such values as "-1" to save space (rather
     than their unsigned integer equivalents). "-1" can also  be  given  as  the
     value  to a mode page field acronym (e.g. '--set=INTT=-1' sets the interval
     timer  field  in  the  Informational  Exceptions  control	mode   page   to
     0xffffffff).

TRANSPORTS
     SCSI  transport  protocols  are  a  relatively specialized area that can be
     safely ignored by the majority of users.

     Some transport protocols have protocol specific mode pages. These are  usu-
     ally  the	disconnect-reconnect  (0x2),  the protocol specific logical unit
     (0x18) and the protocol specific port (0x19) mode pages. In some cases  the
     latter  mode  page has several subpages. The most common transport protocol
     abbreviations likely to be used are "fcp", "spi" and "sas".

     Many  of  the  field  names  are  re-used	in  the  same  position  so  the
     acronym_name  namespaces have been divided between generic mode pages (i.e.
     when the --transport= option is _not_  given)  and  a  namespace  for  each
     transport	protocol.  A LUPID field from the protocol specific logical unit
     (0x18) mode page and the PPID field from protocol specific port (0x19) mode
     page are included in the generic modes pages; this  is  so  the  respective
     (transport)  protocol  identifiers can be seen. In most cases the user will
     know what the "port" transport is (i.e. the same transport as  the  HBA  in
     the computer) but the logical unit's transport could be different.

VENDORS
     SCSI  leaves  a lot of space for vendor specific information. Often this is
     described in product manuals. The	--vendor=VN  (or  -M=VN)  option  allows
     known vendor specific mode pages to be examined and/or modified by acronym.

     In  this  utility the syntax and semantics of vendor specific mode pages is
     very similar to those of transport protocol specific mode pages. Both  can-
     not  be  specified  together.  Vendor specific modes pages can still be ac-
     cessed numerically (as shown at the end of the EXAMPLES section).

COMMANDS
     The command option sends a SCSI command to the DEVICE. If the command fails
     then this is reflected in the non-zero exit status.  To obtain more  infor-
     mation about the error use the -v option.

     capacity
	    sends a READ CAPACITY(10) command (valid for disks and cd/dvd media)
	    by	default. If successful yields "blocks: " [the number of blocks],
	    "block_length: " [typically either 512 or 2048] and "capacity_mib: "
	    [capacity in MibiBytes (1048576 byte units)].

     If the number of blocks is too large to fit in the 4 byte field provided by
     READ CAPACITY(10) or, the --long option is  given,  then  the  READ  CAPAC-
     ITY(16)  command  is  sent.  If  the --long option is given, then the extra
     fields found in the READ CAPACITY(16) response are output.

     eject  stops the medium and ejects it from the device.  Note that	ejection
	    (by  command  or button) may be prevented in which case the 'unlock'
	    command may be useful in extreme cases.  Typically only  appropriate
	    for  cd/dvd  drives and disk drives with removable media. Objects if
	    sent to another peripheral device type (but objection can  be  over-
	    ridden with '-f' option).

     load   loads  the medium and starts it (i.e. spins it up). See 'eject' com-
	    mand for supported device types.

     profile
	    lists the various formats that a  CD/DVD/HD-DVD/BD	drive  supports.
	    These  are	called	"profiles" in the MMC standard. The profiles are
	    listed one per line.  If media is in the drive then the profile that
	    matches the media (if any) has an "*" to the right of the line.

     ready  sends the "Test Unit Ready" SCSI command to the DEVICE. No error  is
	    reported  if the device will respond to data requests (e.g. READ) in
	    a reasonable timescale. For example, if a disk is  stopped	then  it
	    will report "not ready". All devices should respond to this command.

     sense  sends  a  REQUEST SENSE command. It reports a hardware threshold ex-
	    ceeded, warning or low power condition if flagged. If a progress in-
	    dication is present (e.g. during a format) then it will be output as
	    a percentage. Yields a process status of 0 if the  command	succeeds
	    and  the  sense  key  is 0; else yields 1. The --quiet option can be
	    used to lessen output, and --hex to output sense data in hex.

     speed=SPEED
	    permits the speed of a CD, DVD, HD_DVD or BD disc in a drive  to  be
	    set   (or	at   least  influenced).  It  has  this  format:  --com-
	    mand=speed=SPEED where SPEED is in kilobytes  per  second.	In  this
	    case  a  kilobyte  is  1000 bytes. The "times one" speed for a CD is
	    176.4 kB/s, for a DVD is 1350 kB/s and for both HD-DVD and BD it  is
	    4500  kB/s. If SPEED is zero then the drive is set to the speed that
	    it considers gives optimal performance.  This command  sends  a  SET
	    STREAMING  multi-media command (MMC) to the drive.	The EXACT bit is
	    clear so the drive will round the given  SPEED  as	necessary.   The
	    command  is  designed  to  control	read  speed; setting write speed
	    should be left to "burning" programs.

     start  starts the medium (i.e. spins it up). Harmless if medium has already
	    been started. See 'eject' command for supported device types. If the
	    DEVICE is an ATA disk in Linux the '--readonly' option  may  be  re-
	    quired.

     stop   stops  the	medium	(i.e. spins it down). Harmless if medium has al-
	    ready been stopped. See 'eject' command for supported device  types.
	    If the DEVICE is an ATA disk in Linux the '--readonly' option may be
	    required. See the NOTES section above.

     sync   sends  a SYNCHRONIZE CACHE command. The device should flush any data
	    held in its (volatile) buffers to the media.

     unlock
	    tells a device to allow medium removal. It uses  the  SCSI	"prevent
	    allow  medium  removal" command. This is desperation stuff, possibly
	    overriding a prevention applied by the OS on a mounted file  system.
	    The  "eject" utility (from the "eject" package) is more graceful and
	    should be tried first. This command is only appropriate for  devices
	    with removable media.

     For  loading  and	ejecting  tapes  the mt utility should be used (i.e. not
     these commands). The 'ready' command is valid for tape devices.

EXAMPLES
     To list the common (generic) mode parameters of a disk:

	sdparm /dev/sda

     To list the designators within the device	identification	VPD  page  of  a
     disk:

	sdparm --inquiry /dev/sda

     To see all parameters for the caching mode page:

	sdparm --page=ca /dev/sda

     To see all parameters for the caching mode page with parameter descriptions
     to the right:

	sdparm --page=ca --long /dev/sda

     To get the WCE values (current changeable default and saved) in hex:

	sdparm -g WCE -H /dev/sda
     0x01 0x00 0x01 0x01

     To get the WCE current value in hex:

	sdparm -g WCE=1 -H /dev/sda
     0x01

     To set the "Writeback Cache Enable" bit in the current values page:

	sdparm --set=WCE /dev/sda

     To  set  the  "Writeback  Cache Enable" bit in the current and saved values
     page:

	sdparm --set=WCE --save /dev/sda

     To set the "Writeback Cache Enable" and clear "Read Cache Disable":

	sdparm --set=WCE --clear=RCD --save /dev/sda

     The previous example can also by written as:

	sdparm -s WCE=1,RCD=0 -S /dev/sda

     To re-establish the manufacturer's defaults in the current and saved values
     of the caching mode page:

	sdparm --page=ca --defaults --save /dev/sda

     If an ATAPI cd/dvd drive is at /dev/hdc then its common  (mode)  parameters
     could be listed in the lk 2.6 and 3 series with:

	sdparm /dev/hdc

     If  there is a DVD in the drive at /dev/hdc then it could be ejected in the
     lk 2.6 and 3 series with:

	sdparm --command=eject /dev/hdc

     If the ejection is being prevented by software then that can be  overridden
     with:

	sdparm --command=unlock /dev/hdc

     One  disk	vendor	has a "Performance Mode" bit (PM) in the vendor specific
     unit attention mode page [0x0,0x0]. PM=0 is server mode (the default) while
     PM=1 is desktop mode. Desktop mode can be set (both current and saved  val-
     ues) with:

	sdparm --page=0 --set=2:7:1=1 --save /dev/sda

     The  resultant  change  can be viewed in hex with the --hex option as there
     are no acronyms for vendor extensions yet. The PM bit  is	now  covered  by
     vendor specific mode pages and the above can also be accomplished with:

	sdparm --vendor=sea --set=PM --save /dev/sda

     What  follows  are  some  examples from Windows using the '--wscan' option.
     The idea is to list the storage device names on the system  that  might  be
     invoked by other uses of sdparm.

       # sdparm --wscan
     PD0     [C]     FUJITSU   MHY2160BH	 0000
     PD1     [DF]    WD        2500BEV External  1.05  WD-WXE90
     CDROM0  [E]     MATSHITA DVD/CDRW UJDA775	CB03

     So 'sdparm -a CDROM0' and 'sdparm -a E' will show all the (known) mode page
     fields  for the Matshita DVD/CD drive. By using the '--wscan' option twice,
     the bus type (as seen by the OS) is added to the output:

       # sdparm -ww
     PD0     [C]     <Ata  >  FUJITSU	MHY2160BH	  0000
     PD1     [DF]    <Usb  >  WD	2500BEV External  1.05	WD-WXE90
     CDROM0  [E]     <Atapi>  MATSHITA DVD/CDRW UJDA775  CB03

     And the pattern continues to add a SCSI adapter scan. This may be useful if
     there are specialized storage related devices (e.g. a SES device in an  en-
     closure) but does add much extra information in this case.

       # sdparm -www
     PD0     [C]     <Ata  >  FUJITSU	MHY2160BH	  0000
     PD1     [DF]    <Usb  >  WD	2500BEV External  1.05	WD-WXE90
     CDROM0  [E]     <Atapi>  MATSHITA DVD/CDRW UJDA775  CB03

     SCSI0:0,0,0   claimed=1 pdt=0h  FUJITSU   MHY2160BH	 0000
     SCSI1:0,0,0   claimed=1 pdt=5h  MATSHITA  DVD/CDRW UJDA775  CB03

EXIT STATUS
     To aid scripts that call sdparm, the exit status is set to indicate success
     (0)  or  failure (1 or more). Note that some of the lower values correspond
     to the SCSI sense key values. The exit status values are:

     0	    success

     1	    syntax error. Either illegal command line options, options with  bad
	    arguments or a combination of options that is not permitted.

     2	    the DEVICE reports that it is not ready for the operation requested.
	    The  device  may be in the process of becoming ready (e.g.	spinning
	    up but not at speed) so the utility may work after a wait.

     3	    the DEVICE reports a medium or hardware error (or  a  blank  check).
	    For  example  an  attempt  to  read a corrupted block on a disk will
	    yield this value.

     5	    the DEVICE reports an "illegal request"  with  an  additional  sense
	    code  other than "invalid operation code". This is often a supported
	    command with a field set requesting an unsupported	capability.  For
	    commands  that require a "service action" field this value can indi-
	    cate that the command is not supported.

     6	    the DEVICE reports a "unit attention" condition. This usually  indi-
	    cates that something unrelated to the requested command has occurred
	    (e.g.  a  device  reset) potentially before the current SCSI command
	    was sent. The requested command has not been executed by the device.
	    Note that unit attention conditions are usually only  reported  once
	    by a device.

     7	    the  DEVICE  reports  a  "data protect" sense key. This implies some
	    mechanism has blocked writes (or possibly all access to the media).

     9	    the DEVICE reports an illegal request with an additional sense  code
	    of	"invalid operation code" which means that it doesn't support the
	    requested command.

     10     the DEVICE reports a "copy aborted". This implies another command or
	    device problem has stopped a copy operation. The EXTENDED COPY  fam-
	    ily  of commands (including WRITE USING TOKEN) may return this sense
	    key.

     11     the DEVICE reports an aborted command. In some  cases  aborted  com-
	    mands  can be retried immediately (e.g. if the transport aborted the
	    command due to congestion).

     14     the DEVICE reports a miscompare sense key. VERIFY  and  COMPARE  AND
	    WRITE commands may report this.

     15     the  utility  is unable to open, close or use the given DEVICE.  The
	    given file name could be incorrect or there may be permission  prob-
	    lems. Adding the -v option may give more information.

     20     the  DEVICE  reports  it has a check condition but "no sense".  Some
	    polling commands (e.g. REQUEST SENSE) can react this way.  It is un-
	    likely that this value will occur as an exit status.

     21     the DEVICE reports a "recovered error". The  requested  command  was
	    successful.  Most  likely a utility will report a recovered error to
	    stderr and continue, probably leaving the utility with an exit  sta-
	    tus of 0 .

     22     the  DEVICE reports that the current command or its parameters imply
	    a logical block address (LBA) that is out of range.

     24     the DEVICE reports a SCSI status  of  "reservation	conflict".  This
	    means access to the DEVICE with the current command has been blocked
	    because  another  machine (HBA or SCSI "initiator") holds a reserva-
	    tion on this DEVICE. On modern SCSI systems this is related  to  the
	    use of the PERSISTENT RESERVATION family of commands.

     25     the  DEVICE reports a SCSI status of "condition met". Currently only
	    the PRE-FETCH command (see SBC-4) yields this status.

     26     the DEVICE reports a SCSI status of "busy". SAM-5 defines this  sta-
	    tus  as the logical unit is temporarily unable to process a command.
	    It is recommended to re-issue the command.

     27     the DEVICE reports a SCSI status of "task set full".

     28     the DEVICE reports a SCSI status of "ACA active". ACA is "auto  con-
	    tingent allegiance" and is seldom used.

     29     the  DEVICE  reports  a  SCSI  status of "task aborted". SAM-5 says:
	    "This status shall be returned if a command is aborted by a  command
	    or	task  management  function  on another I_T nexus and the Control
	    mode page TAS bit is set to one".

     33     the command sent to DEVICE has timed out. This occurs in Linux only;
	    in other ports a command timeout will appear as a transport (or  OS)
	    error.

     40     the  command  sent to DEVICE has received an "aborted command" sense
	    key with an additional sense code of 0x10. This value is related  to
	    problems  with  protection information (PI or DIF). For example this
	    error may occur when reading a block on a drive that has never  been
	    written  (or is unmapped) if that drive was formatted with type 1, 2
	    or 3 protection.

     48     this is an internal message indicating a NVMe status field	(SF)  is
	    other  than  zero  after a command has been executed (i.e. something
	    went wrong).  Work in this area is currently experimental.

     49     low level driver reports a response's residual count (i.e. number of
	    bytes  actually  received  by  HBA	is  'requested_bytes  -   resid-
	    ual_count')  that  is  too high. So no useful processing can be done
	    with that response.

     50 + <os_error_number>
	    OS system calls that fail often return a  small  integer  number  to
	    help  indicate  what the error is. For example in Unix the inability
	    of a system call to allocate  memory  returns  (in	'errno')  ENOMEM
	    which  often  is  associated  with the integer 12. So 62 (i.e. '50 +
	    12') may be returned by a utility in this case.

     97     the response to a SCSI command failed sanity checks.

     98     the DEVICE reports it has a check condition but  the  error  doesn't
	    fit into any of the above categories.

     99     any  errors  that can't be categorized into values 1 to 98 may yield
	    this value. This includes transport and operating system errors  af-
	    ter the command has been sent to the device.

     126    the utility was found but could not be executed. That might occur if
	    the executable does not have execute permissions.

     127    This is the exit status for utility not found. That might occur when
	    a  script  calls  a utility in this package but the PATH environment
	    variable has not been properly set up, so the script cannot find the
	    executable.

     128 + <signum>
	    If a signal kills a utility then the exit status  is  128  plus  the
	    signal  number.  For  example  if a segmentation fault occurs then a
	    utility is typically killed by SIGSEGV which  according  to  'man  7
	    signal'  has  an  associated signal number of 11; so the exit status
	    will be 139 .

     255    the utility tried to yield an exit status of  255  or  larger.  That
	    should not happen; given here for completeness.

     Most  of the error conditions reported above will be repeatable (an example
     of one that is not is "unit attention") so the utility  can  be  run  again
     with the -v option (or several) to obtain more information.

AUTHORS
     Written by Douglas Gilbert.

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

COPYRIGHT
     Copyright (C) 2005-2021 Douglas Gilbert
     This software is distributed under a FreeBSD license. There is NO warranty;
     not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

WEB SITE
     There  is	a web page discussing this package at https://sg.danny.cz/sg/sd-
     parm.html .

SEE ALSO
     hdparm(hdparm),  sg_modes,  sg_wr_mode,  sginfo,  sg_inq,	 sg_vpd(all   in
     sg3_utils), smartmontools(smartmontools.sourceforge.net), mt, eject(eject),

sdparm-1.12			   April 2021			       SDPARM(8)

home | help