@@ -176,6 +176,13 @@ Parameters to compare subcommand:
- If both files don't specify cluster-size, use default of 64K
- If only one file specify cluster-size, just use it.
+.. option:: --shallow
+
+ This option prevents opening and comparing any backing files.
+ This is useful to compare images with same backing file or to compare
+ incremental images from the chain of incremental backups with
+ ``--stat`` option.
+
Parameters to convert subcommand:
.. program:: qemu-img-convert
@@ -395,7 +402,7 @@ Command description:
The rate limit for the commit process is specified by ``-r``.
-.. option:: compare [--object OBJECTDEF] [--image-opts] [-f FMT] [-F FMT] [-T SRC_CACHE] [-p] [-q] [-s] [-U] [--stat [--block-size BLOCK_SIZE]] FILENAME1 FILENAME2
+.. option:: compare [--object OBJECTDEF] [--image-opts] [-f FMT] [-F FMT] [-T SRC_CACHE] [-p] [-q] [-s] [-U] [--stat [--block-size BLOCK_SIZE]] [--shallow] FILENAME1 FILENAME2
Check if two images have the same content. You can compare images with
different format or settings.
@@ -85,6 +85,7 @@ enum {
OPTION_SKIP_BROKEN = 277,
OPTION_STAT = 277,
OPTION_BLOCK_SIZE = 278,
+ OPTION_SHALLOW = 279,
};
typedef enum OutputFormat {
@@ -1482,7 +1483,7 @@ static int img_compare(int argc, char **argv)
int64_t block_end;
int ret = 0; /* return value - 0 Ident, 1 Different, >1 Error */
bool progress = false, quiet = false, strict = false;
- int flags;
+ int flags = 0;
bool writethrough;
int64_t total_size;
int64_t offset = 0;
@@ -1504,6 +1505,7 @@ static int img_compare(int argc, char **argv)
{"force-share", no_argument, 0, 'U'},
{"stat", no_argument, 0, OPTION_STAT},
{"block-size", required_argument, 0, OPTION_BLOCK_SIZE},
+ {"shallow", no_argument, 0, OPTION_SHALLOW},
{0, 0, 0, 0}
};
c = getopt_long(argc, argv, ":hf:F:T:pqsU",
@@ -1569,6 +1571,9 @@ static int img_compare(int argc, char **argv)
exit(EXIT_SUCCESS);
}
break;
+ case OPTION_SHALLOW:
+ flags |= BDRV_O_NO_BACKING;
+ break;
}
}
@@ -1593,7 +1598,6 @@ static int img_compare(int argc, char **argv)
/* Initialize before goto out */
qemu_progress_init(progress, 2.0);
- flags = 0;
ret = bdrv_parse_cache_mode(cache, &flags, &writethrough);
if (ret < 0) {
error_report("Invalid source cache option: %s", cache);
@@ -40,9 +40,9 @@ SRST
ERST
DEF("compare", img_compare,
- "compare [--object objectdef] [--image-opts] [-f fmt] [-F fmt] [-T src_cache] [-p] [-q] [-s] [-U] [--stat [--block-size BLOCK_SIZE]] filename1 filename2")
+ "compare [--object objectdef] [--image-opts] [-f fmt] [-F fmt] [-T src_cache] [-p] [-q] [-s] [-U] [--stat [--block-size BLOCK_SIZE]] [--shallow] filename1 filename2")
SRST
-.. option:: compare [--object OBJECTDEF] [--image-opts] [-f FMT] [-F FMT] [-T SRC_CACHE] [-p] [-q] [-s] [-U] [--stat [--block-size BLOCK_SIZE]] FILENAME1 FILENAME2
+.. option:: compare [--object OBJECTDEF] [--image-opts] [-f FMT] [-F FMT] [-T SRC_CACHE] [-p] [-q] [-s] [-U] [--stat [--block-size BLOCK_SIZE]] [--shallow] FILENAME1 FILENAME2
ERST
DEF("convert", img_convert,
Allow compare only top images of backing chains. This is useful to compare images with same backing file or to compare incremental images from the chain of incremental backups with "--stat" option. Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> --- docs/tools/qemu-img.rst | 9 ++++++++- qemu-img.c | 8 ++++++-- qemu-img-cmds.hx | 4 ++-- 3 files changed, 16 insertions(+), 5 deletions(-)