Provided by: sg3-utils_1.46-1ubuntu0.22.04.1_amd64 bug

NAME

       sg_verify - invoke SCSI VERIFY command(s) on a block device

SYNOPSIS

       sg_verify   [--0]   [--16]  [--bpc=BPC]  [--count=COUNT]  [--dpo]  [--ff]  [--ebytchk=BCH]
       [--group=GN] [--help] [--in=IF] [--lba=LBA] [--ndo=NDO] [--quiet] [--readonly] [--verbose]
       [--version] [--vrprotect=VRP] DEVICE

DESCRIPTION

       Sends  one  or  more  SCSI  VERIFY  (10 or 16) commands to DEVICE. These SCSI commands are
       defined in the SBC-2 and SBC-3 standards at http://www.t10.org and SBC-4 drafts.

       When --ndo=NDO is not given then the verify starts at the logical block address  given  by
       the --lba=LBA option and continues for --count=COUNT blocks. No more than --bpc=BPC blocks
       are verified by each VERIFY command so if necessary multiple  VERIFY  commands  are  sent.
       Medium  verification operations are performed by the DEVICE (e.g.  assuming each block has
       additional EEC data, check this against the logical block contents). No news is good  news
       (i.e.  if  there are no verify errors detected then no messages are sent to stderr and the
       Unix exit status is 0).

       When --ndo=NDO is given then the --bpc=BPC option is ignored. A single VERIFY  command  is
       issued  and a comparison starts at the logical block address given by the --lba=LBA option
       and continues for --count=COUNT blocks. The VERIFY  command  has  an  associated  data-out
       buffer  that  is NDO bytes long. The contents of the data-out buffer are obtained from the
       FN file (if --in=FN is given) or from stdin.  A comparison takes  place  between  data-out
       buffer  and  the  logical blocks on the DEVICE. If the comparison is good then no messages
       are sent to stderr and the Unix exit status is 0. If the comparison  fails  then  a  sense
       buffer  with a sense key of MISCOMPARE is returned; in this case the Unix exit status will
       be 14. Messages will be sent to stderr associated with MISCOMPARE sense buffer unless  the
       --quiet option is given.

       In SBC-3 revision 34 the BYTCHK field in all SCSI VERIFY commands was expanded from one to
       two bits. That required some changes in the options of this utility, see the section below
       on OPTION CHANGES.

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.

       -0, --0
              a buffer NDO bytes long full of zeros is sent as the  data-out  part  of  a  VERIFY
              command.  So  stdin  is  not  read  and if --in=IF is given, an error is generated.
              Useful when BCH is 3 to check if some or all of DEVICE (e.g. a disk) is zero filled
              blocks.

       -S, --16
              uses  a VERIFY(16) command (default VERIFY(10)). Even without this option, using an
              --lba=LBA which is too large, will cause the utility to issue a VERIFY(16) command.

       -b, --bpc=BPC
              this option is ignored if --ndo=NDO is given. Otherwise BPC specifies  the  maximum
              number of blocks that will be verified by a single SCSI VERIFY command. The default
              value is 128 blocks which equates to 64 KB for a disk with 512 byte blocks. If  BPC
              is  less  than COUNT then multiple SCSI VERIFY commands are sent to the DEVICE. For
              the default VERIFY(10) BPC cannot exceed 0xffff (65,535) while for  VERIFY(16)  BPC
              cannot  exceed  0x7fffffff  (2,147,483,647).  For recent block devices (disks) this
              value may be constrained by the maximum transfer length field in the  block  limits
              VPD page.

       -c, --count=COUNT
              where  COUNT  specifies the number of blocks to verify. The default value is 1 . If
              COUNT is greater than BPC (or its default value of 128) and NDO is not given, 0  or
              less  than  multiple  SCSI  VERIFY commands are sent to the device. Otherwise COUNT
              becomes the contents of the verification length field of the  SCSI  VERIFY  command
              issued.  The  sg_readcap  utility  can be used to find the maximum number of blocks
              that a block device (e.g. a disk) has.

       -d, --dpo
              disable page out changes the  cache  retention  priority  of  blocks  read  on  the
              device's  cache  to  the  lowest  priority.  This  means  that blocks read by other
              commands are more likely to remain in the device's cache.

       -E, --ebytchk=BCH
              sets the BYTCHK field to BCH overriding the value (1) set by the --ndo=NDO  option.
              Values  of  1, 2 or 3 are accepted for BCH however sbc3r34 reserves the value 2. If
              this option is given then --ndo=NDO must also be given. If BCH is 3 then NDO should
              be  the  size  of one logical block (plus the size of some or all of the protection
              information if VRP is greater than 0).

       -f, --ff
              a buffer NDO bytes long full of 0xff bytes is sent as the data-out part of a VERIFY
              command.  So  stdin  is  not  read  and if --in=IF is given, an error is generated.
              Useful when BCH is 3 to check if some or all of DEVICE (e.g. a disk) is  0xff  byte
              filled blocks.

       -g, --group=GN
              where  GN  becomes  the  contents  of the group number field in the SCSI VERIFY(16)
              command. It can be from 0 to 63 inclusive. The default value for GN is 0. Note that
              this option is ignored for the SCSI VERIFY(10) command.

       -h, --help
              output the usage message then exit.

       -i, --in=IF
              where  IF is the name of a file from which NDO bytes will be read and placed in the
              data-out buffer. This is only done when the --ndo=NDO  option  is  given.  If  this
              option is not given then stdin is read. If IF is "-" then stdin is also used.

       -l, --lba=LBA
              where  LBA  specifies  the  logical  block  address of the first block to start the
              verify operation. LBA is assumed to  be  decimal  unless  prefixed  by  '0x'  or  a
              trailing 'h' (see below). The default value is 0 (i.e. the start of the device).

       -n, --ndo=NDO
              NDO is the number of bytes to obtain from the FN file (if --in=FN is given) or from
              stdin. Those bytes are placed in the  data-out  buffer  associated  with  the  SCSI
              VERIFY  command  and NDO is placed in the verification length field in the cdb. The
              default value for NDO is 0 and the maximum value is dependent on  the  OS.  If  the
              --ebytchk=BCH option is not given then the BYTCHK field in the cdb is set to 1.

       -q, --quiet
              suppress  the  sense  buffer  messages  associated with a MISCOMPARE sense key that
              would otherwise be sent to stderr. Still set the exit status to  14  which  is  the
              sense key value indicating a MISCOMPARE .

       -r, --readonly
              opens  the  DEVICE read-only rather than read-write which is the default. The Linux
              sg driver needs read-write access for the SCSI  VERIFY  command  but  other  access
              methods may require read-only access.

       -v, --verbose
              increase the level of verbosity, (i.e. debug output).

       -V, --version
              print the version string and then exit.

       -P, --vrprotect=VRP
              where VRP is the value in the vrprotect field in the VERIFY command cdb. It must be
              a value between 0 and 7 inclusive. The default value is zero.

BYTCHK

       BYTCHK is the name of a field (two bits wide) in the VERIFY(10) and  VERIFY(16)  commands.
       When  set  to  1 or 3 (sbc3r34 reserves the value 2) it indicates that associated with the
       SCSI VERIFY command, a data-out buffer will be sent for the device (disk) to check.  Using
       the  --ndo=NDO  option sets the BYTCHK field to 1 and NDO is the number of bytes placed in
       the data-out buffer. Those bytes are obtained from stdin or IF (from the --in=FN  option).
       The --ebytchk=BCH option may be used to override the BYTCHK field value of 1 with BCH.

       The calculation of NDO is left up to the user. Its value depends on the logical block size
       (which can be found with the sg_readcap utility), the COUNT and the VRP values. If the VRP
       is  greater  than  0  then  each logical block will contain an extra 8 bytes (at least) of
       protection information.

       When the BYTCHK field is 0 then the verification process done  by  the  device  (disk)  is
       vendor  specific.  It typically involves checking each block on the disk against its error
       correction codes (ECC) which is additional data also held on the disk.

       Many Operating Systems put limits on the  maximum  size  of  the  data-out  (and  data-in)
       buffer.  For  Linux  at  one  time  the  limit  was  less than 1 MB but has been increased
       somewhat.

OPTION CHANGES

       Earlier versions of this utility had a --bytchk=NDO option which set the  BYTCHK  bit  and
       set the cdb verification length field to NDO.  The shorter form of that option was -B NDO.
       For backward compatibility that option is still present but not documented. In  its  place
       is  the  --ndo=NDO  whose  shorter  form  of -n NDO.  --ndo=NDO sets the BYTCHK field to 1
       unless that is overridden by the --ebytchk=BCH.

NOTES

       Various numeric arguments (e.g. LBA) may include multiplicative suffixes or  be  given  in
       hexadecimal. See the "NUMERIC ARGUMENTS" section in the sg3_utils(8) man page.

       The  amount  of  error  correction  and  the number of retries attempted before a block is
       considered defective are controlled in part by the Verify Error Recovery mode page. A note
       in  the  SBC-3 draft (rev 29 section 6.4.9 on the Verify Error Recovery mode page) advises
       that to minimize the number of checks (and hence have the most "sensitive"  verify  check)
       do the following in that mode page: set the EER bit to 0, the PER bit to 1, the DTE bit to
       1, the DCR bit to 1, the verify retry count to 0 and the verify recovery time limit to  0.
       Mode pages can be modified with the sdparm utility.

       The  SCSI  VERIFY(6) command defined in the SSC-2 standard and later (i.e.  for tape drive
       systems) is not supported by this utility.

EXIT STATUS

       The exit status of sg_verify is 0 when it is successful. When BCH is other than 0  then  a
       comparison  takes place and if it fails then the exit status is 14 which happens to be the
       sense key value of MISCOMPARE.  Otherwise see the EXIT STATUS section in the  sg3_utils(8)
       man page.

       Earlier versions of this utility set an exit status of 98 when there was a MISCOMPARE.

AUTHORS

       Written by Douglas Gilbert.

REPORTING BUGS

       Report bugs to <dgilbert at interlog dot com>.

COPYRIGHT

       Copyright © 2004-2019 Douglas Gilbert
       This  software  is distributed under a FreeBSD license. There is NO warranty; not even for
       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

SEE ALSO

       sdparm(sdparm), sg_modes(sg3_utils), sg_readcap(sg3_utils), sg_inq(sg3_utils)