Introduce qemu-img check subcommand (Kevin Wolf)

From: Kevin Wolf <kwolf@redhat.com>

Now that block drivers can provide check functions, expose them through
qemu-img.

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@7215 c046a42c-6fe2-441c-8c8c-71466251a162
stable-0.11
aliguori 2009-04-21 23:11:53 +00:00
parent e97fc193e1
commit 1585969c6e
1 changed files with 62 additions and 0 deletions

View File

@ -58,6 +58,7 @@ static void help(void)
"QEMU disk image utility\n"
"\n"
"Command syntax:\n"
" check [-f fmt] filename\n"
" create [-e] [-6] [-F fmt] [-b base_image] [-f fmt] filename [size]\n"
" commit [-f fmt] filename\n"
" convert [-c] [-e] [-6] [-f fmt] [-O output_fmt] [-B output_base_image] filename [filename2 [...]] output_filename\n"
@ -315,6 +316,65 @@ static int img_create(int argc, char **argv)
return 0;
}
static int img_check(int argc, char **argv)
{
int c, ret;
const char *filename, *fmt;
BlockDriver *drv;
BlockDriverState *bs;
fmt = NULL;
for(;;) {
c = getopt(argc, argv, "f:h");
if (c == -1)
break;
switch(c) {
case 'h':
help();
break;
case 'f':
fmt = optarg;
break;
}
}
if (optind >= argc)
help();
filename = argv[optind++];
bs = bdrv_new("");
if (!bs)
error("Not enough memory");
if (fmt) {
drv = bdrv_find_format(fmt);
if (!drv)
error("Unknown file format '%s'", fmt);
} else {
drv = NULL;
}
if (bdrv_open2(bs, filename, BRDV_O_FLAGS, drv) < 0) {
error("Could not open '%s'", filename);
}
ret = bdrv_check(bs);
switch(ret) {
case 0:
printf("No errors were found on the image.\n");
break;
case -ENOTSUP:
error("This image format does not support checks");
break;
default:
if (ret < 0) {
error("An error occurred during the check");
} else {
printf("%d errors were found on the image.\n", ret);
}
break;
}
bdrv_delete(bs);
return 0;
}
static int img_commit(int argc, char **argv)
{
int c, ret;
@ -888,6 +948,8 @@ int main(int argc, char **argv)
argc--; argv++;
if (!strcmp(cmd, "create")) {
img_create(argc, argv);
} else if (!strcmp(cmd, "check")) {
img_check(argc, argv);
} else if (!strcmp(cmd, "commit")) {
img_commit(argc, argv);
} else if (!strcmp(cmd, "convert")) {