]> git.proxmox.com Git - pve-container.git/commitdiff
vzdump: allow relative exclude patterns for snapshot and stop mode
authorFabian Ebner <f.ebner@proxmox.com>
Fri, 20 Nov 2020 14:50:44 +0000 (15:50 +0100)
committerFabian Grünbichler <f.gruenbichler@proxmox.com>
Tue, 24 Nov 2020 15:30:36 +0000 (16:30 +0100)
to make the behavior consistent across modes.

For suspend mode, relative patterns worked for a long time, because the
exclusion already happens when rsync copies the data during an earlier stage of
the backup.

For the other two methods, the way the patterns are passed to tar (after the
'--anchored' option and prefixed with a dot) meant that relative patterns
had no effect previously.

Users which have a relative exclude path by accident (if it's not by accident
then this fixes the behavior) and did not use suspend mode (if they did use
suspend mode, they hopefully would have noticed the unintended exclusion then)
will be affected by this change.

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
src/PVE/VZDump/LXC.pm

index c02c6e1b5d35b03c6b2427ad1e744a36d76714e8..eb07430e11cc32bab6c9ef1e46f7fd5775b95560 100644 (file)
@@ -426,9 +426,23 @@ sub archive {
        push @$tar, "--directory=$tmpdir", './etc/vzdump/pct.conf';
        push @$tar, "./etc/vzdump/pct.fw" if $task->{fw};
        push @$tar, "--directory=$snapdir";
-       push @$tar, '--no-anchored', '--exclude=lost+found' if $userns_cmd;
+
+       my @findexcl_no_anchored = ();
+       my @findexcl_anchored = ();
+       foreach my $pattern (@{$findexcl}) {
+           if ($pattern !~ m|^/|) {
+               push @findexcl_no_anchored, $pattern;
+           } else {
+               push @findexcl_anchored, $pattern;
+           }
+       }
+
+       push @$tar, '--no-anchored';
+       push @$tar, '--exclude=lost+found' if $userns_cmd;
+       push @$tar, map { "--exclude=$_" } @findexcl_no_anchored;
+
        push @$tar, '--anchored';
-       push @$tar, map { "--exclude=.$_" } @{$findexcl};
+       push @$tar, map { "--exclude=.$_" } @findexcl_anchored;
 
        push @$tar, @sources;