2 * QEMU disk image utility
4 * Copyright (c) 2003-2008 Fabrice Bellard
6 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and associated documentation files (the "Software"), to deal
8 * in the Software without restriction, including without limitation the rights
9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 * copies of the Software, and to permit persons to whom the Software is
11 * furnished to do so, subject to the following conditions:
13 * The above copyright notice and this permission notice shall be included in
14 * all copies or substantial portions of the Software.
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24 #include "qapi-visit.h"
25 #include "qapi/qmp-output-visitor.h"
26 #include "qapi/qmp/qjson.h"
27 #include "qemu-common.h"
28 #include "qemu/option.h"
29 #include "qemu/error-report.h"
30 #include "qemu/osdep.h"
31 #include "sysemu/sysemu.h"
32 #include "block/block_int.h"
40 typedef struct img_cmd_t
{
42 int (*handler
)(int argc
, char **argv
);
45 /* Default to cache=writeback as data integrity is not important for qemu-tcg. */
46 #define BDRV_O_FLAGS BDRV_O_CACHE_WB
47 #define BDRV_DEFAULT_CACHE "writeback"
49 static void format_print(void *opaque
, const char *name
)
54 /* Please keep in synch with qemu-img.texi */
55 static void help(void)
57 const char *help_msg
=
58 "qemu-img version " QEMU_VERSION
", Copyright (c) 2004-2008 Fabrice Bellard\n"
59 "usage: qemu-img command [command options]\n"
60 "QEMU disk image utility\n"
63 #define DEF(option, callback, arg_string) \
65 #include "qemu-img-cmds.h"
69 "Command parameters:\n"
70 " 'filename' is a disk image filename\n"
71 " 'fmt' is the disk image format. It is guessed automatically in most cases\n"
72 " 'cache' is the cache mode used to write the output disk image, the valid\n"
73 " options are: 'none', 'writeback' (default, except for convert), 'writethrough',\n"
74 " 'directsync' and 'unsafe' (default for convert)\n"
75 " 'size' is the disk image size in bytes. Optional suffixes\n"
76 " 'k' or 'K' (kilobyte, 1024), 'M' (megabyte, 1024k), 'G' (gigabyte, 1024M)\n"
77 " and T (terabyte, 1024G) are supported. 'b' is ignored.\n"
78 " 'output_filename' is the destination disk image filename\n"
79 " 'output_fmt' is the destination format\n"
80 " 'options' is a comma separated list of format specific options in a\n"
81 " name=value format. Use -o ? for an overview of the options supported by the\n"
83 " '-c' indicates that target image must be compressed (qcow format only)\n"
84 " '-u' enables unsafe rebasing. It is assumed that old and new backing file\n"
85 " match exactly. The image doesn't need a working backing file before\n"
86 " rebasing in this case (useful for renaming the backing file)\n"
87 " '-h' with or without a command shows this help and lists the supported formats\n"
88 " '-p' show progress of command (only certain commands)\n"
89 " '-S' indicates the consecutive number of bytes that must contain only zeros\n"
90 " for qemu-img to create a sparse image during conversion\n"
91 " '--output' takes the format in which the output must be done (human or json)\n"
93 "Parameters to check subcommand:\n"
94 " '-r' tries to repair any inconsistencies that are found during the check.\n"
95 " '-r leaks' repairs only cluster leaks, whereas '-r all' fixes all\n"
96 " kinds of errors, with a higher risk of choosing the wrong fix or\n"
97 " hiding corruption that has already occurred.\n"
99 "Parameters to snapshot subcommand:\n"
100 " 'snapshot' is the name of the snapshot to create, apply or delete\n"
101 " '-a' applies a snapshot (revert disk to saved state)\n"
102 " '-c' creates a snapshot\n"
103 " '-d' deletes a snapshot\n"
104 " '-l' lists all snapshots in the given image\n";
106 printf("%s\nSupported formats:", help_msg
);
107 bdrv_iterate_format(format_print
, NULL
);
113 /* XXX: put correct support for win32 */
114 static int read_password(char *buf
, int buf_size
)
117 printf("Password: ");
124 if (i
< (buf_size
- 1))
135 static struct termios oldtty
;
137 static void term_exit(void)
139 tcsetattr (0, TCSANOW
, &oldtty
);
142 static void term_init(void)
149 tty
.c_iflag
&= ~(IGNBRK
|BRKINT
|PARMRK
|ISTRIP
150 |INLCR
|IGNCR
|ICRNL
|IXON
);
151 tty
.c_oflag
|= OPOST
;
152 tty
.c_lflag
&= ~(ECHO
|ECHONL
|ICANON
|IEXTEN
);
153 tty
.c_cflag
&= ~(CSIZE
|PARENB
);
158 tcsetattr (0, TCSANOW
, &tty
);
163 static int read_password(char *buf
, int buf_size
)
168 printf("password: ");
173 ret
= read(0, &ch
, 1);
175 if (errno
== EAGAIN
|| errno
== EINTR
) {
181 } else if (ret
== 0) {
189 if (i
< (buf_size
- 1))
200 static int print_block_option_help(const char *filename
, const char *fmt
)
202 BlockDriver
*drv
, *proto_drv
;
203 QEMUOptionParameter
*create_options
= NULL
;
205 /* Find driver and parse its options */
206 drv
= bdrv_find_format(fmt
);
208 error_report("Unknown file format '%s'", fmt
);
212 proto_drv
= bdrv_find_protocol(filename
);
214 error_report("Unknown protocol '%s'", filename
);
218 create_options
= append_option_parameters(create_options
,
219 drv
->create_options
);
220 create_options
= append_option_parameters(create_options
,
221 proto_drv
->create_options
);
222 print_option_help(create_options
);
223 free_option_parameters(create_options
);
227 static BlockDriverState
*bdrv_new_open(const char *filename
,
232 BlockDriverState
*bs
;
237 bs
= bdrv_new("image");
240 drv
= bdrv_find_format(fmt
);
242 error_report("Unknown file format '%s'", fmt
);
249 ret
= bdrv_open(bs
, filename
, flags
, drv
);
251 error_report("Could not open '%s': %s", filename
, strerror(-ret
));
255 if (bdrv_is_encrypted(bs
) && require_io
) {
256 printf("Disk image '%s' is encrypted.\n", filename
);
257 if (read_password(password
, sizeof(password
)) < 0) {
258 error_report("No password given");
261 if (bdrv_set_key(bs
, password
) < 0) {
262 error_report("invalid password");
274 static int add_old_style_options(const char *fmt
, QEMUOptionParameter
*list
,
275 const char *base_filename
,
276 const char *base_fmt
)
279 if (set_option_parameter(list
, BLOCK_OPT_BACKING_FILE
, base_filename
)) {
280 error_report("Backing file not supported for file format '%s'",
286 if (set_option_parameter(list
, BLOCK_OPT_BACKING_FMT
, base_fmt
)) {
287 error_report("Backing file format not supported for file "
295 static int img_create(int argc
, char **argv
)
298 uint64_t img_size
= -1;
299 const char *fmt
= "raw";
300 const char *base_fmt
= NULL
;
301 const char *filename
;
302 const char *base_filename
= NULL
;
303 char *options
= NULL
;
304 Error
*local_err
= NULL
;
307 c
= getopt(argc
, argv
, "F:b:f:he6o:");
320 base_filename
= optarg
;
326 error_report("option -e is deprecated, please use \'-o "
327 "encryption\' instead!");
330 error_report("option -6 is deprecated, please use \'-o "
331 "compat6\' instead!");
339 /* Get the filename */
340 if (optind
>= argc
) {
343 filename
= argv
[optind
++];
345 /* Get image size, if specified */
349 sval
= strtosz_suffix(argv
[optind
++], &end
, STRTOSZ_DEFSUFFIX_B
);
350 if (sval
< 0 || *end
) {
351 error_report("Invalid image size specified! You may use k, M, G or "
353 error_report("kilobytes, megabytes, gigabytes and terabytes.");
356 img_size
= (uint64_t)sval
;
359 if (options
&& is_help_option(options
)) {
360 return print_block_option_help(filename
, fmt
);
363 bdrv_img_create(filename
, fmt
, base_filename
, base_fmt
,
364 options
, img_size
, BDRV_O_FLAGS
, &local_err
);
365 if (error_is_set(&local_err
)) {
366 error_report("%s", error_get_pretty(local_err
));
367 error_free(local_err
);
375 * Checks an image for consistency. Exit codes:
377 * 0 - Check completed, image is good
378 * 1 - Check not completed because of internal errors
379 * 2 - Check completed, image is corrupted
380 * 3 - Check completed, image has leaked clusters, but is good otherwise
382 static int img_check(int argc
, char **argv
)
385 const char *filename
, *fmt
;
386 BlockDriverState
*bs
;
387 BdrvCheckResult result
;
389 int flags
= BDRV_O_FLAGS
| BDRV_O_CHECK
;
393 c
= getopt(argc
, argv
, "f:hr:");
406 flags
|= BDRV_O_RDWR
;
408 if (!strcmp(optarg
, "leaks")) {
409 fix
= BDRV_FIX_LEAKS
;
410 } else if (!strcmp(optarg
, "all")) {
411 fix
= BDRV_FIX_LEAKS
| BDRV_FIX_ERRORS
;
418 if (optind
>= argc
) {
421 filename
= argv
[optind
++];
423 bs
= bdrv_new_open(filename
, fmt
, flags
, true);
427 ret
= bdrv_check(bs
, &result
, fix
);
429 if (ret
== -ENOTSUP
) {
430 error_report("This image format does not support checks");
435 if (result
.corruptions_fixed
|| result
.leaks_fixed
) {
436 printf("The following inconsistencies were found and repaired:\n\n"
437 " %d leaked clusters\n"
438 " %d corruptions\n\n"
439 "Double checking the fixed image now...\n",
441 result
.corruptions_fixed
);
442 ret
= bdrv_check(bs
, &result
, 0);
445 if (!(result
.corruptions
|| result
.leaks
|| result
.check_errors
)) {
446 printf("No errors were found on the image.\n");
448 if (result
.corruptions
) {
449 printf("\n%d errors were found on the image.\n"
450 "Data may be corrupted, or further writes to the image "
456 printf("\n%d leaked clusters were found on the image.\n"
457 "This means waste of disk space, but no harm to data.\n",
461 if (result
.check_errors
) {
462 printf("\n%d internal errors have occurred during the check.\n",
463 result
.check_errors
);
467 if (result
.bfi
.total_clusters
!= 0 && result
.bfi
.allocated_clusters
!= 0) {
468 printf("%" PRId64
"/%" PRId64
"= %0.2f%% allocated, %0.2f%% fragmented\n",
469 result
.bfi
.allocated_clusters
, result
.bfi
.total_clusters
,
470 result
.bfi
.allocated_clusters
* 100.0 / result
.bfi
.total_clusters
,
471 result
.bfi
.fragmented_clusters
* 100.0 / result
.bfi
.allocated_clusters
);
476 if (ret
< 0 || result
.check_errors
) {
477 printf("\nAn error has occurred during the check: %s\n"
478 "The check is not complete and may have missed error.\n",
483 if (result
.corruptions
) {
485 } else if (result
.leaks
) {
492 static int img_commit(int argc
, char **argv
)
495 const char *filename
, *fmt
, *cache
;
496 BlockDriverState
*bs
;
499 cache
= BDRV_DEFAULT_CACHE
;
501 c
= getopt(argc
, argv
, "f:ht:");
518 if (optind
>= argc
) {
521 filename
= argv
[optind
++];
524 ret
= bdrv_parse_cache_flags(cache
, &flags
);
526 error_report("Invalid cache option: %s", cache
);
530 bs
= bdrv_new_open(filename
, fmt
, flags
, true);
534 ret
= bdrv_commit(bs
);
537 printf("Image committed.\n");
540 error_report("No disk inserted");
543 error_report("Image is read-only");
546 error_report("Image is already committed");
549 error_report("Error while committing image");
561 * Returns true iff the first sector pointed to by 'buf' contains at least
564 * 'pnum' is set to the number of sectors (including and immediately following
565 * the first one) that are known to be in the same allocated/unallocated state.
567 static int is_allocated_sectors(const uint8_t *buf
, int n
, int *pnum
)
576 is_zero
= buffer_is_zero(buf
, 512);
577 for(i
= 1; i
< n
; i
++) {
579 if (is_zero
!= buffer_is_zero(buf
, 512)) {
588 * Like is_allocated_sectors, but if the buffer starts with a used sector,
589 * up to 'min' consecutive sectors containing zeros are ignored. This avoids
590 * breaking up write requests for only small sparse areas.
592 static int is_allocated_sectors_min(const uint8_t *buf
, int n
, int *pnum
,
596 int num_checked
, num_used
;
602 ret
= is_allocated_sectors(buf
, n
, pnum
);
608 buf
+= BDRV_SECTOR_SIZE
* *pnum
;
610 num_checked
= num_used
;
613 ret
= is_allocated_sectors(buf
, n
, pnum
);
615 buf
+= BDRV_SECTOR_SIZE
* *pnum
;
617 num_checked
+= *pnum
;
619 num_used
= num_checked
;
620 } else if (*pnum
>= min
) {
630 * Compares two buffers sector by sector. Returns 0 if the first sector of both
631 * buffers matches, non-zero otherwise.
633 * pnum is set to the number of sectors (including and immediately following
634 * the first one) that are known to have the same comparison result
636 static int compare_sectors(const uint8_t *buf1
, const uint8_t *buf2
, int n
,
646 res
= !!memcmp(buf1
, buf2
, 512);
647 for(i
= 1; i
< n
; i
++) {
651 if (!!memcmp(buf1
, buf2
, 512) != res
) {
660 #define IO_BUF_SIZE (2 * 1024 * 1024)
662 static int img_convert(int argc
, char **argv
)
664 int c
, ret
= 0, n
, n1
, bs_n
, bs_i
, compress
, cluster_size
, cluster_sectors
;
665 int progress
= 0, flags
;
666 const char *fmt
, *out_fmt
, *cache
, *out_baseimg
, *out_filename
;
667 BlockDriver
*drv
, *proto_drv
;
668 BlockDriverState
**bs
= NULL
, *out_bs
= NULL
;
669 int64_t total_sectors
, nb_sectors
, sector_num
, bs_offset
;
671 uint8_t * buf
= NULL
;
674 QEMUOptionParameter
*param
= NULL
, *create_options
= NULL
;
675 QEMUOptionParameter
*out_baseimg_param
;
676 char *options
= NULL
;
677 const char *snapshot_name
= NULL
;
678 float local_progress
= 0;
679 int min_sparse
= 8; /* Need at least 4k of zeros for sparse detection */
687 c
= getopt(argc
, argv
, "f:O:B:s:hce6o:pS:t:");
703 out_baseimg
= optarg
;
709 error_report("option -e is deprecated, please use \'-o "
710 "encryption\' instead!");
713 error_report("option -6 is deprecated, please use \'-o "
714 "compat6\' instead!");
720 snapshot_name
= optarg
;
726 sval
= strtosz_suffix(optarg
, &end
, STRTOSZ_DEFSUFFIX_B
);
727 if (sval
< 0 || *end
) {
728 error_report("Invalid minimum zero buffer size for sparse output specified");
732 min_sparse
= sval
/ BDRV_SECTOR_SIZE
;
744 bs_n
= argc
- optind
- 1;
749 out_filename
= argv
[argc
- 1];
751 /* Initialize before goto out */
752 qemu_progress_init(progress
, 2.0);
754 if (options
&& is_help_option(options
)) {
755 ret
= print_block_option_help(out_filename
, out_fmt
);
759 if (bs_n
> 1 && out_baseimg
) {
760 error_report("-B makes no sense when concatenating multiple input "
766 qemu_progress_print(0, 100);
768 bs
= g_malloc0(bs_n
* sizeof(BlockDriverState
*));
771 for (bs_i
= 0; bs_i
< bs_n
; bs_i
++) {
772 bs
[bs_i
] = bdrv_new_open(argv
[optind
+ bs_i
], fmt
, BDRV_O_FLAGS
, true);
774 error_report("Could not open '%s'", argv
[optind
+ bs_i
]);
778 bdrv_get_geometry(bs
[bs_i
], &bs_sectors
);
779 total_sectors
+= bs_sectors
;
782 if (snapshot_name
!= NULL
) {
784 error_report("No support for concatenating multiple snapshot");
788 if (bdrv_snapshot_load_tmp(bs
[0], snapshot_name
) < 0) {
789 error_report("Failed to load snapshot");
795 /* Find driver and parse its options */
796 drv
= bdrv_find_format(out_fmt
);
798 error_report("Unknown file format '%s'", out_fmt
);
803 proto_drv
= bdrv_find_protocol(out_filename
);
805 error_report("Unknown protocol '%s'", out_filename
);
810 create_options
= append_option_parameters(create_options
,
811 drv
->create_options
);
812 create_options
= append_option_parameters(create_options
,
813 proto_drv
->create_options
);
816 param
= parse_option_parameters(options
, create_options
, param
);
818 error_report("Invalid options for file format '%s'.", out_fmt
);
823 param
= parse_option_parameters("", create_options
, param
);
826 set_option_parameter_int(param
, BLOCK_OPT_SIZE
, total_sectors
* 512);
827 ret
= add_old_style_options(out_fmt
, param
, out_baseimg
, NULL
);
832 /* Get backing file name if -o backing_file was used */
833 out_baseimg_param
= get_option_parameter(param
, BLOCK_OPT_BACKING_FILE
);
834 if (out_baseimg_param
) {
835 out_baseimg
= out_baseimg_param
->value
.s
;
838 /* Check if compression is supported */
840 QEMUOptionParameter
*encryption
=
841 get_option_parameter(param
, BLOCK_OPT_ENCRYPT
);
842 QEMUOptionParameter
*preallocation
=
843 get_option_parameter(param
, BLOCK_OPT_PREALLOC
);
845 if (!drv
->bdrv_write_compressed
) {
846 error_report("Compression not supported for this file format");
851 if (encryption
&& encryption
->value
.n
) {
852 error_report("Compression and encryption not supported at "
858 if (preallocation
&& preallocation
->value
.s
859 && strcmp(preallocation
->value
.s
, "off"))
861 error_report("Compression and preallocation not supported at "
868 /* Create the new image */
869 ret
= bdrv_create(drv
, out_filename
, param
);
871 if (ret
== -ENOTSUP
) {
872 error_report("Formatting not supported for file format '%s'",
874 } else if (ret
== -EFBIG
) {
875 error_report("The image size is too large for file format '%s'",
878 error_report("%s: error while converting %s: %s",
879 out_filename
, out_fmt
, strerror(-ret
));
885 ret
= bdrv_parse_cache_flags(cache
, &flags
);
887 error_report("Invalid cache option: %s", cache
);
891 out_bs
= bdrv_new_open(out_filename
, out_fmt
, flags
, true);
899 bdrv_get_geometry(bs
[0], &bs_sectors
);
900 buf
= qemu_blockalign(out_bs
, IO_BUF_SIZE
);
903 ret
= bdrv_get_info(out_bs
, &bdi
);
905 error_report("could not get block driver info");
908 cluster_size
= bdi
.cluster_size
;
909 if (cluster_size
<= 0 || cluster_size
> IO_BUF_SIZE
) {
910 error_report("invalid cluster size");
914 cluster_sectors
= cluster_size
>> 9;
917 nb_sectors
= total_sectors
;
918 if (nb_sectors
!= 0) {
919 local_progress
= (float)100 /
920 (nb_sectors
/ MIN(nb_sectors
, cluster_sectors
));
928 nb_sectors
= total_sectors
- sector_num
;
931 if (nb_sectors
>= cluster_sectors
)
936 bs_num
= sector_num
- bs_offset
;
937 assert (bs_num
>= 0);
940 while (remainder
> 0) {
942 while (bs_num
== bs_sectors
) {
944 assert (bs_i
< bs_n
);
945 bs_offset
+= bs_sectors
;
946 bdrv_get_geometry(bs
[bs_i
], &bs_sectors
);
948 /* printf("changing part: sector_num=%" PRId64 ", "
949 "bs_i=%d, bs_offset=%" PRId64 ", bs_sectors=%" PRId64
950 "\n", sector_num, bs_i, bs_offset, bs_sectors); */
952 assert (bs_num
< bs_sectors
);
954 nlow
= (remainder
> bs_sectors
- bs_num
) ? bs_sectors
- bs_num
: remainder
;
956 ret
= bdrv_read(bs
[bs_i
], bs_num
, buf2
, nlow
);
958 error_report("error while reading sector %" PRId64
": %s",
959 bs_num
, strerror(-ret
));
968 assert (remainder
== 0);
970 if (n
< cluster_sectors
) {
971 memset(buf
+ n
* 512, 0, cluster_size
- n
* 512);
973 if (!buffer_is_zero(buf
, cluster_size
)) {
974 ret
= bdrv_write_compressed(out_bs
, sector_num
, buf
,
977 error_report("error while compressing sector %" PRId64
978 ": %s", sector_num
, strerror(-ret
));
983 qemu_progress_print(local_progress
, 100);
985 /* signal EOF to align */
986 bdrv_write_compressed(out_bs
, 0, NULL
, 0);
988 int has_zero_init
= bdrv_has_zero_init(out_bs
);
990 sector_num
= 0; // total number of sectors converted so far
991 nb_sectors
= total_sectors
- sector_num
;
992 if (nb_sectors
!= 0) {
993 local_progress
= (float)100 /
994 (nb_sectors
/ MIN(nb_sectors
, IO_BUF_SIZE
/ 512));
998 nb_sectors
= total_sectors
- sector_num
;
999 if (nb_sectors
<= 0) {
1002 if (nb_sectors
>= (IO_BUF_SIZE
/ 512)) {
1003 n
= (IO_BUF_SIZE
/ 512);
1008 while (sector_num
- bs_offset
>= bs_sectors
) {
1010 assert (bs_i
< bs_n
);
1011 bs_offset
+= bs_sectors
;
1012 bdrv_get_geometry(bs
[bs_i
], &bs_sectors
);
1013 /* printf("changing part: sector_num=%" PRId64 ", bs_i=%d, "
1014 "bs_offset=%" PRId64 ", bs_sectors=%" PRId64 "\n",
1015 sector_num, bs_i, bs_offset, bs_sectors); */
1018 if (n
> bs_offset
+ bs_sectors
- sector_num
) {
1019 n
= bs_offset
+ bs_sectors
- sector_num
;
1022 if (has_zero_init
) {
1023 /* If the output image is being created as a copy on write image,
1024 assume that sectors which are unallocated in the input image
1025 are present in both the output's and input's base images (no
1026 need to copy them). */
1028 if (!bdrv_is_allocated(bs
[bs_i
], sector_num
- bs_offset
,
1033 /* The next 'n1' sectors are allocated in the input image. Copy
1034 only those as they may be followed by unallocated sectors. */
1041 ret
= bdrv_read(bs
[bs_i
], sector_num
- bs_offset
, buf
, n
);
1043 error_report("error while reading sector %" PRId64
": %s",
1044 sector_num
- bs_offset
, strerror(-ret
));
1047 /* NOTE: at the same time we convert, we do not write zero
1048 sectors to have a chance to compress the image. Ideally, we
1049 should add a specific call to have the info to go faster */
1052 /* If the output image is being created as a copy on write image,
1053 copy all sectors even the ones containing only NUL bytes,
1054 because they may differ from the sectors in the base image.
1056 If the output is to a host device, we also write out
1057 sectors that are entirely 0, since whatever data was
1058 already there is garbage, not 0s. */
1059 if (!has_zero_init
|| out_baseimg
||
1060 is_allocated_sectors_min(buf1
, n
, &n1
, min_sparse
)) {
1061 ret
= bdrv_write(out_bs
, sector_num
, buf1
, n1
);
1063 error_report("error while writing sector %" PRId64
1064 ": %s", sector_num
, strerror(-ret
));
1072 qemu_progress_print(local_progress
, 100);
1076 qemu_progress_end();
1077 free_option_parameters(create_options
);
1078 free_option_parameters(param
);
1081 bdrv_delete(out_bs
);
1084 for (bs_i
= 0; bs_i
< bs_n
; bs_i
++) {
1086 bdrv_delete(bs
[bs_i
]);
1098 static void dump_snapshots(BlockDriverState
*bs
)
1100 QEMUSnapshotInfo
*sn_tab
, *sn
;
1104 nb_sns
= bdrv_snapshot_list(bs
, &sn_tab
);
1107 printf("Snapshot list:\n");
1108 printf("%s\n", bdrv_snapshot_dump(buf
, sizeof(buf
), NULL
));
1109 for(i
= 0; i
< nb_sns
; i
++) {
1111 printf("%s\n", bdrv_snapshot_dump(buf
, sizeof(buf
), sn
));
1116 static void dump_json_image_info_list(ImageInfoList
*list
)
1120 QmpOutputVisitor
*ov
= qmp_output_visitor_new();
1122 visit_type_ImageInfoList(qmp_output_get_visitor(ov
),
1123 &list
, NULL
, &errp
);
1124 obj
= qmp_output_get_qobject(ov
);
1125 str
= qobject_to_json_pretty(obj
);
1126 assert(str
!= NULL
);
1127 printf("%s\n", qstring_get_str(str
));
1128 qobject_decref(obj
);
1129 qmp_output_visitor_cleanup(ov
);
1133 static void collect_snapshots(BlockDriverState
*bs
, ImageInfo
*info
)
1136 QEMUSnapshotInfo
*sn_tab
= NULL
;
1137 SnapshotInfoList
*info_list
, *cur_item
= NULL
;
1138 sn_count
= bdrv_snapshot_list(bs
, &sn_tab
);
1140 for (i
= 0; i
< sn_count
; i
++) {
1141 info
->has_snapshots
= true;
1142 info_list
= g_new0(SnapshotInfoList
, 1);
1144 info_list
->value
= g_new0(SnapshotInfo
, 1);
1145 info_list
->value
->id
= g_strdup(sn_tab
[i
].id_str
);
1146 info_list
->value
->name
= g_strdup(sn_tab
[i
].name
);
1147 info_list
->value
->vm_state_size
= sn_tab
[i
].vm_state_size
;
1148 info_list
->value
->date_sec
= sn_tab
[i
].date_sec
;
1149 info_list
->value
->date_nsec
= sn_tab
[i
].date_nsec
;
1150 info_list
->value
->vm_clock_sec
= sn_tab
[i
].vm_clock_nsec
/ 1000000000;
1151 info_list
->value
->vm_clock_nsec
= sn_tab
[i
].vm_clock_nsec
% 1000000000;
1153 /* XXX: waiting for the qapi to support qemu-queue.h types */
1155 info
->snapshots
= cur_item
= info_list
;
1157 cur_item
->next
= info_list
;
1158 cur_item
= info_list
;
1166 static void dump_json_image_info(ImageInfo
*info
)
1170 QmpOutputVisitor
*ov
= qmp_output_visitor_new();
1172 visit_type_ImageInfo(qmp_output_get_visitor(ov
),
1173 &info
, NULL
, &errp
);
1174 obj
= qmp_output_get_qobject(ov
);
1175 str
= qobject_to_json_pretty(obj
);
1176 assert(str
!= NULL
);
1177 printf("%s\n", qstring_get_str(str
));
1178 qobject_decref(obj
);
1179 qmp_output_visitor_cleanup(ov
);
1183 static void collect_image_info(BlockDriverState
*bs
,
1185 const char *filename
,
1188 uint64_t total_sectors
;
1189 char backing_filename
[1024];
1190 char backing_filename2
[1024];
1191 BlockDriverInfo bdi
;
1193 bdrv_get_geometry(bs
, &total_sectors
);
1195 info
->filename
= g_strdup(filename
);
1196 info
->format
= g_strdup(bdrv_get_format_name(bs
));
1197 info
->virtual_size
= total_sectors
* 512;
1198 info
->actual_size
= bdrv_get_allocated_file_size(bs
);
1199 info
->has_actual_size
= info
->actual_size
>= 0;
1200 if (bdrv_is_encrypted(bs
)) {
1201 info
->encrypted
= true;
1202 info
->has_encrypted
= true;
1204 if (bdrv_get_info(bs
, &bdi
) >= 0) {
1205 if (bdi
.cluster_size
!= 0) {
1206 info
->cluster_size
= bdi
.cluster_size
;
1207 info
->has_cluster_size
= true;
1209 info
->dirty_flag
= bdi
.is_dirty
;
1210 info
->has_dirty_flag
= true;
1212 bdrv_get_backing_filename(bs
, backing_filename
, sizeof(backing_filename
));
1213 if (backing_filename
[0] != '\0') {
1214 info
->backing_filename
= g_strdup(backing_filename
);
1215 info
->has_backing_filename
= true;
1216 bdrv_get_full_backing_filename(bs
, backing_filename2
,
1217 sizeof(backing_filename2
));
1219 if (strcmp(backing_filename
, backing_filename2
) != 0) {
1220 info
->full_backing_filename
=
1221 g_strdup(backing_filename2
);
1222 info
->has_full_backing_filename
= true;
1225 if (bs
->backing_format
[0]) {
1226 info
->backing_filename_format
= g_strdup(bs
->backing_format
);
1227 info
->has_backing_filename_format
= true;
1232 static void dump_human_image_info(ImageInfo
*info
)
1234 char size_buf
[128], dsize_buf
[128];
1235 if (!info
->has_actual_size
) {
1236 snprintf(dsize_buf
, sizeof(dsize_buf
), "unavailable");
1238 get_human_readable_size(dsize_buf
, sizeof(dsize_buf
),
1241 get_human_readable_size(size_buf
, sizeof(size_buf
), info
->virtual_size
);
1242 printf("image: %s\n"
1244 "virtual size: %s (%" PRId64
" bytes)\n"
1246 info
->filename
, info
->format
, size_buf
,
1250 if (info
->has_encrypted
&& info
->encrypted
) {
1251 printf("encrypted: yes\n");
1254 if (info
->has_cluster_size
) {
1255 printf("cluster_size: %" PRId64
"\n", info
->cluster_size
);
1258 if (info
->has_dirty_flag
&& info
->dirty_flag
) {
1259 printf("cleanly shut down: no\n");
1262 if (info
->has_backing_filename
) {
1263 printf("backing file: %s", info
->backing_filename
);
1264 if (info
->has_full_backing_filename
) {
1265 printf(" (actual path: %s)", info
->full_backing_filename
);
1268 if (info
->has_backing_filename_format
) {
1269 printf("backing file format: %s\n", info
->backing_filename_format
);
1273 if (info
->has_snapshots
) {
1274 SnapshotInfoList
*elem
;
1277 printf("Snapshot list:\n");
1278 printf("%s\n", bdrv_snapshot_dump(buf
, sizeof(buf
), NULL
));
1280 /* Ideally bdrv_snapshot_dump() would operate on SnapshotInfoList but
1281 * we convert to the block layer's native QEMUSnapshotInfo for now.
1283 for (elem
= info
->snapshots
; elem
; elem
= elem
->next
) {
1284 QEMUSnapshotInfo sn
= {
1285 .vm_state_size
= elem
->value
->vm_state_size
,
1286 .date_sec
= elem
->value
->date_sec
,
1287 .date_nsec
= elem
->value
->date_nsec
,
1288 .vm_clock_nsec
= elem
->value
->vm_clock_sec
* 1000000000ULL +
1289 elem
->value
->vm_clock_nsec
,
1292 pstrcpy(sn
.id_str
, sizeof(sn
.id_str
), elem
->value
->id
);
1293 pstrcpy(sn
.name
, sizeof(sn
.name
), elem
->value
->name
);
1294 printf("%s\n", bdrv_snapshot_dump(buf
, sizeof(buf
), &sn
));
1299 static void dump_human_image_info_list(ImageInfoList
*list
)
1301 ImageInfoList
*elem
;
1304 for (elem
= list
; elem
; elem
= elem
->next
) {
1310 dump_human_image_info(elem
->value
);
1314 static gboolean
str_equal_func(gconstpointer a
, gconstpointer b
)
1316 return strcmp(a
, b
) == 0;
1320 * Open an image file chain and return an ImageInfoList
1322 * @filename: topmost image filename
1323 * @fmt: topmost image format (may be NULL to autodetect)
1324 * @chain: true - enumerate entire backing file chain
1325 * false - only topmost image file
1327 * Returns a list of ImageInfo objects or NULL if there was an error opening an
1328 * image file. If there was an error a message will have been printed to
1331 static ImageInfoList
*collect_image_info_list(const char *filename
,
1335 ImageInfoList
*head
= NULL
;
1336 ImageInfoList
**last
= &head
;
1337 GHashTable
*filenames
;
1339 filenames
= g_hash_table_new_full(g_str_hash
, str_equal_func
, NULL
, NULL
);
1342 BlockDriverState
*bs
;
1344 ImageInfoList
*elem
;
1346 if (g_hash_table_lookup_extended(filenames
, filename
, NULL
, NULL
)) {
1347 error_report("Backing file '%s' creates an infinite loop.",
1351 g_hash_table_insert(filenames
, (gpointer
)filename
, NULL
);
1353 bs
= bdrv_new_open(filename
, fmt
, BDRV_O_FLAGS
| BDRV_O_NO_BACKING
,
1359 info
= g_new0(ImageInfo
, 1);
1360 collect_image_info(bs
, info
, filename
, fmt
);
1361 collect_snapshots(bs
, info
);
1363 elem
= g_new0(ImageInfoList
, 1);
1370 filename
= fmt
= NULL
;
1372 if (info
->has_full_backing_filename
) {
1373 filename
= info
->full_backing_filename
;
1374 } else if (info
->has_backing_filename
) {
1375 filename
= info
->backing_filename
;
1377 if (info
->has_backing_filename_format
) {
1378 fmt
= info
->backing_filename_format
;
1382 g_hash_table_destroy(filenames
);
1386 qapi_free_ImageInfoList(head
);
1387 g_hash_table_destroy(filenames
);
1392 OPTION_OUTPUT
= 256,
1393 OPTION_BACKING_CHAIN
= 257,
1396 typedef enum OutputFormat
{
1401 static int img_info(int argc
, char **argv
)
1404 OutputFormat output_format
= OFORMAT_HUMAN
;
1406 const char *filename
, *fmt
, *output
;
1407 ImageInfoList
*list
;
1412 int option_index
= 0;
1413 static const struct option long_options
[] = {
1414 {"help", no_argument
, 0, 'h'},
1415 {"format", required_argument
, 0, 'f'},
1416 {"output", required_argument
, 0, OPTION_OUTPUT
},
1417 {"backing-chain", no_argument
, 0, OPTION_BACKING_CHAIN
},
1420 c
= getopt_long(argc
, argv
, "f:h",
1421 long_options
, &option_index
);
1436 case OPTION_BACKING_CHAIN
:
1441 if (optind
>= argc
) {
1444 filename
= argv
[optind
++];
1446 if (output
&& !strcmp(output
, "json")) {
1447 output_format
= OFORMAT_JSON
;
1448 } else if (output
&& !strcmp(output
, "human")) {
1449 output_format
= OFORMAT_HUMAN
;
1450 } else if (output
) {
1451 error_report("--output must be used with human or json as argument.");
1455 list
= collect_image_info_list(filename
, fmt
, chain
);
1460 switch (output_format
) {
1462 dump_human_image_info_list(list
);
1466 dump_json_image_info_list(list
);
1468 dump_json_image_info(list
->value
);
1473 qapi_free_ImageInfoList(list
);
1477 #define SNAPSHOT_LIST 1
1478 #define SNAPSHOT_CREATE 2
1479 #define SNAPSHOT_APPLY 3
1480 #define SNAPSHOT_DELETE 4
1482 static int img_snapshot(int argc
, char **argv
)
1484 BlockDriverState
*bs
;
1485 QEMUSnapshotInfo sn
;
1486 char *filename
, *snapshot_name
= NULL
;
1487 int c
, ret
= 0, bdrv_oflags
;
1491 bdrv_oflags
= BDRV_O_FLAGS
| BDRV_O_RDWR
;
1492 /* Parse commandline parameters */
1494 c
= getopt(argc
, argv
, "la:c:d:h");
1508 action
= SNAPSHOT_LIST
;
1509 bdrv_oflags
&= ~BDRV_O_RDWR
; /* no need for RW */
1516 action
= SNAPSHOT_APPLY
;
1517 snapshot_name
= optarg
;
1524 action
= SNAPSHOT_CREATE
;
1525 snapshot_name
= optarg
;
1532 action
= SNAPSHOT_DELETE
;
1533 snapshot_name
= optarg
;
1538 if (optind
>= argc
) {
1541 filename
= argv
[optind
++];
1543 /* Open the image */
1544 bs
= bdrv_new_open(filename
, NULL
, bdrv_oflags
, true);
1549 /* Perform the requested action */
1555 case SNAPSHOT_CREATE
:
1556 memset(&sn
, 0, sizeof(sn
));
1557 pstrcpy(sn
.name
, sizeof(sn
.name
), snapshot_name
);
1559 qemu_gettimeofday(&tv
);
1560 sn
.date_sec
= tv
.tv_sec
;
1561 sn
.date_nsec
= tv
.tv_usec
* 1000;
1563 ret
= bdrv_snapshot_create(bs
, &sn
);
1565 error_report("Could not create snapshot '%s': %d (%s)",
1566 snapshot_name
, ret
, strerror(-ret
));
1570 case SNAPSHOT_APPLY
:
1571 ret
= bdrv_snapshot_goto(bs
, snapshot_name
);
1573 error_report("Could not apply snapshot '%s': %d (%s)",
1574 snapshot_name
, ret
, strerror(-ret
));
1578 case SNAPSHOT_DELETE
:
1579 ret
= bdrv_snapshot_delete(bs
, snapshot_name
);
1581 error_report("Could not delete snapshot '%s': %d (%s)",
1582 snapshot_name
, ret
, strerror(-ret
));
1595 static int img_rebase(int argc
, char **argv
)
1597 BlockDriverState
*bs
, *bs_old_backing
= NULL
, *bs_new_backing
= NULL
;
1598 BlockDriver
*old_backing_drv
, *new_backing_drv
;
1600 const char *fmt
, *cache
, *out_basefmt
, *out_baseimg
;
1605 /* Parse commandline parameters */
1607 cache
= BDRV_DEFAULT_CACHE
;
1611 c
= getopt(argc
, argv
, "uhf:F:b:pt:");
1624 out_basefmt
= optarg
;
1627 out_baseimg
= optarg
;
1641 if ((optind
>= argc
) || (!unsafe
&& !out_baseimg
)) {
1644 filename
= argv
[optind
++];
1646 qemu_progress_init(progress
, 2.0);
1647 qemu_progress_print(0, 100);
1649 flags
= BDRV_O_RDWR
| (unsafe
? BDRV_O_NO_BACKING
: 0);
1650 ret
= bdrv_parse_cache_flags(cache
, &flags
);
1652 error_report("Invalid cache option: %s", cache
);
1659 * Ignore the old backing file for unsafe rebase in case we want to correct
1660 * the reference to a renamed or moved backing file.
1662 bs
= bdrv_new_open(filename
, fmt
, flags
, true);
1667 /* Find the right drivers for the backing files */
1668 old_backing_drv
= NULL
;
1669 new_backing_drv
= NULL
;
1671 if (!unsafe
&& bs
->backing_format
[0] != '\0') {
1672 old_backing_drv
= bdrv_find_format(bs
->backing_format
);
1673 if (old_backing_drv
== NULL
) {
1674 error_report("Invalid format name: '%s'", bs
->backing_format
);
1680 if (out_basefmt
!= NULL
) {
1681 new_backing_drv
= bdrv_find_format(out_basefmt
);
1682 if (new_backing_drv
== NULL
) {
1683 error_report("Invalid format name: '%s'", out_basefmt
);
1689 /* For safe rebasing we need to compare old and new backing file */
1691 /* Make the compiler happy */
1692 bs_old_backing
= NULL
;
1693 bs_new_backing
= NULL
;
1695 char backing_name
[1024];
1697 bs_old_backing
= bdrv_new("old_backing");
1698 bdrv_get_backing_filename(bs
, backing_name
, sizeof(backing_name
));
1699 ret
= bdrv_open(bs_old_backing
, backing_name
, BDRV_O_FLAGS
,
1702 error_report("Could not open old backing file '%s'", backing_name
);
1705 if (out_baseimg
[0]) {
1706 bs_new_backing
= bdrv_new("new_backing");
1707 ret
= bdrv_open(bs_new_backing
, out_baseimg
, BDRV_O_FLAGS
,
1710 error_report("Could not open new backing file '%s'",
1718 * Check each unallocated cluster in the COW file. If it is unallocated,
1719 * accesses go to the backing file. We must therefore compare this cluster
1720 * in the old and new backing file, and if they differ we need to copy it
1721 * from the old backing file into the COW file.
1723 * If qemu-img crashes during this step, no harm is done. The content of
1724 * the image is the same as the original one at any time.
1727 uint64_t num_sectors
;
1728 uint64_t old_backing_num_sectors
;
1729 uint64_t new_backing_num_sectors
= 0;
1734 float local_progress
= 0;
1736 buf_old
= qemu_blockalign(bs
, IO_BUF_SIZE
);
1737 buf_new
= qemu_blockalign(bs
, IO_BUF_SIZE
);
1739 bdrv_get_geometry(bs
, &num_sectors
);
1740 bdrv_get_geometry(bs_old_backing
, &old_backing_num_sectors
);
1741 if (bs_new_backing
) {
1742 bdrv_get_geometry(bs_new_backing
, &new_backing_num_sectors
);
1745 if (num_sectors
!= 0) {
1746 local_progress
= (float)100 /
1747 (num_sectors
/ MIN(num_sectors
, IO_BUF_SIZE
/ 512));
1750 for (sector
= 0; sector
< num_sectors
; sector
+= n
) {
1752 /* How many sectors can we handle with the next read? */
1753 if (sector
+ (IO_BUF_SIZE
/ 512) <= num_sectors
) {
1754 n
= (IO_BUF_SIZE
/ 512);
1756 n
= num_sectors
- sector
;
1759 /* If the cluster is allocated, we don't need to take action */
1760 ret
= bdrv_is_allocated(bs
, sector
, n
, &n
);
1766 * Read old and new backing file and take into consideration that
1767 * backing files may be smaller than the COW image.
1769 if (sector
>= old_backing_num_sectors
) {
1770 memset(buf_old
, 0, n
* BDRV_SECTOR_SIZE
);
1772 if (sector
+ n
> old_backing_num_sectors
) {
1773 n
= old_backing_num_sectors
- sector
;
1776 ret
= bdrv_read(bs_old_backing
, sector
, buf_old
, n
);
1778 error_report("error while reading from old backing file");
1783 if (sector
>= new_backing_num_sectors
|| !bs_new_backing
) {
1784 memset(buf_new
, 0, n
* BDRV_SECTOR_SIZE
);
1786 if (sector
+ n
> new_backing_num_sectors
) {
1787 n
= new_backing_num_sectors
- sector
;
1790 ret
= bdrv_read(bs_new_backing
, sector
, buf_new
, n
);
1792 error_report("error while reading from new backing file");
1797 /* If they differ, we need to write to the COW file */
1798 uint64_t written
= 0;
1800 while (written
< n
) {
1803 if (compare_sectors(buf_old
+ written
* 512,
1804 buf_new
+ written
* 512, n
- written
, &pnum
))
1806 ret
= bdrv_write(bs
, sector
+ written
,
1807 buf_old
+ written
* 512, pnum
);
1809 error_report("Error while writing to COW image: %s",
1817 qemu_progress_print(local_progress
, 100);
1820 qemu_vfree(buf_old
);
1821 qemu_vfree(buf_new
);
1825 * Change the backing file. All clusters that are different from the old
1826 * backing file are overwritten in the COW file now, so the visible content
1827 * doesn't change when we switch the backing file.
1829 if (out_baseimg
&& *out_baseimg
) {
1830 ret
= bdrv_change_backing_file(bs
, out_baseimg
, out_basefmt
);
1832 ret
= bdrv_change_backing_file(bs
, NULL
, NULL
);
1835 if (ret
== -ENOSPC
) {
1836 error_report("Could not change the backing file to '%s': No "
1837 "space left in the file header", out_baseimg
);
1838 } else if (ret
< 0) {
1839 error_report("Could not change the backing file to '%s': %s",
1840 out_baseimg
, strerror(-ret
));
1843 qemu_progress_print(100, 0);
1845 * TODO At this point it is possible to check if any clusters that are
1846 * allocated in the COW file are the same in the backing file. If so, they
1847 * could be dropped from the COW file. Don't do this before switching the
1848 * backing file, in case of a crash this would lead to corruption.
1851 qemu_progress_end();
1854 if (bs_old_backing
!= NULL
) {
1855 bdrv_delete(bs_old_backing
);
1857 if (bs_new_backing
!= NULL
) {
1858 bdrv_delete(bs_new_backing
);
1869 static int img_resize(int argc
, char **argv
)
1871 int c
, ret
, relative
;
1872 const char *filename
, *fmt
, *size
;
1873 int64_t n
, total_size
;
1874 BlockDriverState
*bs
= NULL
;
1876 static QemuOptsList resize_options
= {
1877 .name
= "resize_options",
1878 .head
= QTAILQ_HEAD_INITIALIZER(resize_options
.head
),
1881 .name
= BLOCK_OPT_SIZE
,
1882 .type
= QEMU_OPT_SIZE
,
1883 .help
= "Virtual disk size"
1890 /* Remove size from argv manually so that negative numbers are not treated
1891 * as options by getopt. */
1897 size
= argv
[--argc
];
1899 /* Parse getopt arguments */
1902 c
= getopt(argc
, argv
, "f:h");
1916 if (optind
>= argc
) {
1919 filename
= argv
[optind
++];
1921 /* Choose grow, shrink, or absolute resize mode */
1937 param
= qemu_opts_create_nofail(&resize_options
);
1938 if (qemu_opt_set(param
, BLOCK_OPT_SIZE
, size
)) {
1939 /* Error message already printed when size parsing fails */
1941 qemu_opts_del(param
);
1944 n
= qemu_opt_get_size(param
, BLOCK_OPT_SIZE
, 0);
1945 qemu_opts_del(param
);
1947 bs
= bdrv_new_open(filename
, fmt
, BDRV_O_FLAGS
| BDRV_O_RDWR
, true);
1954 total_size
= bdrv_getlength(bs
) + n
* relative
;
1958 if (total_size
<= 0) {
1959 error_report("New image size must be positive");
1964 ret
= bdrv_truncate(bs
, total_size
);
1967 printf("Image resized.\n");
1970 error_report("This image does not support resize");
1973 error_report("Image is read-only");
1976 error_report("Error resizing image (%d)", -ret
);
1989 static const img_cmd_t img_cmds
[] = {
1990 #define DEF(option, callback, arg_string) \
1991 { option, callback },
1992 #include "qemu-img-cmds.h"
1998 int main(int argc
, char **argv
)
2000 const img_cmd_t
*cmd
;
2001 const char *cmdname
;
2003 error_set_progname(argv
[0]);
2005 qemu_init_main_loop();
2012 /* find the command */
2013 for(cmd
= img_cmds
; cmd
->name
!= NULL
; cmd
++) {
2014 if (!strcmp(cmdname
, cmd
->name
)) {
2015 return cmd
->handler(argc
, argv
);