[pve-devel] [PATCH qemu-server] cloudinit: fix vm start hanging with disk on ZFS

Mira Limbeck m.limbeck at proxmox.com
Fri Sep 27 15:13:30 CEST 2019


With the changes to pve-storage in commit 56362cf the startup hangs for
5 minutes on ZFS if the cloudinit disk does not exist. Instead of
calling activate_volume followed by file_size_info we now call
volume_size_info. This should work reliably on all storages that support
cloudinit disks.

Signed-off-by: Mira Limbeck <m.limbeck at proxmox.com>
---
 PVE/QemuServer/Cloudinit.pm | 11 ++++-------
 1 file changed, 4 insertions(+), 7 deletions(-)

diff --git a/PVE/QemuServer/Cloudinit.pm b/PVE/QemuServer/Cloudinit.pm
index ab001f9..07d4d2d 100644
--- a/PVE/QemuServer/Cloudinit.pm
+++ b/PVE/QemuServer/Cloudinit.pm
@@ -34,19 +34,16 @@ sub commit_cloudinit_disk {
     my $scfg = PVE::Storage::storage_config($storecfg, $storeid);
     my $format = PVE::QemuServer::qemu_img_format($scfg, $volname);
 
-    # required before file_size_info, some existing vols won't show up else
-    my $plugin = PVE::Storage::Plugin->lookup($scfg->{type});
-    eval { $plugin->activate_volume($storeid, $scfg, $volname) };
-
-    my $size = eval { PVE::Storage::file_size_info($iso_path) };
-    if ($size <= 0) {
+    my $size = eval { PVE::Storage::volume_size_info($storecfg, $drive->{file}) };
+    if (!defined($size) || $size <= 0) {
 	$volname =~ m/(vm-$vmid-cloudinit(.\Q$format\E)?)/;
 	my $name = $1;
 	$size = 4 * 1024;
 	PVE::Storage::vdisk_alloc($storecfg, $storeid, $vmid, $format, $name, $size);
 	$size *= 1024; # vdisk alloc takes KB, qemu-img dd's osize takes byte
-	$plugin->activate_volume($storeid, $scfg, $volname);
     }
+    my $plugin = PVE::Storage::Plugin->lookup($scfg->{type});
+    $plugin->activate_volume($storeid, $scfg, $volname);
 
     eval {
 	run_command([['genisoimage', '-iso-level', '3', '-R', '-V', $label, $path],
-- 
2.20.1





More information about the pve-devel mailing list