1
0
mirror of https://gitlab.com/libvirt/libvirt.git synced 2025-01-10 05:17:59 +03:00

virsh-volume: add support for --reflink

Add support for --reflink to the virsh 'vol-create-from' and 'vol-clone'
commands to signify usage of the VIR_STORAGE_VOL_CREATE_REFLINK flag in the
ensuing virStorageVolCreateXMLFrom API call.

Updated the man page to describe the new flag.

Signed-off-by: Chen Hanxiao <chenhanxiao@cn.fujitsu.com>
This commit is contained in:
Chen Hanxiao 2015-02-03 11:05:27 +08:00 committed by John Ferlan
parent 47dd6c4335
commit 219ea41d8d
2 changed files with 24 additions and 1 deletions

View File

@ -204,6 +204,7 @@ cmdVolCreateAs(vshControl *ctl, const vshCmd *cmd)
if (vshCommandOptBool(cmd, "prealloc-metadata")) if (vshCommandOptBool(cmd, "prealloc-metadata"))
flags |= VIR_STORAGE_VOL_CREATE_PREALLOC_METADATA; flags |= VIR_STORAGE_VOL_CREATE_PREALLOC_METADATA;
if (!(pool = vshCommandOptPool(ctl, cmd, "pool", NULL))) if (!(pool = vshCommandOptPool(ctl, cmd, "pool", NULL)))
return false; return false;
@ -378,6 +379,7 @@ cmdVolCreate(vshControl *ctl, const vshCmd *cmd)
if (vshCommandOptBool(cmd, "prealloc-metadata")) if (vshCommandOptBool(cmd, "prealloc-metadata"))
flags |= VIR_STORAGE_VOL_CREATE_PREALLOC_METADATA; flags |= VIR_STORAGE_VOL_CREATE_PREALLOC_METADATA;
if (!(pool = vshCommandOptPool(ctl, cmd, "pool", NULL))) if (!(pool = vshCommandOptPool(ctl, cmd, "pool", NULL)))
return false; return false;
@ -441,6 +443,10 @@ static const vshCmdOptDef opts_vol_create_from[] = {
.type = VSH_OT_BOOL, .type = VSH_OT_BOOL,
.help = N_("preallocate metadata (for qcow2 instead of full allocation)") .help = N_("preallocate metadata (for qcow2 instead of full allocation)")
}, },
{.name = "reflink",
.type = VSH_OT_BOOL,
.help = N_("use btrfs COW lightweight copy")
},
{.name = NULL} {.name = NULL}
}; };
@ -460,6 +466,9 @@ cmdVolCreateFrom(vshControl *ctl, const vshCmd *cmd)
if (vshCommandOptBool(cmd, "prealloc-metadata")) if (vshCommandOptBool(cmd, "prealloc-metadata"))
flags |= VIR_STORAGE_VOL_CREATE_PREALLOC_METADATA; flags |= VIR_STORAGE_VOL_CREATE_PREALLOC_METADATA;
if (vshCommandOptBool(cmd, "reflink"))
flags |= VIR_STORAGE_VOL_CREATE_REFLINK;
if (vshCommandOptStringReq(ctl, cmd, "file", &from) < 0) if (vshCommandOptStringReq(ctl, cmd, "file", &from) < 0)
goto cleanup; goto cleanup;
@ -554,6 +563,10 @@ static const vshCmdOptDef opts_vol_clone[] = {
.type = VSH_OT_BOOL, .type = VSH_OT_BOOL,
.help = N_("preallocate metadata (for qcow2 instead of full allocation)") .help = N_("preallocate metadata (for qcow2 instead of full allocation)")
}, },
{.name = "reflink",
.type = VSH_OT_BOOL,
.help = N_("use btrfs COW lightweight copy")
},
{.name = NULL} {.name = NULL}
}; };
@ -574,6 +587,9 @@ cmdVolClone(vshControl *ctl, const vshCmd *cmd)
if (vshCommandOptBool(cmd, "prealloc-metadata")) if (vshCommandOptBool(cmd, "prealloc-metadata"))
flags |= VIR_STORAGE_VOL_CREATE_PREALLOC_METADATA; flags |= VIR_STORAGE_VOL_CREATE_PREALLOC_METADATA;
if (vshCommandOptBool(cmd, "reflink"))
flags |= VIR_STORAGE_VOL_CREATE_REFLINK;
origpool = virStoragePoolLookupByVolume(origvol); origpool = virStoragePoolLookupByVolume(origvol);
if (!origpool) { if (!origpool) {
vshError(ctl, "%s", _("failed to get parent pool")); vshError(ctl, "%s", _("failed to get parent pool"));

View File

@ -3160,6 +3160,7 @@ B<Example>
=item B<vol-create-from> I<pool-or-uuid> I<FILE> [I<--inputpool> =item B<vol-create-from> I<pool-or-uuid> I<FILE> [I<--inputpool>
I<pool-or-uuid>] I<vol-name-or-key-or-path> [I<--prealloc-metadata>] I<pool-or-uuid>] I<vol-name-or-key-or-path> [I<--prealloc-metadata>]
[I<--reflink>]
Create a volume, using another volume as input. Create a volume, using another volume as input.
I<pool-or-uuid> is the name or UUID of the storage pool to create the volume in. I<pool-or-uuid> is the name or UUID of the storage pool to create the volume in.
@ -3171,6 +3172,9 @@ I<vol-name-or-key-or-path> is the name or key or path of the source volume.
support full allocation). This option creates a sparse image file with metadata, support full allocation). This option creates a sparse image file with metadata,
resulting in higher performance compared to images with no preallocation and resulting in higher performance compared to images with no preallocation and
only slightly higher initial disk space usage. only slightly higher initial disk space usage.
When I<--reflink> is specified, perform a COW lightweight copy,
where the data blocks are copied only when modified.
If this is not possible, the copy fails.
=item B<vol-create-as> I<pool-or-uuid> I<name> I<capacity> =item B<vol-create-as> I<pool-or-uuid> I<name> I<capacity>
[I<--allocation> I<size>] [I<--format> I<string>] [I<--backing-vol> [I<--allocation> I<size>] [I<--format> I<string>] [I<--backing-vol>
@ -3205,7 +3209,7 @@ resulting in higher performance compared to images with no preallocation and
only slightly higher initial disk space usage. only slightly higher initial disk space usage.
=item B<vol-clone> [I<--pool> I<pool-or-uuid>] I<vol-name-or-key-or-path> =item B<vol-clone> [I<--pool> I<pool-or-uuid>] I<vol-name-or-key-or-path>
I<name> [I<--prealloc-metadata>] I<name> [I<--prealloc-metadata>] [I<--reflink>]
Clone an existing volume. Less powerful, but easier to type, version of Clone an existing volume. Less powerful, but easier to type, version of
B<vol-create-from>. B<vol-create-from>.
@ -3217,6 +3221,9 @@ I<name> is the name of the new volume.
support full allocation). This option creates a sparse image file with metadata, support full allocation). This option creates a sparse image file with metadata,
resulting in higher performance compared to images with no preallocation and resulting in higher performance compared to images with no preallocation and
only slightly higher initial disk space usage. only slightly higher initial disk space usage.
When I<--reflink> is specified, perform a COW lightweight copy,
where the data blocks are copied only when modified.
If this is not possible, the copy fails.
=item B<vol-delete> [I<--pool> I<pool-or-uuid>] I<vol-name-or-key-or-path> =item B<vol-delete> [I<--pool> I<pool-or-uuid>] I<vol-name-or-key-or-path>