| .TH SG_REASSIGN "8" "March 2005" "sg3_utils-1.14" SG3_UTILS |
| .SH NAME |
| sg_reassign \- reassign defective blocks on the given (disk) device |
| .SH SYNOPSIS |
| .B sg_reassign |
| \fI--address=<n>,<n>...\fR [\fI--dummy\fR] [\fI--eight=0|1\fR] |
| [\fI--grown\fR] [\fI--help\fR] [\fI--longlist=0|1\fR] [\fI--verbose\fR] |
| [\fI--version\fR] \fI<scsi_device>\fR |
| .SH DESCRIPTION |
| .\" Add any additional description here |
| .PP |
| 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 DATAT (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. |
| .PP |
| 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. |
| .TP |
| --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. |
| .TP |
| --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. |
| .TP |
| --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. |
| .TP |
| --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. |
| .TP |
| --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. |
| .TP |
| --help | -h |
| output the usage message then exit. |
| .TP |
| --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. |
| .TP |
| --verbose | -v |
| increase the level of verbosity, (i.e. debug output). |
| .TP |
| --version | -V |
| print the version string and then exit. |
| .PP |
| 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 '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). |
| .SH 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. |
| .SH AUTHORS |
| Written by Douglas Gilbert. |
| .SH "REPORTING BUGS" |
| Report bugs to <dgilbert at interlog dot com>. |
| .SH COPYRIGHT |
| Copyright \(co 2005 Douglas Gilbert |
| .br |
| This software is distributed under a FreeBSD license. There is NO |
| warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
| .SH "SEE ALSO" |
| .B sg_modes(sg3_utils), sg_wr_mode(sg3_utils), sginfo(sg3_utils) |
| .B sg_senddiag(sg3_utils), smartmontools(internet, sourceforge) |