[lxc-devel] [lxd/master] Use Truncate instead of qemu-img
stgraber on Github
lxc-bot at linuxcontainers.org
Wed Jun 24 21:10:53 UTC 2020
A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 301 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20200624/130f4fec/attachment.bin>
-------------- next part --------------
From 64f7dab6944ac1d144edc794809c76a8e2a544bf Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Wed, 24 Jun 2020 17:06:09 -0400
Subject: [PATCH 1/2] lxd/db: Fix UsedBy for profiles on storage pools
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/db/storage_pools.go | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/lxd/db/storage_pools.go b/lxd/db/storage_pools.go
index 10d5f18024..61dcc6aab1 100644
--- a/lxd/db/storage_pools.go
+++ b/lxd/db/storage_pools.go
@@ -148,12 +148,12 @@ func (c *ClusterTx) GetStoragePoolUsedBy(name string) ([]string, error) {
if v["pool"] != name {
continue
}
- }
- if profile.Project == "default" {
- usedby = append(usedby, fmt.Sprintf("/1.0/profiles/%s", profile.Name))
- } else {
- usedby = append(usedby, fmt.Sprintf("/1.0/profiles/%s?project=%s", profile.Name, profile.Project))
+ if profile.Project == "default" {
+ usedby = append(usedby, fmt.Sprintf("/1.0/profiles/%s", profile.Name))
+ } else {
+ usedby = append(usedby, fmt.Sprintf("/1.0/profiles/%s?project=%s", profile.Name, profile.Project))
+ }
}
}
From 4352efdad4a40afa0005fe9916147a4dd1fe3566 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Wed, 24 Jun 2020 17:02:38 -0400
Subject: [PATCH 2/2] lxd/storage: Use Truncate to create/grow VM files
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/storage/drivers/driver_btrfs.go | 2 +-
lxd/storage/drivers/driver_lvm.go | 2 +-
lxd/storage/drivers/driver_zfs.go | 2 +-
lxd/storage/drivers/utils.go | 9 +++++----
4 files changed, 8 insertions(+), 7 deletions(-)
diff --git a/lxd/storage/drivers/driver_btrfs.go b/lxd/storage/drivers/driver_btrfs.go
index 1247df9f06..baa6418df3 100644
--- a/lxd/storage/drivers/driver_btrfs.go
+++ b/lxd/storage/drivers/driver_btrfs.go
@@ -103,7 +103,7 @@ func (d *btrfs) Create() error {
return err
}
- err = createSparseFile(d.config["source"], size)
+ err = ensureSparseFile(d.config["source"], size)
if err != nil {
return errors.Wrap(err, "Failed to create the sparse file")
}
diff --git a/lxd/storage/drivers/driver_lvm.go b/lxd/storage/drivers/driver_lvm.go
index 1357ae58b6..24112f1b24 100644
--- a/lxd/storage/drivers/driver_lvm.go
+++ b/lxd/storage/drivers/driver_lvm.go
@@ -129,7 +129,7 @@ func (d *lvm) Create() error {
return fmt.Errorf("Source file location already exists")
}
- err = createSparseFile(d.config["source"], size)
+ err = ensureSparseFile(d.config["source"], size)
if err != nil {
return errors.Wrapf(err, "Failed to create sparse file %q", d.config["source"])
}
diff --git a/lxd/storage/drivers/driver_zfs.go b/lxd/storage/drivers/driver_zfs.go
index d5b87ad9f9..30e76dc640 100644
--- a/lxd/storage/drivers/driver_zfs.go
+++ b/lxd/storage/drivers/driver_zfs.go
@@ -144,7 +144,7 @@ func (d *zfs) Create() error {
return err
}
- err = createSparseFile(loopPath, size)
+ err = ensureSparseFile(loopPath, size)
if err != nil {
return err
}
diff --git a/lxd/storage/drivers/utils.go b/lxd/storage/drivers/utils.go
index 5a974baf5f..988bf98208 100644
--- a/lxd/storage/drivers/utils.go
+++ b/lxd/storage/drivers/utils.go
@@ -292,8 +292,9 @@ func deleteParentSnapshotDirIfEmpty(poolName string, volType VolumeType, volName
return nil
}
-// createSparseFile creates a sparse empty file at specified location with specified size.
-func createSparseFile(filePath string, sizeBytes int64) error {
+// ensureSparseFile creates a sparse empty file at specified location with specified size.
+// If the path already exists, the file is truncated to the requested size.
+func ensureSparseFile(filePath string, sizeBytes int64) error {
f, err := os.Create(filePath)
if err != nil {
return errors.Wrapf(err, "Failed to open %s", filePath)
@@ -354,7 +355,7 @@ func ensureVolumeBlockFile(path string, sizeBytes int64) (bool, error) {
return false, nil
}
- _, err = shared.RunCommand("qemu-img", "resize", "-f", "raw", path, fmt.Sprintf("%d", sizeBytes))
+ err = ensureSparseFile(path, sizeBytes)
if err != nil {
return false, errors.Wrapf(err, "Failed resizing disk image %q to size %d", path, sizeBytes)
}
@@ -364,7 +365,7 @@ func ensureVolumeBlockFile(path string, sizeBytes int64) (bool, error) {
// If path doesn't exist, then there has been no filler function supplied to create it from another source.
// So instead create an empty volume (use for PXE booting a VM).
- _, err = shared.RunCommand("qemu-img", "create", "-f", "raw", path, fmt.Sprintf("%d", sizeBytes))
+ err = ensureSparseFile(path, sizeBytes)
if err != nil {
return false, errors.Wrapf(err, "Failed creating disk image %q as size %d", path, sizeBytes)
}
More information about the lxc-devel
mailing list