[lxc-devel] [lxd/master] lxd/storage/zfs: Set volmode=none for VM datasets

stgraber on Github lxc-bot at linuxcontainers.org
Tue Feb 25 19:30:23 UTC 2020


A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 354 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20200225/df19ceff/attachment.bin>
-------------- next part --------------
From 036c45195add519ddd8050954d638102f37d036e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Tue, 25 Feb 2020 14:29:53 -0500
Subject: [PATCH] lxd/storage/zfs: Set volmode=none for VM datasets
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
 lxd/patches.go                            |  1 +
 lxd/storage/drivers/driver_btrfs.go       |  1 +
 lxd/storage/drivers/driver_ceph.go        |  1 +
 lxd/storage/drivers/driver_cephfs.go      |  1 +
 lxd/storage/drivers/driver_dir.go         |  1 +
 lxd/storage/drivers/driver_lvm.go         |  1 +
 lxd/storage/drivers/driver_zfs.go         |  9 ++++++++-
 lxd/storage/drivers/driver_zfs_patches.go | 15 +++++++++++++++
 8 files changed, 29 insertions(+), 1 deletion(-)

diff --git a/lxd/patches.go b/lxd/patches.go
index 05dbf1adf3..62a0de238b 100644
--- a/lxd/patches.go
+++ b/lxd/patches.go
@@ -83,6 +83,7 @@ var patches = []patch{
 	{name: "storage_zfs_mount", run: patchGenericStorage},
 	{name: "network_pid_files", run: patchNetworkPIDFiles},
 	{name: "storage_create_vm_again", run: patchGenericStorage},
+	{name: "storage_zfs_volmode", run: patchGenericStorage},
 }
 
 type patch struct {
diff --git a/lxd/storage/drivers/driver_btrfs.go b/lxd/storage/drivers/driver_btrfs.go
index f541cd3514..499d01216d 100644
--- a/lxd/storage/drivers/driver_btrfs.go
+++ b/lxd/storage/drivers/driver_btrfs.go
@@ -32,6 +32,7 @@ func (d *btrfs) load() error {
 		"storage_create_vm":       nil,
 		"storage_zfs_mount":       nil,
 		"storage_create_vm_again": nil,
+		"storage_zfs_volmode":     nil,
 	}
 
 	// Done if previously loaded.
diff --git a/lxd/storage/drivers/driver_ceph.go b/lxd/storage/drivers/driver_ceph.go
index 3b5a016fbe..668981aff5 100644
--- a/lxd/storage/drivers/driver_ceph.go
+++ b/lxd/storage/drivers/driver_ceph.go
@@ -31,6 +31,7 @@ func (d *ceph) load() error {
 		"storage_create_vm":       nil,
 		"storage_zfs_mount":       nil,
 		"storage_create_vm_again": nil,
+		"storage_zfs_volmode":     nil,
 	}
 
 	// Done if previously loaded.
diff --git a/lxd/storage/drivers/driver_cephfs.go b/lxd/storage/drivers/driver_cephfs.go
index 9ed2056185..e7c2b6c089 100644
--- a/lxd/storage/drivers/driver_cephfs.go
+++ b/lxd/storage/drivers/driver_cephfs.go
@@ -30,6 +30,7 @@ func (d *cephfs) load() error {
 		"storage_create_vm":       nil,
 		"storage_zfs_mount":       nil,
 		"storage_create_vm_again": nil,
+		"storage_zfs_volmode":     nil,
 	}
 
 	// Done if previously loaded.
diff --git a/lxd/storage/drivers/driver_dir.go b/lxd/storage/drivers/driver_dir.go
index a30208b40b..4bbded29df 100644
--- a/lxd/storage/drivers/driver_dir.go
+++ b/lxd/storage/drivers/driver_dir.go
@@ -23,6 +23,7 @@ func (d *dir) load() error {
 		"storage_create_vm":       nil,
 		"storage_zfs_mount":       nil,
 		"storage_create_vm_again": nil,
+		"storage_zfs_volmode":     nil,
 	}
 
 	return nil
diff --git a/lxd/storage/drivers/driver_lvm.go b/lxd/storage/drivers/driver_lvm.go
index f75d217f83..f4cf461ca3 100644
--- a/lxd/storage/drivers/driver_lvm.go
+++ b/lxd/storage/drivers/driver_lvm.go
@@ -35,6 +35,7 @@ func (d *lvm) load() error {
 		"storage_create_vm":       nil,
 		"storage_zfs_mount":       nil,
 		"storage_create_vm_again": nil,
+		"storage_zfs_volmode":     nil,
 	}
 
 	// Done if previously loaded.
diff --git a/lxd/storage/drivers/driver_zfs.go b/lxd/storage/drivers/driver_zfs.go
index 5c6c9ef8ed..d4c584afe5 100644
--- a/lxd/storage/drivers/driver_zfs.go
+++ b/lxd/storage/drivers/driver_zfs.go
@@ -43,6 +43,7 @@ func (d *zfs) load() error {
 		"storage_create_vm":       d.patchStorageCreateVM,
 		"storage_zfs_mount":       d.patchStorageZFSMount,
 		"storage_create_vm_again": nil,
+		"storage_zfs_volmode":     d.patchStorageZFSVolMode,
 	}
 
 	// Done if previously loaded.
@@ -241,7 +242,13 @@ func (d *zfs) Create() error {
 
 	// Create the initial datasets.
 	for _, dataset := range d.initialDatasets() {
-		err := d.createDataset(filepath.Join(d.config["zfs.pool_name"], dataset), "mountpoint=none")
+
+		properties := []string{"mountpoint=none"}
+		if shared.StringInSlice(dataset, []string{"virtual-machines", "deleted/virtual-machines"}) {
+			properties = append(properties, "volmode=none")
+		}
+
+		err := d.createDataset(filepath.Join(d.config["zfs.pool_name"], dataset), properties...)
 		if err != nil {
 			return err
 		}
diff --git a/lxd/storage/drivers/driver_zfs_patches.go b/lxd/storage/drivers/driver_zfs_patches.go
index 336b7b350e..ae147a7834 100644
--- a/lxd/storage/drivers/driver_zfs_patches.go
+++ b/lxd/storage/drivers/driver_zfs_patches.go
@@ -86,3 +86,18 @@ func (d *zfs) patchStorageZFSMount() error {
 
 	return nil
 }
+
+func (d *zfs) patchStorageZFSVolMode() error {
+	// Set volmode=none on the parent virtual-machines directory
+	err := d.setDatasetProperties(filepath.Join(d.config["zfs.pool_name"], "virtual-machines"), "volmode=none")
+	if err != nil {
+		return err
+	}
+
+	err = d.setDatasetProperties(filepath.Join(d.config["zfs.pool_name"], "deleted", "virtual-machines"), "volmode=none")
+	if err != nil {
+		return err
+	}
+
+	return nil
+}


More information about the lxc-devel mailing list