Provided by: sg3-utils_1.17-2_i386
sg_reassign - reassign defective blocks on the given (disk) device
sg_reassign --address=<n>,<n>... [--dummy] [--eight=0|1] [--grown]
[--help] [--longlist=0|1] [--verbose] [--version] <scsi_device>
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
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
--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
--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).
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.
Written by Douglas Gilbert.
Report bugs to <dgilbert at interlog dot com>.
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
sg_modes(sg3_utils), sg_wr_mode(sg3_utils), sginfo(sg3_utils)
sg_senddiag(sg3_utils), smartmontools(internet, sourceforge)