2 * QEMU disk image utility
4 * Copyright (c) 2003-2008 Fabrice Bellard
6 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and associated documentation files (the "Software"), to deal
8 * in the Software without restriction, including without limitation the rights
9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 * copies of the Software, and to permit persons to whom the Software is
11 * furnished to do so, subject to the following conditions:
13 * The above copyright notice and this permission notice shall be included in
14 * all copies or substantial portions of the Software.
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24 #include "qapi-visit.h"
25 #include "qapi/qmp-output-visitor.h"
26 #include "qapi/qmp/qjson.h"
27 #include "qemu-common.h"
28 #include "qemu/option.h"
29 #include "qemu/error-report.h"
30 #include "qemu/osdep.h"
31 #include "sysemu/sysemu.h"
32 #include "block/block_int.h"
40 typedef struct img_cmd_t
{
42 int (*handler
)(int argc
, char **argv
);
45 /* Default to cache=writeback as data integrity is not important for qemu-tcg. */
46 #define BDRV_O_FLAGS BDRV_O_CACHE_WB
47 #define BDRV_DEFAULT_CACHE "writeback"
49 static void format_print(void *opaque
, const char *name
)
54 /* Please keep in synch with qemu-img.texi */
55 static void help(void)
57 const char *help_msg
=
58 "qemu-img version " QEMU_VERSION
", Copyright (c) 2004-2008 Fabrice Bellard\n"
59 "usage: qemu-img command [command options]\n"
60 "QEMU disk image utility\n"
63 #define DEF(option, callback, arg_string) \
65 #include "qemu-img-cmds.h"
69 "Command parameters:\n"
70 " 'filename' is a disk image filename\n"
71 " 'fmt' is the disk image format. It is guessed automatically in most cases\n"
72 " 'cache' is the cache mode used to write the output disk image, the valid\n"
73 " options are: 'none', 'writeback' (default, except for convert), 'writethrough',\n"
74 " 'directsync' and 'unsafe' (default for convert)\n"
75 " 'size' is the disk image size in bytes. Optional suffixes\n"
76 " 'k' or 'K' (kilobyte, 1024), 'M' (megabyte, 1024k), 'G' (gigabyte, 1024M)\n"
77 " and T (terabyte, 1024G) are supported. 'b' is ignored.\n"
78 " 'output_filename' is the destination disk image filename\n"
79 " 'output_fmt' is the destination format\n"
80 " 'options' is a comma separated list of format specific options in a\n"
81 " name=value format. Use -o ? for an overview of the options supported by the\n"
83 " '-c' indicates that target image must be compressed (qcow format only)\n"
84 " '-u' enables unsafe rebasing. It is assumed that old and new backing file\n"
85 " match exactly. The image doesn't need a working backing file before\n"
86 " rebasing in this case (useful for renaming the backing file)\n"
87 " '-h' with or without a command shows this help and lists the supported formats\n"
88 " '-p' show progress of command (only certain commands)\n"
89 " '-S' indicates the consecutive number of bytes that must contain only zeros\n"
90 " for qemu-img to create a sparse image during conversion\n"
91 " '--output' takes the format in which the output must be done (human or json)\n"
93 "Parameters to check subcommand:\n"
94 " '-r' tries to repair any inconsistencies that are found during the check.\n"
95 " '-r leaks' repairs only cluster leaks, whereas '-r all' fixes all\n"
96 " kinds of errors, with a higher risk of choosing the wrong fix or\n"
97 " hiding corruption that has already occurred.\n"
99 "Parameters to snapshot subcommand:\n"
100 " 'snapshot' is the name of the snapshot to create, apply or delete\n"
101 " '-a' applies a snapshot (revert disk to saved state)\n"
102 " '-c' creates a snapshot\n"
103 " '-d' deletes a snapshot\n"
104 " '-l' lists all snapshots in the given image\n";
106 printf("%s\nSupported formats:", help_msg
);
107 bdrv_iterate_format(format_print
, NULL
);
113 /* XXX: put correct support for win32 */
114 static int read_password(char *buf
, int buf_size
)
117 printf("Password: ");
124 if (i
< (buf_size
- 1))
135 static struct termios oldtty
;
137 static void term_exit(void)
139 tcsetattr (0, TCSANOW
, &oldtty
);
142 static void term_init(void)
149 tty
.c_iflag
&= ~(IGNBRK
|BRKINT
|PARMRK
|ISTRIP
150 |INLCR
|IGNCR
|ICRNL
|IXON
);
151 tty
.c_oflag
|= OPOST
;
152 tty
.c_lflag
&= ~(ECHO
|ECHONL
|ICANON
|IEXTEN
);
153 tty
.c_cflag
&= ~(CSIZE
|PARENB
);
158 tcsetattr (0, TCSANOW
, &tty
);
163 static int read_password(char *buf
, int buf_size
)
168 printf("password: ");
173 ret
= read(0, &ch
, 1);
175 if (errno
== EAGAIN
|| errno
== EINTR
) {
181 } else if (ret
== 0) {
189 if (i
< (buf_size
- 1))
200 static int print_block_option_help(const char *filename
, const char *fmt
)
202 BlockDriver
*drv
, *proto_drv
;
203 QEMUOptionParameter
*create_options
= NULL
;
205 /* Find driver and parse its options */
206 drv
= bdrv_find_format(fmt
);
208 error_report("Unknown file format '%s'", fmt
);
212 proto_drv
= bdrv_find_protocol(filename
);
214 error_report("Unknown protocol '%s'", filename
);
218 create_options
= append_option_parameters(create_options
,
219 drv
->create_options
);
220 create_options
= append_option_parameters(create_options
,
221 proto_drv
->create_options
);
222 print_option_help(create_options
);
223 free_option_parameters(create_options
);
227 static BlockDriverState
*bdrv_new_open(const char *filename
,
232 BlockDriverState
*bs
;
237 bs
= bdrv_new("image");
240 drv
= bdrv_find_format(fmt
);
242 error_report("Unknown file format '%s'", fmt
);
249 ret
= bdrv_open(bs
, filename
, flags
, drv
);
251 error_report("Could not open '%s': %s", filename
, strerror(-ret
));
255 if (bdrv_is_encrypted(bs
) && require_io
) {
256 printf("Disk image '%s' is encrypted.\n", filename
);
257 if (read_password(password
, sizeof(password
)) < 0) {
258 error_report("No password given");
261 if (bdrv_set_key(bs
, password
) < 0) {
262 error_report("invalid password");
274 static int add_old_style_options(const char *fmt
, QEMUOptionParameter
*list
,
275 const char *base_filename
,
276 const char *base_fmt
)
279 if (set_option_parameter(list
, BLOCK_OPT_BACKING_FILE
, base_filename
)) {
280 error_report("Backing file not supported for file format '%s'",
286 if (set_option_parameter(list
, BLOCK_OPT_BACKING_FMT
, base_fmt
)) {
287 error_report("Backing file format not supported for file "
295 static int img_create(int argc
, char **argv
)
298 uint64_t img_size
= -1;
299 const char *fmt
= "raw";
300 const char *base_fmt
= NULL
;
301 const char *filename
;
302 const char *base_filename
= NULL
;
303 char *options
= NULL
;
304 Error
*local_err
= NULL
;
307 c
= getopt(argc
, argv
, "F:b:f:he6o:");
320 base_filename
= optarg
;
326 error_report("option -e is deprecated, please use \'-o "
327 "encryption\' instead!");
330 error_report("option -6 is deprecated, please use \'-o "
331 "compat6\' instead!");
339 /* Get the filename */
340 if (optind
>= argc
) {
343 filename
= argv
[optind
++];
345 /* Get image size, if specified */
349 sval
= strtosz_suffix(argv
[optind
++], &end
, STRTOSZ_DEFSUFFIX_B
);
350 if (sval
< 0 || *end
) {
351 if (sval
== -ERANGE
) {
352 error_report("Image size must be less than 8 EiB!");
354 error_report("Invalid image size specified! You may use k, M, "
355 "G or T suffixes for ");
356 error_report("kilobytes, megabytes, gigabytes and terabytes.");
360 img_size
= (uint64_t)sval
;
363 if (options
&& is_help_option(options
)) {
364 return print_block_option_help(filename
, fmt
);
367 bdrv_img_create(filename
, fmt
, base_filename
, base_fmt
,
368 options
, img_size
, BDRV_O_FLAGS
, &local_err
);
369 if (error_is_set(&local_err
)) {
370 error_report("%s", error_get_pretty(local_err
));
371 error_free(local_err
);
379 * Checks an image for consistency. Exit codes:
381 * 0 - Check completed, image is good
382 * 1 - Check not completed because of internal errors
383 * 2 - Check completed, image is corrupted
384 * 3 - Check completed, image has leaked clusters, but is good otherwise
386 static int img_check(int argc
, char **argv
)
389 const char *filename
, *fmt
;
390 BlockDriverState
*bs
;
391 BdrvCheckResult result
;
393 int flags
= BDRV_O_FLAGS
| BDRV_O_CHECK
;
397 c
= getopt(argc
, argv
, "f:hr:");
410 flags
|= BDRV_O_RDWR
;
412 if (!strcmp(optarg
, "leaks")) {
413 fix
= BDRV_FIX_LEAKS
;
414 } else if (!strcmp(optarg
, "all")) {
415 fix
= BDRV_FIX_LEAKS
| BDRV_FIX_ERRORS
;
422 if (optind
>= argc
) {
425 filename
= argv
[optind
++];
427 bs
= bdrv_new_open(filename
, fmt
, flags
, true);
431 ret
= bdrv_check(bs
, &result
, fix
);
433 if (ret
== -ENOTSUP
) {
434 error_report("This image format does not support checks");
439 if (result
.corruptions_fixed
|| result
.leaks_fixed
) {
440 printf("The following inconsistencies were found and repaired:\n\n"
441 " %d leaked clusters\n"
442 " %d corruptions\n\n"
443 "Double checking the fixed image now...\n",
445 result
.corruptions_fixed
);
446 ret
= bdrv_check(bs
, &result
, 0);
449 if (!(result
.corruptions
|| result
.leaks
|| result
.check_errors
)) {
450 printf("No errors were found on the image.\n");
452 if (result
.corruptions
) {
453 printf("\n%d errors were found on the image.\n"
454 "Data may be corrupted, or further writes to the image "
460 printf("\n%d leaked clusters were found on the image.\n"
461 "This means waste of disk space, but no harm to data.\n",
465 if (result
.check_errors
) {
466 printf("\n%d internal errors have occurred during the check.\n",
467 result
.check_errors
);
471 if (result
.bfi
.total_clusters
!= 0 && result
.bfi
.allocated_clusters
!= 0) {
472 printf("%" PRId64
"/%" PRId64
"= %0.2f%% allocated, %0.2f%% fragmented\n",
473 result
.bfi
.allocated_clusters
, result
.bfi
.total_clusters
,
474 result
.bfi
.allocated_clusters
* 100.0 / result
.bfi
.total_clusters
,
475 result
.bfi
.fragmented_clusters
* 100.0 / result
.bfi
.allocated_clusters
);
478 if (result
.image_end_offset
> 0) {
479 printf("Image end offset: %" PRId64
"\n", result
.image_end_offset
);
484 if (ret
< 0 || result
.check_errors
) {
485 printf("\nAn error has occurred during the check: %s\n"
486 "The check is not complete and may have missed error.\n",
491 if (result
.corruptions
) {
493 } else if (result
.leaks
) {
500 static int img_commit(int argc
, char **argv
)
503 const char *filename
, *fmt
, *cache
;
504 BlockDriverState
*bs
;
507 cache
= BDRV_DEFAULT_CACHE
;
509 c
= getopt(argc
, argv
, "f:ht:");
526 if (optind
>= argc
) {
529 filename
= argv
[optind
++];
532 ret
= bdrv_parse_cache_flags(cache
, &flags
);
534 error_report("Invalid cache option: %s", cache
);
538 bs
= bdrv_new_open(filename
, fmt
, flags
, true);
542 ret
= bdrv_commit(bs
);
545 printf("Image committed.\n");
548 error_report("No disk inserted");
551 error_report("Image is read-only");
554 error_report("Image is already committed");
557 error_report("Error while committing image");
569 * Returns true iff the first sector pointed to by 'buf' contains at least
572 * 'pnum' is set to the number of sectors (including and immediately following
573 * the first one) that are known to be in the same allocated/unallocated state.
575 static int is_allocated_sectors(const uint8_t *buf
, int n
, int *pnum
)
584 is_zero
= buffer_is_zero(buf
, 512);
585 for(i
= 1; i
< n
; i
++) {
587 if (is_zero
!= buffer_is_zero(buf
, 512)) {
596 * Like is_allocated_sectors, but if the buffer starts with a used sector,
597 * up to 'min' consecutive sectors containing zeros are ignored. This avoids
598 * breaking up write requests for only small sparse areas.
600 static int is_allocated_sectors_min(const uint8_t *buf
, int n
, int *pnum
,
604 int num_checked
, num_used
;
610 ret
= is_allocated_sectors(buf
, n
, pnum
);
616 buf
+= BDRV_SECTOR_SIZE
* *pnum
;
618 num_checked
= num_used
;
621 ret
= is_allocated_sectors(buf
, n
, pnum
);
623 buf
+= BDRV_SECTOR_SIZE
* *pnum
;
625 num_checked
+= *pnum
;
627 num_used
= num_checked
;
628 } else if (*pnum
>= min
) {
638 * Compares two buffers sector by sector. Returns 0 if the first sector of both
639 * buffers matches, non-zero otherwise.
641 * pnum is set to the number of sectors (including and immediately following
642 * the first one) that are known to have the same comparison result
644 static int compare_sectors(const uint8_t *buf1
, const uint8_t *buf2
, int n
,
654 res
= !!memcmp(buf1
, buf2
, 512);
655 for(i
= 1; i
< n
; i
++) {
659 if (!!memcmp(buf1
, buf2
, 512) != res
) {
668 #define IO_BUF_SIZE (2 * 1024 * 1024)
670 static int img_convert(int argc
, char **argv
)
672 int c
, ret
= 0, n
, n1
, bs_n
, bs_i
, compress
, cluster_size
, cluster_sectors
;
673 int progress
= 0, flags
;
674 const char *fmt
, *out_fmt
, *cache
, *out_baseimg
, *out_filename
;
675 BlockDriver
*drv
, *proto_drv
;
676 BlockDriverState
**bs
= NULL
, *out_bs
= NULL
;
677 int64_t total_sectors
, nb_sectors
, sector_num
, bs_offset
;
679 uint8_t * buf
= NULL
;
682 QEMUOptionParameter
*param
= NULL
, *create_options
= NULL
;
683 QEMUOptionParameter
*out_baseimg_param
;
684 char *options
= NULL
;
685 const char *snapshot_name
= NULL
;
686 float local_progress
= 0;
687 int min_sparse
= 8; /* Need at least 4k of zeros for sparse detection */
695 c
= getopt(argc
, argv
, "f:O:B:s:hce6o:pS:t:");
711 out_baseimg
= optarg
;
717 error_report("option -e is deprecated, please use \'-o "
718 "encryption\' instead!");
721 error_report("option -6 is deprecated, please use \'-o "
722 "compat6\' instead!");
728 snapshot_name
= optarg
;
734 sval
= strtosz_suffix(optarg
, &end
, STRTOSZ_DEFSUFFIX_B
);
735 if (sval
< 0 || *end
) {
736 error_report("Invalid minimum zero buffer size for sparse output specified");
740 min_sparse
= sval
/ BDRV_SECTOR_SIZE
;
752 bs_n
= argc
- optind
- 1;
757 out_filename
= argv
[argc
- 1];
759 /* Initialize before goto out */
760 qemu_progress_init(progress
, 2.0);
762 if (options
&& is_help_option(options
)) {
763 ret
= print_block_option_help(out_filename
, out_fmt
);
767 if (bs_n
> 1 && out_baseimg
) {
768 error_report("-B makes no sense when concatenating multiple input "
774 qemu_progress_print(0, 100);
776 bs
= g_malloc0(bs_n
* sizeof(BlockDriverState
*));
779 for (bs_i
= 0; bs_i
< bs_n
; bs_i
++) {
780 bs
[bs_i
] = bdrv_new_open(argv
[optind
+ bs_i
], fmt
, BDRV_O_FLAGS
, true);
782 error_report("Could not open '%s'", argv
[optind
+ bs_i
]);
786 bdrv_get_geometry(bs
[bs_i
], &bs_sectors
);
787 total_sectors
+= bs_sectors
;
790 if (snapshot_name
!= NULL
) {
792 error_report("No support for concatenating multiple snapshot");
796 if (bdrv_snapshot_load_tmp(bs
[0], snapshot_name
) < 0) {
797 error_report("Failed to load snapshot");
803 /* Find driver and parse its options */
804 drv
= bdrv_find_format(out_fmt
);
806 error_report("Unknown file format '%s'", out_fmt
);
811 proto_drv
= bdrv_find_protocol(out_filename
);
813 error_report("Unknown protocol '%s'", out_filename
);
818 create_options
= append_option_parameters(create_options
,
819 drv
->create_options
);
820 create_options
= append_option_parameters(create_options
,
821 proto_drv
->create_options
);
824 param
= parse_option_parameters(options
, create_options
, param
);
826 error_report("Invalid options for file format '%s'.", out_fmt
);
831 param
= parse_option_parameters("", create_options
, param
);
834 set_option_parameter_int(param
, BLOCK_OPT_SIZE
, total_sectors
* 512);
835 ret
= add_old_style_options(out_fmt
, param
, out_baseimg
, NULL
);
840 /* Get backing file name if -o backing_file was used */
841 out_baseimg_param
= get_option_parameter(param
, BLOCK_OPT_BACKING_FILE
);
842 if (out_baseimg_param
) {
843 out_baseimg
= out_baseimg_param
->value
.s
;
846 /* Check if compression is supported */
848 QEMUOptionParameter
*encryption
=
849 get_option_parameter(param
, BLOCK_OPT_ENCRYPT
);
850 QEMUOptionParameter
*preallocation
=
851 get_option_parameter(param
, BLOCK_OPT_PREALLOC
);
853 if (!drv
->bdrv_write_compressed
) {
854 error_report("Compression not supported for this file format");
859 if (encryption
&& encryption
->value
.n
) {
860 error_report("Compression and encryption not supported at "
866 if (preallocation
&& preallocation
->value
.s
867 && strcmp(preallocation
->value
.s
, "off"))
869 error_report("Compression and preallocation not supported at "
876 /* Create the new image */
877 ret
= bdrv_create(drv
, out_filename
, param
);
879 if (ret
== -ENOTSUP
) {
880 error_report("Formatting not supported for file format '%s'",
882 } else if (ret
== -EFBIG
) {
883 error_report("The image size is too large for file format '%s'",
886 error_report("%s: error while converting %s: %s",
887 out_filename
, out_fmt
, strerror(-ret
));
893 ret
= bdrv_parse_cache_flags(cache
, &flags
);
895 error_report("Invalid cache option: %s", cache
);
899 out_bs
= bdrv_new_open(out_filename
, out_fmt
, flags
, true);
907 bdrv_get_geometry(bs
[0], &bs_sectors
);
908 buf
= qemu_blockalign(out_bs
, IO_BUF_SIZE
);
911 ret
= bdrv_get_info(out_bs
, &bdi
);
913 error_report("could not get block driver info");
916 cluster_size
= bdi
.cluster_size
;
917 if (cluster_size
<= 0 || cluster_size
> IO_BUF_SIZE
) {
918 error_report("invalid cluster size");
922 cluster_sectors
= cluster_size
>> 9;
925 nb_sectors
= total_sectors
;
926 if (nb_sectors
!= 0) {
927 local_progress
= (float)100 /
928 (nb_sectors
/ MIN(nb_sectors
, cluster_sectors
));
936 nb_sectors
= total_sectors
- sector_num
;
939 if (nb_sectors
>= cluster_sectors
)
944 bs_num
= sector_num
- bs_offset
;
945 assert (bs_num
>= 0);
948 while (remainder
> 0) {
950 while (bs_num
== bs_sectors
) {
952 assert (bs_i
< bs_n
);
953 bs_offset
+= bs_sectors
;
954 bdrv_get_geometry(bs
[bs_i
], &bs_sectors
);
956 /* printf("changing part: sector_num=%" PRId64 ", "
957 "bs_i=%d, bs_offset=%" PRId64 ", bs_sectors=%" PRId64
958 "\n", sector_num, bs_i, bs_offset, bs_sectors); */
960 assert (bs_num
< bs_sectors
);
962 nlow
= (remainder
> bs_sectors
- bs_num
) ? bs_sectors
- bs_num
: remainder
;
964 ret
= bdrv_read(bs
[bs_i
], bs_num
, buf2
, nlow
);
966 error_report("error while reading sector %" PRId64
": %s",
967 bs_num
, strerror(-ret
));
976 assert (remainder
== 0);
978 if (n
< cluster_sectors
) {
979 memset(buf
+ n
* 512, 0, cluster_size
- n
* 512);
981 if (!buffer_is_zero(buf
, cluster_size
)) {
982 ret
= bdrv_write_compressed(out_bs
, sector_num
, buf
,
985 error_report("error while compressing sector %" PRId64
986 ": %s", sector_num
, strerror(-ret
));
991 qemu_progress_print(local_progress
, 100);
993 /* signal EOF to align */
994 bdrv_write_compressed(out_bs
, 0, NULL
, 0);
996 int has_zero_init
= bdrv_has_zero_init(out_bs
);
998 sector_num
= 0; // total number of sectors converted so far
999 nb_sectors
= total_sectors
- sector_num
;
1000 if (nb_sectors
!= 0) {
1001 local_progress
= (float)100 /
1002 (nb_sectors
/ MIN(nb_sectors
, IO_BUF_SIZE
/ 512));
1006 nb_sectors
= total_sectors
- sector_num
;
1007 if (nb_sectors
<= 0) {
1010 if (nb_sectors
>= (IO_BUF_SIZE
/ 512)) {
1011 n
= (IO_BUF_SIZE
/ 512);
1016 while (sector_num
- bs_offset
>= bs_sectors
) {
1018 assert (bs_i
< bs_n
);
1019 bs_offset
+= bs_sectors
;
1020 bdrv_get_geometry(bs
[bs_i
], &bs_sectors
);
1021 /* printf("changing part: sector_num=%" PRId64 ", bs_i=%d, "
1022 "bs_offset=%" PRId64 ", bs_sectors=%" PRId64 "\n",
1023 sector_num, bs_i, bs_offset, bs_sectors); */
1026 if (n
> bs_offset
+ bs_sectors
- sector_num
) {
1027 n
= bs_offset
+ bs_sectors
- sector_num
;
1030 if (has_zero_init
) {
1031 /* If the output image is being created as a copy on write image,
1032 assume that sectors which are unallocated in the input image
1033 are present in both the output's and input's base images (no
1034 need to copy them). */
1036 if (!bdrv_is_allocated(bs
[bs_i
], sector_num
- bs_offset
,
1041 /* The next 'n1' sectors are allocated in the input image. Copy
1042 only those as they may be followed by unallocated sectors. */
1049 ret
= bdrv_read(bs
[bs_i
], sector_num
- bs_offset
, buf
, n
);
1051 error_report("error while reading sector %" PRId64
": %s",
1052 sector_num
- bs_offset
, strerror(-ret
));
1055 /* NOTE: at the same time we convert, we do not write zero
1056 sectors to have a chance to compress the image. Ideally, we
1057 should add a specific call to have the info to go faster */
1060 /* If the output image is being created as a copy on write image,
1061 copy all sectors even the ones containing only NUL bytes,
1062 because they may differ from the sectors in the base image.
1064 If the output is to a host device, we also write out
1065 sectors that are entirely 0, since whatever data was
1066 already there is garbage, not 0s. */
1067 if (!has_zero_init
|| out_baseimg
||
1068 is_allocated_sectors_min(buf1
, n
, &n1
, min_sparse
)) {
1069 ret
= bdrv_write(out_bs
, sector_num
, buf1
, n1
);
1071 error_report("error while writing sector %" PRId64
1072 ": %s", sector_num
, strerror(-ret
));
1080 qemu_progress_print(local_progress
, 100);
1084 qemu_progress_end();
1085 free_option_parameters(create_options
);
1086 free_option_parameters(param
);
1089 bdrv_delete(out_bs
);
1092 for (bs_i
= 0; bs_i
< bs_n
; bs_i
++) {
1094 bdrv_delete(bs
[bs_i
]);
1106 static void dump_snapshots(BlockDriverState
*bs
)
1108 QEMUSnapshotInfo
*sn_tab
, *sn
;
1112 nb_sns
= bdrv_snapshot_list(bs
, &sn_tab
);
1115 printf("Snapshot list:\n");
1116 printf("%s\n", bdrv_snapshot_dump(buf
, sizeof(buf
), NULL
));
1117 for(i
= 0; i
< nb_sns
; i
++) {
1119 printf("%s\n", bdrv_snapshot_dump(buf
, sizeof(buf
), sn
));
1124 static void dump_json_image_info_list(ImageInfoList
*list
)
1128 QmpOutputVisitor
*ov
= qmp_output_visitor_new();
1130 visit_type_ImageInfoList(qmp_output_get_visitor(ov
),
1131 &list
, NULL
, &errp
);
1132 obj
= qmp_output_get_qobject(ov
);
1133 str
= qobject_to_json_pretty(obj
);
1134 assert(str
!= NULL
);
1135 printf("%s\n", qstring_get_str(str
));
1136 qobject_decref(obj
);
1137 qmp_output_visitor_cleanup(ov
);
1141 static void collect_snapshots(BlockDriverState
*bs
, ImageInfo
*info
)
1144 QEMUSnapshotInfo
*sn_tab
= NULL
;
1145 SnapshotInfoList
*info_list
, *cur_item
= NULL
;
1146 sn_count
= bdrv_snapshot_list(bs
, &sn_tab
);
1148 for (i
= 0; i
< sn_count
; i
++) {
1149 info
->has_snapshots
= true;
1150 info_list
= g_new0(SnapshotInfoList
, 1);
1152 info_list
->value
= g_new0(SnapshotInfo
, 1);
1153 info_list
->value
->id
= g_strdup(sn_tab
[i
].id_str
);
1154 info_list
->value
->name
= g_strdup(sn_tab
[i
].name
);
1155 info_list
->value
->vm_state_size
= sn_tab
[i
].vm_state_size
;
1156 info_list
->value
->date_sec
= sn_tab
[i
].date_sec
;
1157 info_list
->value
->date_nsec
= sn_tab
[i
].date_nsec
;
1158 info_list
->value
->vm_clock_sec
= sn_tab
[i
].vm_clock_nsec
/ 1000000000;
1159 info_list
->value
->vm_clock_nsec
= sn_tab
[i
].vm_clock_nsec
% 1000000000;
1161 /* XXX: waiting for the qapi to support qemu-queue.h types */
1163 info
->snapshots
= cur_item
= info_list
;
1165 cur_item
->next
= info_list
;
1166 cur_item
= info_list
;
1174 static void dump_json_image_info(ImageInfo
*info
)
1178 QmpOutputVisitor
*ov
= qmp_output_visitor_new();
1180 visit_type_ImageInfo(qmp_output_get_visitor(ov
),
1181 &info
, NULL
, &errp
);
1182 obj
= qmp_output_get_qobject(ov
);
1183 str
= qobject_to_json_pretty(obj
);
1184 assert(str
!= NULL
);
1185 printf("%s\n", qstring_get_str(str
));
1186 qobject_decref(obj
);
1187 qmp_output_visitor_cleanup(ov
);
1191 static void collect_image_info(BlockDriverState
*bs
,
1193 const char *filename
,
1196 uint64_t total_sectors
;
1197 char backing_filename
[1024];
1198 char backing_filename2
[1024];
1199 BlockDriverInfo bdi
;
1201 bdrv_get_geometry(bs
, &total_sectors
);
1203 info
->filename
= g_strdup(filename
);
1204 info
->format
= g_strdup(bdrv_get_format_name(bs
));
1205 info
->virtual_size
= total_sectors
* 512;
1206 info
->actual_size
= bdrv_get_allocated_file_size(bs
);
1207 info
->has_actual_size
= info
->actual_size
>= 0;
1208 if (bdrv_is_encrypted(bs
)) {
1209 info
->encrypted
= true;
1210 info
->has_encrypted
= true;
1212 if (bdrv_get_info(bs
, &bdi
) >= 0) {
1213 if (bdi
.cluster_size
!= 0) {
1214 info
->cluster_size
= bdi
.cluster_size
;
1215 info
->has_cluster_size
= true;
1217 info
->dirty_flag
= bdi
.is_dirty
;
1218 info
->has_dirty_flag
= true;
1220 bdrv_get_backing_filename(bs
, backing_filename
, sizeof(backing_filename
));
1221 if (backing_filename
[0] != '\0') {
1222 info
->backing_filename
= g_strdup(backing_filename
);
1223 info
->has_backing_filename
= true;
1224 bdrv_get_full_backing_filename(bs
, backing_filename2
,
1225 sizeof(backing_filename2
));
1227 if (strcmp(backing_filename
, backing_filename2
) != 0) {
1228 info
->full_backing_filename
=
1229 g_strdup(backing_filename2
);
1230 info
->has_full_backing_filename
= true;
1233 if (bs
->backing_format
[0]) {
1234 info
->backing_filename_format
= g_strdup(bs
->backing_format
);
1235 info
->has_backing_filename_format
= true;
1240 static void dump_human_image_info(ImageInfo
*info
)
1242 char size_buf
[128], dsize_buf
[128];
1243 if (!info
->has_actual_size
) {
1244 snprintf(dsize_buf
, sizeof(dsize_buf
), "unavailable");
1246 get_human_readable_size(dsize_buf
, sizeof(dsize_buf
),
1249 get_human_readable_size(size_buf
, sizeof(size_buf
), info
->virtual_size
);
1250 printf("image: %s\n"
1252 "virtual size: %s (%" PRId64
" bytes)\n"
1254 info
->filename
, info
->format
, size_buf
,
1258 if (info
->has_encrypted
&& info
->encrypted
) {
1259 printf("encrypted: yes\n");
1262 if (info
->has_cluster_size
) {
1263 printf("cluster_size: %" PRId64
"\n", info
->cluster_size
);
1266 if (info
->has_dirty_flag
&& info
->dirty_flag
) {
1267 printf("cleanly shut down: no\n");
1270 if (info
->has_backing_filename
) {
1271 printf("backing file: %s", info
->backing_filename
);
1272 if (info
->has_full_backing_filename
) {
1273 printf(" (actual path: %s)", info
->full_backing_filename
);
1276 if (info
->has_backing_filename_format
) {
1277 printf("backing file format: %s\n", info
->backing_filename_format
);
1281 if (info
->has_snapshots
) {
1282 SnapshotInfoList
*elem
;
1285 printf("Snapshot list:\n");
1286 printf("%s\n", bdrv_snapshot_dump(buf
, sizeof(buf
), NULL
));
1288 /* Ideally bdrv_snapshot_dump() would operate on SnapshotInfoList but
1289 * we convert to the block layer's native QEMUSnapshotInfo for now.
1291 for (elem
= info
->snapshots
; elem
; elem
= elem
->next
) {
1292 QEMUSnapshotInfo sn
= {
1293 .vm_state_size
= elem
->value
->vm_state_size
,
1294 .date_sec
= elem
->value
->date_sec
,
1295 .date_nsec
= elem
->value
->date_nsec
,
1296 .vm_clock_nsec
= elem
->value
->vm_clock_sec
* 1000000000ULL +
1297 elem
->value
->vm_clock_nsec
,
1300 pstrcpy(sn
.id_str
, sizeof(sn
.id_str
), elem
->value
->id
);
1301 pstrcpy(sn
.name
, sizeof(sn
.name
), elem
->value
->name
);
1302 printf("%s\n", bdrv_snapshot_dump(buf
, sizeof(buf
), &sn
));
1307 static void dump_human_image_info_list(ImageInfoList
*list
)
1309 ImageInfoList
*elem
;
1312 for (elem
= list
; elem
; elem
= elem
->next
) {
1318 dump_human_image_info(elem
->value
);
1322 static gboolean
str_equal_func(gconstpointer a
, gconstpointer b
)
1324 return strcmp(a
, b
) == 0;
1328 * Open an image file chain and return an ImageInfoList
1330 * @filename: topmost image filename
1331 * @fmt: topmost image format (may be NULL to autodetect)
1332 * @chain: true - enumerate entire backing file chain
1333 * false - only topmost image file
1335 * Returns a list of ImageInfo objects or NULL if there was an error opening an
1336 * image file. If there was an error a message will have been printed to
1339 static ImageInfoList
*collect_image_info_list(const char *filename
,
1343 ImageInfoList
*head
= NULL
;
1344 ImageInfoList
**last
= &head
;
1345 GHashTable
*filenames
;
1347 filenames
= g_hash_table_new_full(g_str_hash
, str_equal_func
, NULL
, NULL
);
1350 BlockDriverState
*bs
;
1352 ImageInfoList
*elem
;
1354 if (g_hash_table_lookup_extended(filenames
, filename
, NULL
, NULL
)) {
1355 error_report("Backing file '%s' creates an infinite loop.",
1359 g_hash_table_insert(filenames
, (gpointer
)filename
, NULL
);
1361 bs
= bdrv_new_open(filename
, fmt
, BDRV_O_FLAGS
| BDRV_O_NO_BACKING
,
1367 info
= g_new0(ImageInfo
, 1);
1368 collect_image_info(bs
, info
, filename
, fmt
);
1369 collect_snapshots(bs
, info
);
1371 elem
= g_new0(ImageInfoList
, 1);
1378 filename
= fmt
= NULL
;
1380 if (info
->has_full_backing_filename
) {
1381 filename
= info
->full_backing_filename
;
1382 } else if (info
->has_backing_filename
) {
1383 filename
= info
->backing_filename
;
1385 if (info
->has_backing_filename_format
) {
1386 fmt
= info
->backing_filename_format
;
1390 g_hash_table_destroy(filenames
);
1394 qapi_free_ImageInfoList(head
);
1395 g_hash_table_destroy(filenames
);
1400 OPTION_OUTPUT
= 256,
1401 OPTION_BACKING_CHAIN
= 257,
1404 typedef enum OutputFormat
{
1409 static int img_info(int argc
, char **argv
)
1412 OutputFormat output_format
= OFORMAT_HUMAN
;
1414 const char *filename
, *fmt
, *output
;
1415 ImageInfoList
*list
;
1420 int option_index
= 0;
1421 static const struct option long_options
[] = {
1422 {"help", no_argument
, 0, 'h'},
1423 {"format", required_argument
, 0, 'f'},
1424 {"output", required_argument
, 0, OPTION_OUTPUT
},
1425 {"backing-chain", no_argument
, 0, OPTION_BACKING_CHAIN
},
1428 c
= getopt_long(argc
, argv
, "f:h",
1429 long_options
, &option_index
);
1444 case OPTION_BACKING_CHAIN
:
1449 if (optind
>= argc
) {
1452 filename
= argv
[optind
++];
1454 if (output
&& !strcmp(output
, "json")) {
1455 output_format
= OFORMAT_JSON
;
1456 } else if (output
&& !strcmp(output
, "human")) {
1457 output_format
= OFORMAT_HUMAN
;
1458 } else if (output
) {
1459 error_report("--output must be used with human or json as argument.");
1463 list
= collect_image_info_list(filename
, fmt
, chain
);
1468 switch (output_format
) {
1470 dump_human_image_info_list(list
);
1474 dump_json_image_info_list(list
);
1476 dump_json_image_info(list
->value
);
1481 qapi_free_ImageInfoList(list
);
1485 #define SNAPSHOT_LIST 1
1486 #define SNAPSHOT_CREATE 2
1487 #define SNAPSHOT_APPLY 3
1488 #define SNAPSHOT_DELETE 4
1490 static int img_snapshot(int argc
, char **argv
)
1492 BlockDriverState
*bs
;
1493 QEMUSnapshotInfo sn
;
1494 char *filename
, *snapshot_name
= NULL
;
1495 int c
, ret
= 0, bdrv_oflags
;
1499 bdrv_oflags
= BDRV_O_FLAGS
| BDRV_O_RDWR
;
1500 /* Parse commandline parameters */
1502 c
= getopt(argc
, argv
, "la:c:d:h");
1516 action
= SNAPSHOT_LIST
;
1517 bdrv_oflags
&= ~BDRV_O_RDWR
; /* no need for RW */
1524 action
= SNAPSHOT_APPLY
;
1525 snapshot_name
= optarg
;
1532 action
= SNAPSHOT_CREATE
;
1533 snapshot_name
= optarg
;
1540 action
= SNAPSHOT_DELETE
;
1541 snapshot_name
= optarg
;
1546 if (optind
>= argc
) {
1549 filename
= argv
[optind
++];
1551 /* Open the image */
1552 bs
= bdrv_new_open(filename
, NULL
, bdrv_oflags
, true);
1557 /* Perform the requested action */
1563 case SNAPSHOT_CREATE
:
1564 memset(&sn
, 0, sizeof(sn
));
1565 pstrcpy(sn
.name
, sizeof(sn
.name
), snapshot_name
);
1567 qemu_gettimeofday(&tv
);
1568 sn
.date_sec
= tv
.tv_sec
;
1569 sn
.date_nsec
= tv
.tv_usec
* 1000;
1571 ret
= bdrv_snapshot_create(bs
, &sn
);
1573 error_report("Could not create snapshot '%s': %d (%s)",
1574 snapshot_name
, ret
, strerror(-ret
));
1578 case SNAPSHOT_APPLY
:
1579 ret
= bdrv_snapshot_goto(bs
, snapshot_name
);
1581 error_report("Could not apply snapshot '%s': %d (%s)",
1582 snapshot_name
, ret
, strerror(-ret
));
1586 case SNAPSHOT_DELETE
:
1587 ret
= bdrv_snapshot_delete(bs
, snapshot_name
);
1589 error_report("Could not delete snapshot '%s': %d (%s)",
1590 snapshot_name
, ret
, strerror(-ret
));
1603 static int img_rebase(int argc
, char **argv
)
1605 BlockDriverState
*bs
, *bs_old_backing
= NULL
, *bs_new_backing
= NULL
;
1606 BlockDriver
*old_backing_drv
, *new_backing_drv
;
1608 const char *fmt
, *cache
, *out_basefmt
, *out_baseimg
;
1613 /* Parse commandline parameters */
1615 cache
= BDRV_DEFAULT_CACHE
;
1619 c
= getopt(argc
, argv
, "uhf:F:b:pt:");
1632 out_basefmt
= optarg
;
1635 out_baseimg
= optarg
;
1649 if ((optind
>= argc
) || (!unsafe
&& !out_baseimg
)) {
1652 filename
= argv
[optind
++];
1654 qemu_progress_init(progress
, 2.0);
1655 qemu_progress_print(0, 100);
1657 flags
= BDRV_O_RDWR
| (unsafe
? BDRV_O_NO_BACKING
: 0);
1658 ret
= bdrv_parse_cache_flags(cache
, &flags
);
1660 error_report("Invalid cache option: %s", cache
);
1667 * Ignore the old backing file for unsafe rebase in case we want to correct
1668 * the reference to a renamed or moved backing file.
1670 bs
= bdrv_new_open(filename
, fmt
, flags
, true);
1675 /* Find the right drivers for the backing files */
1676 old_backing_drv
= NULL
;
1677 new_backing_drv
= NULL
;
1679 if (!unsafe
&& bs
->backing_format
[0] != '\0') {
1680 old_backing_drv
= bdrv_find_format(bs
->backing_format
);
1681 if (old_backing_drv
== NULL
) {
1682 error_report("Invalid format name: '%s'", bs
->backing_format
);
1688 if (out_basefmt
!= NULL
) {
1689 new_backing_drv
= bdrv_find_format(out_basefmt
);
1690 if (new_backing_drv
== NULL
) {
1691 error_report("Invalid format name: '%s'", out_basefmt
);
1697 /* For safe rebasing we need to compare old and new backing file */
1699 /* Make the compiler happy */
1700 bs_old_backing
= NULL
;
1701 bs_new_backing
= NULL
;
1703 char backing_name
[1024];
1705 bs_old_backing
= bdrv_new("old_backing");
1706 bdrv_get_backing_filename(bs
, backing_name
, sizeof(backing_name
));
1707 ret
= bdrv_open(bs_old_backing
, backing_name
, BDRV_O_FLAGS
,
1710 error_report("Could not open old backing file '%s'", backing_name
);
1713 if (out_baseimg
[0]) {
1714 bs_new_backing
= bdrv_new("new_backing");
1715 ret
= bdrv_open(bs_new_backing
, out_baseimg
, BDRV_O_FLAGS
,
1718 error_report("Could not open new backing file '%s'",
1726 * Check each unallocated cluster in the COW file. If it is unallocated,
1727 * accesses go to the backing file. We must therefore compare this cluster
1728 * in the old and new backing file, and if they differ we need to copy it
1729 * from the old backing file into the COW file.
1731 * If qemu-img crashes during this step, no harm is done. The content of
1732 * the image is the same as the original one at any time.
1735 uint64_t num_sectors
;
1736 uint64_t old_backing_num_sectors
;
1737 uint64_t new_backing_num_sectors
= 0;
1742 float local_progress
= 0;
1744 buf_old
= qemu_blockalign(bs
, IO_BUF_SIZE
);
1745 buf_new
= qemu_blockalign(bs
, IO_BUF_SIZE
);
1747 bdrv_get_geometry(bs
, &num_sectors
);
1748 bdrv_get_geometry(bs_old_backing
, &old_backing_num_sectors
);
1749 if (bs_new_backing
) {
1750 bdrv_get_geometry(bs_new_backing
, &new_backing_num_sectors
);
1753 if (num_sectors
!= 0) {
1754 local_progress
= (float)100 /
1755 (num_sectors
/ MIN(num_sectors
, IO_BUF_SIZE
/ 512));
1758 for (sector
= 0; sector
< num_sectors
; sector
+= n
) {
1760 /* How many sectors can we handle with the next read? */
1761 if (sector
+ (IO_BUF_SIZE
/ 512) <= num_sectors
) {
1762 n
= (IO_BUF_SIZE
/ 512);
1764 n
= num_sectors
- sector
;
1767 /* If the cluster is allocated, we don't need to take action */
1768 ret
= bdrv_is_allocated(bs
, sector
, n
, &n
);
1774 * Read old and new backing file and take into consideration that
1775 * backing files may be smaller than the COW image.
1777 if (sector
>= old_backing_num_sectors
) {
1778 memset(buf_old
, 0, n
* BDRV_SECTOR_SIZE
);
1780 if (sector
+ n
> old_backing_num_sectors
) {
1781 n
= old_backing_num_sectors
- sector
;
1784 ret
= bdrv_read(bs_old_backing
, sector
, buf_old
, n
);
1786 error_report("error while reading from old backing file");
1791 if (sector
>= new_backing_num_sectors
|| !bs_new_backing
) {
1792 memset(buf_new
, 0, n
* BDRV_SECTOR_SIZE
);
1794 if (sector
+ n
> new_backing_num_sectors
) {
1795 n
= new_backing_num_sectors
- sector
;
1798 ret
= bdrv_read(bs_new_backing
, sector
, buf_new
, n
);
1800 error_report("error while reading from new backing file");
1805 /* If they differ, we need to write to the COW file */
1806 uint64_t written
= 0;
1808 while (written
< n
) {
1811 if (compare_sectors(buf_old
+ written
* 512,
1812 buf_new
+ written
* 512, n
- written
, &pnum
))
1814 ret
= bdrv_write(bs
, sector
+ written
,
1815 buf_old
+ written
* 512, pnum
);
1817 error_report("Error while writing to COW image: %s",
1825 qemu_progress_print(local_progress
, 100);
1828 qemu_vfree(buf_old
);
1829 qemu_vfree(buf_new
);
1833 * Change the backing file. All clusters that are different from the old
1834 * backing file are overwritten in the COW file now, so the visible content
1835 * doesn't change when we switch the backing file.
1837 if (out_baseimg
&& *out_baseimg
) {
1838 ret
= bdrv_change_backing_file(bs
, out_baseimg
, out_basefmt
);
1840 ret
= bdrv_change_backing_file(bs
, NULL
, NULL
);
1843 if (ret
== -ENOSPC
) {
1844 error_report("Could not change the backing file to '%s': No "
1845 "space left in the file header", out_baseimg
);
1846 } else if (ret
< 0) {
1847 error_report("Could not change the backing file to '%s': %s",
1848 out_baseimg
, strerror(-ret
));
1851 qemu_progress_print(100, 0);
1853 * TODO At this point it is possible to check if any clusters that are
1854 * allocated in the COW file are the same in the backing file. If so, they
1855 * could be dropped from the COW file. Don't do this before switching the
1856 * backing file, in case of a crash this would lead to corruption.
1859 qemu_progress_end();
1862 if (bs_old_backing
!= NULL
) {
1863 bdrv_delete(bs_old_backing
);
1865 if (bs_new_backing
!= NULL
) {
1866 bdrv_delete(bs_new_backing
);
1877 static int img_resize(int argc
, char **argv
)
1879 int c
, ret
, relative
;
1880 const char *filename
, *fmt
, *size
;
1881 int64_t n
, total_size
;
1882 BlockDriverState
*bs
= NULL
;
1884 static QemuOptsList resize_options
= {
1885 .name
= "resize_options",
1886 .head
= QTAILQ_HEAD_INITIALIZER(resize_options
.head
),
1889 .name
= BLOCK_OPT_SIZE
,
1890 .type
= QEMU_OPT_SIZE
,
1891 .help
= "Virtual disk size"
1898 /* Remove size from argv manually so that negative numbers are not treated
1899 * as options by getopt. */
1905 size
= argv
[--argc
];
1907 /* Parse getopt arguments */
1910 c
= getopt(argc
, argv
, "f:h");
1924 if (optind
>= argc
) {
1927 filename
= argv
[optind
++];
1929 /* Choose grow, shrink, or absolute resize mode */
1945 param
= qemu_opts_create_nofail(&resize_options
);
1946 if (qemu_opt_set(param
, BLOCK_OPT_SIZE
, size
)) {
1947 /* Error message already printed when size parsing fails */
1949 qemu_opts_del(param
);
1952 n
= qemu_opt_get_size(param
, BLOCK_OPT_SIZE
, 0);
1953 qemu_opts_del(param
);
1955 bs
= bdrv_new_open(filename
, fmt
, BDRV_O_FLAGS
| BDRV_O_RDWR
, true);
1962 total_size
= bdrv_getlength(bs
) + n
* relative
;
1966 if (total_size
<= 0) {
1967 error_report("New image size must be positive");
1972 ret
= bdrv_truncate(bs
, total_size
);
1975 printf("Image resized.\n");
1978 error_report("This image does not support resize");
1981 error_report("Image is read-only");
1984 error_report("Error resizing image (%d)", -ret
);
1997 static const img_cmd_t img_cmds
[] = {
1998 #define DEF(option, callback, arg_string) \
1999 { option, callback },
2000 #include "qemu-img-cmds.h"
2006 int main(int argc
, char **argv
)
2008 const img_cmd_t
*cmd
;
2009 const char *cmdname
;
2011 error_set_progname(argv
[0]);
2013 qemu_init_main_loop();
2020 /* find the command */
2021 for(cmd
= img_cmds
; cmd
->name
!= NULL
; cmd
++) {
2022 if (!strcmp(cmdname
, cmd
->name
)) {
2023 return cmd
->handler(argc
, argv
);