A data recovery tool
SAFECOPY [OPTIONS] SOURCE TARGET
A data recovery tool.
Safecopy is a data recovery tool which tries to extract as much data as possible from a seekable, but problematic (i.e. damaged sectors) source - like floppy drives, harddisk partitions, CDs, ..., where other tools like dd would fail doe to I/O errors.
Safecopy tries to get as much data from the source as possible without device dependent tricks. For example to get an ISO image from a copy protected or otherwise damaged CD-ROM, cdrdao and bin2iso would possibly do a better and faster job.
Safecopy comes with preset options (named stages) to ease its use. These presets can be overridden by individual options.
Usage: safecopy [options] <source> <target>
-b <size>
Blocksize, also used for skipping offset when searching for the end of a bad area. Set this to physical sectorsize of your media.
Default: 1*
If <size> is an integer, then the unit is in bytes.
If <size> is followed by the percentage sign, it express a percentage of the whole file/device size.
If <size> is followed by a star sign, it means a number of times the block size reported by the operating system.
-f <size>
Size when skipping over badblocks. Higher values put less strain on dammaged hardware, but on the other hand, you might miss good areas in between two bad ones.
Default value is 16*.
If <size> is an integer, then the unit is in bytes.
If <size> is followed by the percentage sign, it express a percentage of the whole file/device size.
If <size> is followed by a star sign, it means a number of times the block size. See option -b.
-r <size>
Resolution when searching for the exact beginning or end of a bad area Bigger values increase performace at potential cost of valid data close to damaged areas.
Default: 1*
If <size> is an integer, then the unit is in bytes.
If <size> is followed by the percentage sign, it express a percentage of the whole file/device size.
If <size> is followed by a star sign, it means a number of times the block size. See option -b.
-R <number>
Number of read attempts on the first bad block of a damaged area with minimum resolution. More retries can sometimes recover a weak sector, but at the cost of additional strain.
Default: 3
-Z <number>
On each error, force seek the read head from start to end of the source device as often as specified. That takes times, create additional strain and might not be supported by all devices or drivers.
Default: 1
-L <mode>
Use low level device calls as specified by the mode number.
Where mode number can be:
0: Do not use low level device calls.
1: Attempt low level device calls for error recovery only.
2: Always use low level device calls if available.
Default: 1
--sync
Use synchronized read calls (disable driver buffering). Safecopy will use O_DIRECT if supported by the operating system and O_SYNC otherwise.
Default: Asynchronous read buffering.
-s <blocks>
Start position where to start reading. Will correspond to position 0 in the destination file.
Default: block 0
-l <blocks>
Length of data to be read.
Default: size of input file.
-I <badblockfile>
Incremental mode. Assume the target file already exists and has holes specified in the badblockfile.
It will attempt to retrieve more data from the listed blocks or from beyond the file size of the target file only.
WARNING: Without this option, the destination file will be emptied prior to writing.
Use -I /dev/null if you want to continue a previous run of safecopy without a badblock list file.
Default: None
-i <bytes>
Blocksize to interpret the badblockfile given with -I.
Default: Blocksize as specified by -b.
-X <badblockfile>
Exclusion mode. If used together with -I, excluded blocks override included ones. Safecopy will not read or write any data from areas covered by excluded blocks.
Default: None
-x <bytes>
Blocksize to interpret the badblockfile given with -X.
Default: blocksize as specified by -b
-o <badblockfile>
Write a badblocks/e2fsck compatible bad block file.
Default: None
-S <seekscript>
Use an external script foir seeking in input file. This might be useful for tape devices or similar.
Seekscript must be an executable that takes the number of blocks to be skipped as argv1 (1-64) the blocksize in bytes as argv2 and the current position as argv3.
Return values needs to be the number of blocks successfully skipped, or 0 to indicate seek failure. The external seekscript will only be used if lseek() fails and we need to skip over data.
Default: None
-M <string>
Mark unrecovered data with this string instead of skipping it. This helps in later on rescued file system images.
The default behavior is to zero the unreadable data on creation of the output files, and leaving the data as it is on any later run.
WARNING: when used in combination with incremental mode (-I), this may overwrite data in any block specified in the badblockfile. Blocks not in the badblockfile, or covered by those specified in the -X file are safe from being overwritten.
Default: None
--debug <level>
Enable debug output. Level is a bit field, add values together for more informations as follow:
1 program flow
2 IO control
4 badblock marking
8 seeking
16 incremental mode
32 exclude mode
Use 255 for all debug output.
Default: 0
-T <timingfile>
Write sector read timing information into this file for later analysis.
Default: None
-h | --help
Show a maybe more detailed help.
--stage1
Preset to rescue most of the data fast, using no retries and avoiding bad areas.
Presets: -f 10% -r 10% -R 1 -Z 0 -L 2 -M BaDbloCk -o stage1.badblocks
--stage2
Preset to rescue more data, using no retries but searching for exact ends of bad areas.
Presets: -f 128* -r 1* -R 1 -Z 0 -L 2 -I stage1.badblocks -o stage2.badblocks
--stage3
Preset to rescue everything that can be rescued using maximum retries, head realignment tricks and low level access.
Presets: -f 1* -r 1* -R 4 -Z 1 -L 2 -I stage2.badblocks -o stage3.badblocks
. :
Between 1 and 1024 blocks successfully read.
_ :
Read was incomplete. (possibly end of file) blocksize is reduced to read the rest.
> :
Read failed, reducing blocksize to read partial data.
[xx](+yy) :
current block and number of blocks (or bytes) continuously read successfully up to this point.
X :
Read failed on block with minimum blocksize and is skipped. Unrecoverable error, destination file is padded with zeros. Data is now skipped until end of the unreadable area is reached.
< :
Successfull read- test after the end of a bad area causes backtracking to search for the first readable data.
[xx](+yy) :
Current block and number of blocks (or bytes) of recent continuous unreadable data.
safecopy was written by Corvus Corax ([email protected])
This manual page was originally written by Juan Angulo Moreno <[email protected]> for the Debian project (but may be used by others). It was filled out by Christophe Monniez <[email protected]> .