.TH SG_REASSIGN "8" "October 2019" "sg3_utils\-1.45" SG3_UTILS
.SH NAME
sg_reassign \- send SCSI REASSIGN BLOCKS command
.SH SYNOPSIS
.B sg_reassign
[\fI\-\-address=A,A...\fR] [\fI\-\-dummy\fR] [\fI\-\-eight=0|1\fR]
[\fI\-\-grown\fR] [\fI\-\-help\fR] [\fI\-\-hex\fR] [\fI\-\-longlist=0|1\fR]
[\fI\-\-primary\fR] [\fI\-\-verbose\fR] [\fI\-\-version\fR] \fIDEVICE\fR
.SH DESCRIPTION
.\" Add any additional description here
.PP
Send a SCSI REASSIGN BLOCKS command to \fIDEVICE\fR. Alternatively
this utility can find the number of element in a "grown" or "primary"
defect list with a SCSI READ DEFECT DATA (10) 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.
.PP
If neither the \fI\-\-grown\fR nor \fI\-\-primary\fR option is supplied
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 \fIDEVICE\fR 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 \fIDEVICE\fR is made up of 8 byte logical block addresses.
.SH 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.
.TP
\fB\-a\fR, \fB\-\-address\fR=\fIA,A...\fR
where \fIA,A...\fR is a string of comma separated numbers. Each number
is interpreted as decimal unless prefixed by '0x' or '0X' (or it has a
trailing 'h' or 'H'). If multiple logical block addresses are given they
must be separated by a comma or a (single) space. A string that contains
any space separators needs to be quoted. At least one address must be given.
.TP
\fB\-a\fR, \fB\-\-address\fR=\-
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 sequence of characters should resolve to a decimal number
unless prefixed by '0x' or '0X' (or has a trailing 'h'). At least one
address must be given. Lines should not be longer than 1023 bytes.
.TP
\fB\-d\fR, \fB\-\-dummy\fR
prepare for but do not execute the SCSI REASSIGN BLOCKS command. Since
the REASSIGN BLOCKS command is essentially irreversible, paranoid
users may wish to check the invocation of this utility before reassigning
defective blocks on a disk. Useful with '\-vv' for those who wish to
view the parameter block that will accompany the command.
.TP
\fB\-e\fR, \fB\-\-eight\fR=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.
.TP
\fB\-g\fR, \fB\-\-grown\fR
use the SCSI READ DEFECT DATA (10) 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 \fI\-\-address=\fR option is not permitted. See
the discussion below concerning the relationship between reassigned blocks
and the grown defect list. This list is sometimes referred to as the GLIST.
.TP
\fB\-h\fR, \fB\-\-help\fR
output the usage message then exit.
.TP
\fB\-H\fR, \fB\-\-hex\fR
print response in hex (for \fB\-g\fR, \fB\-\-grown\fR, \fB\-p\fR
or \fB\-\-primary\fR).
.TP
\fB\-l\fR, \fB\-\-longlist\fR=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.
.TP
\fB\-p\fR, \fB\-\-primary\fR
use the SCSI READ DEFECT DATA (10) command to determine the number of
elements in the "primary defect list" which is established during the
manufacturing process. When this option is given there is no reassignment
of blocks (i.e. this utility is passive). When this option is given then
the \fI\-\-address=\fR option is not permitted. This list is sometimes
referred to as the PLIST.
.TP
\fB\-v\fR, \fB\-\-verbose\fR
increase the level of verbosity, (i.e. debug output).
.TP
\fB\-V\fR, \fB\-\-version\fR
print the version string and then exit.
.SH NOTES
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 \fI\-\-grown\fR option. The contents of the grown defect list can be
viewed with the 'sginfo \-G' utility.
.PP
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).
.PP
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).
.PP
The SBC\-2 draft standard (revision 16) notes that when multiple addresses
are given to the SCSI REASSIGN BLOCKS 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.
.SH EXIT STATUS
The exit status of sg_reassign is 0 when it is successful. Otherwise see
the sg3_utils(8) man page.
.SH AUTHORS
Written by Douglas Gilbert.
.SH "REPORTING BUGS"
Report bugs to <dgilbert at interlog dot com>.
.SH COPYRIGHT
Copyright \(co 2005\-2019 Douglas Gilbert
.br
This software is distributed under a BSD\-2\-Clause license. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
.SH "SEE ALSO"
.B sg_format,sginfo,sg_senddiag(all in sg3_utils), sdparm(sdparm),
.B smartmontools(internet, sourceforge)
