The following pull request was submitted through Github. It can be accessed and reviewed at: https://github.com/lxc/lxd/pull/7117
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) === Ceph and LVM do regeneration of filesystem UUIDs differently so this PR aims to unify their approaches taking the best bits of each. Also partially undoes https://github.com/lxc/lxd/pull/7071 as this was causing filesystem UUIDs to be regenerated when generating a backup.yaml file which is done when taking new snapshots, which ultimately was slowing down taking new snapshots. A fix for this will be followed in a separate PR.
From 57a6c1941419b29b611cd90f4254390c417eb0e5 Mon Sep 17 00:00:00 2001 From: Thomas Parrott <thomas.parr...@canonical.com> Date: Wed, 1 Apr 2020 14:08:10 +0100 Subject: [PATCH 1/2] lxd/storage/drivers/driver/lvm/volumes: Mount xfs snapshot with nouuid option Avoids regeneration of UUID expense when just mounting the snapshot. Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com> --- lxd/storage/drivers/driver_lvm_volumes.go | 26 ++++++++++++++++------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/lxd/storage/drivers/driver_lvm_volumes.go b/lxd/storage/drivers/driver_lvm_volumes.go index aa15f5b73c..49cc983ed7 100644 --- a/lxd/storage/drivers/driver_lvm_volumes.go +++ b/lxd/storage/drivers/driver_lvm_volumes.go @@ -418,7 +418,7 @@ func (d *lvm) MountVolume(vol Volume, op *operations.Operation) (bool, error) { if err != nil { return false, errors.Wrapf(err, "Failed to mount LVM logical volume") } - d.logger.Debug("Mounted logical volume", log.Ctx{"dev": volDevPath, "path": mountPath}) + d.logger.Debug("Mounted logical volume", log.Ctx{"dev": volDevPath, "path": mountPath, "options": mountOptions}) return true, nil } @@ -641,6 +641,7 @@ func (d *lvm) MountVolumeSnapshot(snapVol Volume, op *operations.Operation) (boo // Default to mounting the original snapshot directly. This may be changed below if a temporary // snapshot needs to be taken. mountVol := snapVol + mountFlags, mountOptions := resolveMountOptions(d.volumeMountOptions(mountVol)) // Regenerate filesystem UUID if needed. This is because some filesystems do not allow mounting // multiple volumes that share the same UUID. As snapshotting a volume will copy its UUID we need @@ -666,11 +667,21 @@ func (d *lvm) MountVolumeSnapshot(snapVol Volume, op *operations.Operation) (boo }) tmpVolDevPath := d.lvmDevPath(d.config["lvm.vg_name"], tmpVol.volType, tmpVol.contentType, tmpVol.name) - - d.logger.Debug("Regenerating filesystem UUID", log.Ctx{"dev": tmpVolDevPath, "fs": d.volumeFilesystem(tmpVol)}) - err = regenerateFilesystemUUID(d.volumeFilesystem(tmpVol), tmpVolDevPath) - if err != nil { - return false, err + tmpVolFsType := d.volumeFilesystem(tmpVol) + + // When mounting XFS filesystems temporarily we can use the nouuid option rather than fully + // regenerating the filesystem UUID. + if tmpVolFsType == "xfs" { + idx := strings.Index(mountOptions, "nouuid") + if idx < 0 { + mountOptions += ",nouuid" + } + } else { + d.logger.Debug("Regenerating filesystem UUID", log.Ctx{"dev": tmpVolDevPath, "fs": d.volumeFilesystem(tmpVol)}) + err = regenerateFilesystemUUID(d.volumeFilesystem(tmpVol), tmpVolDevPath) + if err != nil { + return false, err + } } // We are going to mount the temporary volume instead. @@ -679,12 +690,11 @@ func (d *lvm) MountVolumeSnapshot(snapVol Volume, op *operations.Operation) (boo // Finally attempt to mount the volume that needs mounting. volDevPath := d.lvmDevPath(d.config["lvm.vg_name"], mountVol.volType, mountVol.contentType, mountVol.name) - mountFlags, mountOptions := resolveMountOptions(d.volumeMountOptions(snapVol)) err := TryMount(volDevPath, mountPath, d.volumeFilesystem(mountVol), mountFlags|unix.MS_RDONLY, mountOptions) if err != nil { return false, errors.Wrapf(err, "Failed to mount LVM snapshot volume") } - d.logger.Debug("Mounted logical volume snapshot", log.Ctx{"dev": volDevPath, "path": mountPath}) + d.logger.Debug("Mounted logical volume snapshot", log.Ctx{"dev": volDevPath, "path": mountPath, "options": mountOptions}) revert.Success() return true, nil From 3e5da664456da36397e57bb12a145c209eb069ef Mon Sep 17 00:00:00 2001 From: Thomas Parrott <thomas.parr...@canonical.com> Date: Wed, 1 Apr 2020 14:13:22 +0100 Subject: [PATCH 2/2] lxd/storage/drivers/driver/ceph/volumes: Adds mounting logging Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com> --- lxd/storage/drivers/driver_ceph_volumes.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lxd/storage/drivers/driver_ceph_volumes.go b/lxd/storage/drivers/driver_ceph_volumes.go index 2e4e34d416..08f588df9a 100644 --- a/lxd/storage/drivers/driver_ceph_volumes.go +++ b/lxd/storage/drivers/driver_ceph_volumes.go @@ -18,6 +18,7 @@ import ( "github.com/lxc/lxd/shared" "github.com/lxc/lxd/shared/instancewriter" "github.com/lxc/lxd/shared/ioprogress" + log "github.com/lxc/lxd/shared/log15" "github.com/lxc/lxd/shared/units" ) @@ -824,6 +825,7 @@ func (d *ceph) MountVolume(vol Volume, op *operations.Operation) (bool, error) { if err != nil { return false, err } + d.logger.Debug("Mounted RBD volume", log.Ctx{"dev": RBDDevPath, "path": mountPath, "options": mountOptions}) return true, nil } @@ -1208,6 +1210,7 @@ func (d *ceph) MountVolumeSnapshot(snapVol Volume, op *operations.Operation) (bo if err != nil { return false, err } + d.logger.Debug("Mounted RBD volume snapshot", log.Ctx{"dev": rbdDevPath, "path": mountPath, "options": mountOptions}) revert.Success()
_______________________________________________ lxc-devel mailing list lxc-devel@lists.linuxcontainers.org http://lists.linuxcontainers.org/listinfo/lxc-devel