Provided by: sg3-utils_1.17-2_i386 bug

NAME

       sg_reassign - reassign defective blocks on the given (disk) device

SYNOPSIS

       sg_reassign   --address=<n>,<n>...  [--dummy]  [--eight=0|1]  [--grown]
       [--help] [--longlist=0|1] [--verbose] [--version] <scsi_device>

DESCRIPTION

       Send a REASSIGN BLOCKS SCSI command to the given device.  Alternatively
       this  utility  can  find the number of element in a "grown defect list"
       with a READ DEFECT DATA (10) SCSI  command.  These  SCSI  commands  are
       defined  in  SBC-2  for  direct  access devices (e.g. a disk). Reassign
       blocks is designed to change the physical location of a  logical  block
       that  is  known  or  suspected  to  be defective to another area on the
       media. Disks are typically formatted with blocks held  in  reserve  for
       this situation.

       If the ’--grown’ option is not given then one or more addresses need to
       be given. If the address (or all of the addresses) fit into 4 bytes and
       ’--eight=1’  is  not given then the parameter block passed to the given
       device is made up of 4 byte logical block  addresses.  If  any  of  the
       addresses  need  more  than  4  bytes  to  represent (i.e. >= 2**32) or
       ’--eight=1’ is given then the  parameter  block  passed  to  the  given
       device is made up of 8 byte logical block addresses.

       --address=<n>,<n>... | -a <n>,<n>...
              string of comma separated numbers. Each number is interpreted as
              decimal unless prefixed by ’0x’ or  ’0X’.  If  multiple  logical
              block  addresses are given they must be separated by a comma. At
              least one address must be given.

       --address=- | -a -
              reads one or more logical block addresses from stdin. These  may
              be  comma, space, tab or linefeed (newline) separated. If a line
              contains "#" then the remaining  characters  on  that  line  are
              ignored.  Otherwise  each non separator character should resolve
              to a decimal number unless prefixed by ’0x’ or  ’0X’.  At  least
              one address must be given.

       --dummy | -d
              prepare for but do not execute the REASSIGN BLOCKS SCSI command.
              Since  the  REASSIGN  BLOCKS   SCSI   command   is   essentially
              irreversible, paranoid users may wish to check the invocation of
              this utility before reassigning  defective  blocks  on  a  disk.
              Useful  with  ’-v  -v’  for those who wish to view the parameter
              block that will accompany the command.

       --eight=0|1 | -e 0|1
              when value is 1 then it sets the ’LONGLBA’ flag in  the  command
              indicating  that the addresses in the associated parameter block
              are 8 byte quantities.  When value  is  0  then  it  clears  the
              ’LONGLBA’  flag  in the command indicating that the addresses in
              the associated parameter block are 4 byte quantities.   If  this
              option  is  not  given then 4 byte quantities are assumed unless
              one of the address is too large.

       --grown | -g
              use the READ DEFECT DATA (10)  SCSI  command  to  determine  the
              number  of elements in the "grown defect list". When this option
              is given there is no reassignment of blocks (i.e.  this  utility
              is  passive).  When  this  option is given then the ’--address=’
              option is not permitted. See the discussion below concerning the
              relationship  between  reassigned  blocks  and  the grown defect
              list.

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

       --longlist=0|1 | -l 0|1
              sets the REASSIGN BLOCKS cdb field of the same name to the given
              value.   Only 1000 addresses are permitted so there should be no
              need to specify a value of 1. The short list  variant  restricts
              the  parameter block length to 2 ** 16 bytes (i.e. about 16000 4
              byte  addresses  or  8000   8   byte   addresses).   Added   for
              completeness.

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

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

       Note  that  if  the  ARRE  field (for reads) and/or the AWRE field (for
       writes) are set in the "Read  Write  Error  Recovery"  mode  page  then
       recoverable  read  and/or  write errors cause automatic reassignment of
       the defective block. The PER bit in the same mode page controls whether
       a  RECOVERED  ERROR  sense  key  is  reported  on not (PER=1 implies do
       report). Irrespective of the ARRE, AWRE  or  PER  field  settings,  the
       error  counter  log  pages reflect any errors (recovered or otherwise).
       Whenever a block is reassigned, a new entry is  added  in  the  "grown"
       defect   list.   Apart   from   doing  selftests  (see  sg_senddiag  or
       smartmontools) regularly, monitoring the grown defect list of a disk is
       a  reasonable  metric  of  its health. If the grown list starts growing
       quickly that is an ominous sign. The best grown defect lists are  empty
       ones.  The  number  of  elements in the grown defect list can be viewed
       with the ’--grown’ option. The contents of the grown defect list can be
       viewed with the ’sginfo -G’ utility.

       If  an  unrecoverable error is detected at a logical block address then
       REASSIGN BLOCKS is needed to reassign  the  block.  Also  if  the  ARRE
       and/or  AWRE  fields are clear and a recoverable error is detected then
       the logical block in question  may  be  reassigned  with  this  utility
       (otherwise  the error counter log pages will continually be incremented
       for each recovered access).

       The number of blocks held in  reserve  for  the  purposes  of  REASSIGN
       BLOCKS  is  vendor  specific and may well be limited to the zone within
       the media where the original (defective) block lay. When this number is
       exhausted  subsequent invocations of this utility may result in a sense
       key of hardware error and an  additional  sense  of  ’No  defect  spare
       location  available’.  The  next step would be to reformat the disk (or
       get a replacement).

NOTES

       The SBC-2  draft  standard  (revision  16)  notes  that  when  multiple
       addresses  are  given  to the REASSIGN BLOCKS SCSI command and there is
       some failure at one of the later addresses then all addresses prior  to
       that  have  already be reassigned. Care should be taken in such a case.
       Re-executing the command with the same addresses will cause the earlier
       addresses  to  be reassigned again. At some stage the disk will run out
       of reserved locations.  So unless  a  large  number  of  addresses  are
       involved it may be safer to reassign them one address at a time.

AUTHORS

       Written by Douglas Gilbert.

REPORTING BUGS

       Report bugs to <dgilbert at interlog dot com>.

COPYRIGHT

       Copyright © 2005 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

       sg_modes(sg3_utils),      sg_wr_mode(sg3_utils),      sginfo(sg3_utils)
       sg_senddiag(sg3_utils), smartmontools(internet, sourceforge)