Hello!
But shrink without additional checks may be very bad idea.
"zfs set volsize=SIZE " not check used size (on zol now) and it can kill
VM filesystem.
2016-12-14 20:15 GMT+03:00 Sergei A Mamonov <mrqwer88(a)gmail.com>:
Add virStorageBackendZFSResizeVol method for storage_backend_zfs.c
---
src/storage/storage_backend_zfs.c | 28 ++++++++++++++++++++++++++++
1 file changed, 28 insertions(+)
diff --git a/src/storage/storage_backend_zfs.c
b/src/storage/storage_backend_zfs.c
index 3a43be4..8e57d72 100644
--- a/src/storage/storage_backend_zfs.c
+++ b/src/storage/storage_backend_zfs.c
@@ -454,6 +454,33 @@ virStorageBackendZFSDeletePool(virConnectPtr conn
ATTRIBUTE_UNUSED,
return ret;
}
+static int
+virStorageBackendZFSResizeVol(virConnectPtr conn ATTRIBUTE_UNUSED,
+ virStoragePoolObjPtr pool,
+ virStorageVolDefPtr vol,
+ unsigned long long capacity,
+ unsigned int flags)
+{
+ int ret = -1;
+ virCommandPtr resize_cmd = NULL;
+
+ virCheckFlags(VIR_STORAGE_VOL_RESIZE_SHRINK, -1);
+
+ resize_cmd = virCommandNewArgList(ZFS, "set", NULL);
+
+ virCommandAddArgFormat(resize_cmd, "volsize=%llu", capacity);
+ virCommandAddArgFormat(resize_cmd, "%s/%s",
+ pool->def->source.name, vol->name);
+
+ if (virCommandRun(resize_cmd, NULL) < 0)
+ goto cleanup;
+
+ ret = 0;
+ cleanup:
+ virCommandFree(resize_cmd);
+ return ret;
+}
+
virStorageBackend virStorageBackendZFS = {
.type = VIR_STORAGE_POOL_ZFS,
@@ -465,4 +492,5 @@ virStorageBackend virStorageBackendZFS = {
.deletePool = virStorageBackendZFSDeletePool,
.uploadVol = virStorageBackendVolUploadLocal,
.downloadVol = virStorageBackendVolDownloadLocal,
+ .resizeVol = virStorageBackendZFSResizeVol,
};
--
1.8.3.1
--
Best Regards,
Sergey Mamonov