[pve-devel] [PATCH qemu-server] fix ceph volume with krbd not mapped for file_size_info

Mira Limbeck m.limbeck at proxmox.com
Wed May 15 12:53:24 CEST 2019


file_size_info can't find the file if it is not mapped beforehand when
using krbd and returns 0 which we interpret as the disk not existing.
vdisk_alloc is called but the disk already exists. with this patch we call
activate_volume before trying file_size_info. on ceph with krbd it maps the
volume.
if the disk does not exist and is created with vdisk_alloc we still require an
additional call to activate_volume for the new disk.

Signed-off-by: Mira Limbeck <m.limbeck at proxmox.com>
---
tested with ceph, ceph + krbd, dir, lvm, lvm-thin, zfs

 PVE/QemuServer/Cloudinit.pm | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/PVE/QemuServer/Cloudinit.pm b/PVE/QemuServer/Cloudinit.pm
index f46f7fd..fbd71ec 100644
--- a/PVE/QemuServer/Cloudinit.pm
+++ b/PVE/QemuServer/Cloudinit.pm
@@ -32,6 +32,10 @@ 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 for ceph + krbd as it gets mapped too late otherwise
+    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) {
 	$volname =~ m/(vm-$vmid-cloudinit(.\Q$format\E)?)/;
@@ -39,10 +43,9 @@ sub commit_cloudinit_disk {
 	$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', '-R', '-V', $label, $path],
-- 
2.11.0





More information about the pve-devel mailing list