[pve-devel] [PATCH v2 qemu-server] fix #2173: use file_size_info to check existence
Mira Limbeck
m.limbeck at proxmox.com
Tue Apr 30 14:20:47 CEST 2019
use file_size_info to check for existence of cloudinit disk instead of
'-e'. this should solve the problem with rbd where the path returned by
PVE::Storage::path is not checkable with '-e'. Any size > 0 is
interpreted as the image existing.
Signed-off-by: Mira Limbeck <m.limbeck at proxmox.com>
---
v2:
- switched to file_size_info from list_images as it is by far less
heavy on large storages. this was recommended by @Dominik instead of
the 'map_volume' solution discussed previously as we don't have to
map/unmap manually as qemu-img can work with 'rbd:...' paths.
The code still matches on (qcow2|raw) even though it was fixed in
PVE/API2/Qemu.pm create_disks (bug 1829). Will fix that together with
the restore fix.
PVE/QemuServer/Cloudinit.pm | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/PVE/QemuServer/Cloudinit.pm b/PVE/QemuServer/Cloudinit.pm
index 445c777..bda48f1 100644
--- a/PVE/QemuServer/Cloudinit.pm
+++ b/PVE/QemuServer/Cloudinit.pm
@@ -31,17 +31,18 @@ sub commit_cloudinit_disk {
my $iso_path = PVE::Storage::path($storecfg, $drive->{file});
my $scfg = PVE::Storage::storage_config($storecfg, $storeid);
my $format = PVE::QemuServer::qemu_img_format($scfg, $volname);
- if (! -e $iso_path) {
+
+ my $size = eval { PVE::Storage::file_size_info($iso_path) };
+ if (!$size) {
$volname =~ m/(vm-$vmid-cloudinit(.(qcow2|raw))?)/;
my $name = $1;
my $d = PVE::Storage::vdisk_alloc($storecfg, $storeid, $vmid, $format, $name, 4 * 1024);
+ $size = PVE::Storage::file_size_info($iso_path);
}
my $plugin = PVE::Storage::Plugin->lookup($scfg->{type});
$plugin->activate_volume($storeid, $scfg, $volname);
- my $size = PVE::Storage::file_size_info($iso_path);
-
eval {
run_command([['genisoimage', '-R', '-V', $label, $path],
['qemu-img', 'dd', '-n', '-f', 'raw', '-O', $format,
--
2.11.0
More information about the pve-devel
mailing list