sg_modes - reads mode pages with SCSI MODE SENSE command
sg_modes [--all] [--control=PC]
[--dbd] [--dbout] [--examine] [--flexible]
[--help] [--hex] [--list] [--llbaa]
[--maxlen=LEN] [--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] [-p=PG[,SPG]] [-r]
[-subp=SPG] [-v] [-V] [-w] [-?]
[DEVICE]
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 SPC-5 drafts) include a note stating 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)).
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 decoded and can be changed by 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 response.
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'.
- -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 return 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
- examine each mode page in the range 0 through to 62 (inclusive). If some
response is given then print out the mode page name or number (in hex) if
the name is not known.
- -f,
--flexible
- Some devices, bridges and/or drivers attempt crude translations between
MODE SENSE 6 and 10 byte commands without correcting the response. 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
- The default action is to decode known mode page numbers (and subpage
numbers) into text. When this option is used once, the response is output
in hexadecimal to stdout. When this option is used twice, mode page
numbers and page control values are output in hex.
When this option is used three times, the full response to the MODE SENSE
command is output in hex to stdout without any decoding. This form can be
redirected to a file (or piped) and then used 'sdparm --inhex=' to
decode.
- -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 common 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 command
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 DEVICE 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-negative
and no greater than 65535 for MODE SENSE (10) and not greater than 255 for
MODE SENSE (6).
- -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 available
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 assumed to
be decimal unless flagged as hexadecimal. The page code should be between
0 and 63 inclusive. The subpage code should be between 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 warnings, 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, --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.
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.
The exit status of sg_modes is 0 when it is successful. Otherwise
see the sg3_utils(8) man page.
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 description.
- -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.
- -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 default 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.
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.
Written by Douglas Gilbert
Report bugs to <dgilbert at interlog dot com>.
Copyright © 2000-2018 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.
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 descriptor) parameters.