mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-14 21:52:18 -06:00
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
1 changed files with 62 additions and 0 deletions
62
qemu-img.c
62
qemu-img.c
|
@ -58,6 +58,7 @@ static void help(void)
|
||||||
"QEMU disk image utility\n"
|
"QEMU disk image utility\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Command syntax:\n"
|
"Command syntax:\n"
|
||||||
|
" check [-f fmt] filename\n"
|
||||||
" create [-e] [-6] [-F fmt] [-b base_image] [-f fmt] filename [size]\n"
|
" create [-e] [-6] [-F fmt] [-b base_image] [-f fmt] filename [size]\n"
|
||||||
" commit [-f fmt] filename\n"
|
" commit [-f fmt] filename\n"
|
||||||
" convert [-c] [-e] [-6] [-f fmt] [-O output_fmt] [-B output_base_image] filename [filename2 [...]] output_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;
|
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)
|
static int img_commit(int argc, char **argv)
|
||||||
{
|
{
|
||||||
int c, ret;
|
int c, ret;
|
||||||
|
@ -888,6 +948,8 @@ int main(int argc, char **argv)
|
||||||
argc--; argv++;
|
argc--; argv++;
|
||||||
if (!strcmp(cmd, "create")) {
|
if (!strcmp(cmd, "create")) {
|
||||||
img_create(argc, argv);
|
img_create(argc, argv);
|
||||||
|
} else if (!strcmp(cmd, "check")) {
|
||||||
|
img_check(argc, argv);
|
||||||
} else if (!strcmp(cmd, "commit")) {
|
} else if (!strcmp(cmd, "commit")) {
|
||||||
img_commit(argc, argv);
|
img_commit(argc, argv);
|
||||||
} else if (!strcmp(cmd, "convert")) {
|
} else if (!strcmp(cmd, "convert")) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue