This is necessary, because we want use ro snapshots and can't write to it.
---
 src/PVE/VZDump/LXC.pm | 39 ++++++++++++++++++++++++---------------
 1 file changed, 24 insertions(+), 15 deletions(-)

diff --git a/src/PVE/VZDump/LXC.pm b/src/PVE/VZDump/LXC.pm
index eb43807..4ee0e7c 100644
--- a/src/PVE/VZDump/LXC.pm
+++ b/src/PVE/VZDump/LXC.pm
@@ -10,9 +10,12 @@ use PVE::Storage;
 use PVE::VZDump;
 use PVE::LXC;
 use PVE::Tools;
+use File::Path;
 
 use base qw (PVE::VZDump::Plugin);
 
+my $mountpointdir = '/mnt/';
+
 my $rsync_vm = sub {
     my ($self, $task, $from, $to, $text) = @_;
 
@@ -106,6 +109,8 @@ sub prepare {
     my $rootinfo = PVE::LXC::parse_ct_mountpoint($conf->{rootfs});
     my $volid = $rootinfo->{volume};
 
+    my $mountpoint = $mountpointdir.$vmid."/rootfs";
+
     # fixme: when do we deactivate ??
     PVE::Storage::activate_volumes($self->{storecfg}, [$volid]) if $volid;
 
@@ -125,7 +130,7 @@ sub prepare {
        # library dos not handle mount/unmount of snapshots
 
        if ($scfg->{type} ne 'zfs') {
-           $diskinfo->{mountpoint} = "/mnt/vzsnap0";
+           $diskinfo->{mountpoint} = $mountpoint;
        } else {
            die "mode failure - storage does not support snapshot mount\n"
        }
@@ -138,10 +143,10 @@ sub prepare {
     } else {
 
        if ($mode eq 'stop') {
-           my $mountpoint = "/mnt/vzsnap0";
+
            my $path = PVE::Storage::path($self->{storecfg}, $volid);
            &$loop_mount_image($path, $mountpoint);
-           $task->{cleanup}->{snapshot_mount} = 1;
+           $task->{cleanup}->{snapshot_mount} = $mountpoint;
            $diskinfo->{dir} = $diskinfo->{mountpoint} = $mountpoint;
        } elsif ($mode eq 'suspend') {
            my $tasks_fn = "/sys/fs/cgroup/cpu/lxc/$vmid/tasks";
@@ -217,15 +222,16 @@ sub assemble {
 
     my $dir = $task->{snapdir};
 
-    $task->{cleanup}->{etc_vzdump} = 1;
-
-    mkpath "$dir/etc/vzdump/";
+    my $conf_dir = $mountpointdir.$vmid."/etc/vzdump/";
+    File::Path::make_path($conf_dir);
 
     my $conf = PVE::LXC::load_config($vmid);
     delete $conf->{snapshots};
     delete $conf->{'pve.parent'};
 
-    PVE::Tools::file_set_contents("$dir/etc/vzdump/pct.conf", 
PVE::LXC::write_pct_config("/lxc/$vmid.conf", $conf));
+    PVE::Tools::file_set_contents("$conf_dir/pct.conf",
+                                 PVE::LXC::write_pct_config("/lxc/$vmid.conf",
+                                                            $conf))
 }
 
 sub archive {
@@ -251,7 +257,11 @@ sub archive {
     my $cmd = "(";
 
     $cmd .= "cd $snapdir;find . $findargs|sed 's/\\\\/\\\\\\\\/g'|";
-    $cmd .= "tar cpf - $taropts ./etc/vzdump/pct.conf --null -T -";
+    $cmd .= "tar cpf - $taropts ";
+    # The directory parameter can give a alternative directory as source.
+    # the second parameter gives the structure in the tar.
+    $cmd .= "--directory=".$mountpointdir.$vmid." ./etc/vzdump/pct.conf ";
+    $cmd .= "--directory=$snapdir --null -T -";
     my $bwl = $opts->{bwlimit}*1024; # bandwidth limit for cstream
     $cmd .= "|cstream -t $bwl" if $opts->{bwlimit};
     $cmd .= "|$comp" if $comp;
@@ -276,19 +286,18 @@ sub cleanup {
        # for example when we stop the tar with kill (stop task)
        # We use -d to automatically free used loop devices
        sleep(1); 
-       $self->cmd_noerr("umount -d $di->{mountpoint}");
-       File::Path::remove_tree($di->{mountpoint});
+       $self->cmd_noerr("umount -d $task->{cleanup}->{snapshot_mount}");
+       File::Path::remove_tree($task->{cleanup}->{snapshot_mount});
     }
 
     if (my $volid = $task->{cleanup}->{snap_volid}) {
        eval { PVE::Storage::volume_snapshot_delete($self->{storecfg}, $volid, 
'__vzdump__'); };
        warn $@ if $@;
     }
-    
-    if ($task->{cleanup}->{etc_vzdump}) {
-       my $dir = "$task->{snapdir}/etc/vzdump";
-       eval { rmtree $dir if -d $dir; };
-       $self->logerr ($@) if $@;
+
+    if ( -d $mountpointdir.$vmid) {
+       eval { File::Path::remove_tree($mountpointdir.$vmid); };
+       self->logerr ($@) if $@;
     }
 
 }
-- 
2.1.4


_______________________________________________
pve-devel mailing list
pve-devel@pve.proxmox.com
http://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to