Man page - sg_luns(8)
Packages contains this manual
- scsi_start(8)
- sginfo(8)
- sg_scan(8)
- sg_luns(8)
- sg_bg_ctl(8)
- sg3_utils_json(8)
- sg_safte(8)
- sg_referrals(8)
- sg_sat_datetime(8)
- sg_vpd(8)
- sg_decode_sense(8)
- sg_rdac(8)
- sg_inq(8)
- sg_start(8)
- sg_timestamp(8)
- sg_z_act_query(8)
- sg_write_buffer(8)
- sg_sat_phy_event(8)
- sg_get_elem_status(8)
- sg_wr_mode(8)
- sg_rep_pip(8)
- scsi_mandat(8)
- sg_test_rwbuf(8)
- scsi_stop(8)
- sg_modes(8)
- sg_rmsn(8)
- sg_ses_microcode(8)
- sg_read_buffer(8)
- sgm_dd(8)
- scsi_readcap(8)
- sg_write_same(8)
- sg_rbuf(8)
- sg_rep_zones(8)
- sg_ident(8)
- sg_sat_set_features(8)
- sg_zone(8)
- sg_opcodes(8)
- sg_logs(8)
- sg_read_block_limits(8)
- sg_write_attr(8)
- sg_rep_density(8)
- sg_dd(8)
- sg_sanitize(8)
- sg_seek(8)
- sg3_utils(8)
- sg_compare_and_write(8)
- sg_requests(8)
- sg_reset(8)
- scsi_temperature(8)
- scsi_ready(8)
- sg_verify(8)
- sg_prevent(8)
- sg_sat_read_gplog(8)
- sg_persist(8)
- scsi_logging_level(8)
- sg_rtpg(8)
- sg_write_long(8)
- sg_senddiag(8)
- sg_format(8)
- sg_read_long(8)
- sgp_dd(8)
- sg_ses(8)
- sg_reassign(8)
- sg_map26(8)
- sg_get_lba_status(8)
- sg_get_config(8)
- sg_reset_wp(8)
- sg_unmap(8)
- sg_read(8)
- sg_write_verify(8)
- sg_rem_rest_elem(8)
- scsi_satl(8)
- rescan-scsi-bus.sh(8)
- sg_map(8)
- sg_emc_trespass(8)
- sg_write_x(8)
- sg_sat_identify(8)
- sg_sync(8)
- sg_copy_results(8)
- sg_stpg(8)
- sg_raw(8)
- sg_xcopy(8)
- sg_read_attr(8)
- sg_stream_ctl(8)
- sg_readcap(8)
- sg_turs(8)
apt-get install sg3-utils
Manual
SG_LUNS
NAMESYNOPSIS
DESCRIPTION
OPTIONS
NOTES
EXAMPLES
EXIT STATUS
AUTHORS
REPORTING BUGS
COPYRIGHT
SEE ALSO
NAME
sg_luns - send SCSI REPORT LUNS command or decode given LUN
SYNOPSIS
sg_luns [ --decode ] [ --help ] [ --hex ] [ --inhex=FN ] [ --inner-hex ] [ --json[=JO] ] [ --js-file=JFN ] [ --linux ] [ --lu_cong ] [ --maxlen=LEN ] [ --quiet ] [ --raw ] [ --readonly ] [ --select=SR ] [ --sinq_inraw=RFN ] [ --verbose ] [ --version ] DEVICE
sg_luns --test=ALUN [ --decode ] [ --hex ] [ --inner-hex ] [ --lu_cong ] [ --verbose ]
DESCRIPTION
In the first form shown in the SYNOPSIS this utility sends the SCSI REPORT LUNS command to the DEVICE and outputs the response. The response should be a list of LUNs ("a LUN inventory") for the I_T nexus associated with the DEVICE . Roughly speaking that is all LUNs that share the target device that the REPORT LUNS command is sent through. This command is defined in the SPC-3 and SPC-4 SCSI standards and its support is mandatory. The most recent draft if SPC-6 revision 1.
When the --test=ALUN option is given (the second form in the SYNOPSIS), then the ALUN value is decoded as outlined in various SCSI Architecture Model (SAM) standards and recent drafts (e.g. SAM-6 revision 2, section 4.7) .
Where required below the first form shown in the SYNOPSIS is called "device mode" and the second form is called "test mode".
OPTIONS
Arguments to
long options are mandatory for short options as well.
-d
,
--decode
decode LUNs into their
component parts, as described in the LUN section of SAM-3,
SAM-4 and SAM-5.
[test mode]
ALUN
is decoded irrespective of whether
this option is given or not. If this option is given once
then the given
ALUN
is output in T10 preferred format
(which is 8 pairs of hex digits, each separated by a space).
If given twice then the given
ALUN
is output in an
alternate T10 format made up of four quads of hex digits
with each quad separated by a "-" (e.g.
C101-0000-0000-0000).
-h , --help
output the usage message then exit.
-H , --hex
[device mode] when given once
this utility will output the SCSI response (i.e. the
data-out buffer) to the REPORT LUNS command in ASCII hex
then exit. When given twice it causes
--decode
to
output component fields in hex rather than decimal. Notice
that this (i.e. how β-HHβ is processed) differs
from the description in sg3_utils(8). The
--inner-hex
option has the same action as β-HHβ. When this
option is used three (or more) times the hex output is
suitable for placing in a file and using it with a later
sg_luns invocation with the
--inhex=FN
option.
[test mode] when this option is given, then decoded
component fields of
ALUN
are output in hex.
When this option is given three or more times, ASCII hex
bytes are output (up to 16 per line) with no leading address
or index. This output is suitable for placing in a file and
later invocation of this utility decoding it with the
--inhex=FN
option. When this option is used four
times, a comment line (starting with β#β is
added before the hex) describing what the hex was generated
by. A file containing such comments is still parsable by the
--inhex=FN
option.
-i , --inhex = FN
FN is expected to be a file name (or β-β for stdin) which contains ASCII hexadecimal or binary representing a REPORT LUNS response. This utility will then decode that response. See the "HEX, BINARY AND JSON FORMATS" section in the sg3_utils manpage for more information. If the --raw option is also given then FN is treated as binary.
-I , --inner-hex
used together with the --decode option so that the decoded values are shown in hexadecimal. The default action is to show decoded values in decimal. This option has the same action as β-HHβ but the intent is a little clearer with this option.
-j [= JO ], --json [= JO ]
output is in JSON format
instead of plain text form. Note that arguments to the short
and long form are themselves optional and if present start
with "=" and no whitespace is permitted around
that "=".
See sg3_utils_json manpage or use β?β for
JO
to get a summary.
-J , --js-file = JFN
output is in JSON format and it
is sent to a file named
JFN
. If that file exists then
it is truncated. By default, the JSON output is sent to
stdout.
When this option is given, the
--json[=JO]
option is
implied and need not be given. The
--json[=JO]
option
may still be needed to set the
JO
parameter to
non-default values.
-l , --linux
this option is only available in Linux. After the T10 representation of each 64 bit LUN (in 16 hexadecimal digits), if this option is given then to the right, in square brackets, is the Linux LUN integer in decimal. If the --hex option is given twice (e.g. -HH) as well then the Linux LUN integer is output in hexadecimal.
-L , --lu_cong
this option is only considered
with
--decode
. When given once then the list of LUNs
is decoded as if the LU_CONG bit was set in each LUβs
corresponding INQUIRY response. When given twice the list of
LUNs is decoded as if the LU_CONG bit was clear in each
LUβs corresponding INQUIRY response. When this option
is not given and
--decode
is given then an INQUIRY is
sent to the
DEVICE
and the setting of its LU_CONG bit
is used to decode the list of LUNs.
[test mode] decode
ALUN
as if the LU_CONG bit is set
in its corresponding standard INQUIRY response. In other
words treat
ALUN
as if it is a conglomerate LUN. If
not given (or given twice) then decode
ALUN
as if the
LU_CONG bit is clear.
-m , --maxlen = LEN
where LEN is the (maximum) response length in bytes. It is placed in the cdbβs "allocation length" field. If not given (or LEN is zero) then 8192 is used. The maximum allowed value of LEN is 1048576.
-q , --quiet
output only the ASCII hex rendering of each report LUN, one per line. Without the --quiet option, there is header information printed before the LUN listing.
-r , --raw
output the SCSI response (i.e. the data-out buffer) in binary (to stdout).
-R , --readonly
open the DEVICE read-only (e.g. in Unix with the O_RDONLY flag). The default is to open it read-write.
-s , --select = SR
SR
is placed in the
SELECT REPORT field of the SCSI REPORT LUNS command. The
default value is 0. Hexadecimal values may be given with a
leading "0x" or a trailing "h". For
detailed information see the REPORT LUNS command in SPC
(most recent is SPC-4 revision 37 in section 6.33). To
simplify, for the I_T nexus associated with the
DEVICE
, the meanings of the
SR
values defined
to date for SPC-4 are:
0
: most luns excluding well known logical unit numbers
1
: well known logical unit numbers
2
: all luns accessible to this I_T nexus
0x10
: only accessible administrative luns
0x11
: administrative luns plus non-conglomerate luns
(see SPC-4)
0x12
: if
DEVICE
is an administrative LU, then
report its
lun plus its subsidiary luns
For
SR
values 0x10 and 0x11, the
DEVICE
must
be either LUN 0 or the REPORT LUNS well known logical unit.
Values between 0xf8 and 0xff (inclusive) are vendor
specific, other values are reserved. This utility will
accept any value between 0 and 255 (0xff) for
SR
.
-Q , --sinq_inraw = RFN
where
RFN
is a filename
containing binary standard INQUIRY response data that
matches either
DEVICE
or
FN
. Linux places this
standard INQUIRY response in its sysfs pseudo filesystem. A
typical location is at
/sys/class/scsi_device/<hctl>/device/inquiry where
<hctl> is a four part numeric tuple separated by
colons. This tuple distinguishes the device from any others
on the system.
Currently the LU_CONG field is read from the standard
INQUIRY response when this option is given. The
--raw
option has no effect on this option. The
DEVICE
argument may be given with this option.
-t , --test = ALUN
ALUN
is assumed to be a
hexadecimal number in ASCII hex or the letter
βLβ followed by a decimal number (see below).
The hexadecimal number can be up to 64 bits in size (i.e. 16
hexadecimal digits) and is padded to the right if less than
16 hexadecimal digits are given (e.g.
--test=0122003a
represents T10 LUN: 01 22 00 3a 00 00 00 00).
ALUN
may be prefixed by β0xβ or β0Xβ
(e.g. the previous example could have been
--test=0x0122003a
).
ALUN
may also be given
with spaces, tabs, or a β-β between each byte
(or other grouping (e.g. c101-0000-0000-0000)). However in
the case of space or tab separators the
ALUN
would
need to be surrounded by single or double quotes.
In the leading βLβ case the, following decimal
number (hex if preceded by β0xβ) is assumed to
be a Linux "word flipped" LUN which is converted
into a T10 LUN representation and printed. In both cases the
number is interpreted as a LUN and decoded as if the
--decode
option had been given. Also when
ALUN
is a hexadecimal number it can have a trailing
βLβ in which case the corresponding Linux
"word flipped" LUN value is output. The LUN is
decoded in all cases.
The action when used with
--decode
is explained under
that option.
-v , --verbose
increase the level of verbosity, (i.e. debug output).
-V , --version
print the version string and then exit.
NOTES
The SCSI REPORT LUNS command is important for Logical Unit (LU) discovery. After a target device is discovered (usually via some transport specific mechanism) and after sending an INQUIRY command (to determine the LU_CONG setting), a REPORT LUNS command should either be sent to LUN 0 (which is Peripheral device addressing method with bus_id=0 and target/lun=0) or to the REPORT LUNS well known LUN (i.e. 0xc101000000000000). SAM-5 requires that one of these responds with an inventory of LUNS that are contained in this target device.
In test mode, if the --hex option is given once then in the decoded output, some of the component fields are printed in hex with leading zeros. The leading zeros are to indicate the size of the component field. For example: in the Peripheral device addressing method (16 bits overall), the bus ID is 6 bits wide and the target/LUN field is 8 bits wide; so both are shown with two hex digits (e.g. bus_id=0x02, target=0x3a).
EXAMPLES
Typically by the time user space programs get to run, SCSI LUs have been discovered. In Linux the lsscsi utility lists the LUs that are currently present. The LUN of a device (LU) is the fourth element in the tuple at the beginning of each line. Below we see a target (or "I_T Nexus": "6:0:0") has two LUNS: 1 and 49409. If 49409 is converted into T10 LUN format it is 0xc101000000000000 which is the REPORT LUNS well known LUN.
# lsscsi -g
[6:0:0:1] disk Linux scsi_debug 0004 /dev/sdb /dev/sg1
[6:0:0:2] disk Linux scsi_debug 0004 /dev/sdc /dev/sg2
[6:0:0:49409]wlun Linux scsi_debug 0004 - /dev/sg3
We could send a REPORT LUNS command (with SR 0x0, 0x1 or 0x2) to any of those file device nodes and get the same result. Below we use /dev/sg1 :
# sg_luns
/dev/sg1
Lun list length = 16 which implies 2 lun entries
Report luns [select_report=0x0]:
0001000000000000
0002000000000000
That is a bit noisy so cut down the clutter with --quiet :
# sg_luns -q
/dev/sg1
0001000000000000
0002000000000000
Now decode that LUN into its component parts:
# sg_luns -d -q
/dev/sg1
0001000000000000
Peripheral device addressing: lun=1
0002000000000000
Peripheral device addressing: lun=2
Now use --select=1 to find out if there are any well known LUNs:
# sg_luns -q -s
1 /dev/sg1
c101000000000000
So how many LUNs do we have all together (associated with the current I_T Nexus):
# sg_luns -q -s
2 /dev/sg1
0001000000000000
0002000000000000
c101000000000000
# sg_luns -q -s
2 -d /dev/sg1
0001000000000000
Peripheral device addressing: lun=1
0002000000000000
Peripheral device addressing: lun=1
c101000000000000
REPORT LUNS well known logical unit
The following example uses the --linux option and is not available in other operating systems. The extra number in square brackets is the Linux version of T10 LUN shown at the start of the line.
# sg_luns -q -s
2 -l /dev/sg1
0001000000000000 [1]
0002000000000000 [2]
c101000000000000 [49409]
Now we use the --test= option to decode LUNS input on the command line (rather than send a REPORT LUNS command and act on the response):
# sg_luns
--test=0002000000000000
Decoded LUN:
Peripheral device addressing: lun=2
# sg_luns
--test="c1 01"
Decoded LUN:
REPORT LUNS well known logical unit
# sg_luns -t
0x023a004b -H
Decoded LUN:
Peripheral device addressing: bus_id=0x02, target=0x3a
>>Second level addressing:
Peripheral device addressing: lun=0x4b
The next example is Linux specific as we try to find out what the Linux LUN 49409 translates to in the T10 world:
# sg_luns
--test=L49409
64 bit LUN in T10 preferred (hex) format: c1 01 00 00 00 00
00 00
Decoded LUN:
REPORT LUNS well known logical unit
And the mapping between T10 and Linux LUN representations can be done the other way:
# sg_luns -t
c101L
Linux βword flippedβ integer LUN representation:
49409
Decoded LUN:
REPORT LUNS well known logical unit
EXIT STATUS
The exit status of sg_luns 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-2023 Douglas Gilbert
This software is distributed under a BSD-2-Clause license.
There is NO warranty; not even for MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE.
SEE ALSO
sg_inq(8),sg3_utils(8)