提交 2518fd3b 编写于 作者: J John Ferlan

storage: Allow creation of a LUKS using logical volume

https://bugzilla.redhat.com/show_bug.cgi?id=1427049

Use virStorageBackendCreateVolUsingQemuImg to apply the LUKS information
to the logical volume just created.  As part of the processing of the
lvcreate command add 2MB to the capacity to account for the LUKS header
when it's determined that the volume desires to use encryption.
上级 29c5c7d2
...@@ -942,13 +942,14 @@ virStorageBackendLogicalLVCreate(virStorageVolDefPtr vol, ...@@ -942,13 +942,14 @@ virStorageBackendLogicalLVCreate(virStorageVolDefPtr vol,
virStoragePoolDefPtr def) virStoragePoolDefPtr def)
{ {
int ret; int ret;
unsigned long long capacity = vol->target.capacity;
virCommandPtr cmd = NULL; virCommandPtr cmd = NULL;
cmd = virCommandNewArgList(LVCREATE, cmd = virCommandNewArgList(LVCREATE,
"--name", vol->name, "--name", vol->name,
NULL); NULL);
virCommandAddArg(cmd, "-L"); virCommandAddArg(cmd, "-L");
if (vol->target.capacity != vol->target.allocation) { if (capacity != vol->target.allocation) {
virCommandAddArgFormat(cmd, "%lluK", virCommandAddArgFormat(cmd, "%lluK",
VIR_DIV_UP(vol->target.allocation VIR_DIV_UP(vol->target.allocation
? vol->target.allocation : 1, 1024)); ? vol->target.allocation : 1, 1024));
...@@ -956,8 +957,14 @@ virStorageBackendLogicalLVCreate(virStorageVolDefPtr vol, ...@@ -956,8 +957,14 @@ virStorageBackendLogicalLVCreate(virStorageVolDefPtr vol,
virCommandAddArg(cmd, "--virtualsize"); virCommandAddArg(cmd, "--virtualsize");
vol->target.sparse = true; vol->target.sparse = true;
} }
virCommandAddArgFormat(cmd, "%lluK", VIR_DIV_UP(vol->target.capacity,
1024)); /* If we're going to encrypt using LUKS, then we could need up to
* an extra 2MB for the LUKS header - so account for that now */
if (vol->target.encryption &&
vol->target.encryption->format == VIR_STORAGE_ENCRYPTION_FORMAT_LUKS)
capacity += 2 * 1024 * 1024;
virCommandAddArgFormat(cmd, "%lluK", VIR_DIV_UP(capacity, 1024));
if (virStorageSourceHasBacking(&vol->target)) if (virStorageSourceHasBacking(&vol->target))
virCommandAddArgList(cmd, "-s", vol->target.backingStore->path, NULL); virCommandAddArgList(cmd, "-s", vol->target.backingStore->path, NULL);
else else
...@@ -979,13 +986,6 @@ virStorageBackendLogicalCreateVol(virConnectPtr conn, ...@@ -979,13 +986,6 @@ virStorageBackendLogicalCreateVol(virConnectPtr conn,
virErrorPtr err; virErrorPtr err;
struct stat sb; struct stat sb;
if (vol->target.encryption != NULL) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
"%s", _("storage pool does not support encrypted "
"volumes"));
return -1;
}
vol->type = VIR_STORAGE_VOL_BLOCK; vol->type = VIR_STORAGE_VOL_BLOCK;
VIR_FREE(vol->target.path); VIR_FREE(vol->target.path);
...@@ -996,6 +996,10 @@ virStorageBackendLogicalCreateVol(virConnectPtr conn, ...@@ -996,6 +996,10 @@ virStorageBackendLogicalCreateVol(virConnectPtr conn,
if (virStorageBackendLogicalLVCreate(vol, def) < 0) if (virStorageBackendLogicalLVCreate(vol, def) < 0)
return -1; return -1;
if (vol->target.encryption &&
virStorageBackendCreateVolUsingQemuImg(conn, pool, vol, NULL, 0) < 0)
goto error;
if ((fd = virStorageBackendVolOpen(vol->target.path, &sb, if ((fd = virStorageBackendVolOpen(vol->target.path, &sb,
VIR_STORAGE_VOL_OPEN_DEFAULT)) < 0) VIR_STORAGE_VOL_OPEN_DEFAULT)) < 0)
goto error; goto error;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册