Tool for ddrescue logfiles. Manipulate ddrescue logfiles, show their contents, convert them to/from other formats, compare them, and test rescue status.
Syntax
ddrescuelog [options] [mapfile]
Options:
mapfile A regular file placed in an existing directory.
Use a hyphen '-' as mapfile to read the mapfile from standard input (also in the options
taking a mapfile argument) or to write the mapfile created by --create-mapfile to standard output.
-a old_types,new_types
--change-types=old_types,new_types
Change the status of every block in the rescue domain from one type in old_types to the corresponding type
in new_types, much like the command 'tr' does, and write the resulting mapfile to standard output.
old_types and new_types are strings of block status characters as defined in the chapter Mapfile structure
(see Mapfile structure). Blocks whose status is not in old_types are left unchanged.
If new_types is shorter than old_types the last type of new_types is repeated as many times as necessary.
-A
--annotate-mapfile
Add comments containing the human-readable positions and sizes of the blocks in mapfile which are included
in the rescue domain, and write the resulting mapfile to standard output.
-b bytes
--block-size=bytes
--sector-size=bytes
Block size used by ddrescuelog.
Depending on the requested operation it may be the sector size of the input device, the block size of the
rescued file system, etc. Defaults to 512. The position of each option -b in the command line is significant;
it changes the sector size for the following options until a new option -b appears in the command line.
See double-b.
-B
--binary-prefixes
Show units with binary prefixes (powers of 1024).
SI prefixes (powers of 1000) are used by default. (See Invoking ddrescue).
-c[type1type2]
--create-mapfile[=type1type2]
Create a mapfile from a list of sectors read from standard input.
The option --format determines the format of the input: either a list of sector numbers, or a bitmap.
The sector numbers may be unordered. Only sectors included in the rescue domain are added to mapfile.
If the mapfile is being created displaced from the input domain, the offset between -i and -o must be
a multiple of the sector size. In this case, remember to specify -o because it defaults to the same value
given to -i, producing a default offset of 0.
type1 and type2 are block status characters as defined in the chapter Mapfile structure (see Mapfile structure).
type1 sets the type for blocks included in the list, while type2 sets the type for the rest of mapfile.
If not specified, type1 defaults to '+' and type2 defaults to '-'.
-C[type]
--complete-mapfile[=type]
Complete a synthetic (user fabricated) mapfile by filling the gaps with blocks of type type, and write the
completed mapfile to standard output. type is one of the block status characters defined in the chapter
Mapfile structure (see Mapfile). If type is not specified, the gaps are filled with non-tried blocks.
All gaps in mapfile are filled. Domain options are ignored.
-d
--delete-if-done
Delete the given mapfile if all the blocks in the rescue domain have been successfully recovered.
The exit status is 0 if mapfile could be deleted, 1 otherwise. If the mapfile is read from standard input,
behave like --done-status. (There is nothing to delete).
-D
--done-status
Test if all the blocks in the rescue domain have been successfully recovered.
The exit status is 0 if all tested blocks are finished, 1 otherwise.
-f
--force
Force overwrite of mapfile.
-F name
--format=name
Select the input format for --create-mapfile, or the output format for --list-blocks.
The valid names are 'list', 'bitmap', 'bitmap-be' (big endian), and 'bitmap-le' (little endian).
Plain 'bitmap' is equivalent to 'bitmap-le'. The default format is 'list' (a list of block numbers).
In a big endian bitmap the first block is represented by the most significant bit of the first byte.
In a little endian bitmap the first block is represented by the least significant bit of the first byte.
-h
--help
Print an informative help message describing the options and exit.
-H C:H:S:track_order:bad_head
--make-test=C:H:S:track_order:bad_head
Create a domain mapfile simulating a failing head for the test mode of ddrescue.
C:H:S means cylinders:heads:sectors. For discs with variable number of sectors per track, S is specified
as 'sectors_first_track-sectors_last_track[,tracks_per_zone]'.
track_order is one of 'F' (forward), or 'FF' (hybrid serpentine).
bad_head is a number in the range 0 to heads - 1.
-i bytes
--input-position=bytes
Starting position of the rescue domain, in bytes. Defaults to 0.
It refers to a position in the original infile.
-l types
--list-blocks=types
By default print on standard output the sector numbers of the blocks specified as any of types in mapfile
and included in the rescue domain. The list format is one sector number per line in decimal, like the
output of the program 'badblocks', so that it can be used as input for e2fsck or other similar filesystem
repairing tool.
If a bitmap --format is specified, write to standard output a bitmap of the endianness chosen, with ones for
the sectors specified and zeros for sectors from other block types. The bits set to 1 in the bitmap should be
equivalent to the list of blocks.
types contains one or more of the block status characters defined in the chapter Mapfile structure (see Mapfile).
If the output numbers or bits are being created displaced from their position in the input domain, the offset
between -i and -o must be a multiple of the block size. In this case, remember to specify -o because it defaults
to the same value given to -i, producing a default offset of 0.
A sector is listed (or set to 1 in bitmap output) if selected, even partially. (The positions and sizes of the
mapfile blocks are not required to be multiples of the sector size).
-L
--loose-domain
Accept an incomplete synthetic (user fabricated) domain mapfile or compare-as-domain mapfile, and fill the gaps
in the list of data blocks with non-tried blocks. The blocks in the mapfile may be unordered, may overlap other
blocks of the same status, and don't need to be contiguous. This option allows making quick edits to a mapfile
without all the size calculations involved in making all data blocks contiguous again.
-m file
--domain-mapfile=file
Restrict the rescue domain to the blocks marked as finished in the mapfile file.
-n
--invert-mapfile
Invert the types of the blocks in mapfile which are included in the rescue domain, and write the resulting
mapfile to standard output. Finished blocks ('+') are changed to bad-sector ('-'), all other types are changed
to finished. --invert-mapfile is equivalent to --change-types=?*/-+,++++-
-o bytes
--output-position=bytes
Starting position of the image of the rescue domain in the original outfile, in bytes.
It is used by the options --create-mapfile, --list-blocks, and --shift. Defaults to --input-position.
-p file
--compare-mapfile=file
Compare the types of the blocks included in the rescue domain.
The exit status is 0 if all the blocks tested are the same in both file and mapfile, 1 otherwise.
-P file
--compare-as-domain=file
Compare only the blocks marked as finished in the rescue domain.
The exit status is 0 if all the blocks tested are the same in both file and mapfile, 1 otherwise.
Two files comparing equal with this option are equivalent when used as domain mapfiles.
-q
--quiet
Quiet operation. Suppress all messages.
-s bytes
--size=bytes
Maximum size of the rescue domain in bytes.
It refers to a size in the original infile.
-1 removes any previous size limit.
-t
--show-status
Print a summary of the contents of each mapfile to the standard output.
This option allows more than one mapfile. If the domain setting options are used, the summary
can be restricted to one or several parts of mapfile.
-v
--verbose
Verbose mode. Further -v's (up to 4) increase the verbosity level.
-V
--version
Print the version number of ddrescue on the standard output and exit.
This version number should be included in all bug reports.
-x file
--xor-mapfile=file
Perform a logical XOR (exclusive OR) operation between the finished blocks in file and those in
mapfile, and write the resulting mapfile to standard output. In other words, in the resulting
mapfile a block is only shown as finished if it was finished in either of the two input mapfiles
but not in both.
-y file
--and-mapfile=file
Perform a logical AND operation between the finished blocks in file and those in mapfile,
and write the resulting mapfile to standard output. In other words, in the resulting mapfile a
block is only shown as finished if it was finished in both input mapfiles.
-z file
--or-mapfile=file
Perform a logical OR operation between the finished blocks in file and those in mapfile,
and write the resulting mapfile to standard output. In other words, in the resulting mapfile
a block is shown as finished if it was finished in either of the two input mapfiles.
--shift
Shift the positions of all the blocks in mapfile by the offset (--output-position - --input-position),
and write the resulting mapfile to standard output. Either --input-position or --output-position must
be 0. Any blocks beyond the end of the rescue domain are removed before performing the shift.
The remaining blocks are shifted even if they are outside the rescue domain.
If the offset is positive, a non-tried block is inserted before the first block to fill the gap.
-- Terminates all options; any following arguments are treated as non-option arguments, even if they begin
with a hyphen.
Ddrescuelog operations can be restricted to one or several parts of the mapfile if the domain setting options are used.
ddrescue written by Antonio Diaz Diaz, download from the GNU web site.
Delete the mapfile if the rescue is finished (all data have been recovered without errors left):
ddrescue -f /dev/sda /dev/sdb mapfile
ddrescuelog -d mapfile
Rescue two ext2 partitions in /dev/sda to /dev/sdb and repair the file systems using badblocks lists generated with ddrescuelog. File system block size is 4096. Note: you do need to partition /dev/sdb beforehand:
fdisk /dev/sdb # partition /dev/sdb ddrescue -f /dev/sda1 /dev/sdb1 mapfile1 ddrescue -f /dev/sda2 /dev/sdb2 mapfile2 ddrescuelog -l- -b4096 mapfile1 > badblocks1 ddrescuelog -l- -b4096 mapfile2 > badblocks2 e2fsck -v -f -L badblocks1 /dev/sdb1 e2fsck -v -f -L badblocks2 /dev/sdb2
Rescue a whole disc with two ext2 partitions in /dev/sda to /dev/sdb and repair the file systems using badblocks lists generated with ddrescuelog. Disc sector size is 512 (first -b), file system block size is 4096 (second -b). Arguments to options -i and -s are the starting positions and sizes of the partitions being rescued. Note: you don't need to partition /dev/sdb beforehand, but if the partition table on /dev/sda is damaged, you'll need to recreate it somehow on /dev/sdb:
ddrescue -f /dev/sda /dev/sdb mapfile fdisk /dev/sdb # get partition sizes ddrescuelog -l- -b512 -i63s -o0 -s767457s -b4096 mapfile > badblocks1 ddrescuelog -l- -b512 -i767520s -o0 -s96520s -b4096 mapfile > badblocks2 e2fsck -v -f -L badblocks1 /dev/sdb1 e2fsck -v -f -L badblocks2 /dev/sdb2
“I was brought up to believe that a person must be rescued when drowning, regardless of religion and nationality” ~ Irena Sendler
ddrescue - Data recovery tool, save data from a crashed partition.
GNU ddrescue Manual.
ddrescue for OS X - macosxhints.
dd - Data Duplicator - Convert and copy a file.