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"
33 #include "block/qapi.h"
42 typedef struct img_cmd_t {
44 int (*handler)(int argc, char **argv);
49 OPTION_BACKING_CHAIN = 257,
52 typedef enum OutputFormat {
57 /* Default to cache=writeback as data integrity is not important for qemu-tcg. */
58 #define BDRV_O_FLAGS BDRV_O_CACHE_WB
59 #define BDRV_DEFAULT_CACHE "writeback"
61 static void format_print(void *opaque, const char *name)
66 /* Please keep in synch with qemu-img.texi */
67 static void help(void)
69 const char *help_msg =
70 "qemu-img version " QEMU_VERSION ", Copyright (c) 2004-2008 Fabrice Bellard\n"
71 "usage: qemu-img command [command options]\n"
72 "QEMU disk image utility\n"
75 #define DEF(option, callback, arg_string) \
77 #include "qemu-img-cmds.h"
81 "Command parameters:\n"
82 " 'filename' is a disk image filename\n"
83 " 'fmt' is the disk image format. It is guessed automatically in most cases\n"
84 " 'cache' is the cache mode used to write the output disk image, the valid\n"
85 " options are: 'none', 'writeback' (default, except for convert), 'writethrough',\n"
86 " 'directsync' and 'unsafe' (default for convert)\n"
87 " 'size' is the disk image size in bytes. Optional suffixes\n"
88 " 'k' or 'K' (kilobyte, 1024), 'M' (megabyte, 1024k), 'G' (gigabyte, 1024M),\n"
89 " 'T' (terabyte, 1024G), 'P' (petabyte, 1024T) and 'E' (exabyte, 1024P) are\n"
90 " supported. 'b' is ignored.\n"
91 " 'output_filename' is the destination disk image filename\n"
92 " 'output_fmt' is the destination format\n"
93 " 'options' is a comma separated list of format specific options in a\n"
94 " name=value format. Use -o ? for an overview of the options supported by the\n"
96 " '-c' indicates that target image must be compressed (qcow format only)\n"
97 " '-u' enables unsafe rebasing. It is assumed that old and new backing file\n"
98 " match exactly. The image doesn't need a working backing file before\n"
99 " rebasing in this case (useful for renaming the backing file)\n"
100 " '-h' with or without a command shows this help and lists the supported formats\n"
101 " '-p' show progress of command (only certain commands)\n"
102 " '-q' use Quiet mode - do not print any output (except errors)\n"
103 " '-S' indicates the consecutive number of bytes (defaults to 4k) that must\n"
104 " contain only zeros for qemu-img to create a sparse image during\n"
105 " conversion. If the number of bytes is 0, the source will not be scanned for\n"
106 " unallocated or zero sectors, and the destination image will always be\n"
108 " images will always be fully allocated\n"
109 " '--output' takes the format in which the output must be done (human or json)\n"
110 " '-n' skips the target volume creation (useful if the volume is created\n"
111 " prior to running qemu-img)\n"
113 "Parameters to check subcommand:\n"
114 " '-r' tries to repair any inconsistencies that are found during the check.\n"
115 " '-r leaks' repairs only cluster leaks, whereas '-r all' fixes all\n"
116 " kinds of errors, with a higher risk of choosing the wrong fix or\n"
117 " hiding corruption that has already occurred.\n"
119 "Parameters to snapshot subcommand:\n"
120 " 'snapshot' is the name of the snapshot to create, apply or delete\n"
121 " '-a' applies a snapshot (revert disk to saved state)\n"
122 " '-c' creates a snapshot\n"
123 " '-d' deletes a snapshot\n"
124 " '-l' lists all snapshots in the given image\n"
126 "Parameters to compare subcommand:\n"
127 " '-f' first image format\n"
128 " '-F' second image format\n"
129 " '-s' run in Strict mode - fail on different image size or sector allocation\n";
131 printf("%s\nSupported formats:", help_msg);
132 bdrv_iterate_format(format_print, NULL);
137 static int GCC_FMT_ATTR(2, 3) qprintf(bool quiet, const char *fmt, ...)
143 ret = vprintf(fmt, args);
150 /* XXX: put correct support for win32 */
151 static int read_password(char *buf, int buf_size)
154 printf("Password: ");
161 if (i < (buf_size - 1))
172 static struct termios oldtty;
174 static void term_exit(void)
176 tcsetattr (0, TCSANOW, &oldtty);
179 static void term_init(void)
186 tty.c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP
187 |INLCR|IGNCR|ICRNL|IXON);
188 tty.c_oflag |= OPOST;
189 tty.c_lflag &= ~(ECHO|ECHONL|ICANON|IEXTEN);
190 tty.c_cflag &= ~(CSIZE|PARENB);
195 tcsetattr (0, TCSANOW, &tty);
200 static int read_password(char *buf, int buf_size)
205 printf("password: ");
210 ret = read(0, &ch, 1);
212 if (errno == EAGAIN || errno == EINTR) {
218 } else if (ret == 0) {
226 if (i < (buf_size - 1))
237 static int print_block_option_help(const char *filename, const char *fmt)
239 BlockDriver *drv, *proto_drv;
240 QEMUOptionParameter *create_options = NULL;
242 /* Find driver and parse its options */
243 drv = bdrv_find_format(fmt);
245 error_report("Unknown file format '%s'", fmt);
249 proto_drv = bdrv_find_protocol(filename, true);
251 error_report("Unknown protocol '%s'", filename);
255 create_options = append_option_parameters(create_options,
256 drv->create_options);
257 create_options = append_option_parameters(create_options,
258 proto_drv->create_options);
259 print_option_help(create_options);
260 free_option_parameters(create_options);
264 static BlockDriverState *bdrv_new_open(const char *filename,
270 BlockDriverState *bs;
273 Error *local_err = NULL;
276 bs = bdrv_new("image");
279 drv = bdrv_find_format(fmt);
281 error_report("Unknown file format '%s'", fmt);
288 ret = bdrv_open(bs, filename, NULL, flags, drv, &local_err);
290 error_report("Could not open '%s': %s", filename,
291 error_get_pretty(local_err));
292 error_free(local_err);
296 if (bdrv_is_encrypted(bs) && require_io) {
297 qprintf(quiet, "Disk image '%s' is encrypted.\n", filename);
298 if (read_password(password, sizeof(password)) < 0) {
299 error_report("No password given");
302 if (bdrv_set_key(bs, password) < 0) {
303 error_report("invalid password");
315 static int add_old_style_options(const char *fmt, QEMUOptionParameter *list,
316 const char *base_filename,
317 const char *base_fmt)
320 if (set_option_parameter(list, BLOCK_OPT_BACKING_FILE, base_filename)) {
321 error_report("Backing file not supported for file format '%s'",
327 if (set_option_parameter(list, BLOCK_OPT_BACKING_FMT, base_fmt)) {
328 error_report("Backing file format not supported for file "
336 static int img_create(int argc, char **argv)
339 uint64_t img_size = -1;
340 const char *fmt = "raw";
341 const char *base_fmt = NULL;
342 const char *filename;
343 const char *base_filename = NULL;
344 char *options = NULL;
345 Error *local_err = NULL;
349 c = getopt(argc, argv, "F:b:f:he6o:q");
362 base_filename = optarg;
368 error_report("option -e is deprecated, please use \'-o "
369 "encryption\' instead!");
372 error_report("option -6 is deprecated, please use \'-o "
373 "compat6\' instead!");
384 /* Get the filename */
385 if (optind >= argc) {
388 filename = argv[optind++];
390 /* Get image size, if specified */
394 sval = strtosz_suffix(argv[optind++], &end, STRTOSZ_DEFSUFFIX_B);
395 if (sval < 0 || *end) {
396 if (sval == -ERANGE) {
397 error_report("Image size must be less than 8 EiB!");
399 error_report("Invalid image size specified! You may use k, M, "
400 "G, T, P or E suffixes for ");
401 error_report("kilobytes, megabytes, gigabytes, terabytes, "
402 "petabytes and exabytes.");
406 img_size = (uint64_t)sval;
408 if (optind != argc) {
412 if (options && is_help_option(options)) {
413 return print_block_option_help(filename, fmt);
416 bdrv_img_create(filename, fmt, base_filename, base_fmt,
417 options, img_size, BDRV_O_FLAGS, &local_err, quiet);
418 if (error_is_set(&local_err)) {
419 error_report("%s: %s", filename, error_get_pretty(local_err));
420 error_free(local_err);
427 static void dump_json_image_check(ImageCheck *check, bool quiet)
431 QmpOutputVisitor *ov = qmp_output_visitor_new();
433 visit_type_ImageCheck(qmp_output_get_visitor(ov),
434 &check, NULL, &errp);
435 obj = qmp_output_get_qobject(ov);
436 str = qobject_to_json_pretty(obj);
438 qprintf(quiet, "%s\n", qstring_get_str(str));
440 qmp_output_visitor_cleanup(ov);
444 static void dump_human_image_check(ImageCheck *check, bool quiet)
446 if (!(check->corruptions || check->leaks || check->check_errors)) {
447 qprintf(quiet, "No errors were found on the image.\n");
449 if (check->corruptions) {
450 qprintf(quiet, "\n%" PRId64 " errors were found on the image.\n"
451 "Data may be corrupted, or further writes to the image "
458 "\n%" PRId64 " leaked clusters were found on the image.\n"
459 "This means waste of disk space, but no harm to data.\n",
463 if (check->check_errors) {
466 " internal errors have occurred during the check.\n",
467 check->check_errors);
471 if (check->total_clusters != 0 && check->allocated_clusters != 0) {
472 qprintf(quiet, "%" PRId64 "/%" PRId64 " = %0.2f%% allocated, "
473 "%0.2f%% fragmented, %0.2f%% compressed clusters\n",
474 check->allocated_clusters, check->total_clusters,
475 check->allocated_clusters * 100.0 / check->total_clusters,
476 check->fragmented_clusters * 100.0 / check->allocated_clusters,
477 check->compressed_clusters * 100.0 /
478 check->allocated_clusters);
481 if (check->image_end_offset) {
483 "Image end offset: %" PRId64 "\n", check->image_end_offset);
487 static int collect_image_check(BlockDriverState *bs,
489 const char *filename,
494 BdrvCheckResult result;
496 ret = bdrv_check(bs, &result, fix);
501 check->filename = g_strdup(filename);
502 check->format = g_strdup(bdrv_get_format_name(bs));
503 check->check_errors = result.check_errors;
504 check->corruptions = result.corruptions;
505 check->has_corruptions = result.corruptions != 0;
506 check->leaks = result.leaks;
507 check->has_leaks = result.leaks != 0;
508 check->corruptions_fixed = result.corruptions_fixed;
509 check->has_corruptions_fixed = result.corruptions != 0;
510 check->leaks_fixed = result.leaks_fixed;
511 check->has_leaks_fixed = result.leaks != 0;
512 check->image_end_offset = result.image_end_offset;
513 check->has_image_end_offset = result.image_end_offset != 0;
514 check->total_clusters = result.bfi.total_clusters;
515 check->has_total_clusters = result.bfi.total_clusters != 0;
516 check->allocated_clusters = result.bfi.allocated_clusters;
517 check->has_allocated_clusters = result.bfi.allocated_clusters != 0;
518 check->fragmented_clusters = result.bfi.fragmented_clusters;
519 check->has_fragmented_clusters = result.bfi.fragmented_clusters != 0;
520 check->compressed_clusters = result.bfi.compressed_clusters;
521 check->has_compressed_clusters = result.bfi.compressed_clusters != 0;
527 * Checks an image for consistency. Exit codes:
529 * 0 - Check completed, image is good
530 * 1 - Check not completed because of internal errors
531 * 2 - Check completed, image is corrupted
532 * 3 - Check completed, image has leaked clusters, but is good otherwise
534 static int img_check(int argc, char **argv)
537 OutputFormat output_format = OFORMAT_HUMAN;
538 const char *filename, *fmt, *output;
539 BlockDriverState *bs;
541 int flags = BDRV_O_FLAGS | BDRV_O_CHECK;
548 int option_index = 0;
549 static const struct option long_options[] = {
550 {"help", no_argument, 0, 'h'},
551 {"format", required_argument, 0, 'f'},
552 {"repair", no_argument, 0, 'r'},
553 {"output", required_argument, 0, OPTION_OUTPUT},
556 c = getopt_long(argc, argv, "f:hr:q",
557 long_options, &option_index);
570 flags |= BDRV_O_RDWR;
572 if (!strcmp(optarg, "leaks")) {
573 fix = BDRV_FIX_LEAKS;
574 } else if (!strcmp(optarg, "all")) {
575 fix = BDRV_FIX_LEAKS | BDRV_FIX_ERRORS;
588 if (optind != argc - 1) {
591 filename = argv[optind++];
593 if (output && !strcmp(output, "json")) {
594 output_format = OFORMAT_JSON;
595 } else if (output && !strcmp(output, "human")) {
596 output_format = OFORMAT_HUMAN;
598 error_report("--output must be used with human or json as argument.");
602 bs = bdrv_new_open(filename, fmt, flags, true, quiet);
607 check = g_new0(ImageCheck, 1);
608 ret = collect_image_check(bs, check, filename, fmt, fix);
610 if (ret == -ENOTSUP) {
611 if (output_format == OFORMAT_HUMAN) {
612 error_report("This image format does not support checks");
618 if (check->corruptions_fixed || check->leaks_fixed) {
619 int corruptions_fixed, leaks_fixed;
621 leaks_fixed = check->leaks_fixed;
622 corruptions_fixed = check->corruptions_fixed;
624 if (output_format == OFORMAT_HUMAN) {
626 "The following inconsistencies were found and repaired:\n\n"
627 " %" PRId64 " leaked clusters\n"
628 " %" PRId64 " corruptions\n\n"
629 "Double checking the fixed image now...\n",
631 check->corruptions_fixed);
634 ret = collect_image_check(bs, check, filename, fmt, 0);
636 check->leaks_fixed = leaks_fixed;
637 check->corruptions_fixed = corruptions_fixed;
640 switch (output_format) {
642 dump_human_image_check(check, quiet);
645 dump_json_image_check(check, quiet);
649 if (ret || check->check_errors) {
654 if (check->corruptions) {
656 } else if (check->leaks) {
663 qapi_free_ImageCheck(check);
669 static int img_commit(int argc, char **argv)
672 const char *filename, *fmt, *cache;
673 BlockDriverState *bs;
677 cache = BDRV_DEFAULT_CACHE;
679 c = getopt(argc, argv, "f:ht:q");
699 if (optind != argc - 1) {
702 filename = argv[optind++];
705 ret = bdrv_parse_cache_flags(cache, &flags);
707 error_report("Invalid cache option: %s", cache);
711 bs = bdrv_new_open(filename, fmt, flags, true, quiet);
715 ret = bdrv_commit(bs);
718 qprintf(quiet, "Image committed.\n");
721 error_report("No disk inserted");
724 error_report("Image is read-only");
727 error_report("Image is already committed");
730 error_report("Error while committing image");
742 * Returns true iff the first sector pointed to by 'buf' contains at least
745 * 'pnum' is set to the number of sectors (including and immediately following
746 * the first one) that are known to be in the same allocated/unallocated state.
748 static int is_allocated_sectors(const uint8_t *buf, int n, int *pnum)
757 is_zero = buffer_is_zero(buf, 512);
758 for(i = 1; i < n; i++) {
760 if (is_zero != buffer_is_zero(buf, 512)) {
769 * Like is_allocated_sectors, but if the buffer starts with a used sector,
770 * up to 'min' consecutive sectors containing zeros are ignored. This avoids
771 * breaking up write requests for only small sparse areas.
773 static int is_allocated_sectors_min(const uint8_t *buf, int n, int *pnum,
777 int num_checked, num_used;
783 ret = is_allocated_sectors(buf, n, pnum);
789 buf += BDRV_SECTOR_SIZE * *pnum;
791 num_checked = num_used;
794 ret = is_allocated_sectors(buf, n, pnum);
796 buf += BDRV_SECTOR_SIZE * *pnum;
798 num_checked += *pnum;
800 num_used = num_checked;
801 } else if (*pnum >= min) {
811 * Compares two buffers sector by sector. Returns 0 if the first sector of both
812 * buffers matches, non-zero otherwise.
814 * pnum is set to the number of sectors (including and immediately following
815 * the first one) that are known to have the same comparison result
817 static int compare_sectors(const uint8_t *buf1, const uint8_t *buf2, int n,
827 res = !!memcmp(buf1, buf2, 512);
828 for(i = 1; i < n; i++) {
832 if (!!memcmp(buf1, buf2, 512) != res) {
841 #define IO_BUF_SIZE (2 * 1024 * 1024)
843 static int64_t sectors_to_bytes(int64_t sectors)
845 return sectors << BDRV_SECTOR_BITS;
848 static int64_t sectors_to_process(int64_t total, int64_t from)
850 return MIN(total - from, IO_BUF_SIZE >> BDRV_SECTOR_BITS);
854 * Check if passed sectors are empty (not allocated or contain only 0 bytes)
856 * Returns 0 in case sectors are filled with 0, 1 if sectors contain non-zero
857 * data and negative value on error.
859 * @param bs: Driver used for accessing file
860 * @param sect_num: Number of first sector to check
861 * @param sect_count: Number of sectors to check
862 * @param filename: Name of disk file we are checking (logging purpose)
863 * @param buffer: Allocated buffer for storing read data
864 * @param quiet: Flag for quiet mode
866 static int check_empty_sectors(BlockDriverState *bs, int64_t sect_num,
867 int sect_count, const char *filename,
868 uint8_t *buffer, bool quiet)
871 ret = bdrv_read(bs, sect_num, buffer, sect_count);
873 error_report("Error while reading offset %" PRId64 " of %s: %s",
874 sectors_to_bytes(sect_num), filename, strerror(-ret));
877 ret = is_allocated_sectors(buffer, sect_count, &pnum);
878 if (ret || pnum != sect_count) {
879 qprintf(quiet, "Content mismatch at offset %" PRId64 "!\n",
880 sectors_to_bytes(ret ? sect_num : sect_num + pnum));
888 * Compares two images. Exit codes:
890 * 0 - Images are identical
892 * >1 - Error occurred
894 static int img_compare(int argc, char **argv)
896 const char *fmt1 = NULL, *fmt2 = NULL, *filename1, *filename2;
897 BlockDriverState *bs1, *bs2;
898 int64_t total_sectors1, total_sectors2;
899 uint8_t *buf1 = NULL, *buf2 = NULL;
901 int allocated1, allocated2;
902 int ret = 0; /* return value - 0 Ident, 1 Different, >1 Error */
903 bool progress = false, quiet = false, strict = false;
904 int64_t total_sectors;
905 int64_t sector_num = 0;
909 uint64_t progress_base;
912 c = getopt(argc, argv, "hpf:F:sq");
939 /* Progress is not shown in Quiet mode */
945 if (optind != argc - 2) {
948 filename1 = argv[optind++];
949 filename2 = argv[optind++];
951 /* Initialize before goto out */
952 qemu_progress_init(progress, 2.0);
954 bs1 = bdrv_new_open(filename1, fmt1, BDRV_O_FLAGS, true, quiet);
956 error_report("Can't open file %s", filename1);
961 bs2 = bdrv_new_open(filename2, fmt2, BDRV_O_FLAGS, true, quiet);
963 error_report("Can't open file %s", filename2);
968 buf1 = qemu_blockalign(bs1, IO_BUF_SIZE);
969 buf2 = qemu_blockalign(bs2, IO_BUF_SIZE);
970 bdrv_get_geometry(bs1, &bs_sectors);
971 total_sectors1 = bs_sectors;
972 bdrv_get_geometry(bs2, &bs_sectors);
973 total_sectors2 = bs_sectors;
974 total_sectors = MIN(total_sectors1, total_sectors2);
975 progress_base = MAX(total_sectors1, total_sectors2);
977 qemu_progress_print(0, 100);
979 if (strict && total_sectors1 != total_sectors2) {
981 qprintf(quiet, "Strict mode: Image size mismatch!\n");
986 nb_sectors = sectors_to_process(total_sectors, sector_num);
987 if (nb_sectors <= 0) {
990 allocated1 = bdrv_is_allocated_above(bs1, NULL, sector_num, nb_sectors,
992 if (allocated1 < 0) {
994 error_report("Sector allocation test failed for %s", filename1);
998 allocated2 = bdrv_is_allocated_above(bs2, NULL, sector_num, nb_sectors,
1000 if (allocated2 < 0) {
1002 error_report("Sector allocation test failed for %s", filename2);
1005 nb_sectors = MIN(pnum1, pnum2);
1007 if (allocated1 == allocated2) {
1009 ret = bdrv_read(bs1, sector_num, buf1, nb_sectors);
1011 error_report("Error while reading offset %" PRId64 " of %s:"
1012 " %s", sectors_to_bytes(sector_num), filename1,
1017 ret = bdrv_read(bs2, sector_num, buf2, nb_sectors);
1019 error_report("Error while reading offset %" PRId64
1020 " of %s: %s", sectors_to_bytes(sector_num),
1021 filename2, strerror(-ret));
1025 ret = compare_sectors(buf1, buf2, nb_sectors, &pnum);
1026 if (ret || pnum != nb_sectors) {
1027 qprintf(quiet, "Content mismatch at offset %" PRId64 "!\n",
1029 ret ? sector_num : sector_num + pnum));
1037 qprintf(quiet, "Strict mode: Offset %" PRId64
1038 " allocation mismatch!\n",
1039 sectors_to_bytes(sector_num));
1044 ret = check_empty_sectors(bs1, sector_num, nb_sectors,
1045 filename1, buf1, quiet);
1047 ret = check_empty_sectors(bs2, sector_num, nb_sectors,
1048 filename2, buf1, quiet);
1052 error_report("Error while reading offset %" PRId64 ": %s",
1053 sectors_to_bytes(sector_num), strerror(-ret));
1059 sector_num += nb_sectors;
1060 qemu_progress_print(((float) nb_sectors / progress_base)*100, 100);
1063 if (total_sectors1 != total_sectors2) {
1064 BlockDriverState *bs_over;
1065 int64_t total_sectors_over;
1066 const char *filename_over;
1068 qprintf(quiet, "Warning: Image size mismatch!\n");
1069 if (total_sectors1 > total_sectors2) {
1070 total_sectors_over = total_sectors1;
1072 filename_over = filename1;
1074 total_sectors_over = total_sectors2;
1076 filename_over = filename2;
1080 nb_sectors = sectors_to_process(total_sectors_over, sector_num);
1081 if (nb_sectors <= 0) {
1084 ret = bdrv_is_allocated_above(bs_over, NULL, sector_num,
1088 error_report("Sector allocation test failed for %s",
1095 ret = check_empty_sectors(bs_over, sector_num, nb_sectors,
1096 filename_over, buf1, quiet);
1099 error_report("Error while reading offset %" PRId64
1100 " of %s: %s", sectors_to_bytes(sector_num),
1101 filename_over, strerror(-ret));
1107 sector_num += nb_sectors;
1108 qemu_progress_print(((float) nb_sectors / progress_base)*100, 100);
1112 qprintf(quiet, "Images are identical.\n");
1122 qemu_progress_end();
1126 static int img_convert(int argc, char **argv)
1128 int c, ret = 0, n, n1, bs_n, bs_i, compress, cluster_size,
1129 cluster_sectors, skip_create;
1130 int progress = 0, flags;
1131 const char *fmt, *out_fmt, *cache, *out_baseimg, *out_filename;
1132 BlockDriver *drv, *proto_drv;
1133 BlockDriverState **bs = NULL, *out_bs = NULL;
1134 int64_t total_sectors, nb_sectors, sector_num, bs_offset;
1135 uint64_t bs_sectors;
1136 uint8_t * buf = NULL;
1137 const uint8_t *buf1;
1138 BlockDriverInfo bdi;
1139 QEMUOptionParameter *param = NULL, *create_options = NULL;
1140 QEMUOptionParameter *out_baseimg_param;
1141 char *options = NULL;
1142 const char *snapshot_name = NULL;
1143 float local_progress = 0;
1144 int min_sparse = 8; /* Need at least 4k of zeros for sparse detection */
1146 Error *local_err = NULL;
1155 c = getopt(argc, argv, "f:O:B:s:hce6o:pS:t:qn");
1171 out_baseimg = optarg;
1177 error_report("option -e is deprecated, please use \'-o "
1178 "encryption\' instead!");
1181 error_report("option -6 is deprecated, please use \'-o "
1182 "compat6\' instead!");
1188 snapshot_name = optarg;
1194 sval = strtosz_suffix(optarg, &end, STRTOSZ_DEFSUFFIX_B);
1195 if (sval < 0 || *end) {
1196 error_report("Invalid minimum zero buffer size for sparse output specified");
1200 min_sparse = sval / BDRV_SECTOR_SIZE;
1222 bs_n = argc - optind - 1;
1227 out_filename = argv[argc - 1];
1229 /* Initialize before goto out */
1230 qemu_progress_init(progress, 2.0);
1232 if (options && is_help_option(options)) {
1233 ret = print_block_option_help(out_filename, out_fmt);
1237 if (bs_n > 1 && out_baseimg) {
1238 error_report("-B makes no sense when concatenating multiple input "
1244 qemu_progress_print(0, 100);
1246 bs = g_malloc0(bs_n * sizeof(BlockDriverState *));
1249 for (bs_i = 0; bs_i < bs_n; bs_i++) {
1250 bs[bs_i] = bdrv_new_open(argv[optind + bs_i], fmt, BDRV_O_FLAGS, true,
1253 error_report("Could not open '%s'", argv[optind + bs_i]);
1257 bdrv_get_geometry(bs[bs_i], &bs_sectors);
1258 total_sectors += bs_sectors;
1261 if (snapshot_name != NULL) {
1263 error_report("No support for concatenating multiple snapshot");
1267 if (bdrv_snapshot_load_tmp(bs[0], snapshot_name) < 0) {
1268 error_report("Failed to load snapshot");
1274 /* Find driver and parse its options */
1275 drv = bdrv_find_format(out_fmt);
1277 error_report("Unknown file format '%s'", out_fmt);
1282 proto_drv = bdrv_find_protocol(out_filename, true);
1284 error_report("Unknown protocol '%s'", out_filename);
1289 create_options = append_option_parameters(create_options,
1290 drv->create_options);
1291 create_options = append_option_parameters(create_options,
1292 proto_drv->create_options);
1295 param = parse_option_parameters(options, create_options, param);
1296 if (param == NULL) {
1297 error_report("Invalid options for file format '%s'.", out_fmt);
1302 param = parse_option_parameters("", create_options, param);
1305 set_option_parameter_int(param, BLOCK_OPT_SIZE, total_sectors * 512);
1306 ret = add_old_style_options(out_fmt, param, out_baseimg, NULL);
1311 /* Get backing file name if -o backing_file was used */
1312 out_baseimg_param = get_option_parameter(param, BLOCK_OPT_BACKING_FILE);
1313 if (out_baseimg_param) {
1314 out_baseimg = out_baseimg_param->value.s;
1317 /* Check if compression is supported */
1319 QEMUOptionParameter *encryption =
1320 get_option_parameter(param, BLOCK_OPT_ENCRYPT);
1321 QEMUOptionParameter *preallocation =
1322 get_option_parameter(param, BLOCK_OPT_PREALLOC);
1324 if (!drv->bdrv_write_compressed) {
1325 error_report("Compression not supported for this file format");
1330 if (encryption && encryption->value.n) {
1331 error_report("Compression and encryption not supported at "
1337 if (preallocation && preallocation->value.s
1338 && strcmp(preallocation->value.s, "off"))
1340 error_report("Compression and preallocation not supported at "
1348 /* Create the new image */
1349 ret = bdrv_create(drv, out_filename, param, &local_err);
1351 error_report("%s: error while converting %s: %s",
1352 out_filename, out_fmt, error_get_pretty(local_err));
1353 error_free(local_err);
1358 flags = BDRV_O_RDWR;
1359 ret = bdrv_parse_cache_flags(cache, &flags);
1361 error_report("Invalid cache option: %s", cache);
1365 out_bs = bdrv_new_open(out_filename, out_fmt, flags, true, quiet);
1373 bdrv_get_geometry(bs[0], &bs_sectors);
1374 buf = qemu_blockalign(out_bs, IO_BUF_SIZE);
1377 int64_t output_length = bdrv_getlength(out_bs);
1378 if (output_length < 0) {
1379 error_report("unable to get output image length: %s\n",
1380 strerror(-output_length));
1383 } else if (output_length < total_sectors << BDRV_SECTOR_BITS) {
1384 error_report("output file is smaller than input file");
1391 ret = bdrv_get_info(out_bs, &bdi);
1393 error_report("could not get block driver info");
1396 cluster_size = bdi.cluster_size;
1397 if (cluster_size <= 0 || cluster_size > IO_BUF_SIZE) {
1398 error_report("invalid cluster size");
1402 cluster_sectors = cluster_size >> 9;
1405 nb_sectors = total_sectors;
1406 if (nb_sectors != 0) {
1407 local_progress = (float)100 /
1408 (nb_sectors / MIN(nb_sectors, cluster_sectors));
1416 nb_sectors = total_sectors - sector_num;
1417 if (nb_sectors <= 0)
1419 if (nb_sectors >= cluster_sectors)
1420 n = cluster_sectors;
1424 bs_num = sector_num - bs_offset;
1425 assert (bs_num >= 0);
1428 while (remainder > 0) {
1430 while (bs_num == bs_sectors) {
1432 assert (bs_i < bs_n);
1433 bs_offset += bs_sectors;
1434 bdrv_get_geometry(bs[bs_i], &bs_sectors);
1436 /* printf("changing part: sector_num=%" PRId64 ", "
1437 "bs_i=%d, bs_offset=%" PRId64 ", bs_sectors=%" PRId64
1438 "\n", sector_num, bs_i, bs_offset, bs_sectors); */
1440 assert (bs_num < bs_sectors);
1442 nlow = (remainder > bs_sectors - bs_num) ? bs_sectors - bs_num : remainder;
1444 ret = bdrv_read(bs[bs_i], bs_num, buf2, nlow);
1446 error_report("error while reading sector %" PRId64 ": %s",
1447 bs_num, strerror(-ret));
1456 assert (remainder == 0);
1458 if (!buffer_is_zero(buf, n * BDRV_SECTOR_SIZE)) {
1459 ret = bdrv_write_compressed(out_bs, sector_num, buf, n);
1461 error_report("error while compressing sector %" PRId64
1462 ": %s", sector_num, strerror(-ret));
1467 qemu_progress_print(local_progress, 100);
1469 /* signal EOF to align */
1470 bdrv_write_compressed(out_bs, 0, NULL, 0);
1472 int has_zero_init = min_sparse ? bdrv_has_zero_init(out_bs) : 0;
1474 sector_num = 0; // total number of sectors converted so far
1475 nb_sectors = total_sectors - sector_num;
1476 if (nb_sectors != 0) {
1477 local_progress = (float)100 /
1478 (nb_sectors / MIN(nb_sectors, IO_BUF_SIZE / 512));
1482 nb_sectors = total_sectors - sector_num;
1483 if (nb_sectors <= 0) {
1486 if (nb_sectors >= (IO_BUF_SIZE / 512)) {
1487 n = (IO_BUF_SIZE / 512);
1492 while (sector_num - bs_offset >= bs_sectors) {
1494 assert (bs_i < bs_n);
1495 bs_offset += bs_sectors;
1496 bdrv_get_geometry(bs[bs_i], &bs_sectors);
1497 /* printf("changing part: sector_num=%" PRId64 ", bs_i=%d, "
1498 "bs_offset=%" PRId64 ", bs_sectors=%" PRId64 "\n",
1499 sector_num, bs_i, bs_offset, bs_sectors); */
1502 if (n > bs_offset + bs_sectors - sector_num) {
1503 n = bs_offset + bs_sectors - sector_num;
1506 /* If the output image is being created as a copy on write image,
1507 assume that sectors which are unallocated in the input image
1508 are present in both the output's and input's base images (no
1509 need to copy them). */
1511 ret = bdrv_is_allocated(bs[bs_i], sector_num - bs_offset,
1514 error_report("error while reading metadata for sector "
1516 sector_num - bs_offset, strerror(-ret));
1523 /* The next 'n1' sectors are allocated in the input image. Copy
1524 only those as they may be followed by unallocated sectors. */
1530 ret = bdrv_read(bs[bs_i], sector_num - bs_offset, buf, n);
1532 error_report("error while reading sector %" PRId64 ": %s",
1533 sector_num - bs_offset, strerror(-ret));
1536 /* NOTE: at the same time we convert, we do not write zero
1537 sectors to have a chance to compress the image. Ideally, we
1538 should add a specific call to have the info to go faster */
1541 if (!has_zero_init ||
1542 is_allocated_sectors_min(buf1, n, &n1, min_sparse)) {
1543 ret = bdrv_write(out_bs, sector_num, buf1, n1);
1545 error_report("error while writing sector %" PRId64
1546 ": %s", sector_num, strerror(-ret));
1554 qemu_progress_print(local_progress, 100);
1558 qemu_progress_end();
1559 free_option_parameters(create_options);
1560 free_option_parameters(param);
1566 for (bs_i = 0; bs_i < bs_n; bs_i++) {
1568 bdrv_unref(bs[bs_i]);
1580 static void dump_snapshots(BlockDriverState *bs)
1582 QEMUSnapshotInfo *sn_tab, *sn;
1585 nb_sns = bdrv_snapshot_list(bs, &sn_tab);
1588 printf("Snapshot list:\n");
1589 bdrv_snapshot_dump(fprintf, stdout, NULL);
1591 for(i = 0; i < nb_sns; i++) {
1593 bdrv_snapshot_dump(fprintf, stdout, sn);
1599 static void dump_json_image_info_list(ImageInfoList *list)
1603 QmpOutputVisitor *ov = qmp_output_visitor_new();
1605 visit_type_ImageInfoList(qmp_output_get_visitor(ov),
1606 &list, NULL, &errp);
1607 obj = qmp_output_get_qobject(ov);
1608 str = qobject_to_json_pretty(obj);
1609 assert(str != NULL);
1610 printf("%s\n", qstring_get_str(str));
1611 qobject_decref(obj);
1612 qmp_output_visitor_cleanup(ov);
1616 static void dump_json_image_info(ImageInfo *info)
1620 QmpOutputVisitor *ov = qmp_output_visitor_new();
1622 visit_type_ImageInfo(qmp_output_get_visitor(ov),
1623 &info, NULL, &errp);
1624 obj = qmp_output_get_qobject(ov);
1625 str = qobject_to_json_pretty(obj);
1626 assert(str != NULL);
1627 printf("%s\n", qstring_get_str(str));
1628 qobject_decref(obj);
1629 qmp_output_visitor_cleanup(ov);
1633 static void dump_human_image_info_list(ImageInfoList *list)
1635 ImageInfoList *elem;
1638 for (elem = list; elem; elem = elem->next) {
1644 bdrv_image_info_dump(fprintf, stdout, elem->value);
1648 static gboolean str_equal_func(gconstpointer a, gconstpointer b)
1650 return strcmp(a, b) == 0;
1654 * Open an image file chain and return an ImageInfoList
1656 * @filename: topmost image filename
1657 * @fmt: topmost image format (may be NULL to autodetect)
1658 * @chain: true - enumerate entire backing file chain
1659 * false - only topmost image file
1661 * Returns a list of ImageInfo objects or NULL if there was an error opening an
1662 * image file. If there was an error a message will have been printed to
1665 static ImageInfoList *collect_image_info_list(const char *filename,
1669 ImageInfoList *head = NULL;
1670 ImageInfoList **last = &head;
1671 GHashTable *filenames;
1674 filenames = g_hash_table_new_full(g_str_hash, str_equal_func, NULL, NULL);
1677 BlockDriverState *bs;
1679 ImageInfoList *elem;
1681 if (g_hash_table_lookup_extended(filenames, filename, NULL, NULL)) {
1682 error_report("Backing file '%s' creates an infinite loop.",
1686 g_hash_table_insert(filenames, (gpointer)filename, NULL);
1688 bs = bdrv_new_open(filename, fmt, BDRV_O_FLAGS | BDRV_O_NO_BACKING,
1694 bdrv_query_image_info(bs, &info, &err);
1695 if (error_is_set(&err)) {
1696 error_report("%s", error_get_pretty(err));
1701 elem = g_new0(ImageInfoList, 1);
1708 filename = fmt = NULL;
1710 if (info->has_full_backing_filename) {
1711 filename = info->full_backing_filename;
1712 } else if (info->has_backing_filename) {
1713 filename = info->backing_filename;
1715 if (info->has_backing_filename_format) {
1716 fmt = info->backing_filename_format;
1720 g_hash_table_destroy(filenames);
1724 qapi_free_ImageInfoList(head);
1725 g_hash_table_destroy(filenames);
1729 static int img_info(int argc, char **argv)
1732 OutputFormat output_format = OFORMAT_HUMAN;
1734 const char *filename, *fmt, *output;
1735 ImageInfoList *list;
1740 int option_index = 0;
1741 static const struct option long_options[] = {
1742 {"help", no_argument, 0, 'h'},
1743 {"format", required_argument, 0, 'f'},
1744 {"output", required_argument, 0, OPTION_OUTPUT},
1745 {"backing-chain", no_argument, 0, OPTION_BACKING_CHAIN},
1748 c = getopt_long(argc, argv, "f:h",
1749 long_options, &option_index);
1764 case OPTION_BACKING_CHAIN:
1769 if (optind != argc - 1) {
1772 filename = argv[optind++];
1774 if (output && !strcmp(output, "json")) {
1775 output_format = OFORMAT_JSON;
1776 } else if (output && !strcmp(output, "human")) {
1777 output_format = OFORMAT_HUMAN;
1778 } else if (output) {
1779 error_report("--output must be used with human or json as argument.");
1783 list = collect_image_info_list(filename, fmt, chain);
1788 switch (output_format) {
1790 dump_human_image_info_list(list);
1794 dump_json_image_info_list(list);
1796 dump_json_image_info(list->value);
1801 qapi_free_ImageInfoList(list);
1806 typedef struct MapEntry {
1812 BlockDriverState *bs;
1815 static void dump_map_entry(OutputFormat output_format, MapEntry *e,
1818 switch (output_format) {
1820 if ((e->flags & BDRV_BLOCK_DATA) &&
1821 !(e->flags & BDRV_BLOCK_OFFSET_VALID)) {
1822 error_report("File contains external, encrypted or compressed clusters.");
1825 if ((e->flags & (BDRV_BLOCK_DATA|BDRV_BLOCK_ZERO)) == BDRV_BLOCK_DATA) {
1826 printf("%#-16"PRIx64"%#-16"PRIx64"%#-16"PRIx64"%s\n",
1827 e->start, e->length, e->offset, e->bs->filename);
1829 /* This format ignores the distinction between 0, ZERO and ZERO|DATA.
1830 * Modify the flags here to allow more coalescing.
1833 (next->flags & (BDRV_BLOCK_DATA|BDRV_BLOCK_ZERO)) != BDRV_BLOCK_DATA) {
1834 next->flags &= ~BDRV_BLOCK_DATA;
1835 next->flags |= BDRV_BLOCK_ZERO;
1839 printf("%s{ \"start\": %"PRId64", \"length\": %"PRId64", \"depth\": %d,"
1840 " \"zero\": %s, \"data\": %s",
1841 (e->start == 0 ? "[" : ",\n"),
1842 e->start, e->length, e->depth,
1843 (e->flags & BDRV_BLOCK_ZERO) ? "true" : "false",
1844 (e->flags & BDRV_BLOCK_DATA) ? "true" : "false");
1845 if (e->flags & BDRV_BLOCK_OFFSET_VALID) {
1846 printf(", \"offset\": %"PRId64"", e->offset);
1857 static int get_block_status(BlockDriverState *bs, int64_t sector_num,
1858 int nb_sectors, MapEntry *e)
1863 /* As an optimization, we could cache the current range of unallocated
1864 * clusters in each file of the chain, and avoid querying the same
1870 ret = bdrv_get_block_status(bs, sector_num, nb_sectors, &nb_sectors);
1875 if (ret & (BDRV_BLOCK_ZERO|BDRV_BLOCK_DATA)) {
1878 bs = bs->backing_hd;
1887 e->start = sector_num * BDRV_SECTOR_SIZE;
1888 e->length = nb_sectors * BDRV_SECTOR_SIZE;
1889 e->flags = ret & ~BDRV_BLOCK_OFFSET_MASK;
1890 e->offset = ret & BDRV_BLOCK_OFFSET_MASK;
1896 static int img_map(int argc, char **argv)
1899 OutputFormat output_format = OFORMAT_HUMAN;
1900 BlockDriverState *bs;
1901 const char *filename, *fmt, *output;
1903 MapEntry curr = { .length = 0 }, next;
1909 int option_index = 0;
1910 static const struct option long_options[] = {
1911 {"help", no_argument, 0, 'h'},
1912 {"format", required_argument, 0, 'f'},
1913 {"output", required_argument, 0, OPTION_OUTPUT},
1916 c = getopt_long(argc, argv, "f:h",
1917 long_options, &option_index);
1934 if (optind >= argc) {
1937 filename = argv[optind++];
1939 if (output && !strcmp(output, "json")) {
1940 output_format = OFORMAT_JSON;
1941 } else if (output && !strcmp(output, "human")) {
1942 output_format = OFORMAT_HUMAN;
1943 } else if (output) {
1944 error_report("--output must be used with human or json as argument.");
1948 bs = bdrv_new_open(filename, fmt, BDRV_O_FLAGS, true, false);
1953 if (output_format == OFORMAT_HUMAN) {
1954 printf("%-16s%-16s%-16s%s\n", "Offset", "Length", "Mapped to", "File");
1957 length = bdrv_getlength(bs);
1958 while (curr.start + curr.length < length) {
1959 int64_t nsectors_left;
1963 sector_num = (curr.start + curr.length) >> BDRV_SECTOR_BITS;
1965 /* Probe up to 1 GiB at a time. */
1966 nsectors_left = DIV_ROUND_UP(length, BDRV_SECTOR_SIZE) - sector_num;
1967 n = MIN(1 << (30 - BDRV_SECTOR_BITS), nsectors_left);
1968 ret = get_block_status(bs, sector_num, n, &next);
1971 error_report("Could not read file metadata: %s", strerror(-ret));
1975 if (curr.length != 0 && curr.flags == next.flags &&
1976 curr.depth == next.depth &&
1977 ((curr.flags & BDRV_BLOCK_OFFSET_VALID) == 0 ||
1978 curr.offset + curr.length == next.offset)) {
1979 curr.length += next.length;
1983 if (curr.length > 0) {
1984 dump_map_entry(output_format, &curr, &next);
1989 dump_map_entry(output_format, &curr, NULL);
1996 #define SNAPSHOT_LIST 1
1997 #define SNAPSHOT_CREATE 2
1998 #define SNAPSHOT_APPLY 3
1999 #define SNAPSHOT_DELETE 4
2001 static int img_snapshot(int argc, char **argv)
2003 BlockDriverState *bs;
2004 QEMUSnapshotInfo sn;
2005 char *filename, *snapshot_name = NULL;
2006 int c, ret = 0, bdrv_oflags;
2012 bdrv_oflags = BDRV_O_FLAGS | BDRV_O_RDWR;
2013 /* Parse commandline parameters */
2015 c = getopt(argc, argv, "la:c:d:hq");
2029 action = SNAPSHOT_LIST;
2030 bdrv_oflags &= ~BDRV_O_RDWR; /* no need for RW */
2037 action = SNAPSHOT_APPLY;
2038 snapshot_name = optarg;
2045 action = SNAPSHOT_CREATE;
2046 snapshot_name = optarg;
2053 action = SNAPSHOT_DELETE;
2054 snapshot_name = optarg;
2062 if (optind != argc - 1) {
2065 filename = argv[optind++];
2067 /* Open the image */
2068 bs = bdrv_new_open(filename, NULL, bdrv_oflags, true, quiet);
2073 /* Perform the requested action */
2079 case SNAPSHOT_CREATE:
2080 memset(&sn, 0, sizeof(sn));
2081 pstrcpy(sn.name, sizeof(sn.name), snapshot_name);
2083 qemu_gettimeofday(&tv);
2084 sn.date_sec = tv.tv_sec;
2085 sn.date_nsec = tv.tv_usec * 1000;
2087 ret = bdrv_snapshot_create(bs, &sn);
2089 error_report("Could not create snapshot '%s': %d (%s)",
2090 snapshot_name, ret, strerror(-ret));
2094 case SNAPSHOT_APPLY:
2095 ret = bdrv_snapshot_goto(bs, snapshot_name);
2097 error_report("Could not apply snapshot '%s': %d (%s)",
2098 snapshot_name, ret, strerror(-ret));
2102 case SNAPSHOT_DELETE:
2103 bdrv_snapshot_delete_by_id_or_name(bs, snapshot_name, &err);
2104 if (error_is_set(&err)) {
2105 error_report("Could not delete snapshot '%s': (%s)",
2106 snapshot_name, error_get_pretty(err));
2121 static int img_rebase(int argc, char **argv)
2123 BlockDriverState *bs, *bs_old_backing = NULL, *bs_new_backing = NULL;
2124 BlockDriver *old_backing_drv, *new_backing_drv;
2126 const char *fmt, *cache, *out_basefmt, *out_baseimg;
2131 Error *local_err = NULL;
2133 /* Parse commandline parameters */
2135 cache = BDRV_DEFAULT_CACHE;
2139 c = getopt(argc, argv, "uhf:F:b:pt:q");
2152 out_basefmt = optarg;
2155 out_baseimg = optarg;
2176 if ((optind != argc - 1) || (!unsafe && !out_baseimg)) {
2179 filename = argv[optind++];
2181 qemu_progress_init(progress, 2.0);
2182 qemu_progress_print(0, 100);
2184 flags = BDRV_O_RDWR | (unsafe ? BDRV_O_NO_BACKING : 0);
2185 ret = bdrv_parse_cache_flags(cache, &flags);
2187 error_report("Invalid cache option: %s", cache);
2194 * Ignore the old backing file for unsafe rebase in case we want to correct
2195 * the reference to a renamed or moved backing file.
2197 bs = bdrv_new_open(filename, fmt, flags, true, quiet);
2202 /* Find the right drivers for the backing files */
2203 old_backing_drv = NULL;
2204 new_backing_drv = NULL;
2206 if (!unsafe && bs->backing_format[0] != '\0') {
2207 old_backing_drv = bdrv_find_format(bs->backing_format);
2208 if (old_backing_drv == NULL) {
2209 error_report("Invalid format name: '%s'", bs->backing_format);
2215 if (out_basefmt != NULL) {
2216 new_backing_drv = bdrv_find_format(out_basefmt);
2217 if (new_backing_drv == NULL) {
2218 error_report("Invalid format name: '%s'", out_basefmt);
2224 /* For safe rebasing we need to compare old and new backing file */
2226 /* Make the compiler happy */
2227 bs_old_backing = NULL;
2228 bs_new_backing = NULL;
2230 char backing_name[1024];
2232 bs_old_backing = bdrv_new("old_backing");
2233 bdrv_get_backing_filename(bs, backing_name, sizeof(backing_name));
2234 ret = bdrv_open(bs_old_backing, backing_name, NULL, BDRV_O_FLAGS,
2235 old_backing_drv, &local_err);
2237 error_report("Could not open old backing file '%s': %s",
2238 backing_name, error_get_pretty(local_err));
2239 error_free(local_err);
2242 if (out_baseimg[0]) {
2243 bs_new_backing = bdrv_new("new_backing");
2244 ret = bdrv_open(bs_new_backing, out_baseimg, NULL, BDRV_O_FLAGS,
2245 new_backing_drv, &local_err);
2247 error_report("Could not open new backing file '%s': %s",
2248 out_baseimg, error_get_pretty(local_err));
2249 error_free(local_err);
2256 * Check each unallocated cluster in the COW file. If it is unallocated,
2257 * accesses go to the backing file. We must therefore compare this cluster
2258 * in the old and new backing file, and if they differ we need to copy it
2259 * from the old backing file into the COW file.
2261 * If qemu-img crashes during this step, no harm is done. The content of
2262 * the image is the same as the original one at any time.
2265 uint64_t num_sectors;
2266 uint64_t old_backing_num_sectors;
2267 uint64_t new_backing_num_sectors = 0;
2272 float local_progress = 0;
2274 buf_old = qemu_blockalign(bs, IO_BUF_SIZE);
2275 buf_new = qemu_blockalign(bs, IO_BUF_SIZE);
2277 bdrv_get_geometry(bs, &num_sectors);
2278 bdrv_get_geometry(bs_old_backing, &old_backing_num_sectors);
2279 if (bs_new_backing) {
2280 bdrv_get_geometry(bs_new_backing, &new_backing_num_sectors);
2283 if (num_sectors != 0) {
2284 local_progress = (float)100 /
2285 (num_sectors / MIN(num_sectors, IO_BUF_SIZE / 512));
2288 for (sector = 0; sector < num_sectors; sector += n) {
2290 /* How many sectors can we handle with the next read? */
2291 if (sector + (IO_BUF_SIZE / 512) <= num_sectors) {
2292 n = (IO_BUF_SIZE / 512);
2294 n = num_sectors - sector;
2297 /* If the cluster is allocated, we don't need to take action */
2298 ret = bdrv_is_allocated(bs, sector, n, &n);
2300 error_report("error while reading image metadata: %s",
2309 * Read old and new backing file and take into consideration that
2310 * backing files may be smaller than the COW image.
2312 if (sector >= old_backing_num_sectors) {
2313 memset(buf_old, 0, n * BDRV_SECTOR_SIZE);
2315 if (sector + n > old_backing_num_sectors) {
2316 n = old_backing_num_sectors - sector;
2319 ret = bdrv_read(bs_old_backing, sector, buf_old, n);
2321 error_report("error while reading from old backing file");
2326 if (sector >= new_backing_num_sectors || !bs_new_backing) {
2327 memset(buf_new, 0, n * BDRV_SECTOR_SIZE);
2329 if (sector + n > new_backing_num_sectors) {
2330 n = new_backing_num_sectors - sector;
2333 ret = bdrv_read(bs_new_backing, sector, buf_new, n);
2335 error_report("error while reading from new backing file");
2340 /* If they differ, we need to write to the COW file */
2341 uint64_t written = 0;
2343 while (written < n) {
2346 if (compare_sectors(buf_old + written * 512,
2347 buf_new + written * 512, n - written, &pnum))
2349 ret = bdrv_write(bs, sector + written,
2350 buf_old + written * 512, pnum);
2352 error_report("Error while writing to COW image: %s",
2360 qemu_progress_print(local_progress, 100);
2363 qemu_vfree(buf_old);
2364 qemu_vfree(buf_new);
2368 * Change the backing file. All clusters that are different from the old
2369 * backing file are overwritten in the COW file now, so the visible content
2370 * doesn't change when we switch the backing file.
2372 if (out_baseimg && *out_baseimg) {
2373 ret = bdrv_change_backing_file(bs, out_baseimg, out_basefmt);
2375 ret = bdrv_change_backing_file(bs, NULL, NULL);
2378 if (ret == -ENOSPC) {
2379 error_report("Could not change the backing file to '%s': No "
2380 "space left in the file header", out_baseimg);
2381 } else if (ret < 0) {
2382 error_report("Could not change the backing file to '%s': %s",
2383 out_baseimg, strerror(-ret));
2386 qemu_progress_print(100, 0);
2388 * TODO At this point it is possible to check if any clusters that are
2389 * allocated in the COW file are the same in the backing file. If so, they
2390 * could be dropped from the COW file. Don't do this before switching the
2391 * backing file, in case of a crash this would lead to corruption.
2394 qemu_progress_end();
2397 if (bs_old_backing != NULL) {
2398 bdrv_unref(bs_old_backing);
2400 if (bs_new_backing != NULL) {
2401 bdrv_unref(bs_new_backing);
2412 static int img_resize(int argc, char **argv)
2414 int c, ret, relative;
2415 const char *filename, *fmt, *size;
2416 int64_t n, total_size;
2418 BlockDriverState *bs = NULL;
2420 static QemuOptsList resize_options = {
2421 .name = "resize_options",
2422 .head = QTAILQ_HEAD_INITIALIZER(resize_options.head),
2425 .name = BLOCK_OPT_SIZE,
2426 .type = QEMU_OPT_SIZE,
2427 .help = "Virtual disk size"
2434 /* Remove size from argv manually so that negative numbers are not treated
2435 * as options by getopt. */
2441 size = argv[--argc];
2443 /* Parse getopt arguments */
2446 c = getopt(argc, argv, "f:hq");
2463 if (optind != argc - 1) {
2466 filename = argv[optind++];
2468 /* Choose grow, shrink, or absolute resize mode */
2484 param = qemu_opts_create_nofail(&resize_options);
2485 if (qemu_opt_set(param, BLOCK_OPT_SIZE, size)) {
2486 /* Error message already printed when size parsing fails */
2488 qemu_opts_del(param);
2491 n = qemu_opt_get_size(param, BLOCK_OPT_SIZE, 0);
2492 qemu_opts_del(param);
2494 bs = bdrv_new_open(filename, fmt, BDRV_O_FLAGS | BDRV_O_RDWR, true, quiet);
2501 total_size = bdrv_getlength(bs) + n * relative;
2505 if (total_size <= 0) {
2506 error_report("New image size must be positive");
2511 ret = bdrv_truncate(bs, total_size);
2514 qprintf(quiet, "Image resized.\n");
2517 error_report("This image does not support resize");
2520 error_report("Image is read-only");
2523 error_report("Error resizing image (%d)", -ret);
2536 static int img_amend(int argc, char **argv)
2539 char *options = NULL;
2540 QEMUOptionParameter *create_options = NULL, *options_param = NULL;
2541 const char *fmt = NULL, *filename;
2543 BlockDriverState *bs = NULL;
2546 c = getopt(argc, argv, "hqf:o:");
2568 if (optind != argc - 1) {
2576 filename = argv[argc - 1];
2578 bs = bdrv_new_open(filename, fmt, BDRV_O_FLAGS | BDRV_O_RDWR, true, quiet);
2580 error_report("Could not open image '%s'", filename);
2585 fmt = bs->drv->format_name;
2587 if (is_help_option(options)) {
2588 ret = print_block_option_help(filename, fmt);
2592 create_options = append_option_parameters(create_options,
2593 bs->drv->create_options);
2594 options_param = parse_option_parameters(options, create_options,
2596 if (options_param == NULL) {
2597 error_report("Invalid options for file format '%s'", fmt);
2602 ret = bdrv_amend_options(bs, options_param);
2604 error_report("Error while amending options: %s", strerror(-ret));
2612 free_option_parameters(create_options);
2613 free_option_parameters(options_param);
2620 static const img_cmd_t img_cmds[] = {
2621 #define DEF(option, callback, arg_string) \
2622 { option, callback },
2623 #include "qemu-img-cmds.h"
2629 int main(int argc, char **argv)
2631 const img_cmd_t *cmd;
2632 const char *cmdname;
2635 signal(SIGPIPE, SIG_IGN);
2638 error_set_progname(argv[0]);
2640 qemu_init_main_loop();
2647 /* find the command */
2648 for(cmd = img_cmds; cmd->name != NULL; cmd++) {
2649 if (!strcmp(cmdname, cmd->name)) {
2650 return cmd->handler(argc, argv);