qemu-block
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-block] [PATCH v3 1/4] qemu-img: add --shrink flag for resize


From: Eric Blake
Subject: Re: [Qemu-block] [PATCH v3 1/4] qemu-img: add --shrink flag for resize
Date: Fri, 7 Jul 2017 16:12:02 -0500
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.2.1

On 07/07/2017 09:30 AM, Pavel Butsykin wrote:
> The flag as additional precaution of data loss. Perhaps in the future the

s/as/is/ s/of/against/

> operation shrink without this flag will be blocked for all formats, but while

s/while/for now/

> we need to maintain compatibility with raw.
> 
> Signed-off-by: Pavel Butsykin <address@hidden>
> ---
>  qemu-img-cmds.hx       |  4 ++--
>  qemu-img.c             | 23 +++++++++++++++++++++++
>  qemu-img.texi          |  7 ++++++-
>  tests/qemu-iotests/102 |  4 ++--
>  4 files changed, 33 insertions(+), 5 deletions(-)
> 

> @@ -3568,6 +3574,23 @@ static int img_resize(int argc, char **argv)
>          goto out;
>      }
>  
> +    if (total_size < blk_getlength(blk) && !shrink) {
> +        error_report("Warning: Shrinking an image will delete all data 
> beyond"

Alistair has a pending thread to create a unified warning function; if
that lands first, you'll have to tweak this (if yours lands first, it's
one more place for that series to clean up).

> +                     "the shrunken image's end. Before performing such an"
> +                     "operation, make sure there is no important data 
> there.");
> +
> +        if (g_strcmp0(bdrv_get_format_name(blk_bs(blk)), "raw") != 0) {
> +            error_report(
> +              "Use the --shrink option to perform a shrink operation.");
> +            ret = -1;
> +            goto out;
> +        } else {
> +            error_report("Using the --shrink option will suppress this 
> message."
> +                         "Note that future versions of qemu-img may refuse 
> to "
> +                         "shrink images without this option!");

No need to shout at the user ('.' is better than '!')

> +        }
> +    }
> +
>      ret = blk_truncate(blk, total_size, &err);
>      if (!ret) {
>          qprintf(quiet, "Image resized.\n");
> diff --git a/qemu-img.texi b/qemu-img.texi
> index 5b925ecf41..6324abef48 100644
> --- a/qemu-img.texi
> +++ b/qemu-img.texi
> @@ -499,7 +499,7 @@ qemu-img rebase -b base.img diff.qcow2
>  At this point, @code{modified.img} can be discarded, since
>  @code{base.img + diff.qcow2} contains the same information.
>  
> address@hidden resize @var{filename} [+ | address@hidden
> address@hidden resize [--shrink] @var{filename} [+ | address@hidden
>  
>  Change the disk image as if it had been created with @var{size}.
>  
> @@ -507,6 +507,11 @@ Before using this command to shrink a disk image, you 
> MUST use file system and
>  partitioning tools inside the VM to reduce allocated file systems and 
> partition
>  sizes accordingly.  Failure to do so will result in data loss!
>  
> address@hidden informs qemu-img that the user is certain about wanting
> +to shrink an image and is aware that any data beyond the truncated
> +image's end will be lost. Trying to shrink an image without this option
> +results in a warning; future versions may make it an error.

You made it an error for all but raw already, but I'm not sure how wordy
we want this to be.

> +
>  After using this command to grow a disk image, you must use file system and
>  partitioning tools inside the VM to actually begin using the new space on the
>  device.
> diff --git a/tests/qemu-iotests/102 b/tests/qemu-iotests/102
> index 87db1bb1bf..d7ad8d9840 100755
> --- a/tests/qemu-iotests/102
> +++ b/tests/qemu-iotests/102
> @@ -54,7 +54,7 @@ _make_test_img $IMG_SIZE
>  $QEMU_IO -c 'write 0 64k' "$TEST_IMG" | _filter_qemu_io
>  # Remove data cluster from image (first cluster: image header, second: 
> reftable,
>  # third: refblock, fourth: L1 table, fifth: L2 table)
> -$QEMU_IMG resize -f raw "$TEST_IMG" $((5 * 64 * 1024))
> +$QEMU_IMG resize -f raw --shrink "$TEST_IMG" $((5 * 64 * 1024))
>  
>  $QEMU_IO -c map "$TEST_IMG"
>  $QEMU_IMG map "$TEST_IMG"
> @@ -69,7 +69,7 @@ $QEMU_IO -c 'write 0 64k' "$TEST_IMG" | _filter_qemu_io
>  
>  qemu_comm_method=monitor _launch_qemu -drive if=none,file="$TEST_IMG",id=drv0
>  
> -$QEMU_IMG resize -f raw "$TEST_IMG" $((5 * 64 * 1024))
> +$QEMU_IMG resize -f raw --shrink "$TEST_IMG" $((5 * 64 * 1024))

This tests a successful shrink. Please also test the error message when
attempting to shrink but --shrink was not supplied.

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3266
Virtualization:  qemu.org | libvirt.org

Attachment: signature.asc
Description: OpenPGP digital signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]