[Libguestfs] [PATCH] [v2] WIP: ddrescue mapfile filter

Eric Blake eblake at redhat.com
Fri May 1 19:41:59 UTC 2020


On 5/1/20 2:16 PM, François Revol wrote:
> This allows to overlay bad sectors according to the mapfile generated by
> ddrescue, to then see where sectors are used using fsck and trying to
> copy files around.
> 
> Signed-off-by: François Revol <revol at free.fr>
> ---

Focusing on just the docs:

> +++ b/filters/ddrescue/nbdkit-ddrescue-filter.pod
> @@ -0,0 +1,74 @@
> +=head1 NAME
> +
> +nbdkit-ddrescue-filter - nbdkit filter for serving from ddrescue dump
> +
> +=head1 SYNOPSIS
> +
> + nbdkit --filter=ddrescue plugin [plugin-args...] ddrescue-mapfile=file.map
> +
> + nbdkit --filter=ddrescue file file=file.img ddrescue-mapfile=file.map [plugin-args...]
> +
> +=head1 DESCRIPTION
> +
> +C<nbdkit-ddrescue-filter> is a filter for L<nbdkit(1)> which overlays
> +bad blocks according to a GNU L<ddrescue(1)> mapfile.  This is mainly useful
> +for testing disk images recovered with ddrescue, to detect which files
> +or filesystem structures are impacted, or attempting fsck on them.

Oh cool, this sounds very similar to the existing extentlist plugin, but 
with a difference that extentlist uses the input to decide which 
portions of the file are advertised as sparse, while this one uses which 
portions of the file cause EIO errors during read.  Is it worth trying 
to combine the two concepts into one filter, or do we want to keep it 
orthogonal as two separate filters?  Can we teach both filters to reuse 
common code for parsing extent lists in different formats (the 
extentlist format is the same format documented by the nbdkit-sh-plugin 
.extents; yours is the ddrescue format, I am also interested in the 
'qemu-img map --output=json' format)?  In fact, if we introduce a common 
library for extent list parsing, teaching nbdkit-sh-plugin to accept all 
formats might be useful.

I ask this because one of my ideas for qemu-nbd and the 
'qemu:dirty-bitmap:FOO' exposure of a bitmap is to have qemu-nbd report 
EIO for any part of the file not covered by the dirty bitmap.  There is 
no easy way to emulate that in nbdkit yet (since nbdkit does not 
understand anything other than the base:allocation context), but this 
filter plus the nbd plugin would be a way to provide those semantics on 
top of existing qemu-nbd, if this filter could easily parse qemu-img's 
extent list.

> +
> +Note that the current implementation is read-only.
> +
> +=head1 EXAMPLES
> +
> +=over 4
> +
> +=item Expose a rescued disk image with detected bad sectors:
> +
> + nbdkit --filter=ddrescue file file=disk.img ddrescue-mapfile=disk.map
> +
> +The above command serves the disk image disk.img and maps the bad
> +sectors listed in disk.img so that read attempts on them do not return
> +a valid block full of zeroes.

Wording suggestion:

and maps the bad sectors listed in disk.img so that read attempts over 
those portions of the file fail rather than returning a valid block 
containing garbage.

Or even make it configurable (via another .config knob) whether bad 
blocks read as zero or cause EIO.

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3226
Virtualization:  qemu.org | libvirt.org




More information about the Libguestfs mailing list