1.\" Copyright (c) 2006 Ulrich Spoerlein <uspoerlein@gmail.com> 2.\" All rights reserved. 3.\" 4.\" Redistribution and use in source and binary forms, with or without 5.\" modification, are permitted provided that the following conditions 6.\" are met: 7.\" 1. Redistributions of source code must retain the above copyright 8.\" notice, this list of conditions and the following disclaimer. 9.\" 2. Redistributions in binary form must reproduce the above copyright 10.\" notice, this list of conditions and the following disclaimer in the 11.\" documentation and/or other materials provided with the distribution. 12.\" 13.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 14.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 16.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 17.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 18.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 19.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 20.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 21.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 22.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 23.\" SUCH DAMAGE. 24.\" 25.\" $FreeBSD$ 26.\" 27.Dd May 6, 2006 28.Dt RECOVERDISK 1 29.Os 30.Sh NAME 31.Nm recoverdisk 32.Nd recover data from hard disk or optical media 33.Sh SYNOPSIS 34.Nm 35.Op Fl r Ar rlist 36.Op Fl w Ar wlist 37.Ar special 38.Op file 39.Sh DESCRIPTION 40The 41.Nm 42utility reads data from the 43.Pa special 44file until all blocks could be successfully read. 45It starts reading in multiples of the sector size. 46Whenever a block fails, it is put to the end of the working queue and will be 47read again, possibly with a smaller read size. 48.Pp 49It uses block sizes of roughly 1 MB, 64kB, and the native sector size (usually 50512 bytes). 51These figures are adjusted slightly, for devices whose sectorsize is not a 52power of 2, e.g., audio CDs with a sector size of 2352 bytes. 53.Pp 54The options are as follows: 55.Bl -tag -width indent 56.It Fl r Ar rlist 57Read the list of blocks and block sizes to read from the specified file. 58.It Fl w Ar wlist 59Write the list of remaining blocks to read to the specified file if 60.Nm 61is aborted via SIGINT. 62.El 63.Pp 64The 65.Fl r 66and 67.Fl w 68option can be used in combination. 69Especially, they can point to the same file, which will be updated on abort. 70.Sh OUTPUT 71.Nm 72prints several columns, detailing the progress 73.Bl -tag -width remaining 74.It start 75Starting offset of the current block. 76.It size 77Read size of the current block. 78.It len 79Length of the current block. 80.It state 81Is increased for every failed read. 82.It done 83Number of bytes already read. 84.It remaining 85Number of bytes remaining. 86.It % done 87Percent complete. 88.El 89.Sh EXAMPLES 90# recover data from failing hard drive ad3 91.Dl $ touch /data/lots_of_space 92.Dl $ recoverdisk /dev/ad3 /data/lots_of_space 93.Pp 94# clone a hard disk 95.Dl $ recoverdisk /dev/ad3 /dev/ad4 96.Pp 97# read an ISO image from a CD-ROM 98.Dl $ touch /data/cd.iso; recoverdisk /dev/acd0 /data/cd.iso 99.Pp 100# continue reading from a broken CD and update the existing worklist 101.Dl $ recoverdisk -r worklist -w worklist /dev/acd0 /data/cd.iso 102.Pp 103# recover a single file from the unreadable media 104.Dl $ touch file.avi; recoverdisk /cdrom/file.avi file.avi 105.Sh SEE ALSO 106.Xr dd 1 107.Sh HISTORY 108The 109.Nm 110command first appeared in 111.Fx 7.0 . 112.Sh BUGS 113Reading from media where the sectorsize is not a power of 2 will make all 1141 MB reads fail. 115This is due to the DMA reads being split up into blocks of at most 128kB. 116These reads then fail if the sectorsize is not a divisor of 128kB. 117When reading a full raw audio CD, this leads to roughly 700 error messages 118flying by. 119This is harmless. 120.Sh AUTHORS 121.An -nosplit 122The original implementation was done by 123.An Poul-Henning Kamp Aq phk@freebsd.org 124with minor improvements from 125.An Ulrich Sp\(:orlein Aq uspoerlein@gmail.com . 126.Pp 127This manual page was written by 128.An Ulrich Sp\(:orlein Aq uspoerlein@gmail.com . 129