diff options
Diffstat (limited to 'static/freebsd/man1/recoverdisk.1')
| -rw-r--r-- | static/freebsd/man1/recoverdisk.1 | 273 |
1 files changed, 273 insertions, 0 deletions
diff --git a/static/freebsd/man1/recoverdisk.1 b/static/freebsd/man1/recoverdisk.1 new file mode 100644 index 00000000..76085f3c --- /dev/null +++ b/static/freebsd/man1/recoverdisk.1 @@ -0,0 +1,273 @@ +.\" Copyright (c) 2006 Ulrich Spoerlein <uspoerlein@gmail.com> +.\" All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.Dd April 3, 2020 +.Dt RECOVERDISK 1 +.Os +.Sh NAME +.Nm recoverdisk +.Nd recover data from disk-like devices. +.Sh SYNOPSIS +.Nm +.Op Fl b Ar bigsize +.Op Fl i Ar interval +.Op Fl r Ar readlist +.Op Fl s Ar interval +.Op Fl u Ar pattern +.Op Fl v +.Op Fl w Ar writelist +.Ar source +.Op Ar destination +.Sh DESCRIPTION +The +.Nm +utility reads all data from the +.Ar source +and retries read operations until they succeed. +If +.Ar destination +is specified all data read be written there. +.Pp +The internal work-list can be saved and loaded so that +.Nm +sessions can be resumed, for instance when a marginal +source hard-disk shuts down. +.Pp +The work-list is initialized with a single item which covers the entire +.Ar source +and +.Nm +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 +.Ar destination +is specified, the corresponding range is filled with '_UNREAD_'. +.Pp +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 +.Ar source . +If too many read-errors are encountered, +.Nm +will fall back to smaller sizes sooner. +.Pp +The three sizes default to 128kB (or less if the sector size does +not divide 128kB cleanly, for instance audio CD media), and the +reported +.Dv DIOCGSTRIPESIZE +and +.Dv DIOCGSECTORSIZE +respectively. +.Pp +The options are as follows: +.Bl -tag -width indent +.It Fl b Ar bigsize +The size of reads attempted in first pass. +.It Fl m Ar mediumsize +The size of reads attempted in second pass. +.It Fl s Ar smallsize +The size of reads attempted in third and subsequent passes. +.It Fl r Ar work-list-file +Read the work-list from a file. +.It Fl w Ar work-list-file +Write the work-list to a file when a read succeed, but at most once +every minute. +.It Fl l Ar log-file +Each successful read is logged with timestamp, offset and length. +.It Fl t Ar totalsize +How many bytes should be recovered. +The default is what +.Dv DIOCGMEDIASIZE +reports for character and block devices or +.Dv st_size +if +.Ar source +is a regular file. +.It Fl i Ar pause +.Xr sleep 3 +this long between reads. This reduces the load on the +.Ar source +device and the system in general. +.It Fl p Ar pause +.Xr sleep 3 +this long whenever a read fails. +This makes the +.Ar source +device look less sick to the operating system. +.It Fl u Ar pattern +By default blocks which cannot be read are filled with the pattern +.Ql _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. +.It Fl v +Produce a detailed progress report with ANSI escapes and UTF-8. +.El +.Pp +.Nm +can be aborted with +.Dv SIGINT , +but with a sick +.Ar source +it may take up to several minutes before the current read operation +returns from the kernel. +.Pp +.Sh EXAMPLES +.Bd -literal +# 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 + +.Ed +.Sh PRACTICAL ADVICE +In Datamuseum.dk +.Nm +has been used to recover all sorts of data-media for two decades, +here are some things we have learned: +.Bl -bullet +.It +Interacting with failing hardware has a tendency to crash machines, +so it is always a good idea to use the +.Fl -w work-list-file +so that it is possible to continue. +.It +When attempting to recover hard to read data from failing hard disks, +it pays to pamper the drive as much as possible: +.It +It is generally best to keep the drive in it's usual physical orientation, +but it can also help to try other orientations. +.It +Insulate the drive from external vibrations. +.It +Keep the drive cool with a fan. +.It +If possible, power the drive from a laboratory power supply. +.It +Do not lose patience: Let +.Nm +run as long as possible. +.It +(S)ATA controllers do not handle failing disks well, if this +is a problem, use a USB-(S)ATA adapter instead. +.It +The +.Nm +source code is deliberately written to be easily portable to +older versions of +.Fx +and to other operating systems. +.It +If you need to read ST-506, RLL or ESDI drives +.Fx 3.5.1 +is a good compromise. +.It +Sometimes forcing the disk to step between reads helps. +Since +.Nm +process the work-list in the order it is read, this +can be accomplished by sorting the work-list with +something like: +.Dl % sort +0.5 +.It +By default the +.Xr 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 situation, set the appropriate +.Dl kern.cam.*.retry_count +sysctl to zero. +.It +For floppies and un-zoned hard disks (ST-506 to +early IDE) set +.Fl b Ar bigsize +to the size of a track. +.El +.Sh SEE ALSO +.Xr dd 1 , +.Xr ada 4 , +.Xr cam 4 , +.Xr cd 4 , +.Xr da 4 +.Sh HISTORY +The +.Nm +utility first appeared in +.Fx 7.0 +because Somebody™ forgot to make a backup copy. +.Sh AUTHORS +.An -nosplit +The original implementation was done by +.An Poul-Henning Kamp Aq Mt phk@FreeBSD.org +with minor improvements from +.An Ulrich Sp\(:orlein Aq Mt uqs@FreeBSD.org . +.Pp +This manual page was originally written by +.An Ulrich Sp\(:orlein . +.Sh 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 +.Ar destination . +.Pp +.Nm +calls +.Xr 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 +.Fl w Ar work-file-list +filename. +But even then things dont always work out. +.Pp +.Nm +should have an option for reconstructing the work-list +from the +.Ar destination +by enumerating the +.Fl u Ar pattern +filled ranges. |
