restic Changelog

What's new in restic 0.16.4

Feb 5, 2024
  • This release works around and improves detection of a bug in the compression library used by restic. The resulting issue only happens when using restic 0.16.3 and the max compression level (the default auto and off compression levels are not affected), and when the source files being backed up have specific data in them to trigger the bug. If you use max compression, you can use restic check --read-data to make sure you're not affected.
  • restic is distributed as a standalone binary: download the correct file for your operating system and architecture, extract the file and just run it. If you run into any issues, please report them at the GitHub issue tracker or visit the forum. If you already have restic >= 0.9.4, you can use restic self-update to get the latest version in a secure way.

New in restic 0.16.3 (Jan 15, 2024)

  • Summary:
  • Fix #4560: Improve errors for irregular files on Windows
  • Fix #4574: Support backup of deduplicated files on Windows again
  • Fix #4612: Improve error handling for rclone backend
  • Fix #4624: Correct restore progress information if an error occurs
  • Fix #4626: Improve reliability of restoring large files

New in restic 0.16.2 (Oct 29, 2023)

  • Fixed:
  • Restore ARMv5 support for ARM binaries
  • Repair documentation build on Read the Docs

New in restic 0.16.1 (Oct 24, 2023)

  • Fix #4513: Make key list command honor --no-lock
  • Fix #4516: Do not try to load password on command line autocomplete
  • Fix #4523: Update zstd library to fix possible data corruption at max. compression
  • Chg #4532: Update dependencies and require Go 1.19 or newer
  • Enh #229: Show progress bar while loading the index
  • Enh #4128: Automatically set GOMAXPROCS in resource-constrained containers
  • Enh #4480: Allow setting REST password and username via environment variables
  • Enh #4511: Include inode numbers in JSON output for find and ls commands
  • Enh #4519: Add config option to set SFTP command arguments

New in restic 0.16.0 (Jul 31, 2023)

  • Summary:
  • Fix #2565: Support "unlimited" in forget --keep-* options
  • Fix #3311: Support non-UTF8 paths as symlink target
  • Fix #4199: Avoid lock refresh issues on slow network connections
  • Fix #4274: Improve lock refresh handling after standby
  • Fix #4319: Correctly clean up status bar output of the backup command
  • Fix #4333: generate and init no longer silently ignore unexpected arguments
  • Fix #4400: Ignore missing folders in rest backend
  • Chg #4176: Fix JSON message type of scan_finished for the backup command
  • Chg #4201: Require Go 1.20 for Solaris builds
  • Enh #426: Show progress bar during restore
  • Enh #719: Add --retry-lock option
  • Enh #1495: Sort snapshots by timestamp in restic find
  • Enh #1759: Add repair index and repair snapshots commands
  • Enh #1926: Allow certificate paths to be passed through environment variables
  • Enh #2359: Provide multi-platform Docker images
  • Enh #2468: Add support for non-global Azure clouds
  • Enh #2679: Reduce file fragmentation for local backend
  • Enh #3328: Reduce memory usage by up to 25%
  • Enh #3397: Improve accuracy of ETA displayed during backup
  • Enh #3624: Keep oldest snapshot when there are not enough snapshots
  • Enh #3698: Add support for Managed / Workload Identity to azure backend
  • Enh #3871: Support <snapshot>:<subfolder> syntax to select subfolders
  • Enh #3941: Support --group-by for backup parent selection
  • Enh #4130: Cancel current command if cache becomes unusable
  • Enh #4159: Add --human-readable option to ls and find commands
  • Enh #4188: Include restic version in snapshot metadata
  • Enh #4220: Add jq binary to Docker image
  • Enh #4226: Allow specifying region of new buckets in the gs backend
  • Enh #4375: Add support for extended attributes on symlinks

New in restic 0.15.2 (Apr 24, 2023)

  • Sec #4275: Update golang.org/x/net to address CVE-2022-41723
  • Fix #2260: Sanitize filenames printed by backup during processing
  • Fix #4211: Make dump interpret --host and --path correctly
  • Fix #4239: Correct number of blocks reported in mount point
  • Fix #4253: Minimize risk of spurious filesystem loops with mount
  • Enh #4180: Add release binaries for riscv64 architecture on Linux
  • Enh #4219: Upgrade Minio to version 7.0.49

New in restic 0.15.1 (Jan 30, 2023)

  • Summary:
  • Fix #3750: Remove b2_download_file_by_name: 404 warning from B2 backend
  • Fix #4147: Make prune --quiet not print progress bar
  • Fix #4163: Make self-update --output work with new filename on Windows
  • Fix #4167: Add missing ETA in backup progress bar
  • Enh #4143: Ignore empty lock files
  • Details:
  • Bugfix #3750: Remove b2_download_file_by_name: 404 warning from B2 backend
  • In some cases the B2 backend could print b2_download_file_by_name: 404: : b2.b2err warnings. These are only debug messages and can be safely ignored.
  • Restic now uses an updated library for accessing B2, which removes the warning.
  • #3750 #4144 #4146
  • Bugfix #4147: Make prune --quiet not print progress bar
  • A regression in restic 0.15.0 caused prune --quiet to show a progress bar while deciding how to process each pack files. This has now been fixed.
  • #4147 #4153
  • Bugfix #4163: Make self-update --output work with new filename on Windows
  • Since restic 0.14.0 the self-update command did not work when a custom output filename was specified via the --output option. This has now been fixed.
  • As a workaround, either use an older restic version to run the self-update or create an empty file with the output filename before updating e.g. using CMD:
  • Type nul > new-file.exe restic self-update --output new-file.exe
  • #4163 https://forum.restic.net/t/self-update-windows-started-failing-after-release-of-0-15/5836
  • Bugfix #4167: Add missing ETA in backup progress bar
  • A regression in restic 0.15.0 caused the ETA to be missing from the progress bar displayed by the backup command. This has now been fixed.
  • #4167
  • Enhancement #4143: Ignore empty lock files
  • With restic 0.15.0 the checks for stale locks became much stricter than before. In particular, empty or unreadable locks were no longer silently ignored. This made restic to complain with Load(<lock/1234567812>, 0, 0) returned error, retrying after 552.330144ms: load(<lock/1234567812>): invalid data returned and fail in the end.
  • The error message is now clarified and the implementation changed to ignore empty lock files which are sometimes created as the result of a failed uploads on some backends.
  • Please note that unreadable lock files still have to cleaned up manually. To do so, you can run restic unlock --remove-all which removes all existing lock files. But first make sure that no other restic process is currently using the repository.
  • #4143 #4152

New in restic 0.15.0 (Jan 12, 2023)

  • Fix #2015: Make mount return exit code 0 after receiving Ctrl-C / SIGINT
  • Fix #2578: Make restore replace existing symlinks
  • Fix #2591: Don't read password from stdin for backup --stdin
  • Fix #3161: Delete files on Backblaze B2 more reliably
  • Fix #3336: Make SFTP backend report no space left on device
  • Fix #3567: Improve handling of interrupted syscalls in mount command
  • Fix #3897: Fix stuck copy command when -o <backend>.connections=1
  • Fix #3918: Correct prune statistics for partially compressed repositories
  • Fix #3951: Make ls return exit code 1 if snapshot cannot be loaded
  • Fix #4003: Make backup no longer hang on Solaris when seeing a FIFO file
  • Fix #4016: Support ExFAT-formatted local backends on macOS Ventura
  • Fix #4085: Make init ignore "Access Denied" errors when creating S3 buckets
  • Fix #4100: Make self-update enabled by default only in release builds
  • Fix #4103: Don't generate negative UIDs and GIDs in tar files from dump
  • Chg #2724: Include full snapshot ID in JSON output of backup
  • Chg #3929: Make unlock display message only when locks were actually removed
  • Chg #4033: Don't print skipped snapshots by default in copy command
  • Chg #4041: Update dependencies and require Go 1.18 or newer
  • Enh #14: Implement rewrite command
  • Enh #79: Restore files with long runs of zeros as sparse files
  • Enh #1078: Support restoring symbolic links on Windows
  • Enh #1734: Inform about successful retries after errors
  • Enh #1866: Improve handling of directories with duplicate entries
  • Enh #2134: Support B2 API keys restricted to hiding but not deleting files
  • Enh #2152: Make init open only one connection for the SFTP backend
  • Enh #2533: Handle cache corruption on disk and in downloads
  • Enh #2715: Stricter repository lock handling
  • Enh #2750: Make backup file read concurrency configurable
  • Enh #3029: Add support for credential_process to S3 backend
  • Enh #3096: Make mount command support macOS using macFUSE 4.x
  • Enh #3124: Support JSON output for the init command
  • Enh #3899: Optimize prune memory usage
  • Enh #3905: Improve speed of parent snapshot detection in backup command
  • Enh #3915: Add compression statistics to the stats command
  • Enh #3925: Provide command completion for PowerShell
  • Enh #3931: Allow backup file tree scanner to be disabled
  • Enh #3932: Improve handling of ErrDot errors in rclone and sftp backends
  • Enh #3943: Ignore additional/unknown files in repository
  • Enh #3955: Improve backup performance for small files

New in restic 0.14.0 (Aug 26, 2022)

  • Fix: Support self-update on Windows
  • Fix: List snapshots in backend at most once to resolve snapshot IDs
  • Fix: Fix rare 'not found in repository' error for copy command
  • Fix: The diff command incorrectly listed some files as added
  • Fix: Fix rclone (shimmed by Scoop) and sftp not working on Windows
  • Fix: Directory sync errors for repositories accessed via SMB
  • Fix: The stats command miscalculated restore size for multiple snapshots
  • Fix: Yield error on invalid policy to forget
  • Fix: Print "wrong password" to stderr instead of stdout
  • Fix: Correctly rebuild index for legacy repositories
  • Fix: Limit number of key files tested while opening a repository
  • Chg: Support debug log creation in release builds
  • Chg: Deprecate check --check-unused and add further checks
  • Chg: Update dependencies and require Go 1.15 or newer
  • Chg: Replace --repo2 option used by init/copy with --from-repo
  • Enh: Support pruning even when the disk is full
  • Enh: Add compression support
  • Enh: Adaptive IO concurrency based on backend connections
  • Enh: Allow pack size customization
  • Enh: Allow use of SAS token to authenticate to Azure
  • Enh: Make snapshot directory structure of mount command customizable
  • Enh: Improve handling of temporary files on Windows
  • Enh: Validate exclude patterns before backing up
  • Enh: Improve SFTP repository initialization over slow links
  • Enh: Use config file permissions to control file group access
  • Enh: Allow limiting IO concurrency for local and SFTP backend
  • Enh: Stream data in check and prune commands
  • Enh: Improve speed of copy command
  • Enh: Display full IDs in check warnings
  • Enh: Optimize memory usage for directories with many files
  • Enh: Validate include/exclude patterns before restoring

New in restic 0.13.1 (Apr 10, 2022)

  • Fix the diff command
  • Fix rclone (shimmed by Scoop) and sftp stopped working on Windows

New in restic 0.13.0 (Mar 27, 2022)

  • Fix #1106: Never lock repository for list locks
  • Fix #2345: Make cache crash-resistant and usable by multiple concurrent processes
  • Fix #2452: Improve error handling of repository locking
  • Fix #2738: Don't print progress for backup --json --quiet
  • Fix #3382: Make check command honor RESTIC_CACHE_DIR environment variable
  • Fix #3518: Make copy command honor --no-lock for source repository
  • Fix #3556: Fix hang with Backblaze B2 on SSL certificate authority error
  • Fix #3601: Fix rclone backend prematurely exiting when receiving SIGINT on Windows
  • Fix #3667: The mount command now reports symlinks sizes
  • Fix #3488: rebuild-index failed if an index file was damaged
  • Fix #3591: Fix handling of prune --max-repack-size=0
  • Fix #3619: Avoid choosing parent snapshots newer than time of new snapshot
  • Chg #3641: Ignore parent snapshot for backup --stdin
  • Chg #3519: Require Go 1.14 or newer
  • Enh #1542: Add --dry-run/-n option to backup command
  • Enh #2202: Add upload checksum for Azure, GS, S3 and Swift backends
  • Enh #233: Support negative include/exclude patterns
  • Enh #2388: Add warning for S3 if partial credentials are provided
  • Enh #2508: Support JSON output and quiet mode for the diff command
  • Enh #2656: Add flag to disable TLS verification for self-signed certificates
  • Enh #3003: Atomic uploads for the SFTP backend
  • Enh #3127: Add xattr (extended attributes) support for Solaris
  • Enh #3464: Skip lock creation on forget if --no-lock and --dry-run
  • Enh #3490: Support random subset by size in check --read-data-subset
  • Enh #3541: Improve handling of temporary B2 delete errors
  • Enh #3542: Add file mode in symbolic notation to ls --json
  • Enh #2594: Speed up the restore --verify command
  • Enh #2816: The backup command no longer updates file access times on Linux
  • Enh #2880: Make recover collect only unreferenced trees
  • Enh #3429: Verify that new or modified keys are stored correctly
  • Enh #3436: Improve local backend's resilience to (system) crashes
  • Enh #3508: Cache blobs read by the dump command
  • Enh #3511: Support configurable timeout for the rclone backend
  • Enh #3593: Improve copy performance by parallelizing IO

New in restic 0.12.1 (Aug 3, 2021)

  • Fix #2742: Improve error handling for rclone and REST backend over HTTP2
  • Fix #3111: Fix terminal output redirection for PowerShell
  • Fix #3214: Treat an empty password as a fatal error for repository init
  • Fix #3267: copy failed to copy snapshots in rare cases
  • Fix #3184: backup --quiet no longer prints status information
  • Fix #3296: Fix crash of check --read-data-subset=x% run for an empty repository
  • Fix #3302: Fix fdopendir: not a directory error for local backend
  • Fix #3334: Print created new cache message only on a terminal
  • Fix #3380: Fix crash of backup --exclude='**'
  • Fix #3305: Fix possibly missing backup summary of JSON output in case of error
  • Fix #3439: Correctly handle download errors during restore
  • Chg #3247: Empty files now have size of 0 in ls --json output
  • Enh #2780: Add release binaries for s390x architecture on Linux
  • Enh #3293: Add --repository-file2 option to init and copy command
  • Enh #3312: Add auto-completion support for fish
  • Enh #3336: SFTP backend now checks for disk space
  • Enh #3377: Add release binaries for Apple Silicon
  • Enh #3414: Add --keep-within-hourly option to restic forget
  • Enh #3456: Support filtering and specifying untagged snapshots
  • Enh #3167: Allow specifying limit of snapshots list
  • Enh #3426: Optimize read performance of mount command
  • Enh #3427: find --pack fallback to index if data file is missing

New in restic 0.12.0 (Feb 15, 2021)

  • Summary:
  • Fix #1681: Make mount not create missing mount point directory
  • Fix #1800: Ignore no data available filesystem error during backup
  • Fix #2563: Report the correct owner of directories in FUSE mounts
  • Fix #2688: Make backup and tag commands separate tags by comma
  • Fix #2739: Make the cat command respect the --no-lock option
  • Fix #3087: The --use-fs-snapshot option now works on windows/386
  • Fix #3100: Do not require gs bucket permissions when running init
  • Fix #3111: Correctly detect output redirection for backup command on Windows
  • Fix #3151: Don't create invalid snapshots when backup is interrupted
  • Fix #3166: Improve error handling in the restore command
  • Fix #3232: Correct statistics for overlapping targets
  • Fix #3014: Fix sporadic stream reset between rclone and restic
  • Fix #3152: Do not hang until foregrounded when completed in background
  • Fix #3249: Improve error handling in gs backend
  • Chg #3095: Deleting files on Google Drive now moves them to the trash
  • Enh #2186: Allow specifying percentage in check --read-data-subset
  • Enh #2453: Report permanent/fatal backend errors earlier
  • Enh #2528: Add Alibaba/Aliyun OSS support in the s3 backend
  • Enh #2706: Configurable progress reports for non-interactive terminals
  • Enh #2944: Add backup options --files-from-{verbatim,raw}
  • Enh #3083: Allow usage of deprecated S3 ListObjects API
  • Enh #3147: Support additional environment variables for Swift authentication
  • Enh #3191: Add release binaries for MIPS architectures
  • Enh #909: Back up mountpoints as empty directories
  • Enh #3250: Add several more error checks
  • Enh #2718: Improve prune performance and make it more customizable
  • Enh #2495: Add option to let backup trust mtime without checking ctime
  • Enh #2941: Speed up the repacking step of the prune command
  • Enh #3006: Speed up the rebuild-index command
  • Enh #3048: Add more checks for index and pack files in the check command
  • Enh #2433: Make the dump command support zip format
  • Enh #3099: Reduce memory usage of check command
  • Enh #3106: Parallelize scan of snapshot content in copy and prune
  • Enh #3130: Parallelize reading of locks and snapshots
  • Enh #3254: Enable HTTP/2 for backend connections

New in restic 0.11.0 (Nov 5, 2020)

  • Summary:
  • Fix #1212: Restore timestamps and permissions on intermediate directories
  • Fix #1756: Mark repository files as read-only when using the local backend
  • Fix #2241: Hide password in REST backend repository URLs
  • Fix #2319: Correctly dump directories into tar files
  • Fix #2491: Don't require self-update --output placeholder file
  • Fix #2834: Fix rare cases of backup command hanging forever
  • Fix #2938: Fix manpage formatting
  • Fix #2942: Make --exclude-larger-than handle disappearing files
  • Fix #2951: Restic generate, help and self-update no longer check passwords
  • Fix #2979: Make snapshots --json output [] instead of null when no snapshots
  • Enh #2969: Optimize check for unchanged files during backup
  • Enh #340: Add support for Volume Shadow Copy Service (VSS) on Windows
  • Enh #2849: Authenticate to Google Cloud Storage with access token
  • Enh #1458: New option --repository-file
  • Enh #2978: Warn if parent snapshot cannot be loaded during backup

New in restic 0.10.0 (Sep 20, 2020)

  • Fix #1863: Report correct number of directories processed by backup
  • Fix #2254: Fix tar issues when dumping /
  • Fix #2281: Handle format verbs like '%' properly in find output
  • Fix #2298: Do not hang when run as a background job
  • Fix #2389: Fix mangled json output of backup command
  • Fix #2390: Refresh lock timestamp
  • Fix #2429: Backup --json reports total_bytes_processed as 0
  • Fix #2469: Fix incorrect bytes stats in diff command
  • Fix #2518: Do not crash with Synology NAS sftp server
  • Fix #2531: Fix incorrect size calculation in stats --mode restore-size
  • Fix #2537: Fix incorrect file counts in stats --mode restore-size
  • Fix #2592: SFTP backend supports IPv6 addresses
  • Fix #2607: Honor RESTIC_CACHE_DIR environment variable on Mac and Windows
  • Fix #2668: Don't abort the stats command when data blobs are missing
  • Fix #2674: Add stricter prune error checks
  • Fix #2899: Fix possible crash in the progress bar of check --read-data
  • Chg #2482: Remove vendored dependencies
  • Chg #2546: Return exit code 3 when failing to backup all source data
  • Chg #2600: Update dependencies, require Go >= 1.13
  • Chg #1597: Honor the --no-lock flag in the mount command
  • Enh #1570: Support specifying multiple host flags for various commands
  • Enh #1680: Optimize restic mount
  • Enh #2072: Display snapshot date when using restic find
  • Enh #2175: Allow specifying user and host when creating keys
  • Enh #2277: Add support for ppc64le
  • Enh #2395: Ignore sync errors when operation not supported by local filesystem
  • Enh #2427: Add flag --iexclude-file to backup command
  • Enh #2569: Support excluding files by their size
  • Enh #2571: Self-heal missing file parts during backup of unchanged files
  • Enh #2858: Support filtering snapshots by tag and path in the stats command
  • Enh #323: Add command for copying snapshots between repositories
  • Enh #551: Use optimized library for hash calculation of file chunks
  • Enh #2195: Simplify and improve restore performance
  • Enh #2328: Improve speed of check command
  • Enh #2423: Support user@domain parsing as user
  • Enh #2576: Improve the chunking algorithm
  • Enh #2598: Improve speed of diff command
  • Enh #2599: Slightly reduce memory usage of prune and stats commands
  • Enh #2733: S3 backend: Add support for WebIdentityTokenFile
  • Enh #2773: Optimize handling of new index entries
  • Enh #2781: Reduce memory consumption of in-memory index
  • Enh #2786: Optimize list blobs command
  • Enh #2790: Optimized file access in restic mount
  • Enh #2840: Speed-up file deletion in forget, prune and rebuild-index

New in restic 0.9.6 (Mar 31, 2020)

  • Fix #2063: Allow absolute path for filename when backing up from stdin
  • Fix #2174: Save files with invalid timestamps
  • Fix #2249: Read fresh metadata for unmodified files
  • Fix #2301: Add upper bound for t in --read-data-subset=n/t
  • Fix #2321: Check errors when loading index files
  • Enh #2179: Use ctime when checking for file changes
  • Enh #2306: Allow multiple retries for interactive password input
  • Enh #2330: Make --group-by accept both singular and plural
  • Enh #2350: Add option to configure S3 region