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

  
 
  

home | help
SG_MODES(8)			    SG3_UTILS			     SG_MODES(8)

NAME
     sg_modes - reads mode pages with SCSI MODE SENSE command

SYNOPSIS
     sg_modes  [--all]	[--ALL]  [--control=PC]  [--dbd]  [--dbout]  [--examine]
     [--flexible] [--help] [--hex] [--list] [--llbaa]  [--maxlen=LEN]  [--multi-
     ple]  [--page=PG[,SPG]]  [--raw]  [-R]  [--readwrite]  [--six]  [--verbose]
     [--version] [DEVICE]

     sg_modes [-6] [-a] [-A] [-c=PC] [-d] [-D] [-e] [-f]  [-h]	[-H]  [-l]  [-L]
     [-m=LEN] [-M] [-p=PG[,SPG]] [-r] [-subp=SPG] [-v] [-V] [-w] [-?]  [DEVICE]

DESCRIPTION
     This  utility sends a MODE SENSE SCSI command to the DEVICE and outputs the
     response. There is a 6 byte and 10 byte (cdb) variant  of	the  MODE  SENSE
     command,  this  utility defaults to the 10 byte variant. The SPC-4 standard
     (and the SPC-5 standard) stated that implementers should migrate away  from
     the SCSI MODE SELECT(6) and MODE SENSE(6) commands in favour of the 10 byte
     variants (e.g. MODE SENSE(10)). In draft SPC-6 revision 7 the SCSI MODE SE-
     LECT(6) and MODE SENSE(6) commands have been removed.

     This  utility  decodes  mode page headers and block descriptors but outputs
     the contents of each mode page in hex. It also has no  facility  to  change
     the mode page contents or block descriptor data. Mode page contents are de-
     coded and can be changed with the sdparm utility.

     This utility supports two command line syntaxes, the preferred one is shown
     first in the synopsis and explained in this section. A later section on the
     old command line syntax outlines the second group of options.

     If no page is given (and --list is not selected) then --all is assumed. The
     --all  option  requests  all  mode pages (but not subpages) in a single re-
     sponse.

OPTIONS
     Arguments to long options are mandatory for short options as well.

     -a, --all
	    output all the mode pages reported by the DEVICE. This is  what  the
	    page  code 63 (0x3f) is defined to do. When used once, mode subpages
	    are not fetched. When used twice (e.g. '-aa'), all	mode  pages  and
	    subpages are requested which is equivalent to '--page=63,255'.

     -A, --ALL
	    same  meaning  as  using  the  --all option twice. That is, all mode
	    pages and subpages are fetched. The default is to fetch all the mode
	    pages but not mode subpages.

     -c, --control=PC
	    PC is the page control value. Up to four different versions of  each
	    page are held by the device:
		0 : current values (i.e. those active at present)
		1 : changeable values
		2 : default values (i.e. the manufacturer's settings)
		3 : saved values
	    The  changeable  values  are bit masks showing which fields could be
	    changed with a MODE SELECT. The saved values will be re-instated the
	    next time the device is power cycled or reset. If this option is not
	    given then current values [0] are assumed.

     -d, --dbd
	    disable block descriptors. By default,  block  descriptors	(usually
	    one (for disks) or none) are returned in a MODE SENSE response. This
	    option  sets  the  "disable  block descriptors" (DBD) bit in the cdb
	    which instructs the device not to return any  block  descriptors  in
	    its response. Older devices may not support this setting and may re-
	    turn  an  "illegal request" sense key; alternatively they may ignore
	    it. Oddly the Reduced Block Command set (RBC) requires this bit set.

     -D, --dbout
	    disable outputting block descriptors. Irrespective of whether  block
	    descriptors are present in the response or not, they are not output.

     -e, --examine
	    if	the  --page=PG[,SPG] option is not given, examine each mode page
	    in the range 0 through to 62 (inclusive). If the --page=PG[,SPG] op-
	    tion is give, then all subpages whose page code is PN  are	examined
	    (subpages 0 through 254 (inclusive)). If some response is given then
	    print  out the mode (sub)page name or number (in hex) if the name is
	    not known.
	    The sdparm utility which lists mode and VPD pages also has a --exam-
	    ine option will similar functionility.

     -f, --flexible
	    Some devices, bridges and/or drivers attempt crude translations  be-
	    tween  MODE  SENSE 6 and 10 byte commands without correcting the re-
	    sponse. This will cause the response to be mis-interpreted	(usually
	    with  an  error saying the response is malformed). With this option,
	    the length of the response is checked, and if it  looks  wrong,  the
	    response is then decoded as if the other mode sense (cdb length) was
	    sent.

     -h, --help
	    print out the usage message then exit.

     -H, --hex
	    Since  this  utility shows the structure of a MODE SENSE command re-
	    sponse (i.e.  its parameter header, zero or more  block  descriptors
	    followed  by  zero	or more mode pages) but outputs most of the con-
	    tents of the response in hexadecimal. When this option is used once,
	    the only difference is that the mode page name, if	known,	is  fol-
	    lowed by it page number (and subpage number) bracketed in hex.
	    When this option is given twice, then each line of hex output has an
	    ASCII rendering of that hex place at the end of each line. When this
	    option  is	given  three times, then the hexadimal address, shown at
	    the start of each hexadecimal line is dropped,  there  is  no  ASCII
	    rendering of hex, and all test lines are removed. This leaves simple
	    hex  that  is  parsable  that  represents the MODE SENSE command re-
	    sponse. The component parts of that response  are  put  on	separate
	    line.
	    When  the  option  is  given  four	or more times (recommended for a
	    parsable form), the ASCII informational lines are back, but they all
	    start with "#" which a parser needs to ignore.  The output	is  sent
	    to stdout while any error messages or warning are sent to stderr. So
	    simple  Unix command line redirection of stdout to a file (done with
	    '>' in most Unix shells) should be sufficient to capture the output.
	    As noted above, the sdparm utility can be used to  decode  that  hex
	    file later with its '--inhex=FN' option.

     -l, --list
	    lists  all	common	page  and subpage codes and their names that are
	    found in the command set that matches the  peripheral  type  of  the
	    given  DEVICE.  If no DEVICE and no --page=PG is given then the com-
	    mon page and subpage codes and their names are listed for SBC  (e.g.
	    a  disk).  If  no  DEVICE is given and a --page=PG is given then the
	    common page and subpage codes and their names  are	listed	for  the
	    command  set whose peripheral device type matches the value given to
	    PG. For example 'sg_mode --list --page=1'  lists  the  command  mode
	    pages and subpages for tape devices. Additionally if a sub_page_code
	    is	given  then it is interpreted as a transport identifier and com-
	    mand transport specific mode page codes and their names  are  listed
	    following the main mode page list.	Other options are ignored.

     -L, --llbaa
	    set  the  Long  LBA Accepted (LLBAA) bit in the MODE SENSE (10) cdb.
	    This bit is not defined in the MODE SENSE (6)  cdb	so  setting  the
	    '-L'  and  '--six' options is reported as an error. When set the DE-
	    VICE may respond with 16 byte block descriptors as indicated by  the
	    'LongLBA'  field  in the response. In most cases setting this option
	    is not needed.

     -m, --maxlen=LEN
	    The LEN argument is the maximum response length in bytes. It is  the
	    'allocation  length'  field  in  the  cdb. When not given (or LEN is
	    zero) then the allocation length field is set to 4096 for MODE SENSE
	    (10) or 252 for MODE SENSE (6). The LEN argument must  be  non-nega-
	    tive  and  no greater than 65535 for MODE SENSE (10) and not greater
	    than 255 for MODE SENSE (6).

     -M, --multiple
	    for each mode page (and mode subpage), fetch all available page con-
	    trols.  There may be up to four page controls  as  outlined  in  the
	    --control=PC  option.  The mode parameter header, and block descrip-
	    tors are output that same way as without this option. After the mode
	    page name (and numbers) are output, there is a line with either cur-
	    rent, changeable, default or saved page control on	it  followed  by
	    that page control in hex.
	    If	the  --control=PC  option is given, it is overridden by this op-
	    tion.

     -O, --old
	    Switch to older style options. Please use as first option.

     -p, --page=PG
	    page code to fetch. The PG is assumed to be a decimal  value  unless
	    prefixed by '0x' or has a trailing 'h'. It should be a value between
	    0  and 63 (inclusive). When not given and a default is required then
	    a value of 63 (0x3f), which fetches all mode pages, is used.
	    Alternatively an acronym for the mode page can be given. The  avail-
	    able acronyms can be listed out with the --page=xxx option. They are
	    almost  the  same  as the acronyms used for mode pages in the sdparm
	    utility.

     -p, --page=PG,SPG
	    page code and subpage code values to fetch. Both arguments	are  as-
	    sumed  to  be  decimal  unless flagged as hexadecimal. The page code
	    should be between 0 and 63 inclusive. The subpage code should be be-
	    tween 0 and 255 inclusive. The default value for the subpage code is
	    0.

     -r, --raw
	    output the response in binary to stdout. Error  messages  and  warn-
	    ings,  if  any,  are  sent to stderr. When this option is used twice
	    (e.g. '-rr') then has the same action as '-R'

     -R     output the selected mode page to stdout a byte per line.  Each  line
	    contains  two hexadecimal digits (e.g. "3e"). Useful as input (after
	    editing) to the sg_wr_mode(8) utility.

     -w, --readwrite
	    open DEVICE in "read-write" mode. Default is to open it in read-only
	    mode.

     -6, -s, --six
	    by default this utility sends a 10 byte MODE SENSE	command  to  the
	    DEVICE.  However  some  SCSI  devices only support 6 byte MODE SENSE
	    commands (e.g. SCSI-2 tape drives). This parameter forces the use of
	    6 byte MODE SENSE commands.

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

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

NOTES
     If the normal sg_modes utility fails with "illegal command operation  code"
     then try the '--six' (or '-6') option.

     This  utility  performs  a SCSI INQUIRY command to determine the peripheral
     type of the device (e.g. 0 -> Direct Access Device (disk)) prior to sending
     a MODE SENSE command. This helps in decoding the block descriptor and  mode
     pages.

     This  utility  opens  DEVICE  in  read-only  mode	(e.g.  in Unix, with the
     O_RDONLY flag) by default. It will open DEVICE in read-write  mode  if  the
     --readwrite option is given.

     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. SCSI disks  and  DVD  drives)
     can  also be specified. For example "sg_modes -a /dev/sda" will work in the
     2.6 series kernels.

     There is no JSON output from this utility because	its  primary  output  is
     mode  pages in hexadecimal. So apart from the mode page name and its struc-
     ture, nothing is decoded. The sdparm utility does decode mode page contents
     and it does support JSON output.

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

OLDER COMMAND LINE OPTIONS
     The options in this section were the only ones available prior to sg3_utils
     version  1.23  . Since then this utility defaults to the newer command line
     options which can be overridden by using --old (or -O) as the first option.
     See the ENVIRONMENT VARIABLES section for another way to force the  use  of
     these older command line options.

     -6     by	default  this  utility sends a 10 byte MODE SENSE command to the
	    DEVICE. This parameter forces the use of 6 byte MODE SENSE commands.
	    See --six in the main description.

     -a     see --all in the main description.

     -A     output all the mode pages and subpages supported by the DEVICE. Same
	    as '--all --all' in the new syntax.

     -c=PC  PC is the page control value. See --control=PC in the main	descrip-
	    tion.

     -d     see --dbd in the main description.

     -D     see --dbout in the main description.

     -e     see --examine in the main description.

     -f     see --flexible in the main description.

     -h     The default action is to decode known mode page numbers (and subpage
	    numbers)  into text. With this option mode page numbers (and subpage
	    numbers) are output in hexadecimal.

     -H     same action as the '-h' option.

     -l     see --list in the main description.

     -L     see --llbaa in the main description.

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

     -m=LEN
	    see --maxlen=LEN in the main description.

     -M     see --multiple in the main description.

     -p=PG  PG is page code to fetch. Should be a hexadecimal number  between  0
	    and  3f inclusive (0 to 63 decimal). The default value when required
	    is 3f (fetch all mode pages). Note that  an  acronym  for  the  page
	    and/or  subpage values is not accepted in this older format (because
	    any acronym starting with the letters 'a' to 'f'  is  ambiguous;  it
	    could either be a hex number or an acronym).

     -p=PG,SPG
	    page  code and subpage code values to fetch. The page code should be
	    a hexadecimal number between 0 and 3f inclusive.  The  subpage  code
	    should  be	a hexadecimal number between 0 and ff inclusive. The de-
	    fault value for the subpage code is 0.

     -r     output the selected mode page to stdout a byte per line.  Each  line
	    contains  two hexadecimal digits (e.g. "3e"). Useful as input (after
	    editing) to the sg_wr_mode(8) utility.

     -subp=SPG
	    sub page code to fetch. Should be a hexadecimal number between 0 and
	    0xff inclusive. The default value is 0.

     -v     increase verbosity of output.

     -V     print out version string then exit.

     -w     see --readwrite in the main description.

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

ENVIRONMENT VARIABLES
     Since sg3_utils version 1.23 the  environment  variable  SG3_UTILS_OLD_OPTS
     can be given. When it is present this utility will expect the older command
     line options. So the presence of this environment variable is equivalent to
     using --old (or -O) as the first command line option.

EXAMPLES
     All  mode pages, but not mode subpages, can be dumped in hex to a file like
     this:

	# sg_modes -a -HHHH /dev/sdb > modes_sdeb.hex

     If there are any errors then they are sent to stderr so they will appear on
     the console and not within the modes_sdeb.hex file.  Nonetheless  the  con-
     tents of modes_sdeb.hex may not be useful if an error has occurred.

     The  '-HHHH'  option produces hex output with comment lines starting with a
     '#' character. Each comment describes the following block.  If all is well,
     the modes_sdeb.hex file will be suitable for the sdparm utility to decode:

	# sdparm -a --inhex=modes_sdeb.hex

     See the sdparm(8) manpage for further information.
     To dump both mode pages and subpages, use this invocation:

	# sg_modes -aa -HHHH /dev/sdb > modes_sdeb.hex

     No change is needed in the associated sdparm call. There  is  some  example
     output  in  the inhex directory in the sg3_utils package, in a file called:
     modes_sdeb.hex . The file	was  produced  by  using  this	utility  on  the
     scsi_debug driver in Linux.

     Each  mode  page  (and  subpage)  has  up to four 'page controls': current,
     changeable, default and saved. The last three may or may not  be  supported
     by  the device. All available page controls for all mode pages and subpages
     can be placed in a hex file with this invocation:

	# sg_modes -aa -M -HHHH /dev/sdb > modes_mm_sdeb.hex

     Again, no change is needed in the associated sdparm call. There is some ex-
     ample output in the inhex directory in the sg3_utils  package,  in  a  file
     called: modes_mm_sdeb.hex .

AUTHOR
     Written by Douglas Gilbert

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

COPYRIGHT
     Copyright (C) 2000-2023 Douglas Gilbert
     This software is distributed under the GPL version 2. There is NO warranty;
     not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

SEE ALSO
     sdparm(8),  sg_wr_mode(8),  sginfo(8), sgmode(scsirastools), scsiinfo(net),
     scu(net), seatools(seagate)

     All these utilities offer some facility to change mode page (or  block  de-
     scriptor) parameters.

sg3_utils-1.48			    May 2023			     SG_MODES(8)

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

home | help