all lists on lists.proxmox.com
 help / color / mirror / Atom feed
* [pve-devel] [PATCH v7 series 0/5] disk reassign: add new feature
@ 2021-04-20 16:34 Aaron Lauterer
  2021-04-20 16:34 ` [pve-devel] [PATCH v7 storage 1/5] add disk reassign feature Aaron Lauterer
                   ` (4 more replies)
  0 siblings, 5 replies; 7+ messages in thread
From: Aaron Lauterer @ 2021-04-20 16:34 UTC (permalink / raw)
  To: pve-devel

This series implements a new feature which allows users to easily
reassign disks between VMs. Currently this is only possible with one of
the following manual steps:

* rename the disk image/file and do a `qm rescan`
* configure the disk manually and use the old image name, having an
    image for VM A assigned to VM B

The latter can cause unexpected behavior because PVE expects that the
VMID in a disk name always corresponds to the VM it is assigned to. Thus
when a disk, original from VM A was manually configured as disk for VM B
it happens that, when deleting VM A, the disk in question will be
deleted as well because it still had the VMID of VM A in it's name.

To issue a reassign from the CLI run:

qm reassign-disk <source VMID> <target VMID> <source disk> <target disk>

where <source/target disk> is the config key of the disk, e.g. ide0,
scsi1 and so on.

The following storage types are implemented at the moment:
* dir based ones
* ZFS
* (thin) LVM
* Ceph RBD

v6 -> v7:
This was a rather large change to the previous version. I hope I
    incorporated all suggestions and hints and did not miss anything.
    More details are usually found in the direct patches.

* removed original patch 4 as it is not needed (thx @febner for the hint)
* added another (optional) patch to align move_disk to use a dash
  instead of an underscore
* make sure storage is activated
* restructure storage plugins so that dir based ones are handled
  directly in plugin.pm with API version checks for external plugins
* add target disk key
* use update_vm_api to add the disk to the new VM (hotplug if possible)
* removed cluster log
* reordered reassing procedure
* changed worker ID to show source and target better

v5 -> v6:
* guard Replication snapshot cleanup
* add permission check for target vmid
* changed regex to match unused keys better
* refactor dir based feature check to reduce code repetition

v4 -> v5:
* rebase on current master
* reorder patches
* rename `drive_key` to `drive_name`
    thanks @Dominic for pointing out that there already are a lot of
    different names in use for this [0] and not to invent another one 
* implemented suggested changes from Fabian [1][2]. More directly in the
    patches themselves

v3 -> v4:
* revert intermediate storage plugin for directory based plugins
* add a `die "not supported"` method in Plugin.pm
* dir based plugins now call the file_reassign_volume method in
  Plugin.pm as the generic file/directory based method
* restored old `volume_has_feature` method in Plugin.pm and override it
  in directory based plugins to check against the new `reassign` feature
  (not too happy about the repetition for each plugin)
* task description mapping has been moved from widget-toolkit to
  pve-manager/utils


v2 -> v3:
* change locking approach
* add more checks
* add intermedia storage plugin for directory based plugins
* use feature flags
* split up the reassign method to have a dedicated method for the
    renaming itself
* handle linked clones
* clean up if disk used to be replicated

I hope I didn't forget anything major.

v1 -> v2:
print info about the new disk volid and key at the end of the job so it
shows up in the CLI output and task log

Changes from RFC -> V1:
* support to reassign unused disks
* digest for target vm config
* reorder the checks a bit
* adding another one to check if the given key for the disk even exists
  in the config.

[0] https://lists.proxmox.com/pipermail/pve-devel/2020-November/045986.html
[1] https://lists.proxmox.com/pipermail/pve-devel/2020-November/046031.html
[2] https://lists.proxmox.com/pipermail/pve-devel/2020-November/046030.html

storage: Aaron Lauterer (1):
  add disk reassign feature

 PVE/Storage.pm               | 19 +++++++++++--
 PVE/Storage/LVMPlugin.pm     | 34 +++++++++++++++++++++++
 PVE/Storage/LvmThinPlugin.pm |  1 +
 PVE/Storage/Plugin.pm        | 52 ++++++++++++++++++++++++++++++++++++
 PVE/Storage/RBDPlugin.pm     | 37 +++++++++++++++++++++++++
 PVE/Storage/ZFSPoolPlugin.pm | 38 ++++++++++++++++++++++++++
 6 files changed, 179 insertions(+), 2 deletions(-)

qemu-server: Aaron Lauterer (3):
  disk reassign: add API endpoint
  cli: disk reassign: add reassign_disk to qm command
  cli: qm: change move_disk parameter to move-disk

 PVE/API2/Qemu.pm        | 220 ++++++++++++++++++++++++++++++++++++++++
 PVE/CLI/qm.pm           |   5 +-
 PVE/QemuServer/Drive.pm |   4 +
 3 files changed, 228 insertions(+), 1 deletion(-)

manager: Aaron Lauterer (1):
  ui: tasks: add qmreassign task description

 www/manager6/Utils.js | 1 +
 1 file changed, 1 insertion(+)

-- 
2.20.1





^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2021-04-23 13:50 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-04-20 16:34 [pve-devel] [PATCH v7 series 0/5] disk reassign: add new feature Aaron Lauterer
2021-04-20 16:34 ` [pve-devel] [PATCH v7 storage 1/5] add disk reassign feature Aaron Lauterer
2021-04-23 13:49   ` Thomas Lamprecht
2021-04-20 16:34 ` [pve-devel] [PATCH v7 qemu-server 2/5] disk reassign: add API endpoint Aaron Lauterer
2021-04-20 16:34 ` [pve-devel] [PATCH v7 qemu-server 3/5] cli: disk reassign: add reassign_disk to qm command Aaron Lauterer
2021-04-20 16:34 ` [pve-devel] [PATCH v7 manager 4/5] ui: tasks: add qmreassign task description Aaron Lauterer
2021-04-20 16:34 ` [pve-devel] [PATCH v7 qemu-server 5/5] cli: qm: change move_disk parameter to move-disk Aaron Lauterer

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal