From c4a432a4d1446f3f564f8348498f2049a4f6a518 Mon Sep 17 00:00:00 2001 From: Ivan Shapovalov Date: Sat, 30 Nov 2024 14:38:51 +0400 Subject: [PATCH] restore: add `--reflinks` flag to clone identical files Passing `restic restore --reflinks` will cause restic to keep track of duplicate files and locally clone subsequent duplicates from the first extracted one. --- cmd/restic/cmd_restore.go | 3 +++ internal/restorer/restorer.go | 1 + 2 files changed, 4 insertions(+) diff --git a/cmd/restic/cmd_restore.go b/cmd/restic/cmd_restore.go index c930abc31..0e98fdf02 100644 --- a/cmd/restic/cmd_restore.go +++ b/cmd/restic/cmd_restore.go @@ -59,6 +59,7 @@ type RestoreOptions struct { Verify bool Overwrite restorer.OverwriteBehavior Delete bool + Reflinks bool ExcludeXattrPattern []string IncludeXattrPattern []string } @@ -83,6 +84,7 @@ func init() { flags.BoolVar(&restoreOptions.Verify, "verify", false, "verify restored files content") flags.Var(&restoreOptions.Overwrite, "overwrite", "overwrite behavior, one of (always|if-changed|if-newer|never) (default: always)") flags.BoolVar(&restoreOptions.Delete, "delete", false, "delete files from target directory if they do not exist in snapshot. Use '--dry-run -vv' to check what would be deleted") + flags.BoolVar(&restoreOptions.Reflinks, "reflinks", false, "use reflinks to restore identical files") } func runRestore(ctx context.Context, opts RestoreOptions, gopts GlobalOptions, @@ -169,6 +171,7 @@ func runRestore(ctx context.Context, opts RestoreOptions, gopts GlobalOptions, Progress: progress, Overwrite: opts.Overwrite, Delete: opts.Delete, + Reflinks: opts.Reflinks, }) totalErrors := 0 diff --git a/internal/restorer/restorer.go b/internal/restorer/restorer.go index 683d98483..acf411f24 100644 --- a/internal/restorer/restorer.go +++ b/internal/restorer/restorer.go @@ -44,6 +44,7 @@ type Options struct { Progress *restoreui.Progress Overwrite OverwriteBehavior Delete bool + Reflinks bool } type OverwriteBehavior int