* [PATCH storage v2 0/2] fix #7598: qemu-img: increase timeout for image resize
@ 2026-08-04 9:04 Jakob Klocker
2026-08-04 9:04 ` [PATCH pve-storage v2 1/2] qemu-img: drop unused image resize timeout parameter Jakob Klocker
2026-08-04 9:04 ` [PATCH pve-storage v2 2/2] fix #7598: qemu-img: increase timeout for image resizing in worker context Jakob Klocker
0 siblings, 2 replies; 5+ messages in thread
From: Jakob Klocker @ 2026-08-04 9:04 UTC (permalink / raw)
To: pve-devel; +Cc: Jakob Klocker
Image resizing currently has a timeout of 10 seconds, which can fail
on slow disks and leave the VM in a state where the disk is updated,
but the VM config isn't.
Since there is no deterministic way to check, with less overhead, if
this is the case, increasing the timeout is the most pragmatic
solution. The resize is only called in a worker context anyway,
therefore this patch series mirrors the ZFS timeout: it increases
the timeout in a worker context to 1 hour; as a fallback for a
non-worker context the timeout stays 10 seconds.
Additionally there was a minor refactoring: the timeout parameter for
qemu_img_resize was dropped, since the timeout can't be set through
the PVE API and was always hardcoded to 10 seconds.
Changes since v2
-----------------
- drop the timeout parameter in qemu_img_resize
- increase the timeout instead of querying the disk information
(see v1 for more info. Thanks @Fabian)
Previous versions
------------------
v1: https://lore.proxmox.com/pve-devel/20260603082557.25359-1-j.klocker@proxmox.com/t/#u
Link: https://bugzilla.proxmox.com/show_bug.cgi?id=7598
pve-storage:
Jakob Klocker (2):
qemu-img: drop unused image resize timeout parameter
fix #7598: qemu-img: increase timeout for image resizing in worker
context
src/PVE/Storage/Common.pm | 9 +++++----
src/PVE/Storage/LVMPlugin.pm | 2 +-
src/PVE/Storage/Plugin.pm | 2 +-
3 files changed, 7 insertions(+), 6 deletions(-)
Summary over all repositories:
3 files changed, 7 insertions(+), 6 deletions(-)
--
Generated by murpp 0.12.0
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH pve-storage v2 1/2] qemu-img: drop unused image resize timeout parameter
2026-08-04 9:04 [PATCH storage v2 0/2] fix #7598: qemu-img: increase timeout for image resize Jakob Klocker
@ 2026-08-04 9:04 ` Jakob Klocker
2026-08-05 15:20 ` Elias Huhsovitz
2026-08-04 9:04 ` [PATCH pve-storage v2 2/2] fix #7598: qemu-img: increase timeout for image resizing in worker context Jakob Klocker
1 sibling, 1 reply; 5+ messages in thread
From: Jakob Klocker @ 2026-08-04 9:04 UTC (permalink / raw)
To: pve-devel; +Cc: Jakob Klocker
qemu_img_resize is only ever called with a hardcoded 10 second timeout,
so exposing it as a parameter serves no purpose.
Signed-off-by: Jakob Klocker <j.klocker@proxmox.com>
---
src/PVE/Storage/Common.pm | 8 ++++----
src/PVE/Storage/LVMPlugin.pm | 2 +-
src/PVE/Storage/Plugin.pm | 2 +-
3 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/src/PVE/Storage/Common.pm b/src/PVE/Storage/Common.pm
index 3932aee..725f623 100644
--- a/src/PVE/Storage/Common.pm
+++ b/src/PVE/Storage/Common.pm
@@ -259,16 +259,16 @@ sub qemu_img_measure {
=head3 qemu_img_resize
- qemu_img_resize($path, $format, $size, $preallocation, $timeout)
+ qemu_img_resize($path, $format, $size, $preallocation)
Resize a qemu image C<$path> with format C<$format> to a target Kb size C<$size>.
-Default timeout C<$timeout> is 10s if not specified.
C<$preallocation> allows to specify the preallocation option for the resize operation.
+The operation uses a default timeout of 10s.
=cut
sub qemu_img_resize {
- my ($path, $format, $size, $preallocation, $timeout) = @_;
+ my ($path, $format, $size, $preallocation) = @_;
die "format is missing" if !$format;
@@ -276,7 +276,7 @@ sub qemu_img_resize {
push $cmd->@*, "--preallocation=$preallocation" if $preallocation;
push $cmd->@*, '-f', $format, $path, $size;
- $timeout = 10 if !$timeout;
+ my $timeout = 10;
run_command($cmd, timeout => $timeout);
}
diff --git a/src/PVE/Storage/LVMPlugin.pm b/src/PVE/Storage/LVMPlugin.pm
index b8646c2..768ff95 100644
--- a/src/PVE/Storage/LVMPlugin.pm
+++ b/src/PVE/Storage/LVMPlugin.pm
@@ -1081,7 +1081,7 @@ sub volume_resize {
if (!$running && $format eq 'qcow2') {
my $preallocation = PVE::Storage::Plugin::preallocation_cmd_opt($scfg, $format);
- PVE::Storage::Common::qemu_img_resize($path, $format, $size, $preallocation, 10);
+ PVE::Storage::Common::qemu_img_resize($path, $format, $size, $preallocation);
}
return 1;
diff --git a/src/PVE/Storage/Plugin.pm b/src/PVE/Storage/Plugin.pm
index 4f69f9b..082355d 100644
--- a/src/PVE/Storage/Plugin.pm
+++ b/src/PVE/Storage/Plugin.pm
@@ -1373,7 +1373,7 @@ sub volume_resize {
my $format = ($class->parse_volname($volname))[6];
my $preallocation = preallocation_cmd_opt($scfg, $format);
- PVE::Storage::Common::qemu_img_resize($path, $format, $size, $preallocation, 10);
+ PVE::Storage::Common::qemu_img_resize($path, $format, $size, $preallocation);
return undef;
}
--
2.47.3
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH pve-storage v2 2/2] fix #7598: qemu-img: increase timeout for image resizing in worker context
2026-08-04 9:04 [PATCH storage v2 0/2] fix #7598: qemu-img: increase timeout for image resize Jakob Klocker
2026-08-04 9:04 ` [PATCH pve-storage v2 1/2] qemu-img: drop unused image resize timeout parameter Jakob Klocker
@ 2026-08-04 9:04 ` Jakob Klocker
2026-08-05 15:30 ` Elias Huhsovitz
1 sibling, 1 reply; 5+ messages in thread
From: Jakob Klocker @ 2026-08-04 9:04 UTC (permalink / raw)
To: pve-devel; +Cc: Jakob Klocker
Mirror ZFS behaviour and increase timeout to an hour when in a worker
context. This fixes issues some users [0] have with slow disks where a
resize would fail.
[0] https://bugzilla.proxmox.com/show_bug.cgi?id=7598
Signed-off-by: Jakob Klocker <j.klocker@proxmox.com>
---
src/PVE/Storage/Common.pm | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/src/PVE/Storage/Common.pm b/src/PVE/Storage/Common.pm
index 725f623..ee95653 100644
--- a/src/PVE/Storage/Common.pm
+++ b/src/PVE/Storage/Common.pm
@@ -3,6 +3,7 @@ package PVE::Storage::Common;
use v5.36;
use PVE::JSONSchema;
+use PVE::RPCEnvironment;
use PVE::Syscall;
use PVE::Tools qw(run_command);
@@ -263,7 +264,7 @@ sub qemu_img_measure {
Resize a qemu image C<$path> with format C<$format> to a target Kb size C<$size>.
C<$preallocation> allows to specify the preallocation option for the resize operation.
-The operation uses a default timeout of 10s.
+The operation uses a default timeout of 10s, or 1 hour when running in a worker context.
=cut
@@ -276,7 +277,7 @@ sub qemu_img_resize {
push $cmd->@*, "--preallocation=$preallocation" if $preallocation;
push $cmd->@*, '-f', $format, $path, $size;
- my $timeout = 10;
+ my $timeout = PVE::RPCEnvironment->is_worker() ? 60 * 60 : 10;
run_command($cmd, timeout => $timeout);
}
--
2.47.3
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH pve-storage v2 1/2] qemu-img: drop unused image resize timeout parameter
2026-08-04 9:04 ` [PATCH pve-storage v2 1/2] qemu-img: drop unused image resize timeout parameter Jakob Klocker
@ 2026-08-05 15:20 ` Elias Huhsovitz
0 siblings, 0 replies; 5+ messages in thread
From: Elias Huhsovitz @ 2026-08-05 15:20 UTC (permalink / raw)
To: Jakob Klocker, pve-devel
Good Refactor, no warnings/errors when resizing disk using:
pvesh set /nodes/{node}/qemu/{vmid}/resize --disk scsi0 --size +{num}G
and the GUI option VM->Disk Action->Resize
Therefore consider it:
Reviewed-by: Elias Huhsovitz <e.huhsovitz@proxmox.com>
Tested-by: Elias Huhsovitz <e.huhsovitz@proxmox.com>
On Tue Aug 4, 2026 at 11:04 AM CEST, Jakob Klocker wrote:
> qemu_img_resize is only ever called with a hardcoded 10 second timeout,
> so exposing it as a parameter serves no purpose.
>
> Signed-off-by: Jakob Klocker <j.klocker@proxmox.com>
> ---
> src/PVE/Storage/Common.pm | 8 ++++----
> src/PVE/Storage/LVMPlugin.pm | 2 +-
> src/PVE/Storage/Plugin.pm | 2 +-
> 3 files changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/src/PVE/Storage/Common.pm b/src/PVE/Storage/Common.pm
> index 3932aee..725f623 100644
> --- a/src/PVE/Storage/Common.pm
> +++ b/src/PVE/Storage/Common.pm
> @@ -259,16 +259,16 @@ sub qemu_img_measure {
>
> =head3 qemu_img_resize
>
> - qemu_img_resize($path, $format, $size, $preallocation, $timeout)
> + qemu_img_resize($path, $format, $size, $preallocation)
>
> Resize a qemu image C<$path> with format C<$format> to a target Kb size C<$size>.
> -Default timeout C<$timeout> is 10s if not specified.
> C<$preallocation> allows to specify the preallocation option for the resize operation.
> +The operation uses a default timeout of 10s.
>
> =cut
>
> sub qemu_img_resize {
> - my ($path, $format, $size, $preallocation, $timeout) = @_;
> + my ($path, $format, $size, $preallocation) = @_;
>
> die "format is missing" if !$format;
>
> @@ -276,7 +276,7 @@ sub qemu_img_resize {
> push $cmd->@*, "--preallocation=$preallocation" if $preallocation;
> push $cmd->@*, '-f', $format, $path, $size;
>
> - $timeout = 10 if !$timeout;
> + my $timeout = 10;
> run_command($cmd, timeout => $timeout);
> }
>
> diff --git a/src/PVE/Storage/LVMPlugin.pm b/src/PVE/Storage/LVMPlugin.pm
> index b8646c2..768ff95 100644
> --- a/src/PVE/Storage/LVMPlugin.pm
> +++ b/src/PVE/Storage/LVMPlugin.pm
> @@ -1081,7 +1081,7 @@ sub volume_resize {
>
> if (!$running && $format eq 'qcow2') {
> my $preallocation = PVE::Storage::Plugin::preallocation_cmd_opt($scfg, $format);
> - PVE::Storage::Common::qemu_img_resize($path, $format, $size, $preallocation, 10);
> + PVE::Storage::Common::qemu_img_resize($path, $format, $size, $preallocation);
> }
>
> return 1;
> diff --git a/src/PVE/Storage/Plugin.pm b/src/PVE/Storage/Plugin.pm
> index 4f69f9b..082355d 100644
> --- a/src/PVE/Storage/Plugin.pm
> +++ b/src/PVE/Storage/Plugin.pm
> @@ -1373,7 +1373,7 @@ sub volume_resize {
> my $format = ($class->parse_volname($volname))[6];
>
> my $preallocation = preallocation_cmd_opt($scfg, $format);
> - PVE::Storage::Common::qemu_img_resize($path, $format, $size, $preallocation, 10);
> + PVE::Storage::Common::qemu_img_resize($path, $format, $size, $preallocation);
>
> return undef;
> }
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH pve-storage v2 2/2] fix #7598: qemu-img: increase timeout for image resizing in worker context
2026-08-04 9:04 ` [PATCH pve-storage v2 2/2] fix #7598: qemu-img: increase timeout for image resizing in worker context Jakob Klocker
@ 2026-08-05 15:30 ` Elias Huhsovitz
0 siblings, 0 replies; 5+ messages in thread
From: Elias Huhsovitz @ 2026-08-05 15:30 UTC (permalink / raw)
To: Jakob Klocker, pve-devel
I did some quick research on the slowest possible HDDs that people have
reported using for Virtual Environments and it seems the slowest write
speeds are around 80MB/s ≈ 288GB/h, so the 1h timeout should be fine and
mirrors the ZFS behaviour nicely.
I also did some quick tests via
pvesh set /nodes/{node}/qemu/{vmid}/resize --disk scsi0 --size +{num}G
and the GUI option VM->Disk Action->Resize
Which correctly set the $timeout=3600 as intended.
Therefore consider it:
Reviewed-by: Elias Huhsovitz <e.huhsovitz@proxmox.com>
Tested-by: Elias Huhsovitz <e.huhsovitz@proxmox.com>
On Tue Aug 4, 2026 at 11:04 AM CEST, Jakob Klocker wrote:
> Mirror ZFS behaviour and increase timeout to an hour when in a worker
> context. This fixes issues some users [0] have with slow disks where a
> resize would fail.
>
> [0] https://bugzilla.proxmox.com/show_bug.cgi?id=7598
>
> Signed-off-by: Jakob Klocker <j.klocker@proxmox.com>
> ---
> src/PVE/Storage/Common.pm | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/src/PVE/Storage/Common.pm b/src/PVE/Storage/Common.pm
> index 725f623..ee95653 100644
> --- a/src/PVE/Storage/Common.pm
> +++ b/src/PVE/Storage/Common.pm
> @@ -3,6 +3,7 @@ package PVE::Storage::Common;
> use v5.36;
>
> use PVE::JSONSchema;
> +use PVE::RPCEnvironment;
> use PVE::Syscall;
> use PVE::Tools qw(run_command);
>
> @@ -263,7 +264,7 @@ sub qemu_img_measure {
>
> Resize a qemu image C<$path> with format C<$format> to a target Kb size C<$size>.
> C<$preallocation> allows to specify the preallocation option for the resize operation.
> -The operation uses a default timeout of 10s.
> +The operation uses a default timeout of 10s, or 1 hour when running in a worker context.
>
> =cut
>
> @@ -276,7 +277,7 @@ sub qemu_img_resize {
> push $cmd->@*, "--preallocation=$preallocation" if $preallocation;
> push $cmd->@*, '-f', $format, $path, $size;
>
> - my $timeout = 10;
> + my $timeout = PVE::RPCEnvironment->is_worker() ? 60 * 60 : 10;
> run_command($cmd, timeout => $timeout);
> }
>
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-08-05 15:30 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-04 9:04 [PATCH storage v2 0/2] fix #7598: qemu-img: increase timeout for image resize Jakob Klocker
2026-08-04 9:04 ` [PATCH pve-storage v2 1/2] qemu-img: drop unused image resize timeout parameter Jakob Klocker
2026-08-05 15:20 ` Elias Huhsovitz
2026-08-04 9:04 ` [PATCH pve-storage v2 2/2] fix #7598: qemu-img: increase timeout for image resizing in worker context Jakob Klocker
2026-08-05 15:30 ` Elias Huhsovitz
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox