diff --git a/lxd/storage/drivers/driver_ceph_volumes.go b/lxd/storage/drivers/driver_ceph_volumes.go index 11419cd12c85..248cd873d134 100644 --- a/lxd/storage/drivers/driver_ceph_volumes.go +++ b/lxd/storage/drivers/driver_ceph_volumes.go @@ -1798,21 +1798,16 @@ func (d *ceph) RestoreVolume(vol Volume, snapshotName string, op *operations.Ope return err } - snapVol, err := vol.NewSnapshot(snapshotName) - if err != nil { - return err - } - // Map the RBD volume. - devPath, err := d.rbdMapVolume(snapVol) + devPath, err := d.rbdMapVolume(vol) if err != nil { return err } - defer func() { _ = d.rbdUnmapVolume(snapVol, true) }() + defer func() { _ = d.rbdUnmapVolume(vol, true) }() // Re-generate the UUID. - err = d.generateUUID(snapVol.ConfigBlockFilesystem(), devPath) + err = d.generateUUID(vol.ConfigBlockFilesystem(), devPath) if err != nil { return err } diff --git a/test/suites/storage.sh b/test/suites/storage.sh index 99dadda33ee1..28122f13cf55 100644 --- a/test/suites/storage.sh +++ b/test/suites/storage.sh @@ -66,8 +66,25 @@ test_storage() { fi lxc delete --force uuid1 lxc delete --force uuid2 - lxc image delete testimage + # Test UUID re-generation in case of restore. + lxc init testimage uuid1 -s "${POOL}" + lxc snapshot uuid1 + lxc start uuid1 + if [ "$lxd_backend" = "lvm" ]; then + uuid="$(blkid -s UUID -o value -p /dev/"${POOL}"/containers_uuid1)" + elif [ "$lxd_backend" = "ceph" ]; then + uuid="$(blkid -s UUID -o value -p /dev/rbd/"${POOL}"/container_uuid1)" + fi + lxc restore uuid1 snap0 + if [ "$lxd_backend" = "lvm" ]; then + [ "$(blkid -s UUID -o value -p /dev/"${POOL}"/containers_uuid1)" != "$uuid" ] + elif [ "$lxd_backend" = "ceph" ]; then + [ "$(blkid -s UUID -o value -p /dev/rbd/"${POOL}"/container_uuid1)" != "$uuid" ] + fi + lxc delete --force uuid1 + + lxc image delete testimage lxc storage delete "$btrfs_storage_pool" fi ensure_import_testimage