[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