NAME¶
sg_readcap - sends a SCSI READ CAPACITY command
SYNOPSIS¶
sg_readcap [
--16] [
--brief] [
--help] [
--hex]
[
--lba=LBA] [
--long] [
--pmi] [
--raw] [
--verbose] [
--version]
DEVICE
sg_readcap [
-16] [
-b] [
-h] [
-H]
[
-lba=LBA] [
-pmi] [
-r] [
-v] [
-V]
DEVICE
DESCRIPTION¶
The normal action of the SCSI READ CAPACITY command is to fetch the number of
blocks (and block size) from the
DEVICE.
The SCSI READ CAPACITY command (both 10 and 16 byte cdbs) actually yield the
block address of the last block and the block size. The number of blocks is
thus one plus the block address of the last block (as blocks are counted
origin zero (i.e. starting at block zero)). This is the source of many
"off by one" errors.
The READ CAPACITY(16) response provides additional information not found in the
READ CAPACITY(10) response. This includes protection and logical block
provisioning information, plus the number of logical blocks per physical
block. So even though the media size may not exceed what READ CAPACITY(10) can
show, it may still be useful to examine the response to READ CAPACITY(16).
Sadly there are horrible SCSI command set implementations in the wild that
crash when the READ CAPACITY(16) command is sent to them.
Device capacity is the product of the number of blocks by the block size. This
utility outputs this figure in bytes, MiB (1048576 bytes per MiB) and GB
(1000000000 bytes per GB).
If sg_readcap is called without the
--long option then the 10 byte cdb
version (i.e. READ CAPACITY (10)) is sent to the
DEVICE. If the number
of blocks in the response is reported as 0xffffffff (i.e. (2**32 - 1) ) and
the
--hex option has not been given, then READ CAPACITY (16) is called
and its response is output.
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.
OPTIONS¶
Arguments to long options are mandatory for short options as well.
- -b, --brief
- outputs two hex numbers (prefixed with '0x' and space
separated) to stdout. The first number is the maximum number of blocks on
the device (which is one plus the lba of the last accessible block). The
second number is the size in bytes of each block. If the operation fails
then "0x0 0x0" is written to stdout.
- -h, --help
- print out the usage message then exit.
- -H, --hex
- output the response to the READ CAPACITY command (either
the 10 or 16 byte cdb variant) in ASCII hexadecimal on stdout.
- -L, --lba=LBA
- used in conjunction with --pmi option. This variant
of READ CAPACITY will yield the last block address after LBA prior
to a delay. For a disk, given a LBA it yields the highest numbered
block on the same cylinder (i.e. before the heads need to move).
LBA is assumed to be decimal unless prefixed by "0x" or
it has a trailing "h". Defaults to 0. This option was made
obsolete in SBC-3 revision 26.
- -l, --long
- Use the 16 byte cdb variant of the READ CAPACITY command.
The default action is to use the 10 byte cdb variant which limits the
maximum block address to (2**32 - 2). When a 10 byte cdb READ CAPACITY
command is used on a device whose size is too large then a last block
address of 0xffffffff is returned (if the device complies with
SBC-2).
- --16
- Use the 16 byte cdb variant of the READ CAPACITY command.
See the '--long' option.
- -O, --old
- switch to older style options.
- -p, --pmi
- partial medium indicator: for finding the next block
address prior to some delay (e.g. head movement). In the absence of this
option, the total number of blocks and the block size of the device are
output. Used in conjunction with the --lba=LBA option. This option
was made obsolete in SBC-3 revision 26.
- -r, --raw
- output response in binary to stdout.
- -v, --verbose
- increase level of verbosity. Can be used multiple
times.
- -V, --version
- outputs version string then exits.
NOTES¶
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_readcap /dev/sda" and
"sg_readcap /dev/hdd" (if /dev/hdd is a ATAPI CD/DVD device) will
work in the 2.6 series kernels.
EXIT STATUS¶
The exit status of sg_readcap 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 . In sg3_utils version 1.23 and later these older options can be
selected by either setting the SG3_UTILS_OLD_OPTS environment variable or
using '--old' (or '-O) as the first option.
- -16
- Use the 16 byte cdb variant of the READ CAPACITY command.
Equivalent to --long in the main description.
- -b
- utility outputs two hex numbers (prefixed with '0x' and
space separated) to stdout. The first number is the maximum number of
blocks on the device (which is one plus the lba of the last accessible
block). The second number is the size of each block. If the operation
fails then "0x0 0x0" is written to stdout. Equivalent to
--brief in the main description.
- -h
- output the usage message then exit. Giving the -?
option also outputs the usage message then exits.
- -H
- output the response to the READ CAPACITY command (either
the 10 or 16 byte cdb variant) in ASCII hexadecimal on stdout.
- -lba=LBA
- used in conjunction with -pmi option. This variant
of READ CAPACITY will yield the last block address after LBA prior
to a delay. Equivalent to --lba=LBA in the main description.
- -N
- switch to the newer style options.
- -pmi
- partial medium indicator: for finding the next block
address prior to some delay (e.g. head movement). In the absence of this
switch, the total number of blocks and the block size of the device are
output. Equivalent to --pmi in the main description.
- -r
- output response in binary (to stdout).
- -v
- verbose: print out cdb of issued commands prior to
execution. '-vv' and '-vvv' are also accepted yielding greater
verbosity.
- -V
- outputs version string then exits.
AUTHORS¶
Written by Douglas Gilbert
COPYRIGHT¶
Copyright © 1999-2011 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¶
sg_inq(sg3_utils)