+sub snapshot {
+ my ($self, $task, $vmid) = @_;
+
+ my $diskinfo = $task->{diskinfo};
+
+ $self->loginfo("create storage snapshot snapshot");
+
+ # todo: freeze/unfreeze if we have more than one volid
+ PVE::LXC::snapshot_create($vmid, 'vzdump', "vzdump backup snapshot");
+ $task->{cleanup}->{remove_snapshot} = 1;
+
+ # reload config
+ my $conf = $self->{vmlist}->{$vmid} = PVE::LXC::load_config($vmid);
+ die "unable to read vzdump shanpshot config - internal error"
+ if !($conf->{snapshots} && $conf->{snapshots}->{vzdump});
+
+ # my $snapconf = $conf->{snapshots}->{vzdump};
+ # my $volid_list = PVE::LXC::get_vm_volumes($snapconf);
+ my $volid_list = [$diskinfo->{volid}];
+
+ $task->{cleanup}->{dettach_loops} = $volid_list;
+ my $loopdevs = PVE::LXC::attach_loops($self->{storecfg}, $volid_list, 'vzdump');
+
+ my $mountpoint = $default_mount_point;
+
+ my $mp = { volume => $diskinfo->{volid}, mp => "/" };
+ PVE::LXC::mountpoint_mount($mp, $mountpoint, $self->{storecfg}, $loopdevs, 'vzdump');
+
+ $diskinfo->{dir} = $diskinfo->{mountpoint} = $mountpoint;
+ $task->{snapdir} = $diskinfo->{dir};
+}
+