| .TH SG_MODES "8" "July 2022" "sg3_utils\-1.45" SG3_UTILS |
| .SH NAME |
| sg_modes \- reads mode pages with SCSI MODE SENSE command |
| .SH SYNOPSIS |
| .B sg_modes |
| [\fI\-\-all\fR] [\fI\-\-control=PC\fR] [\fI\-\-dbd\fR] [\fI\-\-dbout\fR] |
| [\fI\-\-examine\fR] [\fI\-\-flexible\fR] [\fI\-\-help\fR] [\fI\-\-hex\fR] |
| [\fI\-\-list\fR] [\fI\-\-llbaa\fR] [\fI\-\-maxlen=LEN\fR] |
| [\fI\-\-page=PG[,SPG]\fR] [\fI\-\-raw\fR] [\fI\-R\fR] [\fI\-\-readwrite\fR] |
| [\fI\-\-six\fR] [\fI\-\-verbose\fR] [\fI\-\-version\fR] [\fIDEVICE\fR] |
| .PP |
| .B sg_modes |
| [\fI\-6\fR] [\fI\-a\fR] [\fI\-A\fR] [\fI\-c=PC\fR] [\fI\-d\fR] [\fI\-D\fR] |
| [\fI\-e\fR] [\fI\-f\fR] [\fI\-h\fR] [\fI\-H\fR] [\fI\-l\fR] [\fI\-L\fR] |
| [\fI\-m=LEN\fR] [\fI\-p=PG[,SPG]\fR] [\fI\-r\fR] [\fI\-subp=SPG\fR] |
| [\fI\-v\fR] [\fI\-V\fR] [\fI\-w\fR] [\fI\-?\fR] [\fIDEVICE\fR] |
| .SH DESCRIPTION |
| .\" Add any additional description here |
| .PP |
| This utility sends a MODE SENSE SCSI command to the \fIDEVICE\fR 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) 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)). |
| .PP |
| 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 |
| .B sdparm |
| utility. |
| .PP |
| 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. |
| .PP |
| If no page is given (and \fI\-\-list\fR is not selected) then \fI\-\-all\fR |
| is assumed. The \fI\-\-all\fR option requests all mode pages (but not |
| subpages) in a single response. |
| .SH OPTIONS |
| Arguments to long options are mandatory for short options as well. |
| .TP |
| \fB\-a\fR, \fB\-\-all\fR |
| output all the mode pages reported by the \fIDEVICE\fR. 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'. |
| .TP |
| \fB\-c\fR, \fB\-\-control\fR=\fIPC\fR |
| \fIPC\fR is the page control value. Up to four different versions of each |
| page are held by the device: |
| .br |
| \fB0\fR : current values (i.e. those active at present) |
| .br |
| \fB1\fR : changeable values |
| .br |
| \fB2\fR : default values (i.e. the manufacturer's settings) |
| .br |
| \fB3\fR : saved values |
| .br |
| 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. |
| .TP |
| \fB\-d\fR, \fB\-\-dbd\fR |
| 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. |
| .TP |
| \fB\-D\fR, \fB\-\-dbout\fR |
| disable outputting block descriptors. Irrespective of whether block |
| descriptors are present in the response or not, they are not output. |
| .TP |
| \fB\-e\fR, \fB\-\-examine\fR |
| 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. |
| .br |
| The sdparm utility which lists mode and VPD pages also has a \fB\-\-examine\fR |
| option will similar functionility. |
| .TP |
| \fB\-f\fR, \fB\-\-flexible\fR |
| 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. |
| .TP |
| \fB\-h\fR, \fB\-\-help\fR |
| print out the usage message then exit. |
| .TP |
| \fB\-H\fR, \fB\-\-hex\fR |
| 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. |
| .br |
| 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. |
| .TP |
| \fB\-l\fR, \fB\-\-list\fR |
| 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 \fIDEVICE\fR. |
| If no \fIDEVICE\fR and no \fI\-\-page=PG\fR is given then the common page and |
| subpage codes and their names are listed for SBC (e.g. a disk). If no |
| \fIDEVICE\fR is given and a \fI\-\-page=PG\fR 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 \fIPG\fR. 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. |
| .TP |
| \fB\-L\fR, \fB\-\-llbaa\fR |
| 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 \fIDEVICE\fR |
| 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. |
| .TP |
| \fB\-m\fR, \fB\-\-maxlen\fR=\fILEN\fR |
| The \fILEN\fR argument is the maximum response length in bytes. It is |
| the 'allocation length' field in the cdb. When not given (or \fILEN\fR is |
| zero) then the allocation length field is set to 4096 for MODE SENSE (10) |
| or 252 for MODE SENSE (6). The \fILEN\fR argument must be non\-negative |
| and no greater than 65535 for MODE SENSE (10) and not greater than 255 |
| for MODE SENSE (6). |
| .TP |
| \fB\-O\fR, \fB\-\-old\fR |
| Switch to older style options. Please use as first option. |
| .TP |
| \fB\-p\fR, \fB\-\-page\fR=\fIPG\fR |
| page code to fetch. The \fIPG\fR 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. |
| .br |
| Alternatively an acronym for the mode page can be given. The available |
| acronyms can be listed out with the \fI\-\-page=xxx\fR option. They are |
| almost the same as the acronyms used for mode pages in the sdparm utility. |
| .TP |
| \fB\-p\fR, \fB\-\-page\fR=\fIPG,SPG\fR |
| 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. |
| .TP |
| \fB\-r\fR, \fB\-\-raw\fR |
| 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' |
| .TP |
| \fB\-R\fR |
| 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. |
| .TP |
| \fB\-w\fR, \fB\-\-readwrite\fR |
| open \fIDEVICE\fR in "read\-write" mode. Default is to open it in read\-only |
| mode. |
| .TP |
| \fB\-6\fR, \fB\-s\fR, \fB\-\-six\fR |
| by default this utility sends a 10 byte MODE SENSE command to the |
| \fIDEVICE\fR. 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. |
| .TP |
| \fB\-v\fR, \fB\-\-verbose\fR |
| increase level of verbosity. Can be used multiple times. |
| .TP |
| \fB\-V\fR, \fB\-\-version\fR |
| print out version string then exit. |
| .SH NOTES |
| If the normal sg_modes utility fails with "illegal command |
| operation code" then try the '\-\-six' (or '\-6') option. |
| .PP |
| 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. |
| .PP |
| This utility opens \fIDEVICE\fR in read\-only mode (e.g. in Unix, with |
| the O_RDONLY flag) by default. It will open \fIDEVICE\fR in read\-write |
| mode if the \fI\-\-readwrite\fR option is given. |
| .PP |
| In the 2.4 series of Linux kernels the \fIDEVICE\fR 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. |
| .SH EXIT STATUS |
| The exit status of sg_modes is 0 when it is successful. Otherwise see |
| the sg3_utils(8) man page. |
| .SH 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 \fI\-\-old\fR (or \fI\-O\fR) as the |
| first option. See the ENVIRONMENT VARIABLES section for another way to |
| force the use of these older command line options. |
| .TP |
| \fB\-6\fR |
| by default this utility sends a 10 byte MODE SENSE command to |
| the \fIDEVICE\fR. This parameter forces the use of 6 byte MODE SENSE commands. |
| See \fI\-\-six\fR in the main description. |
| .TP |
| \fB\-a\fR |
| see \fI\-\-all\fR in the main description. |
| .TP |
| \fB\-A\fR |
| output all the mode pages and subpages supported by the \fIDEVICE\fR. Same |
| as '\-\-all \-\-all' in the new syntax. |
| .TP |
| \fB\-c\fR=\fIPC\fR |
| \fIPC\fR is the page control value. See \fB\-\-control\fR=\fIPC\fR in |
| the main description. |
| .TP |
| \fB\-d\fR |
| see \fB\-\-dbd\fR in the main description. |
| .TP |
| \fB\-D\fR |
| see \fB\-\-dbout\fR in the main description. |
| .TP |
| \fB\-e\fR |
| see \fB\-\-examine\fR in the main description. |
| .TP |
| \fB\-f\fR |
| see \fB\-\-flexible\fR in the main description. |
| .TP |
| \fB\-h\fR |
| 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. |
| .TP |
| \fB\-H\fR |
| same action as the '\-h' option. |
| .TP |
| \fB\-l\fR |
| see \fB\-\-list\fR in the main description. |
| .TP |
| \fB\-L\fR |
| see \fB\-\-llbaa\fR in the main description. |
| .TP |
| \fB-N\fR, \fB\-\-new\fR |
| Switch to the newer style options. |
| .TP |
| \fB\-m\fR=\fILEN\fR |
| see \fB\-\-maxlen\fR=\fILEN\fR in the main description. |
| .TP |
| \fB\-p\fR=\fIPG\fR |
| \fIPG\fR 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). |
| .TP |
| \fB\-p\fR=\fIPG,SPG\fR |
| 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. |
| .TP |
| \fB\-r\fR |
| 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. |
| .TP |
| \fB\-subp\fR=\fISPG\fR |
| sub page code to fetch. Should be a hexadecimal number between 0 and |
| 0xff inclusive. The default value is 0. |
| .TP |
| \fB\-v\fR |
| increase verbosity of output. |
| .TP |
| \fB\-V\fR |
| print out version string then exit. |
| .TP |
| \fB\-w\fR |
| see \fB\-\-readwrite\fR in the main description. |
| .TP |
| \fB\-?\fR |
| output usage message then exit. Ignore all other parameters. |
| .SH 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 \fI\-\-old\fR (or \fI\-O\fR) as the first command line option. |
| .SH AUTHOR |
| Written by Douglas Gilbert |
| .SH "REPORTING BUGS" |
| Report bugs to <dgilbert at interlog dot com>. |
| .SH COPYRIGHT |
| Copyright \(co 2000\-2022 Douglas Gilbert |
| .br |
| This software is distributed under the GPL version 2. There is NO |
| warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
| .SH "SEE ALSO" |
| .B sdparm(8), sg_wr_mode(8), sginfo(8), |
| .B sgmode(scsirastools), scsiinfo(net), scu(net), |
| .B seatools(seagate) |
| .PP |
| All these utilities offer some facility to change mode page (or block |
| descriptor) parameters. |