::
- blockresize domain path size
+ blockresize domain path ([size] | [--capacity])
Resize a block device of domain while the domain is running, *path*
specifies the absolute path of the block device; it corresponds
file='name'/>) for one of the disk devices attached to *domain* (see
also ``domblklist`` for listing these names).
+For image formats without metadata (raw) stored inside fixed-size storage (e.g.
+block devices) the --capacity flag can be used to resize the device to the
+full size of the backing device.
+
*size* is a scaled integer (see ``NOTES`` above) which defaults to KiB
(blocks of 1024 bytes) if there is no suffix. You must use a suffix of
"B" to get bytes (note that for historical reasons, this differs from
*/
typedef enum {
VIR_DOMAIN_BLOCK_RESIZE_BYTES = 1 << 0, /* size in bytes instead of KiB (Since: 0.9.11) */
+ VIR_DOMAIN_BLOCK_RESIZE_CAPACITY = 1 << 1, /* resize to full the capacity of the source (Since: 10.0.0) */
} virDomainBlockResizeFlags;
int virDomainBlockResize (virDomainPtr dom,
* size. Depending on the file format, the hypervisor may round up
* to the next alignment boundary.
*
+ * If @flag contains VIR_DOMAIN_BLOCK_RESIZE_CAPACITY (since 10.0.0) the
+ * hypervisor will resize the guest block device to fully fill the source,
+ * ignoring @size. This is possible only for image formats with no metadata
+ * ('raw') and for source devices with limited capacity such as block devices.
+ *
* The @disk parameter is either an unambiguous source name of the
* block device (the <source file='...'/> sub-element, such as
* "/path/to/image"), or (since 0.9.5) the device target shorthand
},
{.name = "size",
.type = VSH_OT_INT,
- .flags = VSH_OFLAG_REQ,
.help = N_("New size of the block device, as scaled integer (default KiB)")
},
+ {.name = "capacity",
+ .type = VSH_OT_BOOL,
+ .help = N_("resize to capacity of source (block device)")
+ },
{.name = NULL}
};
unsigned long long size = 0;
unsigned int flags = 0;
+ VSH_ALTERNATIVE_OPTIONS("size", "capacity");
+
if (vshCommandOptStringReq(ctl, cmd, "path", (const char **) &path) < 0)
return false;
if (vshCommandOptScaledInt(ctl, cmd, "size", &size, 1024, ULLONG_MAX) < 0)
return false;
- /* Prefer the older interface of KiB. */
- if (size % 1024 == 0)
- size /= 1024;
- else
- flags |= VIR_DOMAIN_BLOCK_RESIZE_BYTES;
+ if (vshCommandOptBool(cmd, "capacity")) {
+ flags |= VIR_DOMAIN_BLOCK_RESIZE_CAPACITY;
+ } else {
+ /* Prefer the older interface of KiB. */
+ if (size % 1024 == 0)
+ size /= 1024;
+ else
+ flags |= VIR_DOMAIN_BLOCK_RESIZE_BYTES;
+ }
if (!(dom = virshCommandOptDomain(ctl, cmd, NULL)))
return false;