Also little tweaks to ensure activation and bypass free check for size. Signed-off-by: Gerrit Venema <gmoni...@gmail.com> --- PVE/Storage/LVMPlugin.pm | 8 +++++--- PVE/Storage/LvmThinPlugin.pm | 26 ++++++++++++++++++++------ 2 files changed, 25 insertions(+), 9 deletions(-)
diff --git a/PVE/Storage/LVMPlugin.pm b/PVE/Storage/LVMPlugin.pm index d776e43..d658fea 100644 --- a/PVE/Storage/LVMPlugin.pm +++ b/PVE/Storage/LVMPlugin.pm @@ -272,9 +272,11 @@ sub alloc_image { die "no such volume group '$vg'\n" if !defined ($vgs->{$vg}); - my $free = int($vgs->{$vg}->{free}); + if ($scfg->{type} ne 'lvmthin') { + my $free = int($vgs->{$vg}->{free}); - die "not enough free space ($free < $size)\n" if $free < $size; + die "not enough free space ($free < $size)\n" if $free < $size; + } $name = lvm_find_free_diskname(lvm_list_volumes($vg), $vg, $storeid, $vmid) if !$name; @@ -283,7 +285,7 @@ sub alloc_image { run_command($cmd, errmsg => "lvcreate '$vg/pve-vm-$vmid' error"); - return $name; + return $vmid/$name; } sub free_image { diff --git a/PVE/Storage/LvmThinPlugin.pm b/PVE/Storage/LvmThinPlugin.pm index 5e404df..48ba4c9 100644 --- a/PVE/Storage/LvmThinPlugin.pm +++ b/PVE/Storage/LvmThinPlugin.pm @@ -189,14 +189,19 @@ sub activate_volume { my ($class, $storeid, $scfg, $volname, $snapname, $cache) = @_; my $vg = $scfg->{vgname}; - + # For safety, first activate thinpool + my $tcmd = ['/sbin/lvchange', '-ay', '-K', "$vg/$scfg->{thinpool}"]; + run_command($tcmd, errmsg => "activate_volume '$vg/$scfg->{thinpool}' thinpool error"); # only snapshot volumes needs activation if ($snapname) { my $snapvol = "snap_${volname}_$snapname"; my $cmd = ['/sbin/lvchange', '-ay', '-K', "$vg/$snapvol"]; run_command($cmd, errmsg => "activate_volume '$vg/$snapvol' error"); - } else { + } elsif ($volname) { # other volumes are active by default + # but it doesn't hurt to make sure + my $cmd = ['/sbin/lvchange', '-ay', '-K', "$vg/$volname"]; + run_command($cmd, errmsg => "activate_volume '$vg/$volname' error"); } } @@ -293,8 +298,14 @@ sub volume_snapshot_rollback { my $cmd = ['/sbin/lvremove', '-f', "$vg/$volname"]; run_command($cmd, errmsg => "lvremove '$vg/$volname' error"); - $cmd = ['/sbin/lvcreate', '-kn', '-n', $volname, '-s', "$vg/$snapvol"]; - run_command($cmd, errmsg => "lvm rollback '$vg/$snapvol' error"); + $cmd = ['/sbin/lvrename', $vg, "$vg/$snapvol", $volname]; + run_command($cmd, errmsg => "lvrename '$vg/$snapvol to $volname' error"); + + $cmd = ['/sbin/lvchange', "$vg/$volname", '-kn', '-ay', '-prw']; + run_command($cmd, errmsg => "lvchange '$vg/$volname' error"); + + #Make a new snapshot to replace the previous one + volume_snapshot($class, $scfg, $storeid, $volname, $snap); } sub volume_snapshot_delete { @@ -303,8 +314,11 @@ sub volume_snapshot_delete { my $vg = $scfg->{vgname}; my $snapvol = "snap_${volname}_$snap"; - my $cmd = ['/sbin/lvremove', '-f', "$vg/$snapvol"]; - run_command($cmd, errmsg => "lvremove snapshot '$vg/$snapvol' error"); + my $lvs = PVE::Storage::LVMPlugin::lvm_list_volumes($vg); + if ($lvs->{$snapvol}) { + my $cmd = ['/sbin/lvremove', '-f', "$vg/$snapvol"]; + run_command($cmd, errmsg => "lvremove snapshot '$vg/$snapvol' error"); + } } sub volume_has_feature { -- 2.1.4 _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com http://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel