[pve-devel] Handling 'path' requests during VM deletion

Andrei Perapiolkin andrei.perepiolkin at open-e.com
Mon Sep 8 22:08:01 CEST 2025


Hi Fiona,


Thank you for your reply.

I have added a bug report: https://bugzilla.proxmox.com/show_bug.cgi?id=6776


I also decided to return an empty string ('') for volumes that do not exist.

My reasoning is that if I return any path that might actually exist, 
some parts of the Proxmox system could try to open, read, or write to 
this "file,"  unintentionally creating it.
This could corrupt the server’s file system, or consume disk space if 
the server has limited local storage — for example, when the operation 
involves cloning a multi-terabyte data block.

I would like to hear your opinion regarding this conclusion.
Is it acceptable, or should I re-evaluate it?


Best regards,
Andrei Perepiolkin

On 8/14/25 11:11, Fiona Ebner wrote:
> Hi Andrei,
>
> Am 07.08.25 um 11:39 PM schrieb Andrei Perapiolkin via pve-devel:
>> Hi,
>>
>> VM deletion retries 'path'/'free_image' for already-removed volumes; expected plugin behavior on missing volumes is unclear.
>>
>> When deleting a VM with multiple attached volumes, Proxmox deletes volumes sequentially (one at a time) and
>> updates the VM record only after all deletions complete.
> Could you please file a bug for this: https://bugzilla.proxmox.com ?
>
>> If a volume deletion fails mid-process (e.g., network error), the VM record is not updated even though some volumes may have been successfully removed.
>> A subsequent delete attempt repeats all operations, including 'path' (and 'free_image') calls for volumes that were already deleted.
>>
>>
>> What is the proper response to 'path' and 'free_image' calls for a volume that no longer exists?
>> For path, should the call fail (e.g., 'die'), succeed with an empty string, or return a 'storage path'?
> (Most) implementations of path() for plugins shipped by us [0] do not do
> any I/O at all and thus don't check if the image actually exist. So you
> can return the path, even if the volume does not exist.
>
> Some of our implementations of free_image() fail if the volume does not
> exist, some do not. Nothing should break if you indicate success when
> free_image() is called and the image does not exist.
>
> [0]:
> https://git.proxmox.com/?p=pve-storage.git;a=tree;f=src/PVE/Storage;h=26012be26cb3c24515e99a02e7ad438f29c81646;hb=HEAD
>
> Best Regards,
> Fiona
>



More information about the pve-devel mailing list