FreeBSD Manual Pages
RECOVERDISK(1) General Commands Manual RECOVERDISK(1) NAME recoverdisk -- recover data from disk-like devices. SYNOPSIS recoverdisk [-b bigsize] [-i interval] [-r readlist] [-s interval] [-u pattern] [-v] [-w writelist] source [destination] DESCRIPTION The recoverdisk utility reads all data from the source and retries read op- erations until they succeed. If destination is specified all data read be written there. The internal work-list can be saved and loaded so that recoverdisk sessions can be resumed, for instance when a marginal source hard-disk shuts down. The work-list is initialized with a single item which covers the entire source and recoverdisk always chips away at the first item on the work- list. When a read succeeds, that part of the current chunk is eliminated from the work-list. When a read fails, that part of the item is appended to the worklist as a separate item, and will be retried in due order. If destination is speci- fied, the corresponding range is filled with '_UNREAD_'. The first pass attempts to read everything in "big-size" chunks, the second pass reads in "medium-size" chunks and third and subsequent passes read in "small-size" chunks. This three stage process is an attempt to optimize the case where only a few bad blocks exist on source. If too many read-er- rors are encountered, recoverdisk will fall back to smaller sizes sooner. The three sizes default to 128kB (or less if the sector size does not di- vide 128kB cleanly, for instance audio CD media), and the reported DIOCGSTRIPESIZE and DIOCGSECTORSIZE respectively. The options are as follows: -b bigsize The size of reads attempted in first pass. -m mediumsize The size of reads attempted in second pass. -s smallsize The size of reads attempted in third and subsequent passes. -r work-list-file Read the work-list from a file. -w work-list-file Write the work-list to a file when a read succeed, but at most once every minute. -l log-file Each successful read is logged with timestamp, offset and length. -t totalsize How many bytes should be recovered. The default is what DIOCGMEDIASIZE reports for character and block devices or st_size if source is a regular file. -i pause sleep(3) this long between reads. This reduces the load on the source device and the system in general. -p pause sleep(3) this long whenever a read fails. This makes the source device look less sick to the operating system. -u pattern By default blocks which cannot be read are filled with the pattern `_UNREAD_' in the output file. This option can be used to specify a different pattern. If the pattern is the empty string, nothing is written. -v Produce a detailed progress report with ANSI escapes and UTF-8. recoverdisk can be aborted with SIGINT, but with a sick source it may take up to several minutes before the current read operation returns from the kernel. EXAMPLES # check if all sectors can be read on a USB stick: recoverdisk /dev/da0 # recover data from failing hard drive ada3 recoverdisk /dev/ada3 /data/disk.img # clone a hard disk recoverdisk /dev/ada3 /dev/ada4 # read an ISO image from a CD-ROM recoverdisk /dev/cd0 /data/cd.iso # continue reading from a broken CD and update the existing worklist recoverdisk -r worklist -w worklist /dev/cd0 /data/cd.iso # recover a single file from the unreadable media recoverdisk /cdrom/file.avi file.avi PRACTICAL ADVICE In Datamuseum.dk recoverdisk has been used to recover all sorts of data-me- dia for two decades, here are some things we have learned: * Interacting with failing hardware has a tendency to crash machines, so it is always a good idea to use the --w -work-list-file so that it is possible to continue. * When attempting to recover hard to read data from failing hard disks, it pays to pamper the drive as much as possible: * It is generally best to keep the drive in it's usual physical orienta- tion, but it can also help to try other orientations. * Insulate the drive from external vibrations. * Keep the drive cool with a fan. * If possible, power the drive from a laboratory power supply. * Do not loose patience: Let recoverdisk run as long as possible. * (S)ATA controllers do not handle failing disks well, if this is a prob- lem, use a USB-(S)ATA adapter instead. * The recoverdisk source code is deliberately written to be easily portable to older versions of FreeBSD and to other operating systems. * If you need to read ST-506, RLL or ESDI drives FreeBSD 3.5.1 is a good compromise. * Sometimes forcing the disk to step between reads helps. Since recoverdisk process the work-list in the order it is read, this can be accomplished by sorting the work-list with something like: % sort +0.5 * By default the CAM layer will retry failing read operations, but that will get stuck on the bad sectors for long time and delay recovering what actually can be read from a rapidly failing drive. In that situa- tion, set the appropriate kern.cam.*.retry_count sysctl to zero. * For floppies and un-zoned hard disks (ST-506 to early IDE) set -b bigsize to the size of a track. SEE ALSO dd(1), ada(4), cam(4), cd(4), da(4) HISTORY The recoverdisk utility first appeared in FreeBSD 7.0 because Somebodyac forgot to make a backup copy. AUTHORS The original implementation was done by Poul-Henning Kamp <phk@FreeBSD.org> with minor improvements from Ulrich Sporlein <uqs@FreeBSD.org>. This manual page was originally written by Ulrich Sporlein. BUGS If a failing device causes the machine to crash, there is a risk that a chunk might have been successfully read and removed from the work-list, but not yet flushed to the destination. recoverdisk calls fdatasync(3) on the destination before writing the work- list to a temporary file, and calls it again on the temporary file before renaming it to the specified -w work-file-list filename. But even then things dont always work out. recoverdisk should have an option for reconstructing the work-list from the destination by enumerating the -u pattern filled ranges. FreeBSD ports 15.quarterly April 3, 2020 RECOVERDISK(1)
NAME | SYNOPSIS | DESCRIPTION | EXAMPLES | PRACTICAL ADVICE | SEE ALSO | HISTORY | AUTHORS | BUGS
Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=recoverdisk&sektion=1&manpath=FreeBSD+15.1-RELEASE+and+Ports.quarterly>
