# sg_readcap - send SCSI READ CAPACITY command - man(8) - [phpMan]

[_SG_READCAP_(8)](https://www.chedong.com/phpMan.php/man/SGREADCAP/8/markdown)                                 SG3_UTILS                                [_SG_READCAP_(8)](https://www.chedong.com/phpMan.php/man/SGREADCAP/8/markdown)

## NAME
       sg_readcap - send SCSI READ CAPACITY command

## SYNOPSIS
       **sg_readcap  **[_--16_]  [_--brief_]  [_--help_] [_--hex_] [_--lba=LBA_] [_--long_] [_--pmi_] [_--raw_] [_--read‐_
       _only_] [_--verbose_] [_--version_] [_--zbc_] _DEVICE_

       **sg_readcap **[_-16_] [_-b_] [_-h_] [_-H_] [_-lba=LBA_] [_-pmi_] [_-r_] [_-R_] [_-v_] [_-V_] [_-z_] _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)](https://www.chedong.com/phpMan.php/man/CAPACITY/16/markdown) response provides additional information not found in the READ CAPAC‐
       [ITY(10)](https://www.chedong.com/phpMan.php/man/ITY/10/markdown) 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)](https://www.chedong.com/phpMan.php/man/CAPACITY/10/markdown) can show, it may still be useful to examine the response to READ CA‐
       [PACITY(16)](https://www.chedong.com/phpMan.php/man/PACITY/16/markdown). Sadly there are horrible SCSI command set implementations in the wild that  crash
       when the READ [CAPACITY(16)](https://www.chedong.com/phpMan.php/man/CAPACITY/16/markdown) command is sent to them.

       Device  capacity is the product of the number of blocks by the block size.  This utility out‐
       puts this figure in bytes, MiB (1048576 bytes per MiB), GB (1000000000 bytes per GB) and,  if
       large enough, TB (1000 GB).

       If sg_readcap is called without the _--long_ option then the 10 byte cdb version (i.e. READ CA‐
       PACITY  (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 syn‐
       opsis  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.  The options are  arranged
       in alphabetical order based on the long option name.

       **--16   **Use  the  16  byte  cdb variant of the READ CAPACITY command. See the '--long' option.
              **-b**, **--brief **outputs two hex numbers (prefixed with '0x' and space separated)  to  std‐
              out. 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  vari‐
              ant) in ASCII hexadecimal on stdout.

### -L --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  or
              later).

### -O --old
              Switch to older style options. Please use as first option.

### -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.

### -R --readonly
              open the _DEVICE_ read-only (e.g. in Unix with the O_RDONLY flag).  The default for READ
              [CAPACITY(16)](https://www.chedong.com/phpMan.php/man/CAPACITY/16/markdown) is to open it read-write. The default for READ [CAPACITY(10)](https://www.chedong.com/phpMan.php/man/CAPACITY/10/markdown) is to open it
              read-only so this option does not change anything for this case.

### -v --verbose
              increase level of verbosity. Can be used multiple times.

### -V --version
              outputs version string then exits.

### -z --zbc
              additionally  prints out the extra ZBC field (RC_BASIS) in the READ CAPACITY response.
              Using the option implicitly sets the _--16_ option.

## NOTES
       The response to READ [CAPACITY(16)](https://www.chedong.com/phpMan.php/man/CAPACITY/16/markdown) contains a LBPRZ bit in the  SBC-3  standard  (ANSI  INCITS
       514-2014). There was also a LBPRZ bit with the same meaning in the Logical block provisioning
       VPD  page  (0xb2).  Then  somewhat confusingly T10 expanded the LBPRZ bit to a 3 bit field in
       SBC-4 draft revision 7, but only in the LB provisioning VPD page. The reason for  the  expan‐
       sion  was to report a new "provisioning initialization pattern" state (when an unmapped logi‐
       cal block is read). The new state has been assigned LBPRZ=2 in the VPD page  and  it  re-uses
       LBPRZ=0  in  the  READ [CAPACITY(16)](https://www.chedong.com/phpMan.php/man/CAPACITY/16/markdown) response. LBPRZ=1 retains the same meaning for both vari‐
       ants, namely that a block of zeroes will be returned when an unmapped logical block is read.

## EXIT STATUS
       The exit status of sg_readcap is 0 when it is successful. Otherwise see the [sg3_utils(8)](https://www.chedong.com/phpMan.php/man/sg3utils/8/markdown)  man
       page.

## 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 _--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.

### -16    
              main description.

### -b     
              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     
              sage then exits.

### -H     
              ant) in ASCII hexadecimal on stdout.

### -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 --new
              Switch to the newer style options.

### -pmi   
              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     

### -R     

### -v     
              also accepted yielding greater verbosity.

### -V     

### -R     

## 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 _--old_ (or _-O_) as the first command line  op‐
       tion.

## AUTHORS
       Written by Douglas Gilbert

## COPYRIGHT
       Copyright © 1999-2020 Douglas Gilbert
       This software is distributed under the GPL version 2. There is NO warranty; not even for MER‐
       CHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

## SEE ALSO
### sg_inq(sg3_utils)

sg3_utils-1.45                              January 2020                               [_SG_READCAP_(8)](https://www.chedong.com/phpMan.php/man/SGREADCAP/8/markdown)
