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 that must contain only zeros\n"
104 " for qemu-img to create a sparse image during conversion\n"
105 " '--output' takes the format in which the output must be done (human or json)\n"
106 " '-n' skips the target volume creation (useful if the volume is created\n"
107 " prior to running qemu-img)\n"
109 "Parameters to check subcommand:\n"
110 " '-r' tries to repair any inconsistencies that are found during the check.\n"
111 " '-r leaks' repairs only cluster leaks, whereas '-r all' fixes all\n"
112 " kinds of errors, with a higher risk of choosing the wrong fix or\n"
113 " hiding corruption that has already occurred.\n"
115 "Parameters to snapshot subcommand:\n"
116 " 'snapshot' is the name of the snapshot to create, apply or delete\n"
117 " '-a' applies a snapshot (revert disk to saved state)\n"
118 " '-c' creates a snapshot\n"
119 " '-d' deletes a snapshot\n"
120 " '-l' lists all snapshots in the given image\n"
122 "Parameters to compare subcommand:\n"
123 " '-f' first image format\n"
124 " '-F' second image format\n"
125 " '-s' run in Strict mode - fail on different image size or sector allocation\n";
127 printf("%s\nSupported formats:", help_msg);
128 bdrv_iterate_format(format_print, NULL);
133 static int GCC_FMT_ATTR(2, 3) qprintf(bool quiet, const char *fmt, ...)
139 ret = vprintf(fmt, args);
146 /* XXX: put correct support for win32 */
147 static int read_password(char *buf, int buf_size)
150 printf("Password: ");
157 if (i < (buf_size - 1))
168 static struct termios oldtty;
170 static void term_exit(void)
172 tcsetattr (0, TCSANOW, &oldtty);
175 static void term_init(void)
182 tty.c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP
183 |INLCR|IGNCR|ICRNL|IXON);
184 tty.c_oflag |= OPOST;
185 tty.c_lflag &= ~(ECHO|ECHONL|ICANON|IEXTEN);
186 tty.c_cflag &= ~(CSIZE|PARENB);
191 tcsetattr (0, TCSANOW, &tty);
196 static int read_password(char *buf, int buf_size)
201 printf("password: ");
206 ret = read(0, &ch, 1);
208 if (errno == EAGAIN || errno == EINTR) {
214 } else if (ret == 0) {
222 if (i < (buf_size - 1))
233 static int print_block_option_help(const char *filename, const char *fmt)
235 BlockDriver *drv, *proto_drv;
236 QEMUOptionParameter *create_options = NULL;
238 /* Find driver and parse its options */
239 drv = bdrv_find_format(fmt);
241 error_report("Unknown file format '%s'", fmt);
245 proto_drv = bdrv_find_protocol(filename, true);
247 error_report("Unknown protocol '%s'", filename);
251 create_options = append_option_parameters(create_options,
252 drv->create_options);
253 create_options = append_option_parameters(create_options,
254 proto_drv->create_options);
255 print_option_help(create_options);
256 free_option_parameters(create_options);
260 static BlockDriverState *bdrv_new_open(const char *filename,
266 BlockDriverState *bs;
269 Error *local_err = NULL;
272 bs = bdrv_new("image");
275 drv = bdrv_find_format(fmt);
277 error_report("Unknown file format '%s'", fmt);
284 ret = bdrv_open(bs, filename, NULL, flags, drv, &local_err);
286 error_report("Could not open '%s': %s", filename,
287 error_get_pretty(local_err));
288 error_free(local_err);
292 if (bdrv_is_encrypted(bs) && require_io) {
293 qprintf(quiet, "Disk image '%s' is encrypted.\n", filename);
294 if (read_password(password, sizeof(password)) < 0) {
295 error_report("No password given");
298 if (bdrv_set_key(bs, password) < 0) {
299 error_report("invalid password");
311 static int add_old_style_options(const char *fmt, QEMUOptionParameter *list,
312 const char *base_filename,
313 const char *base_fmt)
316 if (set_option_parameter(list, BLOCK_OPT_BACKING_FILE, base_filename)) {
317 error_report("Backing file not supported for file format '%s'",
323 if (set_option_parameter(list, BLOCK_OPT_BACKING_FMT, base_fmt)) {
324 error_report("Backing file format not supported for file "
332 static int img_create(int argc, char **argv)
335 uint64_t img_size = -1;
336 const char *fmt = "raw";
337 const char *base_fmt = NULL;
338 const char *filename;
339 const char *base_filename = NULL;
340 char *options = NULL;
341 Error *local_err = NULL;
345 c = getopt(argc, argv, "F:b:f:he6o:q");
358 base_filename = optarg;
364 error_report("option -e is deprecated, please use \'-o "
365 "encryption\' instead!");
368 error_report("option -6 is deprecated, please use \'-o "
369 "compat6\' instead!");
380 /* Get the filename */
381 if (optind >= argc) {
384 filename = argv[optind++];
386 /* Get image size, if specified */
390 sval = strtosz_suffix(argv[optind++], &end, STRTOSZ_DEFSUFFIX_B);
391 if (sval < 0 || *end) {
392 if (sval == -ERANGE) {
393 error_report("Image size must be less than 8 EiB!");
395 error_report("Invalid image size specified! You may use k, M, "
396 "G, T, P or E suffixes for ");
397 error_report("kilobytes, megabytes, gigabytes, terabytes, "
398 "petabytes and exabytes.");
402 img_size = (uint64_t)sval;
404 if (optind != argc) {
408 if (options && is_help_option(options)) {
409 return print_block_option_help(filename, fmt);
412 bdrv_img_create(filename, fmt, base_filename, base_fmt,
413 options, img_size, BDRV_O_FLAGS, &local_err, quiet);
414 if (error_is_set(&local_err)) {
415 error_report("%s", error_get_pretty(local_err));
416 error_free(local_err);
423 static void dump_json_image_check(ImageCheck *check, bool quiet)
427 QmpOutputVisitor *ov = qmp_output_visitor_new();
429 visit_type_ImageCheck(qmp_output_get_visitor(ov),
430 &check, NULL, &errp);
431 obj = qmp_output_get_qobject(ov);
432 str = qobject_to_json_pretty(obj);
434 qprintf(quiet, "%s\n", qstring_get_str(str));
436 qmp_output_visitor_cleanup(ov);
440 static void dump_human_image_check(ImageCheck *check, bool quiet)
442 if (!(check->corruptions || check->leaks || check->check_errors)) {
443 qprintf(quiet, "No errors were found on the image.\n");
445 if (check->corruptions) {
446 qprintf(quiet, "\n%" PRId64 " errors were found on the image.\n"
447 "Data may be corrupted, or further writes to the image "
454 "\n%" PRId64 " leaked clusters were found on the image.\n"
455 "This means waste of disk space, but no harm to data.\n",
459 if (check->check_errors) {
462 " internal errors have occurred during the check.\n",
463 check->check_errors);
467 if (check->total_clusters != 0 && check->allocated_clusters != 0) {
468 qprintf(quiet, "%" PRId64 "/%" PRId64 " = %0.2f%% allocated, "
469 "%0.2f%% fragmented, %0.2f%% compressed clusters\n",
470 check->allocated_clusters, check->total_clusters,
471 check->allocated_clusters * 100.0 / check->total_clusters,
472 check->fragmented_clusters * 100.0 / check->allocated_clusters,
473 check->compressed_clusters * 100.0 /
474 check->allocated_clusters);
477 if (check->image_end_offset) {
479 "Image end offset: %" PRId64 "\n", check->image_end_offset);
483 static int collect_image_check(BlockDriverState *bs,
485 const char *filename,
490 BdrvCheckResult result;
492 ret = bdrv_check(bs, &result, fix);
497 check->filename = g_strdup(filename);
498 check->format = g_strdup(bdrv_get_format_name(bs));
499 check->check_errors = result.check_errors;
500 check->corruptions = result.corruptions;
501 check->has_corruptions = result.corruptions != 0;
502 check->leaks = result.leaks;
503 check->has_leaks = result.leaks != 0;
504 check->corruptions_fixed = result.corruptions_fixed;
505 check->has_corruptions_fixed = result.corruptions != 0;
506 check->leaks_fixed = result.leaks_fixed;
507 check->has_leaks_fixed = result.leaks != 0;
508 check->image_end_offset = result.image_end_offset;
509 check->has_image_end_offset = result.image_end_offset != 0;
510 check->total_clusters = result.bfi.total_clusters;
511 check->has_total_clusters = result.bfi.total_clusters != 0;
512 check->allocated_clusters = result.bfi.allocated_clusters;
513 check->has_allocated_clusters = result.bfi.allocated_clusters != 0;
514 check->fragmented_clusters = result.bfi.fragmented_clusters;
515 check->has_fragmented_clusters = result.bfi.fragmented_clusters != 0;
516 check->compressed_clusters = result.bfi.compressed_clusters;
517 check->has_compressed_clusters = result.bfi.compressed_clusters != 0;
523 * Checks an image for consistency. Exit codes:
525 * 0 - Check completed, image is good
526 * 1 - Check not completed because of internal errors
527 * 2 - Check completed, image is corrupted
528 * 3 - Check completed, image has leaked clusters, but is good otherwise
530 static int img_check(int argc, char **argv)
533 OutputFormat output_format = OFORMAT_HUMAN;
534 const char *filename, *fmt, *output;
535 BlockDriverState *bs;
537 int flags = BDRV_O_FLAGS | BDRV_O_CHECK;
544 int option_index = 0;
545 static const struct option long_options[] = {
546 {"help", no_argument, 0, 'h'},
547 {"format", required_argument, 0, 'f'},
548 {"repair", no_argument, 0, 'r'},
549 {"output", required_argument, 0, OPTION_OUTPUT},
552 c = getopt_long(argc, argv, "f:hr:q",
553 long_options, &option_index);
566 flags |= BDRV_O_RDWR;
568 if (!strcmp(optarg, "leaks")) {
569 fix = BDRV_FIX_LEAKS;
570 } else if (!strcmp(optarg, "all")) {
571 fix = BDRV_FIX_LEAKS | BDRV_FIX_ERRORS;
584 if (optind != argc - 1) {
587 filename = argv[optind++];
589 if (output && !strcmp(output, "json")) {
590 output_format = OFORMAT_JSON;
591 } else if (output && !strcmp(output, "human")) {
592 output_format = OFORMAT_HUMAN;
594 error_report("--output must be used with human or json as argument.");
598 bs = bdrv_new_open(filename, fmt, flags, true, quiet);
603 check = g_new0(ImageCheck, 1);
604 ret = collect_image_check(bs, check, filename, fmt, fix);
606 if (ret == -ENOTSUP) {
607 if (output_format == OFORMAT_HUMAN) {
608 error_report("This image format does not support checks");
614 if (check->corruptions_fixed || check->leaks_fixed) {
615 int corruptions_fixed, leaks_fixed;
617 leaks_fixed = check->leaks_fixed;
618 corruptions_fixed = check->corruptions_fixed;
620 if (output_format == OFORMAT_HUMAN) {
622 "The following inconsistencies were found and repaired:\n\n"
623 " %" PRId64 " leaked clusters\n"
624 " %" PRId64 " corruptions\n\n"
625 "Double checking the fixed image now...\n",
627 check->corruptions_fixed);
630 ret = collect_image_check(bs, check, filename, fmt, 0);
632 check->leaks_fixed = leaks_fixed;
633 check->corruptions_fixed = corruptions_fixed;
636 switch (output_format) {
638 dump_human_image_check(check, quiet);
641 dump_json_image_check(check, quiet);
645 if (ret || check->check_errors) {
650 if (check->corruptions) {
652 } else if (check->leaks) {
659 qapi_free_ImageCheck(check);
665 static int img_commit(int argc, char **argv)
668 const char *filename, *fmt, *cache;
669 BlockDriverState *bs;
673 cache = BDRV_DEFAULT_CACHE;
675 c = getopt(argc, argv, "f:ht:q");
695 if (optind != argc - 1) {
698 filename = argv[optind++];
701 ret = bdrv_parse_cache_flags(cache, &flags);
703 error_report("Invalid cache option: %s", cache);
707 bs = bdrv_new_open(filename, fmt, flags, true, quiet);
711 ret = bdrv_commit(bs);
714 qprintf(quiet, "Image committed.\n");
717 error_report("No disk inserted");
720 error_report("Image is read-only");
723 error_report("Image is already committed");
726 error_report("Error while committing image");
738 * Returns true iff the first sector pointed to by 'buf' contains at least
741 * 'pnum' is set to the number of sectors (including and immediately following
742 * the first one) that are known to be in the same allocated/unallocated state.
744 static int is_allocated_sectors(const uint8_t *buf, int n, int *pnum)
753 is_zero = buffer_is_zero(buf, 512);
754 for(i = 1; i < n; i++) {
756 if (is_zero != buffer_is_zero(buf, 512)) {
765 * Like is_allocated_sectors, but if the buffer starts with a used sector,
766 * up to 'min' consecutive sectors containing zeros are ignored. This avoids
767 * breaking up write requests for only small sparse areas.
769 static int is_allocated_sectors_min(const uint8_t *buf, int n, int *pnum,
773 int num_checked, num_used;
779 ret = is_allocated_sectors(buf, n, pnum);
785 buf += BDRV_SECTOR_SIZE * *pnum;
787 num_checked = num_used;
790 ret = is_allocated_sectors(buf, n, pnum);
792 buf += BDRV_SECTOR_SIZE * *pnum;
794 num_checked += *pnum;
796 num_used = num_checked;
797 } else if (*pnum >= min) {
807 * Compares two buffers sector by sector. Returns 0 if the first sector of both
808 * buffers matches, non-zero otherwise.
810 * pnum is set to the number of sectors (including and immediately following
811 * the first one) that are known to have the same comparison result
813 static int compare_sectors(const uint8_t *buf1, const uint8_t *buf2, int n,
823 res = !!memcmp(buf1, buf2, 512);
824 for(i = 1; i < n; i++) {
828 if (!!memcmp(buf1, buf2, 512) != res) {
837 #define IO_BUF_SIZE (2 * 1024 * 1024)
839 static int64_t sectors_to_bytes(int64_t sectors)
841 return sectors << BDRV_SECTOR_BITS;
844 static int64_t sectors_to_process(int64_t total, int64_t from)
846 return MIN(total - from, IO_BUF_SIZE >> BDRV_SECTOR_BITS);
850 * Check if passed sectors are empty (not allocated or contain only 0 bytes)
852 * Returns 0 in case sectors are filled with 0, 1 if sectors contain non-zero
853 * data and negative value on error.
855 * @param bs: Driver used for accessing file
856 * @param sect_num: Number of first sector to check
857 * @param sect_count: Number of sectors to check
858 * @param filename: Name of disk file we are checking (logging purpose)
859 * @param buffer: Allocated buffer for storing read data
860 * @param quiet: Flag for quiet mode
862 static int check_empty_sectors(BlockDriverState *bs, int64_t sect_num,
863 int sect_count, const char *filename,
864 uint8_t *buffer, bool quiet)
867 ret = bdrv_read(bs, sect_num, buffer, sect_count);
869 error_report("Error while reading offset %" PRId64 " of %s: %s",
870 sectors_to_bytes(sect_num), filename, strerror(-ret));
873 ret = is_allocated_sectors(buffer, sect_count, &pnum);
874 if (ret || pnum != sect_count) {
875 qprintf(quiet, "Content mismatch at offset %" PRId64 "!\n",
876 sectors_to_bytes(ret ? sect_num : sect_num + pnum));
884 * Compares two images. Exit codes:
886 * 0 - Images are identical
888 * >1 - Error occurred
890 static int img_compare(int argc, char **argv)
892 const char *fmt1 = NULL, *fmt2 = NULL, *filename1, *filename2;
893 BlockDriverState *bs1, *bs2;
894 int64_t total_sectors1, total_sectors2;
895 uint8_t *buf1 = NULL, *buf2 = NULL;
897 int allocated1, allocated2;
898 int ret = 0; /* return value - 0 Ident, 1 Different, >1 Error */
899 bool progress = false, quiet = false, strict = false;
900 int64_t total_sectors;
901 int64_t sector_num = 0;
905 uint64_t progress_base;
908 c = getopt(argc, argv, "hpf:F:sq");
935 /* Progress is not shown in Quiet mode */
941 if (optind != argc - 2) {
944 filename1 = argv[optind++];
945 filename2 = argv[optind++];
947 /* Initialize before goto out */
948 qemu_progress_init(progress, 2.0);
950 bs1 = bdrv_new_open(filename1, fmt1, BDRV_O_FLAGS, true, quiet);
952 error_report("Can't open file %s", filename1);
957 bs2 = bdrv_new_open(filename2, fmt2, BDRV_O_FLAGS, true, quiet);
959 error_report("Can't open file %s", filename2);
964 buf1 = qemu_blockalign(bs1, IO_BUF_SIZE);
965 buf2 = qemu_blockalign(bs2, IO_BUF_SIZE);
966 bdrv_get_geometry(bs1, &bs_sectors);
967 total_sectors1 = bs_sectors;
968 bdrv_get_geometry(bs2, &bs_sectors);
969 total_sectors2 = bs_sectors;
970 total_sectors = MIN(total_sectors1, total_sectors2);
971 progress_base = MAX(total_sectors1, total_sectors2);
973 qemu_progress_print(0, 100);
975 if (strict && total_sectors1 != total_sectors2) {
977 qprintf(quiet, "Strict mode: Image size mismatch!\n");
982 nb_sectors = sectors_to_process(total_sectors, sector_num);
983 if (nb_sectors <= 0) {
986 allocated1 = bdrv_is_allocated_above(bs1, NULL, sector_num, nb_sectors,
988 if (allocated1 < 0) {
990 error_report("Sector allocation test failed for %s", filename1);
994 allocated2 = bdrv_is_allocated_above(bs2, NULL, sector_num, nb_sectors,
996 if (allocated2 < 0) {
998 error_report("Sector allocation test failed for %s", filename2);
1001 nb_sectors = MIN(pnum1, pnum2);
1003 if (allocated1 == allocated2) {
1005 ret = bdrv_read(bs1, sector_num, buf1, nb_sectors);
1007 error_report("Error while reading offset %" PRId64 " of %s:"
1008 " %s", sectors_to_bytes(sector_num), filename1,
1013 ret = bdrv_read(bs2, sector_num, buf2, nb_sectors);
1015 error_report("Error while reading offset %" PRId64
1016 " of %s: %s", sectors_to_bytes(sector_num),
1017 filename2, strerror(-ret));
1021 ret = compare_sectors(buf1, buf2, nb_sectors, &pnum);
1022 if (ret || pnum != nb_sectors) {
1024 qprintf(quiet, "Content mismatch at offset %" PRId64 "!\n",
1026 ret ? sector_num : sector_num + pnum));
1033 qprintf(quiet, "Strict mode: Offset %" PRId64
1034 " allocation mismatch!\n",
1035 sectors_to_bytes(sector_num));
1040 ret = check_empty_sectors(bs1, sector_num, nb_sectors,
1041 filename1, buf1, quiet);
1043 ret = check_empty_sectors(bs2, sector_num, nb_sectors,
1044 filename2, buf1, quiet);
1049 error_report("Error while reading offset %" PRId64 ": %s",
1050 sectors_to_bytes(sector_num), strerror(-ret));
1055 sector_num += nb_sectors;
1056 qemu_progress_print(((float) nb_sectors / progress_base)*100, 100);
1059 if (total_sectors1 != total_sectors2) {
1060 BlockDriverState *bs_over;
1061 int64_t total_sectors_over;
1062 const char *filename_over;
1064 qprintf(quiet, "Warning: Image size mismatch!\n");
1065 if (total_sectors1 > total_sectors2) {
1066 total_sectors_over = total_sectors1;
1068 filename_over = filename1;
1070 total_sectors_over = total_sectors2;
1072 filename_over = filename2;
1076 nb_sectors = sectors_to_process(total_sectors_over, sector_num);
1077 if (nb_sectors <= 0) {
1080 ret = bdrv_is_allocated_above(bs_over, NULL, sector_num,
1084 error_report("Sector allocation test failed for %s",
1091 ret = check_empty_sectors(bs_over, sector_num, nb_sectors,
1092 filename_over, buf1, quiet);
1096 error_report("Error while reading offset %" PRId64
1097 " of %s: %s", sectors_to_bytes(sector_num),
1098 filename_over, strerror(-ret));
1103 sector_num += nb_sectors;
1104 qemu_progress_print(((float) nb_sectors / progress_base)*100, 100);
1108 qprintf(quiet, "Images are identical.\n");
1118 qemu_progress_end();
1122 static int img_convert(int argc, char **argv)
1124 int c, ret = 0, n, n1, bs_n, bs_i, compress, cluster_size,
1125 cluster_sectors, skip_create;
1126 int progress = 0, flags;
1127 const char *fmt, *out_fmt, *cache, *out_baseimg, *out_filename;
1128 BlockDriver *drv, *proto_drv;
1129 BlockDriverState **bs = NULL, *out_bs = NULL;
1130 int64_t total_sectors, nb_sectors, sector_num, bs_offset;
1131 uint64_t bs_sectors;
1132 uint8_t * buf = NULL;
1133 const uint8_t *buf1;
1134 BlockDriverInfo bdi;
1135 QEMUOptionParameter *param = NULL, *create_options = NULL;
1136 QEMUOptionParameter *out_baseimg_param;
1137 char *options = NULL;
1138 const char *snapshot_name = NULL;
1139 float local_progress = 0;
1140 int min_sparse = 8; /* Need at least 4k of zeros for sparse detection */
1150 c = getopt(argc, argv, "f:O:B:s:hce6o:pS:t:qn");
1166 out_baseimg = optarg;
1172 error_report("option -e is deprecated, please use \'-o "
1173 "encryption\' instead!");
1176 error_report("option -6 is deprecated, please use \'-o "
1177 "compat6\' instead!");
1183 snapshot_name = optarg;
1189 sval = strtosz_suffix(optarg, &end, STRTOSZ_DEFSUFFIX_B);
1190 if (sval < 0 || *end) {
1191 error_report("Invalid minimum zero buffer size for sparse output specified");
1195 min_sparse = sval / BDRV_SECTOR_SIZE;
1217 bs_n = argc - optind - 1;
1222 out_filename = argv[argc - 1];
1224 /* Initialize before goto out */
1225 qemu_progress_init(progress, 2.0);
1227 if (options && is_help_option(options)) {
1228 ret = print_block_option_help(out_filename, out_fmt);
1232 if (bs_n > 1 && out_baseimg) {
1233 error_report("-B makes no sense when concatenating multiple input "
1239 qemu_progress_print(0, 100);
1241 bs = g_malloc0(bs_n * sizeof(BlockDriverState *));
1244 for (bs_i = 0; bs_i < bs_n; bs_i++) {
1245 bs[bs_i] = bdrv_new_open(argv[optind + bs_i], fmt, BDRV_O_FLAGS, true,
1248 error_report("Could not open '%s'", argv[optind + bs_i]);
1252 bdrv_get_geometry(bs[bs_i], &bs_sectors);
1253 total_sectors += bs_sectors;
1256 if (snapshot_name != NULL) {
1258 error_report("No support for concatenating multiple snapshot");
1262 if (bdrv_snapshot_load_tmp(bs[0], snapshot_name) < 0) {
1263 error_report("Failed to load snapshot");
1269 /* Find driver and parse its options */
1270 drv = bdrv_find_format(out_fmt);
1272 error_report("Unknown file format '%s'", out_fmt);
1277 proto_drv = bdrv_find_protocol(out_filename, true);
1279 error_report("Unknown protocol '%s'", out_filename);
1284 create_options = append_option_parameters(create_options,
1285 drv->create_options);
1286 create_options = append_option_parameters(create_options,
1287 proto_drv->create_options);
1290 param = parse_option_parameters(options, create_options, param);
1291 if (param == NULL) {
1292 error_report("Invalid options for file format '%s'.", out_fmt);
1297 param = parse_option_parameters("", create_options, param);
1300 set_option_parameter_int(param, BLOCK_OPT_SIZE, total_sectors * 512);
1301 ret = add_old_style_options(out_fmt, param, out_baseimg, NULL);
1306 /* Get backing file name if -o backing_file was used */
1307 out_baseimg_param = get_option_parameter(param, BLOCK_OPT_BACKING_FILE);
1308 if (out_baseimg_param) {
1309 out_baseimg = out_baseimg_param->value.s;
1312 /* Check if compression is supported */
1314 QEMUOptionParameter *encryption =
1315 get_option_parameter(param, BLOCK_OPT_ENCRYPT);
1316 QEMUOptionParameter *preallocation =
1317 get_option_parameter(param, BLOCK_OPT_PREALLOC);
1319 if (!drv->bdrv_write_compressed) {
1320 error_report("Compression not supported for this file format");
1325 if (encryption && encryption->value.n) {
1326 error_report("Compression and encryption not supported at "
1332 if (preallocation && preallocation->value.s
1333 && strcmp(preallocation->value.s, "off"))
1335 error_report("Compression and preallocation not supported at "
1343 /* Create the new image */
1344 ret = bdrv_create(drv, out_filename, param);
1346 if (ret == -ENOTSUP) {
1347 error_report("Formatting not supported for file format '%s'",
1349 } else if (ret == -EFBIG) {
1350 error_report("The image size is too large for file format '%s'",
1353 error_report("%s: error while converting %s: %s",
1354 out_filename, out_fmt, strerror(-ret));
1360 flags = BDRV_O_RDWR;
1361 ret = bdrv_parse_cache_flags(cache, &flags);
1363 error_report("Invalid cache option: %s", cache);
1367 out_bs = bdrv_new_open(out_filename, out_fmt, flags, true, quiet);
1375 bdrv_get_geometry(bs[0], &bs_sectors);
1376 buf = qemu_blockalign(out_bs, IO_BUF_SIZE);
1379 int64_t output_length = bdrv_getlength(out_bs);
1380 if (output_length < 0) {
1381 error_report("unable to get output image length: %s\n",
1382 strerror(-output_length));
1385 } else if (output_length < total_sectors << BDRV_SECTOR_BITS) {
1386 error_report("output file is smaller than input file");
1393 ret = bdrv_get_info(out_bs, &bdi);
1395 error_report("could not get block driver info");
1398 cluster_size = bdi.cluster_size;
1399 if (cluster_size <= 0 || cluster_size > IO_BUF_SIZE) {
1400 error_report("invalid cluster size");
1404 cluster_sectors = cluster_size >> 9;
1407 nb_sectors = total_sectors;
1408 if (nb_sectors != 0) {
1409 local_progress = (float)100 /
1410 (nb_sectors / MIN(nb_sectors, cluster_sectors));
1418 nb_sectors = total_sectors - sector_num;
1419 if (nb_sectors <= 0)
1421 if (nb_sectors >= cluster_sectors)
1422 n = cluster_sectors;
1426 bs_num = sector_num - bs_offset;
1427 assert (bs_num >= 0);
1430 while (remainder > 0) {
1432 while (bs_num == bs_sectors) {
1434 assert (bs_i < bs_n);
1435 bs_offset += bs_sectors;
1436 bdrv_get_geometry(bs[bs_i], &bs_sectors);
1438 /* printf("changing part: sector_num=%" PRId64 ", "
1439 "bs_i=%d, bs_offset=%" PRId64 ", bs_sectors=%" PRId64
1440 "\n", sector_num, bs_i, bs_offset, bs_sectors); */
1442 assert (bs_num < bs_sectors);
1444 nlow = (remainder > bs_sectors - bs_num) ? bs_sectors - bs_num : remainder;
1446 ret = bdrv_read(bs[bs_i], bs_num, buf2, nlow);
1448 error_report("error while reading sector %" PRId64 ": %s",
1449 bs_num, strerror(-ret));
1458 assert (remainder == 0);
1460 if (!buffer_is_zero(buf, n * BDRV_SECTOR_SIZE)) {
1461 ret = bdrv_write_compressed(out_bs, sector_num, buf, n);
1463 error_report("error while compressing sector %" PRId64
1464 ": %s", sector_num, strerror(-ret));
1469 qemu_progress_print(local_progress, 100);
1471 /* signal EOF to align */
1472 bdrv_write_compressed(out_bs, 0, NULL, 0);
1474 int has_zero_init = bdrv_has_zero_init(out_bs);
1476 sector_num = 0; // total number of sectors converted so far
1477 nb_sectors = total_sectors - sector_num;
1478 if (nb_sectors != 0) {
1479 local_progress = (float)100 /
1480 (nb_sectors / MIN(nb_sectors, IO_BUF_SIZE / 512));
1484 nb_sectors = total_sectors - sector_num;
1485 if (nb_sectors <= 0) {
1488 if (nb_sectors >= (IO_BUF_SIZE / 512)) {
1489 n = (IO_BUF_SIZE / 512);
1494 while (sector_num - bs_offset >= bs_sectors) {
1496 assert (bs_i < bs_n);
1497 bs_offset += bs_sectors;
1498 bdrv_get_geometry(bs[bs_i], &bs_sectors);
1499 /* printf("changing part: sector_num=%" PRId64 ", bs_i=%d, "
1500 "bs_offset=%" PRId64 ", bs_sectors=%" PRId64 "\n",
1501 sector_num, bs_i, bs_offset, bs_sectors); */
1504 if (n > bs_offset + bs_sectors - sector_num) {
1505 n = bs_offset + bs_sectors - sector_num;
1508 /* If the output image is being created as a copy on write image,
1509 assume that sectors which are unallocated in the input image
1510 are present in both the output's and input's base images (no
1511 need to copy them). */
1513 ret = bdrv_is_allocated(bs[bs_i], sector_num - bs_offset,
1516 error_report("error while reading metadata for sector "
1518 sector_num - bs_offset, strerror(-ret));
1525 /* The next 'n1' sectors are allocated in the input image. Copy
1526 only those as they may be followed by unallocated sectors. */
1532 ret = bdrv_read(bs[bs_i], sector_num - bs_offset, buf, n);
1534 error_report("error while reading sector %" PRId64 ": %s",
1535 sector_num - bs_offset, strerror(-ret));
1538 /* NOTE: at the same time we convert, we do not write zero
1539 sectors to have a chance to compress the image. Ideally, we
1540 should add a specific call to have the info to go faster */
1543 if (!has_zero_init ||
1544 is_allocated_sectors_min(buf1, n, &n1, min_sparse)) {
1545 ret = bdrv_write(out_bs, sector_num, buf1, n1);
1547 error_report("error while writing sector %" PRId64
1548 ": %s", sector_num, strerror(-ret));
1556 qemu_progress_print(local_progress, 100);
1560 qemu_progress_end();
1561 free_option_parameters(create_options);
1562 free_option_parameters(param);
1568 for (bs_i = 0; bs_i < bs_n; bs_i++) {
1570 bdrv_unref(bs[bs_i]);
1582 static void dump_snapshots(BlockDriverState *bs)
1584 QEMUSnapshotInfo *sn_tab, *sn;
1587 nb_sns = bdrv_snapshot_list(bs, &sn_tab);
1590 printf("Snapshot list:\n");
1591 bdrv_snapshot_dump(fprintf, stdout, NULL);
1593 for(i = 0; i < nb_sns; i++) {
1595 bdrv_snapshot_dump(fprintf, stdout, sn);
1601 static void dump_json_image_info_list(ImageInfoList *list)
1605 QmpOutputVisitor *ov = qmp_output_visitor_new();
1607 visit_type_ImageInfoList(qmp_output_get_visitor(ov),
1608 &list, NULL, &errp);
1609 obj = qmp_output_get_qobject(ov);
1610 str = qobject_to_json_pretty(obj);
1611 assert(str != NULL);
1612 printf("%s\n", qstring_get_str(str));
1613 qobject_decref(obj);
1614 qmp_output_visitor_cleanup(ov);
1618 static void dump_json_image_info(ImageInfo *info)
1622 QmpOutputVisitor *ov = qmp_output_visitor_new();
1624 visit_type_ImageInfo(qmp_output_get_visitor(ov),
1625 &info, NULL, &errp);
1626 obj = qmp_output_get_qobject(ov);
1627 str = qobject_to_json_pretty(obj);
1628 assert(str != NULL);
1629 printf("%s\n", qstring_get_str(str));
1630 qobject_decref(obj);
1631 qmp_output_visitor_cleanup(ov);
1635 static void dump_human_image_info_list(ImageInfoList *list)
1637 ImageInfoList *elem;
1640 for (elem = list; elem; elem = elem->next) {
1646 bdrv_image_info_dump(fprintf, stdout, elem->value);
1650 static gboolean str_equal_func(gconstpointer a, gconstpointer b)
1652 return strcmp(a, b) == 0;
1656 * Open an image file chain and return an ImageInfoList
1658 * @filename: topmost image filename
1659 * @fmt: topmost image format (may be NULL to autodetect)
1660 * @chain: true - enumerate entire backing file chain
1661 * false - only topmost image file
1663 * Returns a list of ImageInfo objects or NULL if there was an error opening an
1664 * image file. If there was an error a message will have been printed to
1667 static ImageInfoList *collect_image_info_list(const char *filename,
1671 ImageInfoList *head = NULL;
1672 ImageInfoList **last = &head;
1673 GHashTable *filenames;
1676 filenames = g_hash_table_new_full(g_str_hash, str_equal_func, NULL, NULL);
1679 BlockDriverState *bs;
1681 ImageInfoList *elem;
1683 if (g_hash_table_lookup_extended(filenames, filename, NULL, NULL)) {
1684 error_report("Backing file '%s' creates an infinite loop.",
1688 g_hash_table_insert(filenames, (gpointer)filename, NULL);
1690 bs = bdrv_new_open(filename, fmt, BDRV_O_FLAGS | BDRV_O_NO_BACKING,
1696 bdrv_query_image_info(bs, &info, &err);
1697 if (error_is_set(&err)) {
1698 error_report("%s", error_get_pretty(err));
1703 elem = g_new0(ImageInfoList, 1);
1710 filename = fmt = NULL;
1712 if (info->has_full_backing_filename) {
1713 filename = info->full_backing_filename;
1714 } else if (info->has_backing_filename) {
1715 filename = info->backing_filename;
1717 if (info->has_backing_filename_format) {
1718 fmt = info->backing_filename_format;
1722 g_hash_table_destroy(filenames);
1726 qapi_free_ImageInfoList(head);
1727 g_hash_table_destroy(filenames);
1731 static int img_info(int argc, char **argv)
1734 OutputFormat output_format = OFORMAT_HUMAN;
1736 const char *filename, *fmt, *output;
1737 ImageInfoList *list;
1742 int option_index = 0;
1743 static const struct option long_options[] = {
1744 {"help", no_argument, 0, 'h'},
1745 {"format", required_argument, 0, 'f'},
1746 {"output", required_argument, 0, OPTION_OUTPUT},
1747 {"backing-chain", no_argument, 0, OPTION_BACKING_CHAIN},
1750 c = getopt_long(argc, argv, "f:h",
1751 long_options, &option_index);
1766 case OPTION_BACKING_CHAIN:
1771 if (optind != argc - 1) {
1774 filename = argv[optind++];
1776 if (output && !strcmp(output, "json")) {
1777 output_format = OFORMAT_JSON;
1778 } else if (output && !strcmp(output, "human")) {
1779 output_format = OFORMAT_HUMAN;
1780 } else if (output) {
1781 error_report("--output must be used with human or json as argument.");
1785 list = collect_image_info_list(filename, fmt, chain);
1790 switch (output_format) {
1792 dump_human_image_info_list(list);
1796 dump_json_image_info_list(list);
1798 dump_json_image_info(list->value);
1803 qapi_free_ImageInfoList(list);
1808 typedef struct MapEntry {
1814 BlockDriverState *bs;
1817 static void dump_map_entry(OutputFormat output_format, MapEntry *e,
1820 switch (output_format) {
1822 if ((e->flags & BDRV_BLOCK_DATA) &&
1823 !(e->flags & BDRV_BLOCK_OFFSET_VALID)) {
1824 error_report("File contains external, encrypted or compressed clusters.");
1827 if ((e->flags & (BDRV_BLOCK_DATA|BDRV_BLOCK_ZERO)) == BDRV_BLOCK_DATA) {
1828 printf("%#-16"PRIx64"%#-16"PRIx64"%#-16"PRIx64"%s\n",
1829 e->start, e->length, e->offset, e->bs->filename);
1831 /* This format ignores the distinction between 0, ZERO and ZERO|DATA.
1832 * Modify the flags here to allow more coalescing.
1835 (next->flags & (BDRV_BLOCK_DATA|BDRV_BLOCK_ZERO)) != BDRV_BLOCK_DATA) {
1836 next->flags &= ~BDRV_BLOCK_DATA;
1837 next->flags |= BDRV_BLOCK_ZERO;
1841 printf("%s{ \"start\": %"PRId64", \"length\": %"PRId64", \"depth\": %d,"
1842 " \"zero\": %s, \"data\": %s",
1843 (e->start == 0 ? "[" : ",\n"),
1844 e->start, e->length, e->depth,
1845 (e->flags & BDRV_BLOCK_ZERO) ? "true" : "false",
1846 (e->flags & BDRV_BLOCK_DATA) ? "true" : "false");
1847 if (e->flags & BDRV_BLOCK_OFFSET_VALID) {
1848 printf(", 'offset': %"PRId64"", e->offset);
1859 static int get_block_status(BlockDriverState *bs, int64_t sector_num,
1860 int nb_sectors, MapEntry *e)
1865 /* As an optimization, we could cache the current range of unallocated
1866 * clusters in each file of the chain, and avoid querying the same
1872 ret = bdrv_get_block_status(bs, sector_num, nb_sectors, &nb_sectors);
1877 if (ret & (BDRV_BLOCK_ZERO|BDRV_BLOCK_DATA)) {
1880 bs = bs->backing_hd;
1889 e->start = sector_num * BDRV_SECTOR_SIZE;
1890 e->length = nb_sectors * BDRV_SECTOR_SIZE;
1891 e->flags = ret & ~BDRV_BLOCK_OFFSET_MASK;
1892 e->offset = ret & BDRV_BLOCK_OFFSET_MASK;
1898 static int img_map(int argc, char **argv)
1901 OutputFormat output_format = OFORMAT_HUMAN;
1902 BlockDriverState *bs;
1903 const char *filename, *fmt, *output;
1905 MapEntry curr = { .length = 0 }, next;
1911 int option_index = 0;
1912 static const struct option long_options[] = {
1913 {"help", no_argument, 0, 'h'},
1914 {"format", required_argument, 0, 'f'},
1915 {"output", required_argument, 0, OPTION_OUTPUT},
1918 c = getopt_long(argc, argv, "f:h",
1919 long_options, &option_index);
1936 if (optind >= argc) {
1939 filename = argv[optind++];
1941 if (output && !strcmp(output, "json")) {
1942 output_format = OFORMAT_JSON;
1943 } else if (output && !strcmp(output, "human")) {
1944 output_format = OFORMAT_HUMAN;
1945 } else if (output) {
1946 error_report("--output must be used with human or json as argument.");
1950 bs = bdrv_new_open(filename, fmt, BDRV_O_FLAGS, true, false);
1955 if (output_format == OFORMAT_HUMAN) {
1956 printf("%-16s%-16s%-16s%s\n", "Offset", "Length", "Mapped to", "File");
1959 length = bdrv_getlength(bs);
1960 while (curr.start + curr.length < length) {
1961 int64_t nsectors_left;
1965 sector_num = (curr.start + curr.length) >> BDRV_SECTOR_BITS;
1967 /* Probe up to 1 GiB at a time. */
1968 nsectors_left = DIV_ROUND_UP(length, BDRV_SECTOR_SIZE) - sector_num;
1969 n = MIN(1 << (30 - BDRV_SECTOR_BITS), nsectors_left);
1970 ret = get_block_status(bs, sector_num, n, &next);
1973 error_report("Could not read file metadata: %s", strerror(-ret));
1977 if (curr.length != 0 && curr.flags == next.flags &&
1978 curr.depth == next.depth &&
1979 ((curr.flags & BDRV_BLOCK_OFFSET_VALID) == 0 ||
1980 curr.offset + curr.length == next.offset)) {
1981 curr.length += next.length;
1985 if (curr.length > 0) {
1986 dump_map_entry(output_format, &curr, &next);
1991 dump_map_entry(output_format, &curr, NULL);
1998 #define SNAPSHOT_LIST 1
1999 #define SNAPSHOT_CREATE 2
2000 #define SNAPSHOT_APPLY 3
2001 #define SNAPSHOT_DELETE 4
2003 static int img_snapshot(int argc, char **argv)
2005 BlockDriverState *bs;
2006 QEMUSnapshotInfo sn;
2007 char *filename, *snapshot_name = NULL;
2008 int c, ret = 0, bdrv_oflags;
2014 bdrv_oflags = BDRV_O_FLAGS | BDRV_O_RDWR;
2015 /* Parse commandline parameters */
2017 c = getopt(argc, argv, "la:c:d:hq");
2031 action = SNAPSHOT_LIST;
2032 bdrv_oflags &= ~BDRV_O_RDWR; /* no need for RW */
2039 action = SNAPSHOT_APPLY;
2040 snapshot_name = optarg;
2047 action = SNAPSHOT_CREATE;
2048 snapshot_name = optarg;
2055 action = SNAPSHOT_DELETE;
2056 snapshot_name = optarg;
2064 if (optind != argc - 1) {
2067 filename = argv[optind++];
2069 /* Open the image */
2070 bs = bdrv_new_open(filename, NULL, bdrv_oflags, true, quiet);
2075 /* Perform the requested action */
2081 case SNAPSHOT_CREATE:
2082 memset(&sn, 0, sizeof(sn));
2083 pstrcpy(sn.name, sizeof(sn.name), snapshot_name);
2085 qemu_gettimeofday(&tv);
2086 sn.date_sec = tv.tv_sec;
2087 sn.date_nsec = tv.tv_usec * 1000;
2089 ret = bdrv_snapshot_create(bs, &sn);
2091 error_report("Could not create snapshot '%s': %d (%s)",
2092 snapshot_name, ret, strerror(-ret));
2096 case SNAPSHOT_APPLY:
2097 ret = bdrv_snapshot_goto(bs, snapshot_name);
2099 error_report("Could not apply snapshot '%s': %d (%s)",
2100 snapshot_name, ret, strerror(-ret));
2104 case SNAPSHOT_DELETE:
2105 bdrv_snapshot_delete_by_id_or_name(bs, snapshot_name, &err);
2106 if (error_is_set(&err)) {
2107 error_report("Could not delete snapshot '%s': (%s)",
2108 snapshot_name, error_get_pretty(err));
2123 static int img_rebase(int argc, char **argv)
2125 BlockDriverState *bs, *bs_old_backing = NULL, *bs_new_backing = NULL;
2126 BlockDriver *old_backing_drv, *new_backing_drv;
2128 const char *fmt, *cache, *out_basefmt, *out_baseimg;
2133 Error *local_err = NULL;
2135 /* Parse commandline parameters */
2137 cache = BDRV_DEFAULT_CACHE;
2141 c = getopt(argc, argv, "uhf:F:b:pt:q");
2154 out_basefmt = optarg;
2157 out_baseimg = optarg;
2178 if ((optind != argc - 1) || (!unsafe && !out_baseimg)) {
2181 filename = argv[optind++];
2183 qemu_progress_init(progress, 2.0);
2184 qemu_progress_print(0, 100);
2186 flags = BDRV_O_RDWR | (unsafe ? BDRV_O_NO_BACKING : 0);
2187 ret = bdrv_parse_cache_flags(cache, &flags);
2189 error_report("Invalid cache option: %s", cache);
2196 * Ignore the old backing file for unsafe rebase in case we want to correct
2197 * the reference to a renamed or moved backing file.
2199 bs = bdrv_new_open(filename, fmt, flags, true, quiet);
2204 /* Find the right drivers for the backing files */
2205 old_backing_drv = NULL;
2206 new_backing_drv = NULL;
2208 if (!unsafe && bs->backing_format[0] != '\0') {
2209 old_backing_drv = bdrv_find_format(bs->backing_format);
2210 if (old_backing_drv == NULL) {
2211 error_report("Invalid format name: '%s'", bs->backing_format);
2217 if (out_basefmt != NULL) {
2218 new_backing_drv = bdrv_find_format(out_basefmt);
2219 if (new_backing_drv == NULL) {
2220 error_report("Invalid format name: '%s'", out_basefmt);
2226 /* For safe rebasing we need to compare old and new backing file */
2228 /* Make the compiler happy */
2229 bs_old_backing = NULL;
2230 bs_new_backing = NULL;
2232 char backing_name[1024];
2234 bs_old_backing = bdrv_new("old_backing");
2235 bdrv_get_backing_filename(bs, backing_name, sizeof(backing_name));
2236 ret = bdrv_open(bs_old_backing, backing_name, NULL, BDRV_O_FLAGS,
2237 old_backing_drv, &local_err);
2239 error_report("Could not open old backing file '%s': %s",
2240 backing_name, error_get_pretty(local_err));
2241 error_free(local_err);
2244 if (out_baseimg[0]) {
2245 bs_new_backing = bdrv_new("new_backing");
2246 ret = bdrv_open(bs_new_backing, out_baseimg, NULL, BDRV_O_FLAGS,
2247 new_backing_drv, &local_err);
2249 error_report("Could not open new backing file '%s': %s",
2250 out_baseimg, error_get_pretty(local_err));
2251 error_free(local_err);
2258 * Check each unallocated cluster in the COW file. If it is unallocated,
2259 * accesses go to the backing file. We must therefore compare this cluster
2260 * in the old and new backing file, and if they differ we need to copy it
2261 * from the old backing file into the COW file.
2263 * If qemu-img crashes during this step, no harm is done. The content of
2264 * the image is the same as the original one at any time.
2267 uint64_t num_sectors;
2268 uint64_t old_backing_num_sectors;
2269 uint64_t new_backing_num_sectors = 0;
2274 float local_progress = 0;
2276 buf_old = qemu_blockalign(bs, IO_BUF_SIZE);
2277 buf_new = qemu_blockalign(bs, IO_BUF_SIZE);
2279 bdrv_get_geometry(bs, &num_sectors);
2280 bdrv_get_geometry(bs_old_backing, &old_backing_num_sectors);
2281 if (bs_new_backing) {
2282 bdrv_get_geometry(bs_new_backing, &new_backing_num_sectors);
2285 if (num_sectors != 0) {
2286 local_progress = (float)100 /
2287 (num_sectors / MIN(num_sectors, IO_BUF_SIZE / 512));
2290 for (sector = 0; sector < num_sectors; sector += n) {
2292 /* How many sectors can we handle with the next read? */
2293 if (sector + (IO_BUF_SIZE / 512) <= num_sectors) {
2294 n = (IO_BUF_SIZE / 512);
2296 n = num_sectors - sector;
2299 /* If the cluster is allocated, we don't need to take action */
2300 ret = bdrv_is_allocated(bs, sector, n, &n);
2302 error_report("error while reading image metadata: %s",
2311 * Read old and new backing file and take into consideration that
2312 * backing files may be smaller than the COW image.
2314 if (sector >= old_backing_num_sectors) {
2315 memset(buf_old, 0, n * BDRV_SECTOR_SIZE);
2317 if (sector + n > old_backing_num_sectors) {
2318 n = old_backing_num_sectors - sector;
2321 ret = bdrv_read(bs_old_backing, sector, buf_old, n);
2323 error_report("error while reading from old backing file");
2328 if (sector >= new_backing_num_sectors || !bs_new_backing) {
2329 memset(buf_new, 0, n * BDRV_SECTOR_SIZE);
2331 if (sector + n > new_backing_num_sectors) {
2332 n = new_backing_num_sectors - sector;
2335 ret = bdrv_read(bs_new_backing, sector, buf_new, n);
2337 error_report("error while reading from new backing file");
2342 /* If they differ, we need to write to the COW file */
2343 uint64_t written = 0;
2345 while (written < n) {
2348 if (compare_sectors(buf_old + written * 512,
2349 buf_new + written * 512, n - written, &pnum))
2351 ret = bdrv_write(bs, sector + written,
2352 buf_old + written * 512, pnum);
2354 error_report("Error while writing to COW image: %s",
2362 qemu_progress_print(local_progress, 100);
2365 qemu_vfree(buf_old);
2366 qemu_vfree(buf_new);
2370 * Change the backing file. All clusters that are different from the old
2371 * backing file are overwritten in the COW file now, so the visible content
2372 * doesn't change when we switch the backing file.
2374 if (out_baseimg && *out_baseimg) {
2375 ret = bdrv_change_backing_file(bs, out_baseimg, out_basefmt);
2377 ret = bdrv_change_backing_file(bs, NULL, NULL);
2380 if (ret == -ENOSPC) {
2381 error_report("Could not change the backing file to '%s': No "
2382 "space left in the file header", out_baseimg);
2383 } else if (ret < 0) {
2384 error_report("Could not change the backing file to '%s': %s",
2385 out_baseimg, strerror(-ret));
2388 qemu_progress_print(100, 0);
2390 * TODO At this point it is possible to check if any clusters that are
2391 * allocated in the COW file are the same in the backing file. If so, they
2392 * could be dropped from the COW file. Don't do this before switching the
2393 * backing file, in case of a crash this would lead to corruption.
2396 qemu_progress_end();
2399 if (bs_old_backing != NULL) {
2400 bdrv_unref(bs_old_backing);
2402 if (bs_new_backing != NULL) {
2403 bdrv_unref(bs_new_backing);
2414 static int img_resize(int argc, char **argv)
2416 int c, ret, relative;
2417 const char *filename, *fmt, *size;
2418 int64_t n, total_size;
2420 BlockDriverState *bs = NULL;
2422 static QemuOptsList resize_options = {
2423 .name = "resize_options",
2424 .head = QTAILQ_HEAD_INITIALIZER(resize_options.head),
2427 .name = BLOCK_OPT_SIZE,
2428 .type = QEMU_OPT_SIZE,
2429 .help = "Virtual disk size"
2436 /* Remove size from argv manually so that negative numbers are not treated
2437 * as options by getopt. */
2443 size = argv[--argc];
2445 /* Parse getopt arguments */
2448 c = getopt(argc, argv, "f:hq");
2465 if (optind != argc - 1) {
2468 filename = argv[optind++];
2470 /* Choose grow, shrink, or absolute resize mode */
2486 param = qemu_opts_create_nofail(&resize_options);
2487 if (qemu_opt_set(param, BLOCK_OPT_SIZE, size)) {
2488 /* Error message already printed when size parsing fails */
2490 qemu_opts_del(param);
2493 n = qemu_opt_get_size(param, BLOCK_OPT_SIZE, 0);
2494 qemu_opts_del(param);
2496 bs = bdrv_new_open(filename, fmt, BDRV_O_FLAGS | BDRV_O_RDWR, true, quiet);
2503 total_size = bdrv_getlength(bs) + n * relative;
2507 if (total_size <= 0) {
2508 error_report("New image size must be positive");
2513 ret = bdrv_truncate(bs, total_size);
2516 qprintf(quiet, "Image resized.\n");
2519 error_report("This image does not support resize");
2522 error_report("Image is read-only");
2525 error_report("Error resizing image (%d)", -ret);
2538 static int img_amend(int argc, char **argv)
2541 char *options = NULL;
2542 QEMUOptionParameter *create_options = NULL, *options_param = NULL;
2543 const char *fmt = NULL, *filename;
2545 BlockDriverState *bs = NULL;
2548 c = getopt(argc, argv, "hqf:o:");
2570 if (optind != argc - 1) {
2578 filename = argv[argc - 1];
2580 bs = bdrv_new_open(filename, fmt, BDRV_O_FLAGS | BDRV_O_RDWR, true, quiet);
2582 error_report("Could not open image '%s'", filename);
2587 fmt = bs->drv->format_name;
2589 if (is_help_option(options)) {
2590 ret = print_block_option_help(filename, fmt);
2594 create_options = append_option_parameters(create_options,
2595 bs->drv->create_options);
2596 options_param = parse_option_parameters(options, create_options,
2598 if (options_param == NULL) {
2599 error_report("Invalid options for file format '%s'", fmt);
2604 ret = bdrv_amend_options(bs, options_param);
2606 error_report("Error while amending options: %s", strerror(-ret));
2614 free_option_parameters(create_options);
2615 free_option_parameters(options_param);
2622 static const img_cmd_t img_cmds[] = {
2623 #define DEF(option, callback, arg_string) \
2624 { option, callback },
2625 #include "qemu-img-cmds.h"
2631 int main(int argc, char **argv)
2633 const img_cmd_t *cmd;
2634 const char *cmdname;
2637 signal(SIGPIPE, SIG_IGN);
2640 error_set_progname(argv[0]);
2642 qemu_init_main_loop();
2649 /* find the command */
2650 for(cmd = img_cmds; cmd->name != NULL; cmd++) {
2651 if (!strcmp(cmdname, cmd->name)) {
2652 return cmd->handler(argc, argv);