[pve-devel] [PATCH container 4/5] vzdump: allow relative exclude patterns for snapshot and stop mode

Fabian Ebner f.ebner at proxmox.com
Fri Nov 20 15:50:44 CET 2020


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 at proxmox.com>
---

The alternative way to make things consistent is to warn/die on relative
patterns and not pass along relative patterns to rsync. That would be a breaking
change for the (likely few) existing users of relative patterns.

With the approach from the patch, the behavior is also consisten with pxar/manual
usage of proxmox-backup-client. And the next patch further unifies the behavior for
non-manual usage of the backup client.

 src/PVE/VZDump/LXC.pm | 18 ++++++++++++++++--
 1 file changed, 16 insertions(+), 2 deletions(-)

diff --git a/src/PVE/VZDump/LXC.pm b/src/PVE/VZDump/LXC.pm
index c02c6e1..eb07430 100644
--- a/src/PVE/VZDump/LXC.pm
+++ b/src/PVE/VZDump/LXC.pm
@@ -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;
 
-- 
2.20.1






More information about the pve-devel mailing list