linux default restore only user xattrs, doc update

* On Linux restore only user.* xattrs by default
* restore all for other OSs
* Update docs and changelog about the new restore
flags --exclude-xattr and --include-xattr

Signed-off-by: Tesshu Flower <tflower@redhat.com>
This commit is contained in:
Tesshu Flower 2024-12-02 23:33:15 -05:00
parent 7dd18c66aa
commit 00212fa4a8
No known key found for this signature in database
GPG key ID: DC7556B1903A252B
3 changed files with 48 additions and 1 deletions

View file

@ -0,0 +1,22 @@
Enhancement: Allow including or excluding extended file attributes
during restore.
# Describe the problem in the past tense, the new behavior in the present
# tense. Mention the affected commands, backends, operating systems, etc.
# If the problem description just says that a feature was missing, then
# only explain the new behavior.
# Focus on user-facing behavior, not the implementation.
# Use "Restic now ..." instead of "We have changed ...".
#
Restic restore used to attempt to restore all extended file attributes.
Now two new command line flags are added to restore to control which
extended file attributes will be restored.
The new flags are `--exclude-xattr` and `--include-xattr`.
If the flags are not provided, restic will default to restoring
only `user` namespaced extended file attributes on Linux, and all
extended file attributes on other operating systems.
https://github.com/restic/restic/issues/5089
https://github.com/restic/restic/pull/5129

View file

@ -3,6 +3,7 @@ package main
import (
"context"
"path/filepath"
"runtime"
"time"
"github.com/restic/restic/internal/debug"
@ -300,6 +301,14 @@ func getXattrSelectFilter(opts RestoreOptions) (func(xattrName string) bool, err
}, nil
}
// no includes or excludes, set default of including all xattrs
// User has not specified any xattr includes or excludes
if runtime.GOOS == "linux" {
// For Linux, set default of including only user.* xattrs
return func(xattrName string) bool {
shouldInclude, _ := filter.IncludeByPattern([]string{"user.*"}, Warnf)(xattrName)
return shouldInclude
}, nil
}
// Not linux, default to including all xattrs
return func(_ string) bool { return true }, nil
}

View file

@ -88,6 +88,22 @@ disk space. Note that the exact location of the holes can differ from those in
the original file, as their location is determined while restoring and is not
stored explicitly.
Restoring extended file attributes
----------------------------------
By default, user namespaced extended attributes for files are restored on Linux,
and all extended attributes are restored for other operating systems.
Use ``--exclude-xattr`` and ``--include-xattr`` to control which extended
attributes are restored for files in the snapshot. For example, to restore
user and security namespaced extended attributes for files:
.. code-block:: console
$ restic -r /srv/restic-repo restore 79766175 --target /tmp/restore-work --include-xattr user.* --include-xattr security.*
enter password for repository:
restoring <Snapshot of [/home/user/work] at 2015-05-08 21:40:19.884408621 +0200 CEST> to /tmp/restore-work
Restoring in-place
------------------