[pve-devel] [PATCH storage 4/5] add comments about LVM thin clones

Fabian Grünbichler f.gruenbichler at proxmox.com
Wed Sep 14 16:08:51 CEST 2016


---
 PVE/Storage.pm               | 7 +++++++
 PVE/Storage/LvmThinPlugin.pm | 8 ++++++++
 2 files changed, 15 insertions(+)

diff --git a/PVE/Storage.pm b/PVE/Storage.pm
index c1de558..1ea3604 100755
--- a/PVE/Storage.pm
+++ b/PVE/Storage.pm
@@ -321,6 +321,9 @@ sub parse_vmid {
     return int($vmid);
 }
 
+# NOTE: basename and basevmid are always undef for LVM-thin, where the
+# clone -> base reference is not encoded in the volume ID.
+# see note in PVE::Storage::LvmThinPlugin for details.
 sub parse_volname {
     my ($cfg, $volid) = @_;
 
@@ -341,6 +344,9 @@ sub parse_volume_id {
     return PVE::Storage::Plugin::parse_volume_id($volid, $noerr);
 }
 
+# NOTE: this check does not work for LVM-thin, where the clone -> base
+# reference is not encoded in the volume ID.
+# see note in PVE::Storage::LvmThinPlugin for details.
 sub volume_is_referenced_base {
     my ($cfg, $volid) = @_;
 
@@ -703,6 +709,7 @@ sub vdisk_free {
     # lock shared storage
     $plugin->cluster_lock_storage($storeid, $scfg->{shared}, undef, sub {
 
+	# LVM-thin allows deletion of still referenced base volumes!
 	my $clonevolname = volume_is_referenced_base($cfg, $volid);
 	die "base volume '$volname' is still in use (by '$clonevolname')\n"
 	    if $clonevolname;
diff --git a/PVE/Storage/LvmThinPlugin.pm b/PVE/Storage/LvmThinPlugin.pm
index c834a22..f616466 100644
--- a/PVE/Storage/LvmThinPlugin.pm
+++ b/PVE/Storage/LvmThinPlugin.pm
@@ -15,6 +15,12 @@ use PVE::JSONSchema qw(get_standard_option);
 # lvcreate -n pvepool -L 20G pve
 # lvconvert --type thin-pool pve/pvepool
 
+# NOTE: volumes which were created as linked clones of another base volume
+# are currently not tracking this relationship in their volume IDs. this is
+# generally not a problem, as LVM thin allows deletion of such base volumes
+# without affecting the linked clones. this leads to increased disk usage
+# when migrating LVM-thin volumes, which is normally prevented for linked clones.
+
 use base qw(PVE::Storage::LVMPlugin);
 
 sub type {
@@ -46,6 +51,9 @@ sub options {
     };
 }
 
+# NOTE: the fourth and fifth element of the returned array are always
+# undef, even if the volume is a linked clone of another volume. see note
+# at beginning of file.
 sub parse_volname {
     my ($class, $volname) = @_;
 
-- 
2.1.4





More information about the pve-devel mailing list