[pve-devel] ceph: clone vm

Stefan Priebe s.priebe at profihost.ag
Wed Feb 5 20:50:34 CET 2014


it adds snapshot support but not linked clones? or do i miss something.

Stefan

Am 05.02.2014 16:06, schrieb Alexandre DERUMIER:
>>> 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.
>



More information about the pve-devel mailing list