This allow fast volume copy from storage to same storage if storage support it.
Signed-off-by: Alexandre Derumier <aderum...@odiso.com> --- PVE/Storage.pm | 18 ++++++++++++++++++ PVE/Storage/RBDPlugin.pm | 22 ++++++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/PVE/Storage.pm b/PVE/Storage.pm index a904f4e..bbccc6c 100755 --- a/PVE/Storage.pm +++ b/PVE/Storage.pm @@ -651,6 +651,24 @@ sub vdisk_clone { }); } +sub vdisk_copy { + my ($cfg, $volid, $vmid, $snap) = @_; + + my ($storeid, $volname) = parse_volume_id($volid); + + my $scfg = storage_config($cfg, $storeid); + + my $plugin = PVE::Storage::Plugin->lookup($scfg->{type}); + + activate_storage($cfg, $storeid); + + # lock shared storage + return $plugin->cluster_lock_storage($storeid, $scfg->{shared}, undef, sub { + my $volname = $plugin->copy_image($scfg, $storeid, $volname, $vmid, $snap); + return "$storeid:$volname"; + }); +} + sub vdisk_create_base { my ($cfg, $volid) = @_; diff --git a/PVE/Storage/RBDPlugin.pm b/PVE/Storage/RBDPlugin.pm index 6459f98..9aac701 100644 --- a/PVE/Storage/RBDPlugin.pm +++ b/PVE/Storage/RBDPlugin.pm @@ -440,6 +440,27 @@ sub clone_image { return $newvol; } +sub copy_image { + my ($class, $scfg, $storeid, $volname, $vmid, $snapname) = @_; + + my $name = &$find_free_diskname($storeid, $scfg, $vmid); + + my $newvol = $name; + + $volname = $volname."@".$snapname if $snapname; + + warn "clone $volname to $name\n"; + + my $cmd = &$rbd_cmd($scfg, $storeid, 'copy', &$add_pool_to_disk($scfg, $volname), + &$add_pool_to_disk($scfg, $name)); + + run_rbd_command($cmd, errmsg => "rbd copy '$volname' error"); + + &$krdb_feature_disable($scfg, $storeid, $name); + + return $newvol; +} + sub alloc_image { my ($class, $storeid, $scfg, $vmid, $fmt, $name, $size) = @_; @@ -664,6 +685,7 @@ sub volume_has_feature { clone => { base => 1, snap => 1}, template => { current => 1}, copy => { base => 1, current => 1, snap => 1}, + storagecopy => { base => 1, current => 1, snap => 1}, sparseinit => { base => 1, current => 1}, }; -- 2.1.4 _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com http://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel