| .TH SG_INQ "8" "August 2022" "sg3_utils\-1.48" SG3_UTILS |
| .SH NAME |
| sg_inq \- issue SCSI INQUIRY command and/or decode its response |
| .SH SYNOPSIS |
| .B sg_inq |
| [\fI\-\-ata\fR] [\fI\-\-block=0|1\fR] [\fI\-\-cmddt\fR] |
| [\fI\-\-descriptors\fR] [\fI\-\-export\fR] [\fI\-\-extended\fR] |
| [\fI\-\-force\fR] [\fI\-\-help\fR] [\fI\-\-hex\fR] [\fI\-\-id\fR] |
| [\fI\-\-inhex=FN\fR] [\fI\-\-json[=JO]\fR] [\fI\-\-len=LEN\fR] |
| [\fI\-\-long\fR] [\fI\-\-maxlen=LEN\fR] [\fI\-\-only\fR] [\fI\-\-page=PG\fR] |
| [\fI\-\-raw\fR] [\fI\-\-vendor\fR] [\fI\-\-verbose\fR] [\fI\-\-version\fR] |
| [\fI\-\-vpd\fR] \fIDEVICE\fR |
| .PP |
| .B sg_inq |
| [\fI\-36\fR] [\fI\-a\fR] [\fI\-A\fR] [\fI\-b\fR] [\fI\-\-B=0|1\fR] |
| [\fI\-c\fR] [\fI\-cl\fR] [\fI\-d\fR] [\fI\-e\fR] [\fI\-f\fR] [\fI\-h\fR] |
| [\fI\-H\fR] [\fI\-i\fR] [\fI\-I=FN\fR] [\fI\-j[=LEN]\fR] [\fI\-l=LEN\fR] |
| [\fI\-L\fR] [\fI\-m\fR] [\fI\-M\fR] [\fI\-o\fR] [\fI\-p=VPD_PG\fR] |
| [\fI\-P\fR] [\fI\-r\fR] [\fI\-s\fR] [\fI\-u\fR] [\fI\-v\fR] |
| [\fI\-V\fR] [\fI\-x\fR] [\fI\-36\fR] [\fI\-?\fR] \fIDEVICE\fR |
| .SH DESCRIPTION |
| .\" Add any additional description here |
| .PP |
| This utility, when \fIDEVICE\fR is given, sends a SCSI INQUIRY command to it |
| then outputs the response. All SCSI devices are meant to respond to |
| a "standard" INQUIRY command with at least a 36 byte response (in SCSI 2 and |
| higher). An INQUIRY is termed as "standard" when both the EVPD and CmdDt (now |
| obsolete) bits are clear. Formally (i.e. as per SPC stardards) the name of |
| a standard INQUIRY response is the "standard INQUIRY data format" but here |
| the "standard INQUIRY response" is used as it is shorter and more descriptive. |
| .PP |
| Alternatively the \fI\-\-inhex=FN\fR option can be given. In this case |
| \fIFN\fR is assumed to be a file name ('\-' for stdin) containing ASCII |
| hexadecimal representing an INQUIRY response. |
| .PP |
| This utility supports two command line syntaxes. The preferred one is shown |
| first in the synopsis and is described in the main OPTIONS section. A later |
| section titled OLDER COMMAND LINE OPTIONS describes the second group of |
| options. |
| .PP |
| An important "non\-standard" INQUIRY page is the Device Identification |
| Vital Product Data (VPD) page [0x83]. Since SPC\-3, support for this page |
| is mandatory. The \fI\-\-id\fR option decodes this page. New VPD page |
| information is no longer being added to this utility. The sg_vpd(8) utility |
| is specialized for decoding VPD pages and shares code with this utility for |
| that purpose. The sdparm(8) utility which is in a package of that name also |
| decodes VPD pages although its major purpose is to access and modify SCSI |
| mode pages. |
| .PP |
| In Linux, if the \fIDEVICE\fR exists and the SCSI INQUIRY fails (e.g. because |
| the SG_IO ioctl is not supported) then an ATA IDENTIFY (PACKET) DEVICE is |
| tried. If it succeeds then device identification strings are output. The |
| \fI\-\-raw\fR and \fI\-\-hex\fR options can be used to manipulate the output. |
| If the \fI\-\-ata\fR option is given then the SCSI INQUIRY is not performed |
| and the \fIDEVICE\fR is assumed to be ATA (or ATAPI). For more information |
| see the ATA DEVICES section below. |
| .PP |
| In some operating systems a NVMe device (e.g. SSD) may be given as the |
| \fIDEVICE\fR. For more information see the NVME DEVICES section below. |
| .PP |
| The reference document used for interpreting an INQUIRY is T10/BSR INCITS |
| 566 Revision 6 which is draft SPC\-6 dated 22 October 2021. It can be found |
| at https://www.t10.org . Obsolete and reserved items in the standard |
| INQUIRY response output are displayed in square brackets. |
| .SH 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. |
| .TP |
| \fB\-a\fR, \fB\-\-ata\fR |
| Assume given \fIDEVICE\fR is an ATA or ATAPI device which can receive ATA |
| commands from the host operating system. Skip the SCSI INQUIRY command and |
| use either the ATA IDENTIFY DEVICE command (for non\-packet devices) or the |
| ATA IDENTIFY PACKET DEVICE command. To show the response in hex, add |
| a '\-\-verbose' option. This option is only available in Linux. |
| .TP |
| \fB\-B\fR, \fB\-\-block\fR=\fI0|1\fR |
| this option controls how the file handle to the \fIDEVICE\fR is opened. If |
| this argument is 0 then the open is non\-blocking. If the argument is 1 then |
| the open is blocking. In Unix a non\-blocking open is indicated by a |
| O_NONBLOCK flag while a blocking open is indicated by the absence of that |
| flag. The default value depends on the operating system and the type of |
| \fIDEVICE\fR node. For Linux pass\-throughs (i.e. the sg and bsg drivers) |
| the default is 0. |
| .TP |
| \fB\-c\fR, \fB\-\-cmddt\fR |
| set the Command Support Data (CmdDt) bit (defaults to clear(0)). Used in |
| conjunction with the \fI\-\-page=PG\fR option where \fIPG\fR specifies the |
| SCSI command opcode to query. When used twice (e.g. '\-cc') this utility |
| forms a list by looping over all 256 opcodes (0 to 255 inclusive) only |
| outputting a line for commands that are found. The CmdDt bit is now |
| obsolete; it has been replaced by the REPORT SUPPORTED OPERATION CODES |
| command, see the sg_opcodes(8) utility. |
| .TP |
| \fB\-d\fR, \fB\-\-descriptors\fR |
| decodes and prints the version descriptors found in a standard INQUIRY |
| response. There are up to 8 of them. Version descriptors indicate which |
| versions of standards and/or drafts the \fIDEVICE\fR complies with. The |
| normal components of a standard INQUIRY are output (typically from |
| the first 36 bytes of the response) followed by the version descriptors |
| if any. |
| .TP |
| \fB\-e\fR |
| see entry below for \fI\-\-vpd\fR. |
| .TP |
| \fB\-f\fR, \fB\-\-force\fR |
| As a sanity check, the normal action when fetching VPD pages other than |
| page 0x0 (the "Supported VPD pages" VPD page), is to first fetch page 0x0 |
| and only if the requested page is one of the supported pages, to go ahead |
| and fetch the requested page. |
| .br |
| When this option is given, skip checking of VPD page 0x0 before accessing |
| the requested VPD page. The prior check of VPD page 0x0 is known to |
| crash certain USB devices, so use with care. |
| .TP |
| \fB\-u\fR, \fB\-\-export\fR |
| prints out information obtained from the device. The output can be |
| modified by selecting a VPD page with \fIPG\fR (from |
| \fI\-\-page=PG\fR). If the device identification VPD page 0x83 is |
| given it prints out information in the form: |
| "SCSI_IDENT_<assoc>_<type>=<ident>" to stdout. If the device serial |
| number VPD page 0x80 is given it prints out information in the form: |
| "SCSI_SERIAL=<ident>". Other VPD pages are not supported. If no VPD |
| page is given it prints out information in the form: |
| "SCSI_VENDOR=<vendor>", "SCSI_MODEL=<model>", and |
| "SCSI_REVISION=<rev>", taken from the standard inquiry. This may be |
| useful for tools like udev(7) in Linux. |
| .TP |
| \fB\-E\fR, \fB\-x\fR, \fB\-\-extended\fR |
| prints the extended INQUIRY VPD page [0x86]. It has the same effect |
| as giving the \fI\-\-page=ei\fR option. |
| .TP |
| \fB\-h\fR, \fB\-\-help\fR |
| print out the usage message then exit. When used twice, after the |
| usage message, there is a list of available abbreviations than can be |
| given to the \fI\-\-page=PG\fR option. |
| .TP |
| \fB\-H\fR, \fB\-\-hex\fR |
| rather than decode a standard INQUIRY response, a VPD page or command |
| support data; print out the response in hex and send the output to stdout. |
| Error messages and warnings are typically output to stderr. When used twice |
| with the ATA Information VPD page [0x89] decodes the start of the response |
| then outputs the ATA IDENTIFY (PACKET) DEVICE response in hexadecimal |
| bytes (not 16 bit words). When used three times with the ATA Information VPD |
| page [0x89] or the \fI\-\-ata\fR option, this utility outputs the ATA |
| IDENTIFY (PACKET) DEVICE response in hexadecimal words suitable for input |
| to 'hdparm \-\-Istdin'. See note below. |
| .br |
| To generate output suitable for placing in a file that can be used by a |
| later invocation with the \fI\-\-inhex=FN\fR option, use the '\-HHHH' |
| option (e.g. 'sg_inq \-p di \-HHHH /dev/sg3 > dev_id.hex'). |
| .TP |
| \fB\-i\fR, \fB\-\-id\fR |
| prints the device identification VPD page [0x83]. It has the same effect |
| as giving the \fI\-\-page=di\fR option. |
| .TP |
| \fB\-I\fR, \fB\-\-inhex\fR=\fIFN\fR |
| \fIFN\fR is expected to be a file name (or '\-' for stdin) which contains |
| ASCII hexadecimal or binary representing an INQUIRY (including VPD page) |
| response. This utility will then decode that response. It is preferable to |
| also supply the \fI\-\-page=PG\fR option, if not this utility will attempt |
| to guess which VPD page (or standard INQUIRY) that the response is associated |
| with. The hexadecimal should be arranged as 1 or 2 digits representing a |
| byte each of which is whitespace or comma separated. Anything from and |
| including a hash mark to the end of a line is ignored. If the \fI\-\-raw\fR |
| option is also given then \fIFN\fR is treated as binary. |
| .TP |
| \fB\-j\fR, \fB\-\-json[\fR=\fIJO\fR] |
| output is in JSON format instead of human readable form. See sg3_utils_json |
| manpage or use '?' for \fIJO\fR for a summary. |
| .TP |
| \fB\-l\fR, \fB\-\-len\fR=\fILEN\fR |
| the number \fILEN\fR is the "allocation length" field in the INQUIRY cdb. |
| This is the (maximum) length of the response returned by the device. The |
| default value of \fILEN\fR is 0 which is interpreted as: first request is |
| for 36 bytes and if necessary execute another INQUIRY if the "additional |
| length" field in the response indicates that more than 36 bytes is available. |
| .br |
| If \fILEN\fR is greater than 0 then only one INQUIRY command is performed. |
| This means that the Serial Number (obtained from the Serial Number VPD |
| pgae (0x80)) is not fetched and therefore not printed. |
| See the NOTES section below about "36 byte INQUIRYs". |
| .TP |
| \fB\-L\fR, \fB\-\-long\fR |
| this option causes more information to be decoded from the Identify command |
| sent to a NVMe \fIDEVICE\fR. |
| .TP |
| \fB\-m\fR, \fB\-\-maxlen\fR=\fILEN\fR |
| this option has the same action as the \fI\-\-len=LEN\fR option above. It has |
| been added for compatibility with the sg_vpd, sg_modes and sg_logs utilities. |
| .TP |
| \fB\-O\fR, \fB\-\-old\fR |
| Switch to older style options. Please use as first option on the command line. |
| .TP |
| \fB\-o\fR, \fB\-\-only\fR |
| Do not attempt to additionally retrieve the serial number VPD page (0x80) to |
| enhance the output of a standard INQUIRY. So with this option given and no |
| others, this utility will send a standard INQUIRY SCSI command and decode |
| its response. No other SCSI commands will be sent to the \fIDEVICE\fR. |
| Without this option an additional SCSI command is sent: a (non\-standard) |
| SCSI INQUIRY to fetch the Serial Number VPD page. However the Serial |
| Number VPD page is not mandatory (while the Device Identification page is |
| mandatory but a billion USB keys ignore that) and may cause nuisance error |
| reports. |
| .br |
| For NVMe devices only the Identify controller is performed, even if the |
| \fIDEVICE\fR includes a namespace identifier. For example in FreeBSD |
| given a \fIDEVICE\fR named /dev/nvme0ns1 then an Identify controller is |
| sent to /dev/nvme0 and nothing is sent to its "ns1" (first namespace). |
| .TP |
| \fB\-p\fR, \fB\-\-page\fR=\fIPG\fR |
| the \fIPG\fR argument can be either a number of an abbreviation for a VPD |
| page. To enumerate the available abbreviations for VPD pages use '\-hh' or |
| a bad abbreviation (e.g, '\-\-page=xxx'). When the \fI\-\-cmddt\fR option is |
| given (once) then \fIPG\fR is interpreted as an opcode number (so VPD page |
| abbreviations make little sense). |
| .br |
| If \fIPG\fR is a negative number, then a standard INQUIRY is performed. This |
| can be used to override some guessing logic associated with the |
| \fI\-\-inhex=FN\fR option. |
| .br |
| If \fIPG\fR is not found in the 'Supported VPD pages' VPD page (0x0) then |
| EDOM is returned. To bypass this check use the \fI\-\-force\fR option. |
| .TP |
| \fB\-r\fR, \fB\-\-raw\fR |
| in the absence of \fI\-\-inhex=FN\fR then the output response is in binary. |
| The output should be piped to a file or another utility when this option is |
| used. The binary is sent to stdout, and errors are sent to stderr. |
| .br |
| If used with \fI\-\-inhex=FN\fR then the contents of \fIFN\fR is treated as |
| binary. |
| .TP |
| \fB\-s\fR, \fB\-\-vendor\fR |
| output a standard INQUIRY response's vendor specific fields from offset 36 |
| to 55 in ASCII. When used twice (i.e. '\-ss') also output the vendor |
| specific field from offset 96 in ASCII. This is only done if the data |
| passes some simple sanity checks. |
| .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. |
| .TP |
| \fB\-e\fR, \fB\-\-vpd\fR |
| set the Enable Vital Product Data (EVPD) bit (defaults to clear(0)). Used in |
| conjunction with the \fI\-\-page=PG\fR option where \fIPG\fR specifies the |
| VPD page number to query. If the \fI\-\-page=PG\fR is not given then \fIPG\fR |
| defaults to zero which is the "Supported VPD pages" VPD page. |
| .SH NOTES |
| Some devices with weak SCSI command set implementations lock up when they |
| receive commands they don't understand (and some lock up if they receive |
| response lengths that they don't expect). Such devices need to be treated |
| carefully, use the '\-\-len=36' option. Without this option this utility will |
| issue an initial standard INQUIRY requesting 36 bytes of response data. If |
| the device indicates it could have supplied more data then a second INQUIRY |
| is issued to fetch the longer response. That second command may lock up |
| faulty devices. |
| .PP |
| ATA or ATAPI devices that use a SCSI to ATA Translation layer (see |
| SAT at www.t10.org) may support the SCSI ATA INFORMATION VPD page. This |
| returns the IDENTIFY (PACKET) DEVICE response amongst other things. |
| The ATA Information VPD page can be fetched with '\-\-page=ai'. |
| .PP |
| In the INQUIRY standard response there is a 'MultiP' flag which is set |
| when the device has 2 or more ports. Some vendors use the preceding |
| vendor specific ('VS') bit to indicate which port is being accessed by |
| the INQUIRY command (0 \-> relative port 1 (port "a"), 1 \-> relative |
| port 2 (port "b")). When the 'MultiP' flag is set, the preceding vendor |
| specific bit is shown in parentheses. SPC\-3 compliant devices should |
| use the device identification VPD page (0x83) to show which port is |
| being used for access and the SCSI ports VPD page (0x88) to show all |
| available ports on the device. |
| .PP |
| In the 2.4 series of Linux kernels the \fIDEVICE\fR must be |
| a SCSI generic (sg) device. In the 2.6 series and later block devices (e.g. |
| disks and ATAPI DVDs) can also be specified. For example "sg_inq /dev/sda" |
| will work in the 2.6 series kernels. From lk 2.6.6 other SCSI "char" |
| device names may be used as well (e.g. "/dev/st0m"). |
| .PP |
| The number of bytes output by \fI\-\-hex\fR and \fI\-\-raw\fR is 36 bytes |
| or the number given to \fI\-\-len=LEN\fR (or \fI\-\-maxlen=LEN\fR). That |
| number is reduced if the "resid" returned by the HBA indicates less bytes |
| were sent back from \fIDEVICE\fR. |
| .PP |
| The \fIDEVICE\fR is opened with a read\-only flag (e.g. in Unix with the |
| O_RDONLY flag). |
| .SH ATA DEVICES |
| There are two major types of ATA devices: non\-packet devices (e.g. ATA |
| disks) and packet devices (ATAPI). The majority of ATAPI devices are |
| CD/DVD/BD drives in which the ATAPI transport carries the MMC set (i.e. |
| a SCSI command set). Further, both types of ATA devices can be connected |
| to a host computer via a "SCSI" (or some other) transport. When an |
| ATA disk is controlled via a SCSI (or non\-ATA) transport then two |
| approaches are commonly used: tunnelling (e.g. STP in Serial Attached |
| SCSI (SAS)) or by emulating a SCSI device (e.g. with a SCSI to |
| ATA translation layer, see SAT at www.t10.org ). Even when the |
| physical transport to the host computer is ATA (especially in the |
| case of SATA) the operating system may choose to put a SAT |
| layer in the driver "stack" (e.g. libata in Linux). |
| .PP |
| The main identifying command for any SCSI device is an INQUIRY. The |
| corresponding command for an ATA non\-packet device is IDENTIFY DEVICE |
| while for an ATA packet device it is IDENTIFY PACKET DEVICE. |
| .PP |
| When this utility is invoked for an ATAPI device (e.g. a CD/DVD/BD |
| drive with "sg_inq /dev/hdc") then a SCSI INQUIRY is sent to the |
| device and if it responds then the response to decoded and output and |
| this utility exits. To see the response for an ATA IDENTIFY PACKET |
| DEVICE command add the \fI\-\-ata\fR option (e.g. "sg_inq \-\-ata /dev/hdc). |
| .PP |
| This utility doesn't decode the response to an ATA IDENTIFY (PACKET) |
| DEVICE command, hdparm does a good job at that. The '\-HHH' option has |
| been added for use with either the '\-\-ata' or '\-\-page=ai' |
| option to produce a format acceptable to "hdparm \-\-Istdin". |
| An example: 'sg_inq \-\-ata \-HHH /dev/hdc | hdparm \-\-Istdin'. See hdparm. |
| .SH NVME DEVICES |
| Currently these device are typically SSDs (Solid State Disks) directly |
| connected to a PCIe connector or via a specialized connector such as a M2 |
| connector. Linux and FreeBSD treat NVMe storage devices as separate from |
| SCSI storage with device names like /dev/nvme0n1 (in Linux) and |
| /dev/nvme0ns1 (in FreeBSD). The NVM Express group has a document titled "NVM |
| Express: SCSI Translation Reference" which defines a partial "SCSI to NVMe |
| Translation Layer" often known by its acronym: SNTL. |
| .PP |
| On operating systems where it is supported by this package, this utility |
| will detect NVMe storage devices directly connected and send an Identify |
| controller NVMe Admin command and decode its response. A NVMe controller |
| is architecturally similar to a SCSI target device. If the NVMe \fIDEVICE\fR |
| indicates a namespace then an Identify namespace NVMe Admin command is sent |
| to that namespace and its response is decoded. Namespaces are numbered |
| sequentially starting from 1. Namespaces are similar to SCSI Logical Units |
| and their identifiers (nsid_s) can be thought of as SCSI LUNs. In the |
| Linux and FreeBSD example device names above the "n1" and the "ns1" parts |
| indicate nsid 1 . If no namespace is given in the \fIDEVICE\fR then all |
| namespaces found in the controller are sent Identify namespace commands and |
| the responses are decoded. |
| .PP |
| To get more details in the response use the \fI\-\-long\fR option. To only |
| get the controller's Identify decoded use the \fI\-\-only\fR option. |
| .PP |
| It is possible that even though the \fIDEVICE\fR presents as a NVMe device, |
| it has a SNTL and accepts SCSI commands. In this case to send a SCSI INQUIRY |
| command (and fetch its VPD pages) use the sg_vpd(8) utility. |
| .SH SG_INQ and SG_VPD |
| Both these utilities have much in common since VPD pages are fetched with the |
| SCSI INQUIRY command. As more VPD pages have been added (and existing pages |
| expanded) the newer ones were only decoded with sg_vpd. Recently with the |
| optional JSON output work, it was decided to place all VPD page decoding in |
| a source file called sg_vpd_common.c that is linked in by both sg_inq and |
| sg_vpd. |
| .PP |
| This means that the VPD page decoding capabilities of both sg_inq and sg_vpd |
| will be the same. Their default actions remain as they were, namely when |
| sg_inq is used without command line options, it decodes the "standard INQUIRY |
| data format" (usually called the "standard INQUIRY response") response while |
| when sg_vpd is used without options, it decodes the "Supported VPD pages" VPD |
| page. |
| .SH EXIT STATUS |
| The exit status of sg_inq 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\-36\fR |
| only requests 36 bytes of response data for an INQUIRY. Furthermore even |
| if the device indicates in its response it can supply more data, a |
| second (longer) INQUIRY is not performed. This is a paranoid setting. |
| Equivalent to '\-\-len=36' in the OPTIONS section. |
| .TP |
| \fB\-a\fR |
| fetch the ATA Information VPD page [0x89]. Equivalent to '\-\-page=ai' in |
| the OPTIONS section. This page is defined in SAT (see at www.t10.org). |
| .TP |
| \fB\-A\fR |
| Assume given \fIDEVICE\fR is an ATA or ATAPI device. |
| Equivalent to \fI\-\-ata\fR in the OPTIONS section. |
| .TP |
| \fB\-b\fR |
| decodes the Block Limits VPD page [0xb0]. Equivalent to '\-\-page=bl' in |
| the OPTIONS section. This page is defined in SBC\-2 (see www.t10.org) and |
| later. |
| .TP |
| \fB\-B\fR=\fI0|1\fR |
| equivalent to \fI\-\-block=0|1\fR in OPTIONS section. |
| .TP |
| \fB\-c\fR |
| set the Command Support Data (CmdDt) bit (defaults to clear(0)). Used in |
| conjunction with the \fI\-p=VPD_PG\fR option to specify the SCSI command |
| opcode to query. Equivalent to \fI\-\-cmddt\fR in the OPTIONS section. |
| .TP |
| \fB\-cl\fR |
| lists the command data for all supported commands (followed by the command |
| name) by looping through all 256 opcodes. This option uses the CmdDt bit |
| which is now obsolete. See the sg_opcodes(8) utility. |
| Equivalent to '\-\-cmddt \-\-cmddt' in the OPTIONS section. |
| .TP |
| \fB\-d\fR |
| decodes depending on context. If \fI\-e\fR option is given, or any option |
| that implies \fI\-e\fR (e.g. '\-i' or '\-p=80'), then this utility attempts |
| to decode the indicated VPD page. Otherwise the version descriptors (if any) |
| are listed following a standard INQUIRY response. In the version descriptors |
| sense, equivalent to \fI\-\-descriptors\fR in the OPTIONS section. |
| .TP |
| \fB\-e\fR |
| enable (i.e. sets) the Vital Product Data (EVPD) bit (defaults to clear(0)). |
| Used in conjunction with the \fI\-p=VPD_PG\fR option to specify the VPD page |
| to fetch. If \fI\-p=VPD_PG\fR is not given then VPD page 0 (list supported |
| VPD pages) is assumed. |
| .TP |
| \fB\-f\fR |
| Equivalent to \fI\-\-force\fR in the OPTIONS section. |
| .TP |
| \fB\-h\fR |
| outputs INQUIRY response in hex rather than trying to decode it. |
| Equivalent to \fI\-\-hex\fR in the OPTIONS section. |
| .TP |
| \fB\-H\fR |
| same action as \fI\-h\fR. |
| Equivalent to \fI\-\-hex\fR in the OPTIONS section. |
| .TP |
| \fB\-i\fR |
| decodes the Device Identification VPD page [0x83]. Equivalent to \fI\-\-id\fR |
| in the OPTIONS section. This page is made up of several "designation |
| descriptors". If \fI\-h\fR is given then each descriptor header is decoded |
| and the identifier itself is output in hex. To see the whole VPD 0x83 page |
| response in hex use '\-p=83 \-h'. |
| .TP |
| \fB\-I\fR=\fIFN\fR |
| equivalent to \fI\-\-inhex=FN\fR in the OPTIONS section. |
| .TP |
| \fB\-j[\fR=\fIJO]\fR |
| equivalent to \fI\-\-json[=JO]\fR in the OPTIONS section. |
| .TP |
| \fB\-l\fR=\fILEN\fR |
| equivalent to \fI\-\-len=LEN\fR in the OPTIONS section. |
| .TP |
| \fB\-L\fR |
| equivalent to \fI\-\-long\fR in the OPTIONS section. |
| .TP |
| \fB\-m\fR |
| decodes the Management network addresses VPD page [0x85]. Equivalent |
| to '\-\-page=mna' in the OPTIONS section. |
| .TP |
| \fB\-M\fR |
| decodes the Mode page policy VPD page [0x87]. Equivalent to '\-\-page=mpp' |
| in the OPTIONS section. |
| .TP |
| \fB-N\fR, \fB\-\-new\fR |
| Switch to the newer style options. |
| .TP |
| \fB\-o\fR |
| equivalent to \fI\-\-only\fR in the OPTIONS section. |
| .TP |
| \fB\-p\fR=\fIVPD_PG\fR |
| used in conjunction with the \fI\-e\fR or \fI\-c\fR option. If neither given |
| then the \fI\-e\fR option assumed. When the \fI\-e\fR option is also |
| given (or assumed) then the argument to this option is the VPD page number. |
| The argument is interpreted as hexadecimal and is expected to be in the range |
| 0 to ff inclusive. Only VPD page 0 is decoded and it lists supported VPD pages |
| and their names (if known). To decode the mandatory device identification |
| page (0x83) use the \fI\-i\fR option. A now obsolete usage is when the |
| \fI\-c\fR option is given in which case the argument to this option is assumed |
| to be a command opcode number. Recent SCSI draft standards have moved this |
| facility to a separate command (see sg_opcodes(8)). Defaults to 0 so if |
| \fI\-e\fR is given without this option then VPD page 0 is output. |
| .TP |
| \fB\-P\fR |
| decodes the Unit Path Report VPD page [0xc0] which is EMC specific. |
| Equivalent to '\-\-page=upr' in the OPTIONS section. |
| .TP |
| \fB\-r\fR |
| outputs the response in binary to stdout. Equivalent to \fI\-\-raw\fR in |
| the OPTIONS section. Can be used twice (i.e. '\-rr' (and '\-HHH' has |
| same effect)) and if used with the \fI\-A\fR or \fI\-a\fR option yields |
| output with the same format as "cat /proc/ide/hd<x>/identify" so that it |
| can then be piped to "hdparm \-\-Istdin". |
| .TP |
| \fB\-s\fR |
| decodes the SCSI Ports VPD page [0x88]. |
| Equivalent to '\-\-page=sp' in the OPTIONS section. |
| .TP |
| \fB\-u\fR |
| equivalent to '\-\-export' in the OPTIONS section. |
| .TP |
| \fB\-v\fR |
| increase level of verbosity. Can be used multiple times. |
| .TP |
| \fB\-V\fR |
| print out version string then exit. |
| .TP |
| \fB\-x\fR |
| decodes the Extended INQUIRY data VPD [0x86] page. |
| Equivalent to '\-\-page=ei' in the OPTIONS section. |
| .TP |
| \fB\-?\fR |
| output usage message and exit. Ignore all other parameters. |
| .SH EXAMPLES |
| The examples in this page use Linux device names. For suitable device |
| names in other supported Operating Systems see the sg3_utils(8) man page. |
| .PP |
| To view the standard inquiry response use without options: |
| .PP |
| sg_inq /dev/sda |
| .PP |
| Some SCSI devices include version descriptors indicating the various |
| SCSI standards and drafts they support. They can be viewed with: |
| .PP |
| sg_inq \-d /dev/sda |
| .PP |
| Modern SCSI devices include Vital Product Data (VPD)pages which can be |
| viewed with the SCSI INQUIRY command. To list the supported VPD |
| pages (but not their contents) try: |
| .PP |
| sg_inq \-e /dev/sda |
| .PP |
| In Linux, binary images of some important VPD page responses (e.g. 0, 80h |
| and 83h) are cached in files within the sysfs pseudo file system. Since |
| VPD pages hardly ever change their contents, decoding those files will |
| give the same output as probing the device with the added benefit that |
| decoding those files doesn't need root permissions. If /dev/sg3 is a disk |
| at 2:0:0:0 , then these three invocations should result in the same output: |
| .PP |
| sg_inq \-\-raw \-\-inhex=/sys/class/scsi_generic/sg3/device/vpd_pg83 |
| .PP |
| sg_inq \-rI /sys/class/scsi_generic/sg3/device/vpd_pg83 |
| .PP |
| sg_inq \-r \-I /sys/class/scsi_disk/2:0:0:0/device/vpd_pg83 |
| .PP |
| Without the \fI\-\-raw\fR option, the \fI\-\-inhex=FN\fR option would |
| expect the contents of those files to be hexadecimal. vpd_pg83 contains |
| the response (in binary) to the Device Identification VPD page whose page |
| number is 83h (i.e. hexadecimal). |
| .PP |
| Some VPD pages can be read with the sg_inq utility but a newer utility |
| called sg_vpd specializes in showing their contents. The sdparm utility |
| can also be used to show the contents of VPD pages. |
| .PP |
| Further examples of sg_inq together with some typical output can be found |
| on https://sg.danny.cz/sg/sg3_utils.html web page. |
| .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 2001\-2022 Douglas Gilbert |
| .br |
| This software is distributed under the GPL version 2 or the BSD\-2\-Clause |
| license. There is NO warranty; not even for MERCHANTABILITY or |
| FITNESS FOR A PARTICULAR PURPOSE. |
| .SH "SEE ALSO" |
| .B sg_opcodes(8), sg_vpd(8), sg_logs(8), sg_modes(8), sdparm(8), hdparm(8), |
| .B sgdiag(scsirastools) |