[pve-devel] ceph: clone vm
Alexandre DERUMIER
aderumier at odiso.com
Wed Feb 5 16:06:33 CET 2014
>>Cloning from snapshot is also an opportunity with ZFS.
yes, sure, for any storage which support snasphot.
It's not a big work, as we have already almost all subroutines in storage plugins
something like this should work (don't have tested it ;)
qemuserver.pm
--------------
>>sub clone_disk {
>> my ($storecfg, $vmid, $running, $drivename, $drive, $snapname,
>> $newvmid, $storage, $format, $full, $newvollist) = @_;
>>
>> my $newvolid;
>>
>> if (!$full) {
>> print "create linked clone of drive $drivename ($drive->{file})\n";
>> $newvolid = PVE::Storage::vdisk_clone($storecfg, $drive->{file}, $newvmid);
sub clone_disk {
my ($storecfg, $vmid, $running, $drivename, $drive, $snapname,
$newvmid, $storage, $format, $full, $newvollist) = @_;
my $newvolid;
if (!$full) {
print "create linked clone of drive $drivename ($drive->{file})\n";
$newvolid = PVE::Storage::vdisk_clone($storecfg, $drive->{file}, $newvmid, $snapname);
storage.pm
----------
>>sub vdisk_clone {
>> my ($cfg, $volid, $vmid) = @_;
>>
>> 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->clone_image($scfg, $storeid, $volname, $vmid);
>> return "$storeid:$volname";
>> });
>>}
sub vdisk_clone {
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->clone_image($scfg, $storeid, $volname, $vmid, $snap);
return "$storeid:$volname";
});
}
storage plugin
--------------
>>sub clone_image {
>> my ($class, $scfg, $storeid, $volname, $vmid) = @_;
>>
>> my $snap = '__base__';
>>
>> my ($vtype, $basename, $basevmid, undef, undef, $isBase) =
>> $class->parse_volname($volname);
>>
>> die "clone_image onyl works on base images\n" if !$isBase;
>>
>> my $name = &$find_free_diskname($storeid, $scfg, $vmid);
>>
>> warn "clone $volname: $basename to $name\n";
>>
>> my $newvol = "$basename/$name";
>>
>> my $cmd = &$rbd_cmd($scfg, $storeid, 'clone', &$add_pool_to_disk($scfg, $basename), '--snap', $snap, &$add_pool_to_disk($scfg, $name));
>> run_command($cmd, errmsg => "rbd clone $basename' error");
>>
>> return $newvol;
>>}
sub clone_image {
my ($class, $scfg, $storeid, $volname, $vmid, $snapshot) = @_;
my $snap = '__base__';
$snap = $snapshot if $snapshot;
my ($vtype, $basename, $basevmid, undef, undef, $isBase) =
$class->parse_volname($volname);
die "clone_image onyl works on base images\n" if !$isBase && !$snapshot;
my $name = &$find_free_diskname($storeid, $scfg, $vmid);
warn "clone $volname: $basename to $name\n";
my $newvol = "$basename/$name"; # Maybe find a way to reference snasphot like "$basename@$snasphot/$name"
my $cmd = &$rbd_cmd($scfg, $storeid, 'clone', &$add_pool_to_disk($scfg, $basename), '--snap', $snap, &$add_pool_to_disk($scfg, $name));
run_command($cmd, errmsg => "rbd clone $basename' error");
return $newvol;
}
----- Mail original -----
De: "Michael Rasmussen" <mir at datanom.net>
À: pve-devel at pve.proxmox.com
Envoyé: Mercredi 5 Février 2014 15:39:23
Objet: Re: [pve-devel] ceph: clone vm
On 02-05-2014 14:50, Alexandre DERUMIER wrote:
>
> Maybe could we introduce this feature (for ceph,sheepdog,..), cloning
> from a snapshot.
>
Cloning from snapshot is also an opportunity with ZFS.
--
Hilsen/regards
Michael Rasmussen
_______________________________________________
pve-devel mailing list
pve-devel at pve.proxmox.com
http://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
More information about the pve-devel
mailing list