I think we should add apis like qm storage add storeid:xxx qm storage del storeid:xxx
for this. I have begin to do some block migration, seem to works fine. I'm currently improving it to allow to migrate to different storageid/storagetype. Also I'm doing some tests with ndb server to copy unused disk with qemu-img convert, seem to works fine too. I'll try to send patchs in 1 or 2 weeks. ----- Mail original ----- De: "Kamil Trzcinski" <ayu...@ayufan.eu> À: pve-devel@pve.proxmox.com Envoyé: Lundi 3 Novembre 2014 12:12:56 Objet: [pve-devel] [PATCH] Added methods to allocate and free storage for migration Signed-off-by: Kamil Trzcinski <ayu...@ayufan.eu> --- PVE/Storage.pm | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/PVE/Storage.pm b/PVE/Storage.pm index 3cc9581..2e3c1ec 100755 --- a/PVE/Storage.pm +++ b/PVE/Storage.pm @@ -477,6 +477,68 @@ sub storage_migrate { } } +sub storage_migrate_alloc { + my ($self, $cfg, $volid, $target_host, $target_storeid, $target_volname) = @_; + + my ($storeid, $volname) = parse_volume_id($volid); + $target_volname = $volname if !$target_volname; + + my $scfg = storage_config($cfg, $storeid); + + # no need to migrate shared content + return if $storeid eq $target_storeid && $scfg->{shared}; + + my $tcfg = storage_config($cfg, $target_storeid); + + my $target_volid = "${target_storeid}:${target_volname}"; + + my $sshoptions = "-o 'BatchMode=yes'"; + my $ssh = "/usr/bin/ssh $sshoptions"; + + my ($size, $format) = PVE::Storage::volume_size_info($cfg, $volid); + + my ($vtype, $name, $vmid) = parse_volname($cfg, $target_volid); + + my $remote_cmd = <<'END_MESSAGE'; +use PVE::Storage; +$cfg = PVE::Storage::config(); +PVE::Storage::vdisk_alloc($cfg, $ARGV[0], $ARGV[1], $ARGV[2], $ARGV[3], $ARGV[4]); +END_MESSAGE + + ## start on remote node + my $cmd = [@{$self->{rem_ssh}}, 'perl', '-', $target_storeid, $vmid, $format, $name, ($size/1024)]; + PVE::Tools::run_command($cmd, input => $remote_cmd); +} + +sub storage_migrate_free { + my ($self, $cfg, $volid, $target_host, $target_storeid, $target_volname) = @_; + + my ($storeid, $volname) = parse_volume_id($volid); + $target_volname = $volname if !$target_volname; + + my $scfg = storage_config($cfg, $storeid); + + # no need to migrate shared content + return if $storeid eq $target_storeid && $scfg->{shared}; + + my $tcfg = storage_config($cfg, $target_storeid); + + my $target_volid = "${target_storeid}:${target_volname}"; + + my $sshoptions = "-o 'BatchMode=yes'"; + my $ssh = "/usr/bin/ssh $sshoptions"; + + my $remote_cmd = <<'END_MESSAGE'; +use PVE::Storage; +$cfg = PVE::Storage::config(); +PVE::Storage::vdisk_free($cfg, $ARGV[0]); +END_MESSAGE + + ## start on remote node + my $cmd = [@{$self->{rem_ssh}}, 'perl', '-', $target_volid]; + PVE::Tools::run_command($cmd, input => $remote_cmd); +} + sub vdisk_clone { my ($cfg, $volid, $vmid, $snap) = @_; -- 1.9.3 (Apple Git-50) _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com http://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com http://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel