The following pull request was submitted through Github. It can be accessed and reviewed at: https://github.com/lxc/lxd/pull/6685
This e-mail was sent by the LXC bot, direct replies will not reach the author unless they happen to be subscribed to this list. === Description (from pull-request) === Fixes some storage resize issues and adds helper functions for UUID regeneration.
From 529a839a949a3cadd1d8c33e1909ba9729f3262b Mon Sep 17 00:00:00 2001 From: Thomas Parrott <thomas.parr...@canonical.com> Date: Thu, 9 Jan 2020 12:03:00 +0000 Subject: [PATCH 1/3] lxd/storage/drivers/utils: Comment on shrinkFileSystem Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com> --- lxd/storage/drivers/utils.go | 1 + 1 file changed, 1 insertion(+) diff --git a/lxd/storage/drivers/utils.go b/lxd/storage/drivers/utils.go index 91c5e939e4..6797096f7f 100644 --- a/lxd/storage/drivers/utils.go +++ b/lxd/storage/drivers/utils.go @@ -406,6 +406,7 @@ func resolveMountOptions(options string) (uintptr, string) { // shrinkFileSystem shrinks a filesystem if it is supported. Ext4 volumes will be unmounted temporarily if needed. func shrinkFileSystem(fsType string, devPath string, vol Volume, byteSize int64) error { + // The smallest unit that resize2fs accepts in byte size (rather than blocks) is kilobytes. strSize := fmt.Sprintf("%dK", byteSize/1024) switch fsType { From e1fbb4ca5156b23a8f288c3f5a922b2892528def Mon Sep 17 00:00:00 2001 From: Thomas Parrott <thomas.parr...@canonical.com> Date: Thu, 9 Jan 2020 13:35:55 +0000 Subject: [PATCH 2/3] lxd/storage/drivers/utils: Mounts btrfs filesystems during shrinkFileSystem This is required to resize the filesystem. Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com> --- lxd/storage/drivers/utils.go | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/lxd/storage/drivers/utils.go b/lxd/storage/drivers/utils.go index 6797096f7f..32ecbcdf38 100644 --- a/lxd/storage/drivers/utils.go +++ b/lxd/storage/drivers/utils.go @@ -429,15 +429,17 @@ func shrinkFileSystem(fsType string, devPath string, vol Volume, byteSize int64) return nil }, nil) case "btrfs": - _, err := shared.TryRunCommand("btrfs", "filesystem", "resize", strSize, vol.MountPath()) - if err != nil { - return err - } + return vol.MountTask(func(mountPath string, op *operations.Operation) error { + _, err := shared.TryRunCommand("btrfs", "filesystem", "resize", strSize, mountPath) + if err != nil { + return err + } + + return nil + }, nil) default: return fmt.Errorf(`Shrinking not supported for filesystem type "%s"`, fsType) } - - return nil } // growFileSystem grows a filesystem if it is supported. The volume will be mounted temporarily if needed. From 860e2383bbacffa30d5e8f8c4f14943c6c3f6add Mon Sep 17 00:00:00 2001 From: Thomas Parrott <thomas.parr...@canonical.com> Date: Thu, 9 Jan 2020 15:05:08 +0000 Subject: [PATCH 3/3] lxd/storage/drivers/utils: Adds regenerateFilesystemUUID functions Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com> --- lxd/storage/drivers/utils.go | 48 ++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/lxd/storage/drivers/utils.go b/lxd/storage/drivers/utils.go index 32ecbcdf38..19a877d1c1 100644 --- a/lxd/storage/drivers/utils.go +++ b/lxd/storage/drivers/utils.go @@ -468,3 +468,51 @@ func growFileSystem(fsType string, devPath string, vol Volume) error { return nil }, nil) } + +// regenerateFilesystemUUID changes the filesystem UUID to a new randomly generated one if the fsType requires it. +// Otherwise this function does nothing. +func regenerateFilesystemUUID(fsType, devPath string) error { + switch fsType { + case "btrfs": + return regenerateFilesystemBTRFSUUID(devPath) + case "xfs": + return regenerateFilesystemXFSUUID(devPath) + } + + return nil +} + +// regenerateFilesystemBTRFSUUID changes the BTRFS filesystem UUID to a new randomly generated one. +func regenerateFilesystemBTRFSUUID(devPath string) error { + _, err := shared.RunCommand("btrfstune", "-f", "-u", devPath) + if err != nil { + return err + } + + return nil +} + +// regenerateFilesystemXFSUUID changes the XFS filesystem UUID to a new randomly generated one. +func regenerateFilesystemXFSUUID(devPath string) error { + // Attempt to generate a new UUID. + msg, err := shared.RunCommand("xfs_admin", "-U", "generate", devPath) + if err != nil { + return err + } + + if msg != "" { + // Exit 0 with a msg usually means some log entry getting in the way. + _, err = shared.RunCommand("xfs_repair", "-o", "force_geometry", "-L", devPath) + if err != nil { + return err + } + + // Attempt to generate a new UUID again. + _, err = shared.RunCommand("xfs_admin", "-U", "generate", devPath) + if err != nil { + return err + } + } + + return nil +}
_______________________________________________ lxc-devel mailing list lxc-devel@lists.linuxcontainers.org http://lists.linuxcontainers.org/listinfo/lxc-devel