[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
signature.asc
Description: OpenPGP digital signature