mirror of https://gitee.com/openkylin/qemu.git
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
This commit is contained in:
parent
e97fc193e1
commit
1585969c6e
62
qemu-img.c
62
qemu-img.c
|
@ -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")) {
|
||||
|
|
Loading…
Reference in New Issue