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
);
480 if (ret
< 0 || result
.check_errors
) {
481 printf("\nAn error has occurred during the check: %s\n"
482 "The check is not complete and may have missed error.\n",
487 if (result
.corruptions
) {
489 } else if (result
.leaks
) {
496 static int img_commit(int argc
, char **argv
)
499 const char *filename
, *fmt
, *cache
;
500 BlockDriverState
*bs
;
503 cache
= BDRV_DEFAULT_CACHE
;
505 c
= getopt(argc
, argv
, "f:ht:");
522 if (optind
>= argc
) {
525 filename
= argv
[optind
++];
528 ret
= bdrv_parse_cache_flags(cache
, &flags
);
530 error_report("Invalid cache option: %s", cache
);
534 bs
= bdrv_new_open(filename
, fmt
, flags
, true);
538 ret
= bdrv_commit(bs
);
541 printf("Image committed.\n");
544 error_report("No disk inserted");
547 error_report("Image is read-only");
550 error_report("Image is already committed");
553 error_report("Error while committing image");
565 * Returns true iff the first sector pointed to by 'buf' contains at least
568 * 'pnum' is set to the number of sectors (including and immediately following
569 * the first one) that are known to be in the same allocated/unallocated state.
571 static int is_allocated_sectors(const uint8_t *buf
, int n
, int *pnum
)
580 is_zero
= buffer_is_zero(buf
, 512);
581 for(i
= 1; i
< n
; i
++) {
583 if (is_zero
!= buffer_is_zero(buf
, 512)) {
592 * Like is_allocated_sectors, but if the buffer starts with a used sector,
593 * up to 'min' consecutive sectors containing zeros are ignored. This avoids
594 * breaking up write requests for only small sparse areas.
596 static int is_allocated_sectors_min(const uint8_t *buf
, int n
, int *pnum
,
600 int num_checked
, num_used
;
606 ret
= is_allocated_sectors(buf
, n
, pnum
);
612 buf
+= BDRV_SECTOR_SIZE
* *pnum
;
614 num_checked
= num_used
;
617 ret
= is_allocated_sectors(buf
, n
, pnum
);
619 buf
+= BDRV_SECTOR_SIZE
* *pnum
;
621 num_checked
+= *pnum
;
623 num_used
= num_checked
;
624 } else if (*pnum
>= min
) {
634 * Compares two buffers sector by sector. Returns 0 if the first sector of both
635 * buffers matches, non-zero otherwise.
637 * pnum is set to the number of sectors (including and immediately following
638 * the first one) that are known to have the same comparison result
640 static int compare_sectors(const uint8_t *buf1
, const uint8_t *buf2
, int n
,
650 res
= !!memcmp(buf1
, buf2
, 512);
651 for(i
= 1; i
< n
; i
++) {
655 if (!!memcmp(buf1
, buf2
, 512) != res
) {
664 #define IO_BUF_SIZE (2 * 1024 * 1024)
666 static int img_convert(int argc
, char **argv
)
668 int c
, ret
= 0, n
, n1
, bs_n
, bs_i
, compress
, cluster_size
, cluster_sectors
;
669 int progress
= 0, flags
;
670 const char *fmt
, *out_fmt
, *cache
, *out_baseimg
, *out_filename
;
671 BlockDriver
*drv
, *proto_drv
;
672 BlockDriverState
**bs
= NULL
, *out_bs
= NULL
;
673 int64_t total_sectors
, nb_sectors
, sector_num
, bs_offset
;
675 uint8_t * buf
= NULL
;
678 QEMUOptionParameter
*param
= NULL
, *create_options
= NULL
;
679 QEMUOptionParameter
*out_baseimg_param
;
680 char *options
= NULL
;
681 const char *snapshot_name
= NULL
;
682 float local_progress
= 0;
683 int min_sparse
= 8; /* Need at least 4k of zeros for sparse detection */
691 c
= getopt(argc
, argv
, "f:O:B:s:hce6o:pS:t:");
707 out_baseimg
= optarg
;
713 error_report("option -e is deprecated, please use \'-o "
714 "encryption\' instead!");
717 error_report("option -6 is deprecated, please use \'-o "
718 "compat6\' instead!");
724 snapshot_name
= optarg
;
730 sval
= strtosz_suffix(optarg
, &end
, STRTOSZ_DEFSUFFIX_B
);
731 if (sval
< 0 || *end
) {
732 error_report("Invalid minimum zero buffer size for sparse output specified");
736 min_sparse
= sval
/ BDRV_SECTOR_SIZE
;
748 bs_n
= argc
- optind
- 1;
753 out_filename
= argv
[argc
- 1];
755 /* Initialize before goto out */
756 qemu_progress_init(progress
, 2.0);
758 if (options
&& is_help_option(options
)) {
759 ret
= print_block_option_help(out_filename
, out_fmt
);
763 if (bs_n
> 1 && out_baseimg
) {
764 error_report("-B makes no sense when concatenating multiple input "
770 qemu_progress_print(0, 100);
772 bs
= g_malloc0(bs_n
* sizeof(BlockDriverState
*));
775 for (bs_i
= 0; bs_i
< bs_n
; bs_i
++) {
776 bs
[bs_i
] = bdrv_new_open(argv
[optind
+ bs_i
], fmt
, BDRV_O_FLAGS
, true);
778 error_report("Could not open '%s'", argv
[optind
+ bs_i
]);
782 bdrv_get_geometry(bs
[bs_i
], &bs_sectors
);
783 total_sectors
+= bs_sectors
;
786 if (snapshot_name
!= NULL
) {
788 error_report("No support for concatenating multiple snapshot");
792 if (bdrv_snapshot_load_tmp(bs
[0], snapshot_name
) < 0) {
793 error_report("Failed to load snapshot");
799 /* Find driver and parse its options */
800 drv
= bdrv_find_format(out_fmt
);
802 error_report("Unknown file format '%s'", out_fmt
);
807 proto_drv
= bdrv_find_protocol(out_filename
);
809 error_report("Unknown protocol '%s'", out_filename
);
814 create_options
= append_option_parameters(create_options
,
815 drv
->create_options
);
816 create_options
= append_option_parameters(create_options
,
817 proto_drv
->create_options
);
820 param
= parse_option_parameters(options
, create_options
, param
);
822 error_report("Invalid options for file format '%s'.", out_fmt
);
827 param
= parse_option_parameters("", create_options
, param
);
830 set_option_parameter_int(param
, BLOCK_OPT_SIZE
, total_sectors
* 512);
831 ret
= add_old_style_options(out_fmt
, param
, out_baseimg
, NULL
);
836 /* Get backing file name if -o backing_file was used */
837 out_baseimg_param
= get_option_parameter(param
, BLOCK_OPT_BACKING_FILE
);
838 if (out_baseimg_param
) {
839 out_baseimg
= out_baseimg_param
->value
.s
;
842 /* Check if compression is supported */
844 QEMUOptionParameter
*encryption
=
845 get_option_parameter(param
, BLOCK_OPT_ENCRYPT
);
846 QEMUOptionParameter
*preallocation
=
847 get_option_parameter(param
, BLOCK_OPT_PREALLOC
);
849 if (!drv
->bdrv_write_compressed
) {
850 error_report("Compression not supported for this file format");
855 if (encryption
&& encryption
->value
.n
) {
856 error_report("Compression and encryption not supported at "
862 if (preallocation
&& preallocation
->value
.s
863 && strcmp(preallocation
->value
.s
, "off"))
865 error_report("Compression and preallocation not supported at "
872 /* Create the new image */
873 ret
= bdrv_create(drv
, out_filename
, param
);
875 if (ret
== -ENOTSUP
) {
876 error_report("Formatting not supported for file format '%s'",
878 } else if (ret
== -EFBIG
) {
879 error_report("The image size is too large for file format '%s'",
882 error_report("%s: error while converting %s: %s",
883 out_filename
, out_fmt
, strerror(-ret
));
889 ret
= bdrv_parse_cache_flags(cache
, &flags
);
891 error_report("Invalid cache option: %s", cache
);
895 out_bs
= bdrv_new_open(out_filename
, out_fmt
, flags
, true);
903 bdrv_get_geometry(bs
[0], &bs_sectors
);
904 buf
= qemu_blockalign(out_bs
, IO_BUF_SIZE
);
907 ret
= bdrv_get_info(out_bs
, &bdi
);
909 error_report("could not get block driver info");
912 cluster_size
= bdi
.cluster_size
;
913 if (cluster_size
<= 0 || cluster_size
> IO_BUF_SIZE
) {
914 error_report("invalid cluster size");
918 cluster_sectors
= cluster_size
>> 9;
921 nb_sectors
= total_sectors
;
922 if (nb_sectors
!= 0) {
923 local_progress
= (float)100 /
924 (nb_sectors
/ MIN(nb_sectors
, cluster_sectors
));
932 nb_sectors
= total_sectors
- sector_num
;
935 if (nb_sectors
>= cluster_sectors
)
940 bs_num
= sector_num
- bs_offset
;
941 assert (bs_num
>= 0);
944 while (remainder
> 0) {
946 while (bs_num
== bs_sectors
) {
948 assert (bs_i
< bs_n
);
949 bs_offset
+= bs_sectors
;
950 bdrv_get_geometry(bs
[bs_i
], &bs_sectors
);
952 /* printf("changing part: sector_num=%" PRId64 ", "
953 "bs_i=%d, bs_offset=%" PRId64 ", bs_sectors=%" PRId64
954 "\n", sector_num, bs_i, bs_offset, bs_sectors); */
956 assert (bs_num
< bs_sectors
);
958 nlow
= (remainder
> bs_sectors
- bs_num
) ? bs_sectors
- bs_num
: remainder
;
960 ret
= bdrv_read(bs
[bs_i
], bs_num
, buf2
, nlow
);
962 error_report("error while reading sector %" PRId64
": %s",
963 bs_num
, strerror(-ret
));
972 assert (remainder
== 0);
974 if (n
< cluster_sectors
) {
975 memset(buf
+ n
* 512, 0, cluster_size
- n
* 512);
977 if (!buffer_is_zero(buf
, cluster_size
)) {
978 ret
= bdrv_write_compressed(out_bs
, sector_num
, buf
,
981 error_report("error while compressing sector %" PRId64
982 ": %s", sector_num
, strerror(-ret
));
987 qemu_progress_print(local_progress
, 100);
989 /* signal EOF to align */
990 bdrv_write_compressed(out_bs
, 0, NULL
, 0);
992 int has_zero_init
= bdrv_has_zero_init(out_bs
);
994 sector_num
= 0; // total number of sectors converted so far
995 nb_sectors
= total_sectors
- sector_num
;
996 if (nb_sectors
!= 0) {
997 local_progress
= (float)100 /
998 (nb_sectors
/ MIN(nb_sectors
, IO_BUF_SIZE
/ 512));
1002 nb_sectors
= total_sectors
- sector_num
;
1003 if (nb_sectors
<= 0) {
1006 if (nb_sectors
>= (IO_BUF_SIZE
/ 512)) {
1007 n
= (IO_BUF_SIZE
/ 512);
1012 while (sector_num
- bs_offset
>= bs_sectors
) {
1014 assert (bs_i
< bs_n
);
1015 bs_offset
+= bs_sectors
;
1016 bdrv_get_geometry(bs
[bs_i
], &bs_sectors
);
1017 /* printf("changing part: sector_num=%" PRId64 ", bs_i=%d, "
1018 "bs_offset=%" PRId64 ", bs_sectors=%" PRId64 "\n",
1019 sector_num, bs_i, bs_offset, bs_sectors); */
1022 if (n
> bs_offset
+ bs_sectors
- sector_num
) {
1023 n
= bs_offset
+ bs_sectors
- sector_num
;
1026 if (has_zero_init
) {
1027 /* If the output image is being created as a copy on write image,
1028 assume that sectors which are unallocated in the input image
1029 are present in both the output's and input's base images (no
1030 need to copy them). */
1032 if (!bdrv_is_allocated(bs
[bs_i
], sector_num
- bs_offset
,
1037 /* The next 'n1' sectors are allocated in the input image. Copy
1038 only those as they may be followed by unallocated sectors. */
1045 ret
= bdrv_read(bs
[bs_i
], sector_num
- bs_offset
, buf
, n
);
1047 error_report("error while reading sector %" PRId64
": %s",
1048 sector_num
- bs_offset
, strerror(-ret
));
1051 /* NOTE: at the same time we convert, we do not write zero
1052 sectors to have a chance to compress the image. Ideally, we
1053 should add a specific call to have the info to go faster */
1056 /* If the output image is being created as a copy on write image,
1057 copy all sectors even the ones containing only NUL bytes,
1058 because they may differ from the sectors in the base image.
1060 If the output is to a host device, we also write out
1061 sectors that are entirely 0, since whatever data was
1062 already there is garbage, not 0s. */
1063 if (!has_zero_init
|| out_baseimg
||
1064 is_allocated_sectors_min(buf1
, n
, &n1
, min_sparse
)) {
1065 ret
= bdrv_write(out_bs
, sector_num
, buf1
, n1
);
1067 error_report("error while writing sector %" PRId64
1068 ": %s", sector_num
, strerror(-ret
));
1076 qemu_progress_print(local_progress
, 100);
1080 qemu_progress_end();
1081 free_option_parameters(create_options
);
1082 free_option_parameters(param
);
1085 bdrv_delete(out_bs
);
1088 for (bs_i
= 0; bs_i
< bs_n
; bs_i
++) {
1090 bdrv_delete(bs
[bs_i
]);
1102 static void dump_snapshots(BlockDriverState
*bs
)
1104 QEMUSnapshotInfo
*sn_tab
, *sn
;
1108 nb_sns
= bdrv_snapshot_list(bs
, &sn_tab
);
1111 printf("Snapshot list:\n");
1112 printf("%s\n", bdrv_snapshot_dump(buf
, sizeof(buf
), NULL
));
1113 for(i
= 0; i
< nb_sns
; i
++) {
1115 printf("%s\n", bdrv_snapshot_dump(buf
, sizeof(buf
), sn
));
1120 static void dump_json_image_info_list(ImageInfoList
*list
)
1124 QmpOutputVisitor
*ov
= qmp_output_visitor_new();
1126 visit_type_ImageInfoList(qmp_output_get_visitor(ov
),
1127 &list
, NULL
, &errp
);
1128 obj
= qmp_output_get_qobject(ov
);
1129 str
= qobject_to_json_pretty(obj
);
1130 assert(str
!= NULL
);
1131 printf("%s\n", qstring_get_str(str
));
1132 qobject_decref(obj
);
1133 qmp_output_visitor_cleanup(ov
);
1137 static void collect_snapshots(BlockDriverState
*bs
, ImageInfo
*info
)
1140 QEMUSnapshotInfo
*sn_tab
= NULL
;
1141 SnapshotInfoList
*info_list
, *cur_item
= NULL
;
1142 sn_count
= bdrv_snapshot_list(bs
, &sn_tab
);
1144 for (i
= 0; i
< sn_count
; i
++) {
1145 info
->has_snapshots
= true;
1146 info_list
= g_new0(SnapshotInfoList
, 1);
1148 info_list
->value
= g_new0(SnapshotInfo
, 1);
1149 info_list
->value
->id
= g_strdup(sn_tab
[i
].id_str
);
1150 info_list
->value
->name
= g_strdup(sn_tab
[i
].name
);
1151 info_list
->value
->vm_state_size
= sn_tab
[i
].vm_state_size
;
1152 info_list
->value
->date_sec
= sn_tab
[i
].date_sec
;
1153 info_list
->value
->date_nsec
= sn_tab
[i
].date_nsec
;
1154 info_list
->value
->vm_clock_sec
= sn_tab
[i
].vm_clock_nsec
/ 1000000000;
1155 info_list
->value
->vm_clock_nsec
= sn_tab
[i
].vm_clock_nsec
% 1000000000;
1157 /* XXX: waiting for the qapi to support qemu-queue.h types */
1159 info
->snapshots
= cur_item
= info_list
;
1161 cur_item
->next
= info_list
;
1162 cur_item
= info_list
;
1170 static void dump_json_image_info(ImageInfo
*info
)
1174 QmpOutputVisitor
*ov
= qmp_output_visitor_new();
1176 visit_type_ImageInfo(qmp_output_get_visitor(ov
),
1177 &info
, NULL
, &errp
);
1178 obj
= qmp_output_get_qobject(ov
);
1179 str
= qobject_to_json_pretty(obj
);
1180 assert(str
!= NULL
);
1181 printf("%s\n", qstring_get_str(str
));
1182 qobject_decref(obj
);
1183 qmp_output_visitor_cleanup(ov
);
1187 static void collect_image_info(BlockDriverState
*bs
,
1189 const char *filename
,
1192 uint64_t total_sectors
;
1193 char backing_filename
[1024];
1194 char backing_filename2
[1024];
1195 BlockDriverInfo bdi
;
1197 bdrv_get_geometry(bs
, &total_sectors
);
1199 info
->filename
= g_strdup(filename
);
1200 info
->format
= g_strdup(bdrv_get_format_name(bs
));
1201 info
->virtual_size
= total_sectors
* 512;
1202 info
->actual_size
= bdrv_get_allocated_file_size(bs
);
1203 info
->has_actual_size
= info
->actual_size
>= 0;
1204 if (bdrv_is_encrypted(bs
)) {
1205 info
->encrypted
= true;
1206 info
->has_encrypted
= true;
1208 if (bdrv_get_info(bs
, &bdi
) >= 0) {
1209 if (bdi
.cluster_size
!= 0) {
1210 info
->cluster_size
= bdi
.cluster_size
;
1211 info
->has_cluster_size
= true;
1213 info
->dirty_flag
= bdi
.is_dirty
;
1214 info
->has_dirty_flag
= true;
1216 bdrv_get_backing_filename(bs
, backing_filename
, sizeof(backing_filename
));
1217 if (backing_filename
[0] != '\0') {
1218 info
->backing_filename
= g_strdup(backing_filename
);
1219 info
->has_backing_filename
= true;
1220 bdrv_get_full_backing_filename(bs
, backing_filename2
,
1221 sizeof(backing_filename2
));
1223 if (strcmp(backing_filename
, backing_filename2
) != 0) {
1224 info
->full_backing_filename
=
1225 g_strdup(backing_filename2
);
1226 info
->has_full_backing_filename
= true;
1229 if (bs
->backing_format
[0]) {
1230 info
->backing_filename_format
= g_strdup(bs
->backing_format
);
1231 info
->has_backing_filename_format
= true;
1236 static void dump_human_image_info(ImageInfo
*info
)
1238 char size_buf
[128], dsize_buf
[128];
1239 if (!info
->has_actual_size
) {
1240 snprintf(dsize_buf
, sizeof(dsize_buf
), "unavailable");
1242 get_human_readable_size(dsize_buf
, sizeof(dsize_buf
),
1245 get_human_readable_size(size_buf
, sizeof(size_buf
), info
->virtual_size
);
1246 printf("image: %s\n"
1248 "virtual size: %s (%" PRId64
" bytes)\n"
1250 info
->filename
, info
->format
, size_buf
,
1254 if (info
->has_encrypted
&& info
->encrypted
) {
1255 printf("encrypted: yes\n");
1258 if (info
->has_cluster_size
) {
1259 printf("cluster_size: %" PRId64
"\n", info
->cluster_size
);
1262 if (info
->has_dirty_flag
&& info
->dirty_flag
) {
1263 printf("cleanly shut down: no\n");
1266 if (info
->has_backing_filename
) {
1267 printf("backing file: %s", info
->backing_filename
);
1268 if (info
->has_full_backing_filename
) {
1269 printf(" (actual path: %s)", info
->full_backing_filename
);
1272 if (info
->has_backing_filename_format
) {
1273 printf("backing file format: %s\n", info
->backing_filename_format
);
1277 if (info
->has_snapshots
) {
1278 SnapshotInfoList
*elem
;
1281 printf("Snapshot list:\n");
1282 printf("%s\n", bdrv_snapshot_dump(buf
, sizeof(buf
), NULL
));
1284 /* Ideally bdrv_snapshot_dump() would operate on SnapshotInfoList but
1285 * we convert to the block layer's native QEMUSnapshotInfo for now.
1287 for (elem
= info
->snapshots
; elem
; elem
= elem
->next
) {
1288 QEMUSnapshotInfo sn
= {
1289 .vm_state_size
= elem
->value
->vm_state_size
,
1290 .date_sec
= elem
->value
->date_sec
,
1291 .date_nsec
= elem
->value
->date_nsec
,
1292 .vm_clock_nsec
= elem
->value
->vm_clock_sec
* 1000000000ULL +
1293 elem
->value
->vm_clock_nsec
,
1296 pstrcpy(sn
.id_str
, sizeof(sn
.id_str
), elem
->value
->id
);
1297 pstrcpy(sn
.name
, sizeof(sn
.name
), elem
->value
->name
);
1298 printf("%s\n", bdrv_snapshot_dump(buf
, sizeof(buf
), &sn
));
1303 static void dump_human_image_info_list(ImageInfoList
*list
)
1305 ImageInfoList
*elem
;
1308 for (elem
= list
; elem
; elem
= elem
->next
) {
1314 dump_human_image_info(elem
->value
);
1318 static gboolean
str_equal_func(gconstpointer a
, gconstpointer b
)
1320 return strcmp(a
, b
) == 0;
1324 * Open an image file chain and return an ImageInfoList
1326 * @filename: topmost image filename
1327 * @fmt: topmost image format (may be NULL to autodetect)
1328 * @chain: true - enumerate entire backing file chain
1329 * false - only topmost image file
1331 * Returns a list of ImageInfo objects or NULL if there was an error opening an
1332 * image file. If there was an error a message will have been printed to
1335 static ImageInfoList
*collect_image_info_list(const char *filename
,
1339 ImageInfoList
*head
= NULL
;
1340 ImageInfoList
**last
= &head
;
1341 GHashTable
*filenames
;
1343 filenames
= g_hash_table_new_full(g_str_hash
, str_equal_func
, NULL
, NULL
);
1346 BlockDriverState
*bs
;
1348 ImageInfoList
*elem
;
1350 if (g_hash_table_lookup_extended(filenames
, filename
, NULL
, NULL
)) {
1351 error_report("Backing file '%s' creates an infinite loop.",
1355 g_hash_table_insert(filenames
, (gpointer
)filename
, NULL
);
1357 bs
= bdrv_new_open(filename
, fmt
, BDRV_O_FLAGS
| BDRV_O_NO_BACKING
,
1363 info
= g_new0(ImageInfo
, 1);
1364 collect_image_info(bs
, info
, filename
, fmt
);
1365 collect_snapshots(bs
, info
);
1367 elem
= g_new0(ImageInfoList
, 1);
1374 filename
= fmt
= NULL
;
1376 if (info
->has_full_backing_filename
) {
1377 filename
= info
->full_backing_filename
;
1378 } else if (info
->has_backing_filename
) {
1379 filename
= info
->backing_filename
;
1381 if (info
->has_backing_filename_format
) {
1382 fmt
= info
->backing_filename_format
;
1386 g_hash_table_destroy(filenames
);
1390 qapi_free_ImageInfoList(head
);
1391 g_hash_table_destroy(filenames
);
1396 OPTION_OUTPUT
= 256,
1397 OPTION_BACKING_CHAIN
= 257,
1400 typedef enum OutputFormat
{
1405 static int img_info(int argc
, char **argv
)
1408 OutputFormat output_format
= OFORMAT_HUMAN
;
1410 const char *filename
, *fmt
, *output
;
1411 ImageInfoList
*list
;
1416 int option_index
= 0;
1417 static const struct option long_options
[] = {
1418 {"help", no_argument
, 0, 'h'},
1419 {"format", required_argument
, 0, 'f'},
1420 {"output", required_argument
, 0, OPTION_OUTPUT
},
1421 {"backing-chain", no_argument
, 0, OPTION_BACKING_CHAIN
},
1424 c
= getopt_long(argc
, argv
, "f:h",
1425 long_options
, &option_index
);
1440 case OPTION_BACKING_CHAIN
:
1445 if (optind
>= argc
) {
1448 filename
= argv
[optind
++];
1450 if (output
&& !strcmp(output
, "json")) {
1451 output_format
= OFORMAT_JSON
;
1452 } else if (output
&& !strcmp(output
, "human")) {
1453 output_format
= OFORMAT_HUMAN
;
1454 } else if (output
) {
1455 error_report("--output must be used with human or json as argument.");
1459 list
= collect_image_info_list(filename
, fmt
, chain
);
1464 switch (output_format
) {
1466 dump_human_image_info_list(list
);
1470 dump_json_image_info_list(list
);
1472 dump_json_image_info(list
->value
);
1477 qapi_free_ImageInfoList(list
);
1481 #define SNAPSHOT_LIST 1
1482 #define SNAPSHOT_CREATE 2
1483 #define SNAPSHOT_APPLY 3
1484 #define SNAPSHOT_DELETE 4
1486 static int img_snapshot(int argc
, char **argv
)
1488 BlockDriverState
*bs
;
1489 QEMUSnapshotInfo sn
;
1490 char *filename
, *snapshot_name
= NULL
;
1491 int c
, ret
= 0, bdrv_oflags
;
1495 bdrv_oflags
= BDRV_O_FLAGS
| BDRV_O_RDWR
;
1496 /* Parse commandline parameters */
1498 c
= getopt(argc
, argv
, "la:c:d:h");
1512 action
= SNAPSHOT_LIST
;
1513 bdrv_oflags
&= ~BDRV_O_RDWR
; /* no need for RW */
1520 action
= SNAPSHOT_APPLY
;
1521 snapshot_name
= optarg
;
1528 action
= SNAPSHOT_CREATE
;
1529 snapshot_name
= optarg
;
1536 action
= SNAPSHOT_DELETE
;
1537 snapshot_name
= optarg
;
1542 if (optind
>= argc
) {
1545 filename
= argv
[optind
++];
1547 /* Open the image */
1548 bs
= bdrv_new_open(filename
, NULL
, bdrv_oflags
, true);
1553 /* Perform the requested action */
1559 case SNAPSHOT_CREATE
:
1560 memset(&sn
, 0, sizeof(sn
));
1561 pstrcpy(sn
.name
, sizeof(sn
.name
), snapshot_name
);
1563 qemu_gettimeofday(&tv
);
1564 sn
.date_sec
= tv
.tv_sec
;
1565 sn
.date_nsec
= tv
.tv_usec
* 1000;
1567 ret
= bdrv_snapshot_create(bs
, &sn
);
1569 error_report("Could not create snapshot '%s': %d (%s)",
1570 snapshot_name
, ret
, strerror(-ret
));
1574 case SNAPSHOT_APPLY
:
1575 ret
= bdrv_snapshot_goto(bs
, snapshot_name
);
1577 error_report("Could not apply snapshot '%s': %d (%s)",
1578 snapshot_name
, ret
, strerror(-ret
));
1582 case SNAPSHOT_DELETE
:
1583 ret
= bdrv_snapshot_delete(bs
, snapshot_name
);
1585 error_report("Could not delete snapshot '%s': %d (%s)",
1586 snapshot_name
, ret
, strerror(-ret
));
1599 static int img_rebase(int argc
, char **argv
)
1601 BlockDriverState
*bs
, *bs_old_backing
= NULL
, *bs_new_backing
= NULL
;
1602 BlockDriver
*old_backing_drv
, *new_backing_drv
;
1604 const char *fmt
, *cache
, *out_basefmt
, *out_baseimg
;
1609 /* Parse commandline parameters */
1611 cache
= BDRV_DEFAULT_CACHE
;
1615 c
= getopt(argc
, argv
, "uhf:F:b:pt:");
1628 out_basefmt
= optarg
;
1631 out_baseimg
= optarg
;
1645 if ((optind
>= argc
) || (!unsafe
&& !out_baseimg
)) {
1648 filename
= argv
[optind
++];
1650 qemu_progress_init(progress
, 2.0);
1651 qemu_progress_print(0, 100);
1653 flags
= BDRV_O_RDWR
| (unsafe
? BDRV_O_NO_BACKING
: 0);
1654 ret
= bdrv_parse_cache_flags(cache
, &flags
);
1656 error_report("Invalid cache option: %s", cache
);
1663 * Ignore the old backing file for unsafe rebase in case we want to correct
1664 * the reference to a renamed or moved backing file.
1666 bs
= bdrv_new_open(filename
, fmt
, flags
, true);
1671 /* Find the right drivers for the backing files */
1672 old_backing_drv
= NULL
;
1673 new_backing_drv
= NULL
;
1675 if (!unsafe
&& bs
->backing_format
[0] != '\0') {
1676 old_backing_drv
= bdrv_find_format(bs
->backing_format
);
1677 if (old_backing_drv
== NULL
) {
1678 error_report("Invalid format name: '%s'", bs
->backing_format
);
1684 if (out_basefmt
!= NULL
) {
1685 new_backing_drv
= bdrv_find_format(out_basefmt
);
1686 if (new_backing_drv
== NULL
) {
1687 error_report("Invalid format name: '%s'", out_basefmt
);
1693 /* For safe rebasing we need to compare old and new backing file */
1695 /* Make the compiler happy */
1696 bs_old_backing
= NULL
;
1697 bs_new_backing
= NULL
;
1699 char backing_name
[1024];
1701 bs_old_backing
= bdrv_new("old_backing");
1702 bdrv_get_backing_filename(bs
, backing_name
, sizeof(backing_name
));
1703 ret
= bdrv_open(bs_old_backing
, backing_name
, BDRV_O_FLAGS
,
1706 error_report("Could not open old backing file '%s'", backing_name
);
1709 if (out_baseimg
[0]) {
1710 bs_new_backing
= bdrv_new("new_backing");
1711 ret
= bdrv_open(bs_new_backing
, out_baseimg
, BDRV_O_FLAGS
,
1714 error_report("Could not open new backing file '%s'",
1722 * Check each unallocated cluster in the COW file. If it is unallocated,
1723 * accesses go to the backing file. We must therefore compare this cluster
1724 * in the old and new backing file, and if they differ we need to copy it
1725 * from the old backing file into the COW file.
1727 * If qemu-img crashes during this step, no harm is done. The content of
1728 * the image is the same as the original one at any time.
1731 uint64_t num_sectors
;
1732 uint64_t old_backing_num_sectors
;
1733 uint64_t new_backing_num_sectors
= 0;
1738 float local_progress
= 0;
1740 buf_old
= qemu_blockalign(bs
, IO_BUF_SIZE
);
1741 buf_new
= qemu_blockalign(bs
, IO_BUF_SIZE
);
1743 bdrv_get_geometry(bs
, &num_sectors
);
1744 bdrv_get_geometry(bs_old_backing
, &old_backing_num_sectors
);
1745 if (bs_new_backing
) {
1746 bdrv_get_geometry(bs_new_backing
, &new_backing_num_sectors
);
1749 if (num_sectors
!= 0) {
1750 local_progress
= (float)100 /
1751 (num_sectors
/ MIN(num_sectors
, IO_BUF_SIZE
/ 512));
1754 for (sector
= 0; sector
< num_sectors
; sector
+= n
) {
1756 /* How many sectors can we handle with the next read? */
1757 if (sector
+ (IO_BUF_SIZE
/ 512) <= num_sectors
) {
1758 n
= (IO_BUF_SIZE
/ 512);
1760 n
= num_sectors
- sector
;
1763 /* If the cluster is allocated, we don't need to take action */
1764 ret
= bdrv_is_allocated(bs
, sector
, n
, &n
);
1770 * Read old and new backing file and take into consideration that
1771 * backing files may be smaller than the COW image.
1773 if (sector
>= old_backing_num_sectors
) {
1774 memset(buf_old
, 0, n
* BDRV_SECTOR_SIZE
);
1776 if (sector
+ n
> old_backing_num_sectors
) {
1777 n
= old_backing_num_sectors
- sector
;
1780 ret
= bdrv_read(bs_old_backing
, sector
, buf_old
, n
);
1782 error_report("error while reading from old backing file");
1787 if (sector
>= new_backing_num_sectors
|| !bs_new_backing
) {
1788 memset(buf_new
, 0, n
* BDRV_SECTOR_SIZE
);
1790 if (sector
+ n
> new_backing_num_sectors
) {
1791 n
= new_backing_num_sectors
- sector
;
1794 ret
= bdrv_read(bs_new_backing
, sector
, buf_new
, n
);
1796 error_report("error while reading from new backing file");
1801 /* If they differ, we need to write to the COW file */
1802 uint64_t written
= 0;
1804 while (written
< n
) {
1807 if (compare_sectors(buf_old
+ written
* 512,
1808 buf_new
+ written
* 512, n
- written
, &pnum
))
1810 ret
= bdrv_write(bs
, sector
+ written
,
1811 buf_old
+ written
* 512, pnum
);
1813 error_report("Error while writing to COW image: %s",
1821 qemu_progress_print(local_progress
, 100);
1824 qemu_vfree(buf_old
);
1825 qemu_vfree(buf_new
);
1829 * Change the backing file. All clusters that are different from the old
1830 * backing file are overwritten in the COW file now, so the visible content
1831 * doesn't change when we switch the backing file.
1833 if (out_baseimg
&& *out_baseimg
) {
1834 ret
= bdrv_change_backing_file(bs
, out_baseimg
, out_basefmt
);
1836 ret
= bdrv_change_backing_file(bs
, NULL
, NULL
);
1839 if (ret
== -ENOSPC
) {
1840 error_report("Could not change the backing file to '%s': No "
1841 "space left in the file header", out_baseimg
);
1842 } else if (ret
< 0) {
1843 error_report("Could not change the backing file to '%s': %s",
1844 out_baseimg
, strerror(-ret
));
1847 qemu_progress_print(100, 0);
1849 * TODO At this point it is possible to check if any clusters that are
1850 * allocated in the COW file are the same in the backing file. If so, they
1851 * could be dropped from the COW file. Don't do this before switching the
1852 * backing file, in case of a crash this would lead to corruption.
1855 qemu_progress_end();
1858 if (bs_old_backing
!= NULL
) {
1859 bdrv_delete(bs_old_backing
);
1861 if (bs_new_backing
!= NULL
) {
1862 bdrv_delete(bs_new_backing
);
1873 static int img_resize(int argc
, char **argv
)
1875 int c
, ret
, relative
;
1876 const char *filename
, *fmt
, *size
;
1877 int64_t n
, total_size
;
1878 BlockDriverState
*bs
= NULL
;
1880 static QemuOptsList resize_options
= {
1881 .name
= "resize_options",
1882 .head
= QTAILQ_HEAD_INITIALIZER(resize_options
.head
),
1885 .name
= BLOCK_OPT_SIZE
,
1886 .type
= QEMU_OPT_SIZE
,
1887 .help
= "Virtual disk size"
1894 /* Remove size from argv manually so that negative numbers are not treated
1895 * as options by getopt. */
1901 size
= argv
[--argc
];
1903 /* Parse getopt arguments */
1906 c
= getopt(argc
, argv
, "f:h");
1920 if (optind
>= argc
) {
1923 filename
= argv
[optind
++];
1925 /* Choose grow, shrink, or absolute resize mode */
1941 param
= qemu_opts_create_nofail(&resize_options
);
1942 if (qemu_opt_set(param
, BLOCK_OPT_SIZE
, size
)) {
1943 /* Error message already printed when size parsing fails */
1945 qemu_opts_del(param
);
1948 n
= qemu_opt_get_size(param
, BLOCK_OPT_SIZE
, 0);
1949 qemu_opts_del(param
);
1951 bs
= bdrv_new_open(filename
, fmt
, BDRV_O_FLAGS
| BDRV_O_RDWR
, true);
1958 total_size
= bdrv_getlength(bs
) + n
* relative
;
1962 if (total_size
<= 0) {
1963 error_report("New image size must be positive");
1968 ret
= bdrv_truncate(bs
, total_size
);
1971 printf("Image resized.\n");
1974 error_report("This image does not support resize");
1977 error_report("Image is read-only");
1980 error_report("Error resizing image (%d)", -ret
);
1993 static const img_cmd_t img_cmds
[] = {
1994 #define DEF(option, callback, arg_string) \
1995 { option, callback },
1996 #include "qemu-img-cmds.h"
2002 int main(int argc
, char **argv
)
2004 const img_cmd_t
*cmd
;
2005 const char *cmdname
;
2007 error_set_progname(argv
[0]);
2009 qemu_init_main_loop();
2016 /* find the command */
2017 for(cmd
= img_cmds
; cmd
->name
!= NULL
; cmd
++) {
2018 if (!strcmp(cmdname
, cmd
->name
)) {
2019 return cmd
->handler(argc
, argv
);