Provided by: sg3-utils_1.36-1ubuntu1_amd64 bug

NAME

       sg_ses - access a SCSI Enclosure Services (SES) device

SYNOPSIS

       sg_ses  [--byte1=B1] [--clear=STR] [--control] [--data=H,H...] [--descriptor=DN] [--enumerate] [--filter]
       [--get=STR] [--help] [--hex] [--index=IIA | --index=TIA,II] [--inner-hex] [--join]  [--list]  [--page=PG]
       [--raw] [--set=STR] [--status] [--verbose] [--version] DEVICE

DESCRIPTION

       Fetches  management information from a SCSI Enclosure Service (SES) device.  This utility can also modify
       the state of a SES device. The DEVICE should be a SES device which may be a dedicated enclosure  services
       processor in which case an INQUIRY response's Peripheral Device Type is 13 [0xd]. Alternatively it may be
       attached to another type of SCSI device (e.g. a disk) in which case the EncServ bit is set in its INQUIRY
       response.

       If  no  options are given (i.e. only the DEVICE argument is given) then the names of all diagnostic pages
       supported are listed. Most, but not necessarily all, of the named diagnostic pages are defined in the SES
       standards and drafts. The most recent reference for this utility is the draft SCSI Enclosure  Services  3
       document  T10/2149-D  Revision  5  at  http://www.t10.org . Existing standards for SES and SES-2 are ANSI
       INCITS 305-1998 and ANSI INCITS 448-2008 respectively.

       Changing the state of an enclosure (e.g. requesting the "ident" (locate) LED to flash on a  disk  carrier
       in an array) is typically done using a read-modify-write cycle. See the section on CHANGING STATE below.

       There is a web page discussing this utility at http://sg.danny.cz/sg/sg_ses.html .

       In  the  following  sections  "page"  refers  to  a  diagnostic  page, either fetched with a SCSI RECEIVE
       DIAGNOSTIC RESULTS command or sent to the DEVICE with a SCSI SEND DIAGNOSTIC command.

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.

       -b, --byte1=B1
              some  modifiable  pages may need byte 1 (i.e. the second byte) set. In the Enclosure Control page,
              byte 1 contains the INFO, NON-CRIT, CRIT  and  UNRECOV  bits.  In  the  Subenclosure  String  Out,
              Subenclosure  Nickname  Control  and  Download Microcode Control pages, byte 1 is the Subenclosure
              identifier.  Active when the --control and --data=H,H... options are used and the default value is
              0. If the --clear=STR or --set=STR option is used then the value read from byte 1 is written  back
              to byte 1.  B1 is in decimal unless it is prefixed by '0x' or '0X' (or has a trailing 'h' or 'H').

       -C, --clear=STR
              Used  to  clear  an  element  field  in  the Enclosure Control or Threshold Out page. Must be used
              together with a --descriptor=DN or --index=... option to specify which element is to  be  changed.
              The  Enclosure  Control  page  is assumed if the --page=PG option is not given. See the STR FORMAT
              section below.

       -c, --control
              will send control information to the DEVICE via a SCSI SEND DIAGNOSTIC command. Cannot  give  both
              this  option  and  --status.   The  Enclosure  Control,  String  Out, Threshold Out, Array Control
              (obsolete in SES-2), Subenclosure String Out, Subenclosure Nickname Control and Download Microcode
              pages can be set currently. This option is assumed if either the --clear=STR or  --set=STR  option
              is given.

       -d, --data=H,H...
              permits  a  string  of  comma separated (ASCII) hex bytes to be specified (limit 1024). A (single)
              space separated string of hex bytes is also allowed but the list  needs  to  be  in  quotes.  This
              option  allows  the  parameters  to  a  control  page to be specified. The string given should not
              include the first 4 bytes (i.e. page code and length).

       -d, --data=-
              reads a data string from stdin, limit 1024 bytes. stdin may provide ASCII hex as a comma separated
              list (i.e. as with the --data=H,H...  option).  Additionally  spaces,  tabs  and  line  feeds  are
              permitted as separators from stdin . Stops reading stdin when an EOF is detected.

       -D, --descriptor=DN
              where  DN  is  a descriptor name (string) as found in the Element Descriptor page. If that page is
              supported then DN may be an  alternative  for  TIA,II  (in  the  --index=TIA,II  option).  If  the
              descriptor  name  contains  a space then DN needs to be surrounded by quotes (single or double) or
              the space escaped (e.g. preceded by a backslash).  Some elements (e.g. overall elements)  may  not
              have  descriptor names. Useful with the --clear=STR, --get=STR and --set=STR options.  If no other
              options are given then the --join option is assumed.

       -e, --enumerate
              enumerate all known page names and SES elements when this option is given once. If --enumerate  is
              given twice, then the recognised acronyms for the --clear=STR, --get=STR and --set=STR options are
              listed.  The  utility  exits  after listing this information (so most other options and DEVICE are
              ignored).

       -f, --filter
              cuts down on the amount of output from the Enclosure Status page and the Additional Element Status
              page. When this option is given, any line which has all its  binary  flags  cleared  (i.e.  0)  is
              filtered  out  (i.e.  ignored).  If a line has some other value on it (e.g. a temperature) then it
              is output.  The --filter option is also useful for reducing the amount of output generated by  the
              --join option.

       -G, --get=STR
              Used  to  read  a  field  in  a  status  element.  Must be used together with a --descriptor=DN or
              --index=... option to specify which element is to be read. By default the Enclosure Status page is
              read, the only other pages that can be read are the Threshold In  and  Additional  Element  Status
              pages.  If  a  value  is  found  it  is output in decimal to stdout (by default) or in hexadecimal
              preceded by "0x" if the --hex option is also given. See the STR FORMAT section below.

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

       -H, --hex
              If the --get=STR option is given then output the value found  (if  any)  in  hexadecimal,  with  a
              leading  "0x".  Otherwise  output  the  response  in  hexadecimal. Ignored with some options (e.g.
              --join).

       -I, --index=IIA
              where IIA is either an individual index (II) or an Element type abbreviation (A). See the  INDEXES
              section below. If the --page=PG option is not given then the Enclosure Status (or Control) page is
              assumed.   May  be  used  with the --join option or one of the --clear=STR, --get=STR or --set=STR
              options. To enumerate the available Element type abbreviations use the --enumerate option.

       -I, --index=TIA,II
              where TIA,II is an type header index  (TI)  or  Element  type  abbreviation  (A)  followed  by  an
              individual  index  (II).  See the INDEXES section below. If the --page=PG option is not given then
              the Enclosure Status (or Control) page is assumed. May be used with the --join option  or  one  of
              the  --clear=STR,  --get=STR  or  --set=STR  options.  To  enumerate  the  available  Element type
              abbreviations use the --enumerate option.

       -i, --inner-hex
              the outer levels of a status page are decoded and printed out but the innermost  level  (e.g.  the
              Element  Status  Descriptor)  is output in hex. Also active with the Additional Element Status and
              Threshold In pages. Can be used with --index=... and/or --join options.

       -j, --join
              group elements from the Element Descriptor, Enclosure Status and Additional Element Status  pages.
              If this option is given twice then elements from the Threshold In page are also grouped. The order
              is  dictated  by  the  Configuration  page.  All  elements  are  output  unless  the  --index=  or
              --descriptor=DN option is given, in which case only the matching element is output.  The  --filter
              option  can  be  added  to  reduce  the  amount of output generated by the option. See the INDEXES
              section below.

       -l, --list
              This option is equivalent to --enumerate. See that option.

       -p, --page=PG
              where PG is a page abbreviation or code (a number). If PG starts with a digit it is assumed to  be
              in decimal unless prefixed by 0x for hex. Valid range is 0 to 255 (0x0 to 0xff) inclusive. Default
              is  page  'sdp'  which  is page_code 0 (i.e. "Supported Diagnostic Pages") if no other options are
              given.

       -r, --raw
              outputs the chosen status page in ASCII hex in a format suitable for a later invocation using  the
              --data=  option.  A  page less its first 4 bytes (page code and length) is output. When used twice
              (e.g. -rr) the full page contents is output in binary to stdout.

       -S, --set=STR
              Used to set an element field in the Enclosure Control or Threshold Out page. Must be used together
              with a --descriptor=DN or --index=... option to specify  which  element  is  to  be  changed.  The
              Enclosure Control page is assumed if the --page=PG option is not given. See the STR FORMAT section
              below.

       -s, --status
              will  fetch  page from the DEVICE via a SCSI RECEIVE DIAGNOSTIC RESULTS command. In the absence of
              other options that imply modifying a page (e.g.  --control or --set=STR) then --status is assumed.

       -v, --verbose
              increase the level of verbosity, (i.e. debug output).

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

INDEXES

       An enclosure can have information about its disk and tape drives plus other  supporting  components  like
       power  supplies  spread  across  several pages.  Addressing a specific element (overall or individual) is
       complicated.

       The Configuration page is key: it contains a list of "type headers", each of which  contains  an  Element
       type  (e.g.  Array Device Slot), a Subenclosure identifier (0 for the primary enclosure) and a "Number of
       possible elements".  Corresponding to each type header, the  Enclosure  Status  page  has  one  "overall"
       element  plus "Number of possible elements" individual elements all of which have the given Element type.
       For some Element types the "Number of possible elements" will be 0 so the Enclosure Status page has  only
       one  "overall"  element  corresponding to that type header. The Element Descriptor page and the Threshold
       (In and Out) pages follow the same pattern as the Enclosure Status page.

       The Additional Element Status page is a bit more complicated. It has  entries  for  "Number  of  possible
       elements"  of certain Element types. It does not have entries corresponding to the "overall" elements. To
       make the correspondence a little clearer each descriptor in this page  optionally  contains  an  "Element
       Index  Present"  (EIP)  indicator.  If EIP is set then each element's "Element Index" field refers to the
       position of the corresponding element in the Enclosure Status page.

       Addressing a single overall element or a single individual element is done with two indexes: TI  and  II.
       Both  are  origin 0. TI=0 corresponds to the first type header entry which must be a Device Slot or Array
       Device Slot Element type (according  to  the  SES-2  standard).  To  address  the  corresponding  overall
       instance, II is set to -1, otherwise II can be set to the individual instance index. As an alternative to
       the  type  header index (TI), an Element type abbreviation (A) optionally followed by a number (e.g. "ps"
       refers to the first Power Supply Element type; "ps1" refers to the second) can be given.

       One of two command lines variants can be used to specify indexes: --index=TIA,II where TIA is  either  an
       type  header  index  (TI)  or  an  Element type abbreviation (A) (e.g. "ps" or "ps1"). II is is either an
       individual index or "-1" to specify the overall element. The second variant is --index=IIA where  IIA  is
       either an individual index (II) or an Element type abbreviation (A). When IIA is an individual index then
       the  option  is  equivalent  to --index=0,II. When IIA is an Element type abbreviation then the option is
       equivalent to --index=A,-1.

       To cope with vendor specific Element types (which should be in the range 128 to 255) the Element type can
       be given as a number with a leading underscore.   For  example  these  are  equivalent:  --index=arr  and
       --index=_23  since the Array Device Slot Element type value is 23.  Also --index=ps1 and --index=_2_1 are
       equivalent.

       Another example: if the first type header in the Configuration page has Array Device  Slot  Element  type
       then --index=0,-1 is equivalent to --index=arr. Also --index=arr,3 is equivalent to --index=3.

       Note  that  if  the  Element  Descriptor  page  is  available  then  the --descriptor=DN option may be an
       alternative to the --index=... option.

STR FORMAT

       The STR operands of the --clear=STR, --get=STR and --set=STR options all have the same  structure.  There
       are two forms:
             <acronym>[=<value>]
             <start_byte>:<start_bit>[:<num_bits>][=<value>]

       The  <acronym>  is  one  of  a list of common fields (e.g. "ident" and "fault") that the utility converts
       internally into the second form. The <start_byte> is usually in the range 0 to 3, the <start_bit> must be
       in the range 0 to 7 and the <num_bits> must be in the range 1 to 64 (default 1). The number of  bits  are
       read  in  the  left  to  right  sense of the element tables shown in the various SES draft documents. For
       example the 8 bits of byte 2 would be represented as 2:7:8 with the most significant bit  being  2:7  and
       the least sugnificant bit being 2:0 .

       The  <value> is optional but is ignored if provided to --get=STR.  For --set=STR the default <value> is 1
       while for --clear=STR the default value is 0 .

       The supported list of <acronym>s can be viewed by using the --enumerate option twice (or "-ee").

CHANGING STATE

       This utility has various techniques for changing the state of a SES  device.   As  noted  above  this  is
       typically  a read-modify-write type operation.  Most modifiable pages have a "status" (or "in") page that
       can be read, and a corresponding "control" (or "out") page that can be written back to change  the  state
       of the enclosure.

       The lower level technique provided by this utility involves outputting a "status" page in hex with --raw.
       Then  a  text  editor  can  be  used to edit the hex (note: to change an Enclosure Control descriptor the
       SELECT bit needs to be set). Next the control page data  can  fed  back  with  the  --data=H,H...  option
       together with the --control option; the --byte1=B1 option may need to be given as well.

       Changes  to  the  Enclosure Control page (and the Threshold Out page) can be done at a higher level. This
       involves choosing a page (the default in this case  is  the  Enclosure  Control  page).  Next  choose  an
       individual  or  overall  element  index  (or  name  it with its Element Descriptor string). Then give the
       element's name (e.g. "ident" for RQST IDENT) or its position within that element (e.g. in an Array Device
       Slot Control element RQST IDENT is byte 2, bit 1 and 1 bit long ("2:1:1")). Finally a value can be given,
       if not the value for --set=STR defaults to 1 and for --clear=STR defaults to 0.

NOTES

       This utility can be used to fetch arbitrary  (i.e.  non  SES)  diagnostic  pages  (using  the  SCSI  READ
       DIAGNOSTIC  command).  To  this  end  the  --page=PG  and  --hex  options would be appropriate. Arbitrary
       diagnostic pages can be sent to a device with the sg_senddiag utility.

       The most troublesome part of the join operation is  associating  Additional  Element  Status  descriptors
       correctly.  At least one SES device vendor has misinterpreted the SES-2 standard with its "element index"
       field. The code in this utility interprets the "element index" field as per the  SES-2  standard  and  if
       that   yields   an   inappropriate   Element   type,   adjusts  its  indexing  to  follow  that  vendor's
       misinterpretation.

       In draft SES-3 revision 5 the "Door Lock" element name was changed to the "Door" (and an OPEN  field  was
       added to the status element). As a consequence the former 'dl' element type abbreviation has been changed
       to 'do'.

       There  is  a  related  command  set  called SAF-TE (SCSI attached fault-tolerant enclosure) for enclosure
       (including RAID) status and control. SCSI devices  that  support  SAF-TE  report  "Processor"  peripheral
       device type (0x3) in their INQUIRY response. See the sg_safte utility in this package or safte-monitor on
       the Internet.

EXAMPLES

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

       To view the supported pages:

          sg_ses /dev/bsg/6:0:2:0

       To view the Configuration page:

          sg_ses --page=cf /dev/bsg/6:0:2:0

       To view the Enclosure Status page:

          sg_ses --page=es /dev/bsg/6:0:2:0

       To  get  the  (attached)  SAS  address of that device (which is held in the Additional Element Sense page
       (page 10)) printed on hex:

          sg_ses -p aes -D ArrayDevice07 -G at_sas_addr -H /dev/sg3

       To collate the information in the Enclosure Status, Element  Descriptor  and  Additional  Element  Status
       pages the --join option can be used:

          sg_ses --join /dev/sg3

       This  will  produce  a  lot  of  output.  To filter out lines that don't contain much information add the
       --filter option:

          sg_ses --join --filter /dev/sg3

       Fields in the various elements of the Enclosure Control and Threshold  pages  can  be  changed  with  the
       --clear=STR  and --set=STR options. [All modifiable pages can be changed with the --raw and --data=H,H...
       options.] The following example looks  at  making  the  "ident"  LED  (also  called  "locate")  flash  on
       "ArrayDevice07" which is a disk (or more precisely the carrier drawer the disk is in):

          sg_ses --index=7 --set=2:1:1 /dev/sg3

       If  the  Element  Descriptor diagnostic page shows that "ArrayDevice07" is the descriptor name associated
       with element index 7 then this invocation is equivalent to the previous one:

          sg_ses --descriptor=ArrayDevice07 --set=2:1:1 /dev/sg3

       Further the byte 2, bit 1 (for 1 bit) field in the Array Device Slot Control element is  RQST  IDENT  for
       asking a disk carrier to flash a LED so it can be located. In this case "ident" (or "locate") is accepted
       as an acronym for that field:

          sg_ses --descriptor=ArrayDevice07 --set=ident /dev/sg3

       To stop that LED flashing:

          sg_ses --descriptor=ArrayDevice07 --clear=ident /dev/sg3

       Now for an example of a more general but lower level technique for changing a modifiable diagnostic page.
       The String (In and Out) diagnostics page is relatively simple (compared with the Enclosure Status/Control
       page).  However the use of this lower level technique is awkward involving three steps: read, modify then
       write. First check the current String (In) page contents:

          sg_ses --page=str /dev/bsg/6:0:2:0

       Now the "read" step. The following command will send the  contents  of  the  String  page  (from  byte  4
       onwards)  to  stdout.  The  output  will be in ASCII hex with pairs of hex digits representing a byte, 16
       pairs per line, space separated. The redirection puts stdout in a file called "t":

          sg_ses --page=str --raw /dev/bsg/6:0:2:0 > t

       Then with the aid of the SES-3 document (in revision 3: section  6.1.6)  use  your  favourite  editor  to
       change t. The changes can be sent to the device with:

          sg_ses --page=str --control --data=- /dev/bsg/6:0:2:0 < t

       If the above is successful, the String page should have been changed. To check try:

          sg_ses --page=str /dev/bsg/6:0:2:0

EXIT STATUS

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

AUTHORS

       Written by Douglas Gilbert.

REPORTING BUGS

       Report bugs to <dgilbert at interlog dot com>.

COPYRIGHT

       Copyright © 2004-2012 Douglas Gilbert
       This  software is distributed under a FreeBSD license. There is NO warranty; not even for MERCHANTABILITY
       or FITNESS FOR A PARTICULAR PURPOSE.

SEE ALSO

       sg_inq, sg_safte, sg_senddiag, sg3_utils (in sg3_utils package); safte-monitor (Internet)

sg3_utils-1.35                                    November 2012                                        SG_SES(8)