restic 0.13.1 → 0.19.1
18 releases · 7 breaking changes · 12 security fixes · 0 advisories fixed
12security7breaking9deprecated127feature208fix
Breaking changes
- breaking Bugfix #21895: Remove read-only files via the SFTP backend on Windows servers Since restic 0.19.0, repository files on the SFTP backend are marked read-only after save. On Windows SFTP servers, removing them failed with a permission error. The SFTP backend now clears the read-only flag before… in 0.19.1
- breaking Bugfix #5421: Fix rare crash if directory is removed during backup In restic 0.18.0, the backup command could crash if a directory was removed between reading its metadata and listing its directory content. This has now been fixed. in 0.18.1
- breaking Bugfix #2165: Ignore disappeared backup source files The backup command now quietly skips files that are removed between directory listing and backup, instead of printing errors like: error: lstat /some/file/name: no such file or directory in 0.18.0
- breaking Bugfix #5063: Correctly backup extended metadata when using VSS on Windows On Windows, when creating a backup with the --use-fs-snapshot option, restic read extended metadata from the original filesystem path instead of from the snapshot. This could result in errors if files were removed during… in 0.17.2
- breaking Bugfix #4540: Restore ARMv5 support for ARM binaries The official release binaries for restic 0.16.1 were accidentally built to require ARMv7. The build process is now updated to restore support for ARMv5. Please note that restic 0.17.0 will drop support for ARMv5 and require at least ARMv6. in 0.16.2
- breaking Enhancement #4130: Cancel current command if cache becomes unusable If the cache directory was removed or ran out of space while restic was running, this would previously cause further caching attempts to fail and thereby drastically slow down the command execution. Now, the currently running… in 0.16.0
- breaking 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… in 0.15.1
Security changes
- security Bugfix #5427: Correctly restore ACL inheritance state on Windows Since security descriptor backups were added in restic 0.17.0, Access Control Entry inheritance was not restored correctly on Windows; restored permissions were always marked as explicit (not inherited) even when they were inherited… in 0.19.0
- security Enhancement #5424: Enable Windows filesystem privileges before file access Restic used to enable some Windows filesystem privileges only while reading or writing security descriptors. Extended attributes could therefore be read before enabling the backup privilege, possibly resulting in missed… in 0.19.0
- security Security #5291: Mitigate attack on content-defined chunking algorithm Restic uses Rabin Fingerprints for its content-defined chunker. The algorithm relies on a secret polynomial to split files into chunks. As shown in the paper "Chunking Attacks on File Backup Services using Content-Defined… in 0.18.0
- security Bugfix #5169: Prevent Windows VSS event log 8194 warnings for backup with fs snapshot When running backup with the --use-fs-snapshot option in Windows with admin rights, event logs like Volume Shadow Copy Service error: Unexpected error querying for the IVssWriterCallback interface. hr =… in 0.18.0
- security Bugfix #5003: Fix metadata errors during backup of removable disks on Windows Since restic 0.17.0, backing up removable disks on Windows could report errors with retrieving metadata like shown below. error: incomplete metadata for d:\filename: get named security info failed with: Access is denied.… in 0.17.3
- security Bugfix #5004: Fix spurious "A Required Privilege Is Not Held by the Client" error On Windows, creating a backup could sometimes trigger the following error: error: nodeFromFileInfo [...]: get named security info failed with: a required privilege is not held by the client. This has now been fixed. in 0.17.1
- security Enhancement #1786: Support repositories with empty password Restic previously required a password to create or operate on repositories. Using the new option --insecure-no-password it is now possible to disable this requirement. Restic will not prompt for a password when using this option. For… in 0.17.0
- security Enhancement #4873: Update dependencies A few potentially vulnerable dependencies were updated. in 0.16.5
- security Enhancement #4375: Add support for extended attributes on symlinks Restic now supports extended attributes on symlinks when backing up, restoring, or FUSE-mounting snapshots. This includes, for example, the security.selinux xattr on Linux distributions that use SELinux. in 0.16.0
- security Sec: Update golang.org/x/net to address CVE-2022-41723 in 0.15.2
- security Security #4275: Update golang.org/x/net to address CVE-2022-41723 in 0.15.2
- security Enhancement #3932: Improve handling of ErrDot errors in rclone and sftp backends Since Go 1.19, restic can no longer implicitly run relative executables which are found in the current directory (e.g. rclone if found in .). This is a security feature of Go to prevent against running unintended and… in 0.15.0
Deprecations
- deprecated Change #5293: Prune small packfiles more aggressively The prune command now repacks more small packfiles by default. The option --repack-small is no longer needed and has been marked as deprecated. The --repack-smaller-than option can still be used to further control repacking of small pack files. in 0.19.0
- deprecated Change #5162: Promote feature flags The deprecate-legacy-index, deprecate-s3-legacy-layout, explicit-s3-anonymous-auth and safe-forget-keep-tags features are now stable and can no longer be disabled. The corresponding feature flags will be removed in restic 0.19.0. in 0.18.0
- deprecated Chg: Deprecate legacy index format and s3legacy repository layout in 0.17.0
- deprecated Change #4602: Deprecate legacy index format and s3legacy repository layout Support for the legacy index format used by restic before version 0.2.0 has been deprecated and will be removed in the next minor restic version. You can use restic repair index to update the index to the current format. It… in 0.17.0
- deprecated Enhancement #4664: Make ls use message_type field in JSON output The ls command was the only restic command that used the struct_type field in its JSON output format to specify the message type. The JSON output of the ls command now also includes the message_type field, which is consistent with… in 0.17.0
- deprecated Enhancement #1759: Add repair index and repair snapshots commands The rebuild-index command has been renamed to repair index. The old name will still work, but is deprecated. When a snapshot was damaged, the only option up to now was to completely forget the snapshot, even if only some unimportant… in 0.16.0
- deprecated Chg: Deprecate check --check-unused and add further checks in 0.14.0
- deprecated Change #3295: Deprecate check --check-unused and add further checks Since restic 0.12.0, it is expected to still have unused blobs after running prune. This made the --check-unused option of the check command rather useless and tended to confuse users. This option has been deprecated and is now… in 0.14.0
- deprecated Change #3742: Replace --repo2 option used by init/copy with --from-repo The init and copy commands can read data from another repository. However, confusingly --repo2 referred to the repository from which the init command copies parameters, but for the copy command --repo2 referred to the copy… in 0.14.0
Every release in between
fixFix: Prevent mounting over the repository directory
fixFix: Skip inaccessible backup source paths
fixFix: Update mount latest symlink after snapshot reload
fixFix: Hide stats progress bar in JSON mode
fixFix: Restore old behavior of snapshots --latest without --group-by
fixFix: Show timezone location in snapshots output
fixFix: Prevent crash in mountpoint validation if mountpoint is inaccessible
fixFix: Remove read-only files via the SFTP backend on Windows servers
fixFix: Make backup respect excludes for duplicate directory entries
fixBugfix #5234: Prevent mounting over the repository directory Using a local repository directory as the mount target — or a path that contains it, or that it contains — caused the FUSE server to read its own backend files through the new mount, deadlocking the kernel and requiring a long reboot to…
fixBugfix #5667: Skip inaccessible backup source paths The backup command only skipped source paths that did not exist. A path that could not be accessed for another reason, such as a malformed path on Windows, was kept and produced an empty snapshot. Restic now skips any such path and aborts if none…
fixBugfix #5722: Update mount latest symlink after snapshot reload When restic mount was kept running while new snapshots were created, the new snapshots appeared in the mountpoint, but the latest symlink could still point to the previously latest snapshot. Restic now invalidates the cached snapshot…
fixBugfix #21866: Hide stats progress bar in JSON mode Since restic 0.19.0, the stats command shows a progress bar. This progress bar was unintentionally displayed also when using the --json option, mixing regular text output with JSON. This is now fixed.
fixBugfix #21869: Restore old behavior of snapshots --latest without --group-by Restic 0.19.0 accidentally changed the behavior of snapshots --latest to no longer group snapshots by host and paths by default. The snapshots --latest command now again uses the old behavior of grouping by host and paths…
fixBugfix #21876: Show timezone location in snapshots output With restic 0.19.0, the snapshots command printed the current timezone when listing snapshots. However, that timezone label might change during the year, for example with daylight saving time. Restic now prints a more consistent and shorter…
fixBugfix #21879: Prevent crash in mountpoint validation if mountpoint is inaccessible Since restic 0.19.0, the mount command validates a mountpoint before loading the repository. If restic was unable to stat the mountpoint, this would result in a crash. This has now been fixed to correctly return an…
breakingBugfix #21895: Remove read-only files via the SFTP backend on Windows servers Since restic 0.19.0, repository files on the SFTP backend are marked read-only after save. On Windows SFTP servers, removing them failed with a permission error. The SFTP backend now clears the read-only flag before…
fixBugfix #21899: Make backup respect excludes for duplicate directory entries Since restic 0.19.0, backing up a directory with duplicate directory entries always produced "Warning: at least one source file could not be read", even when those files were excluded. This has now been fixed.
fixFix: Support serving a restic mount of a Windows system via Samba
fixFix: Use mode 0700 for repository directories created over SFTP
fixFix: Exit with code 3 when some backup source paths do not exist
fixFix: Error out when environment variables hold invalid values
fixFix: Return exit code 3 when failing to remove snapshots
fixFix: Exit with code 130 on SIGINT
fixFix: Reject impossible find time bounds immediately
fixFix: Make find --pack list blobs for tree packs
fixFix: Allow rclone and sftp backends when running in background
fixFix: Correctly restore ACL inheritance state on Windows
fixFix: Password prompt was sometimes not shown for backup -v
fixFix: Mark repository files read-only when using the SFTP backend
fixFix: Correctly handle snapshots --group-by with --latest
fixFix: Avoid spurious chmod errors on certain file backends
fixFix: Prevent backup --stdin-from-command from hanging
fixFix: Respect --user and --host in key passwd
fixFix: Correct handling of duplicate index entries
fixFix: Correctly handle pack files missing from the index
featureEnh: Add status counters to copy in verbose text output
featureEnh: Add Open Container Initiative labels to release Docker image
fixBugfix #2034: Support serving a restic mount of a Windows system via Samba A repository mounted using restic mount on a POSIX system could not use Samba to serve files from backups of Windows systems, while backups of non-Windows systems could be served successfully. This has now been fixed.
fixBugfix #4447: Use mode 0700 for repository directories created over SFTP When creating a repository over SFTP, restic created the repository directories with the SFTP server's default permissions, often 0755, rather than the 0700 permissions it uses for local repositories. Restic now creates these…
fixBugfix #4467: Exit with code 3 when some backup source paths do not exist Restic used to exit with code 0 when a top-level backup source path was missing, and exited with code 3 only when a child path under an existing source did not exist. Scripts that relied on the exit code could therefore…
fixBugfix #4759: Error out when environment variables hold invalid values If the environment variables RESTIC_COMPRESSION, RESTIC_PACK_SIZE, or RESTIC_READ_CONCURRENCY could not be parsed, restic used to ignore them. Restic now fails with an error unless the same setting is overridden on the command…
fixBugfix #5233: Return exit code 3 when failing to remove snapshots Previously, the forget command returned exit code 0 when it failed to remove one or more snapshots. This was misleading to scripts. The forget command now instead returns exit code 3 when failing to remove one or more snapshots.
fixBugfix #5258: Exit with code 130 on SIGINT Restic used to return exit code 1 on SIGINT. It now returns 130, the usual convention for a process stopped by Ctrl-C.
fixBugfix #5280: Reject impossible find time bounds immediately The find command now fails with an error when both --oldest and --newest are set and --oldest is later than --newest.
fixBugfix #5280: Make find --pack list blobs for tree packs The find --pack command now also reports blobs for packs that only contain tree blobs.
fixBugfix #5354: Allow rclone and sftp backends when running in background Previously, starting restic in the background could result in unexpected behavior when using the rclone or sftp backends. For example, restic -r rclone:./example --insecure-no-password init & could cause the calling bash shell…
securityBugfix #5427: Correctly restore ACL inheritance state on Windows Since security descriptor backups were added in restic 0.17.0, Access Control Entry inheritance was not restored correctly on Windows; restored permissions were always marked as explicit (not inherited) even when they were inherited…
fixBugfix #5477: Password prompt was sometimes not shown for backup -v The repository password prompt could be hidden when running the backup -v command. This has now been fixed.
fixBugfix #5487: Mark repository files read-only when using the SFTP backend Files created through the SFTP backend previously stayed writable. New files now get read-only permissions where the server supports chmod.
deprecatedChange #5293: Prune small packfiles more aggressively The prune command now repacks more small packfiles by default. The option --repack-small is no longer needed and has been marked as deprecated. The --repack-smaller-than option can still be used to further control repacking of small pack files.
featureEnhancement #3572: Support restoring ownership by name on UNIX systems The restore command used to restore file ownership on UNIX systems by UID and GID. It now supports restoring ownership by user and group name with --ownership-by-name, so that snapshots can be restored on systems where numeric…
featureEnhancement #5175: Add status counters to copy in verbose text output The copy command now prints additional counters in text mode when --verbose is set: blobs to copy, their on-disk size, and the number of pack files read from the source repository.
featureEnhancement #5383: Reduce progress bar refresh rates to decrease energy usage Progress bars were previously updated at 60 frames per second, which could cause high CPU or GPU usage in some terminal emulators. The refresh rate is now 10 FPS to conserve energy. For some terminal emulators, the lower…
securityEnhancement #5424: Enable Windows filesystem privileges before file access Restic used to enable some Windows filesystem privileges only while reading or writing security descriptors. Extended attributes could therefore be read before enabling the backup privilege, possibly resulting in missed…
featureThe environment variable IONICE_CLASS selects the I/O scheduling class (see man ionice). Real-time classes need the SYS_NICE capability added to the container.
featureEnhancement #5523: Add Open Container Initiative labels to release Docker image The release Docker image now includes OCI-style image annotation labels, which helps external tooling identify the image.
featureEnhancement #5713: Significantly speed up index loading Loading the index for a large repository is now significantly faster. Also, the mount command now loads the index once at startup and then only loads new index files as they appear. It also loads snapshots before printing that the repository…
+47 more items in the release notesfixFix: Correctly handle backup --stdin-filename with directory paths
fixFix: Accept RESTIC_HOST environment variable in forget command
fixFix: Ignore "chmod not supported" errors when writing files
fixFix: Ignore EOPNOTSUPP errors for extended attributes
fixFix: Fix rare crash if directory is removed during backup
fixFix: Stop retrying uploads when rest-server runs out of space
fixFix: Improve handling of download retries in check command
fixBugfix #5324: Correctly handle backup --stdin-filename with directory paths In restic 0.18.0, the backup command failed if a filename that includes at least a directory was passed to --stdin-filename. For example, --stdin-filename /foo/bar resulted in the following error: Fatal: unable to save…
fixBugfix #5325: Accept RESTIC_HOST environment variable in forget command The forget command did not use the host name from the RESTIC_HOST environment variable when filtering snapshots. This has now been fixed.
fixBugfix #5342: Ignore "chmod not supported" errors when writing files Restic 0.18.0 introduced a bug that caused chmod xxx: operation not supported errors to appear when writing to a local file repository that did not support chmod (like CIFS or WebDAV mounted via FUSE). Restic now ignores those…
fixBugfix #5344: Ignore EOPNOTSUPP errors for extended attributes Restic 0.18.0 added extended attribute support for NetBSD 10+, but not all NetBSD filesystems support extended attributes. Other BSD systems can likewise return EOPNOTSUPP, so restic now ignores these errors.
breakingBugfix #5421: Fix rare crash if directory is removed during backup In restic 0.18.0, the backup command could crash if a directory was removed between reading its metadata and listing its directory content. This has now been fixed.
fixBugfix #5429: Stop retrying uploads when rest-server runs out of space When rest-server returns a 507 Insufficient Storage error, it indicates that no more storage capacity is available. Restic now correctly stops retrying uploads in this case.
fixBugfix #5467: Improve handling of download retries in check command In very rare cases, the check command could unnecessarily report repository damage if the backend returned incomplete, corrupted data on the first download try which is afterwards resolved by a download retry. This could result in…
fixFix: Correctly restore long filepaths' timestamp on old Windows
fixFix: Ignore disappeared backup source files
fixFix: Include root tree when searching using find --tree
fixFix: Prevent Windows VSS event log 8194 warnings for backup with fs snapshot
fixFix: Fix duplicate data handling in prune --max-unused
fixFix: Fix creation of oversized index by repair index --read-all-packs
fixFix: Fix rare crash in command output
featureEnh: Add JSON support to check command
featureEnh: Allow excluding online-only cloud files (e.g. OneDrive)
featureEnh: Add sort option to ls command
featureEnh: Add support for Microsoft Blob Storage access tiers
featureEnh: Add snapshot summary statistics to rewritten snapshots
featureEnh: Add SLSA provenance to GHCR container images
featureEnh: Add retry mechanism for loading repository config
featureEnh: Allow including/excluding extended file attributes during restore
featureEnh: Add start and end timestamps to backup JSON output
featureEnh: Add DragonFlyBSD support
featureEnh: Add experimental S3 cold storage support
featureEnh: Add xattr support for NetBSD 10+
securitySecurity #5291: Mitigate attack on content-defined chunking algorithm Restic uses Rabin Fingerprints for its content-defined chunker. The algorithm relies on a secret polynomial to split files into chunks. As shown in the paper "Chunking Attacks on File Backup Services using Content-Defined…
fixBugfix #1843: Correctly restore long filepaths' timestamp on old Windows The restore command now correctly restores timestamps for files with paths longer than 256 characters on Windows versions prior to Windows 10 1607.
breakingBugfix #2165: Ignore disappeared backup source files The backup command now quietly skips files that are removed between directory listing and backup, instead of printing errors like: error: lstat /some/file/name: no such file or directory
securityBugfix #5169: Prevent Windows VSS event log 8194 warnings for backup with fs snapshot When running backup with the --use-fs-snapshot option in Windows with admin rights, event logs like Volume Shadow Copy Service error: Unexpected error querying for the IVssWriterCallback interface. hr =…
featureChange #4938: Update dependencies and require Go 1.23 or newer We have updated all dependencies. Restic now requires Go 1.23 or newer to build. This also disables support for TLS versions older than TLS 1.2. On Windows, restic now requires at least Windows 10 or Windows Server 2016. On macOS,…
deprecatedChange #5162: Promote feature flags The deprecate-legacy-index, deprecate-s3-legacy-layout, explicit-s3-anonymous-auth and safe-forget-keep-tags features are now stable and can no longer be disabled. The corresponding feature flags will be removed in restic 0.19.0.
featureEnhancement #1378: Add JSON support to check command The check command now supports the --json option to output all statistics in JSON format.
featureEnhancement #3697: Allow excluding online-only cloud files (e.g. OneDrive) Restic treated files synced using OneDrive Files On-Demand as though they were regular files. This caused issues with VSS and could cause OneDrive to download all files. Restic now allows the user to exclude these files…
featureEnhancement #4179: Add sort option to ls command The ls -l command output can now be sorted using the new --sort option for the fields name, size, time (same as mtime), mtime, atime, ctime and extension. A --reverse option is also available.
featureEnhancement #4433: Change default sort order for find output The find command now sorts snapshots from newest to oldest by default. The previous oldest-to-newest order can be restored using the new --reverse option.
featureEnhancement #4521: Add support for Microsoft Blob Storage access tiers The new -o azure.access-tier= option allows specifying the access tier (Hot, Cool or Cold) for objects created in Microsoft Blob Storage. If unspecified, the storage account's default tier is used. There is no official Archive…
featureEnhancement #4942: Add snapshot summary statistics to rewritten snapshots The rewrite command now supports a --snapshot-summary option to add statistics data to snapshots. Only two fields in the summary will be non-zero: TotalFilesProcessed and TotalBytesProcessed. For snapshots rewritten using…
featureEnhancement #4983: Add SLSA provenance to GHCR container images Restic's GitHub Container Registry (GHCR) image build workflow now includes SLSA (Supply-chain Levels for Software Artifacts) provenance generation. Please see the restic documentation for more information about verifying SLSA…
featureEnhancement #5081: Add retry mechanism for loading repository config Restic now retries loading the repository config file when opening a repository. The init command now also retries backend operations.
featureEnhancement #5089: Allow including/excluding extended file attributes during restore The restore command now supports the --exclude-xattr and --include-xattr options to control which extended file attributes will be restored. By default, all attributes are restored.
featureEnhancement #5109: Make small pack size configurable for prune The prune command now supports the --repack-smaller-than option that allows repacking pack files smaller than a specified size.
featureEnhancement #5119: Add start and end timestamps to backup JSON output The JSON output of the backup command now includes backup_start and backup_end timestamps, containing the start and end time of the backup.
featureEnhancement #5131: Add DragonFlyBSD support Restic can now be compiled on DragonflyBSD.
featureEnhancement #5137: Make tag command print which snapshots were modified The tag command now outputs which snapshots were modified along with their new snapshot ID. The command supports the --json option for machine-readable output.
featureEnhancement #5173: Add experimental S3 cold storage support Introduce S3 backend options for transitioning pack files from cold to hot storage on S3 and S3-compatible providers. Note: this only works for the prune, copy and restore commands for now. This experimental feature is gated behind the…
featureEnhancement #5174: Add xattr support for NetBSD 10+ Extended attribute support for backup and restore operations is now available on NetBSD version 10 and later.
+24 more items in the release notesfixFix: Fix unusable mount on macOS Sonoma
fixFix: Fix metadata errors during backup of removable disks on Windows
fixFix: Do not retry load/list operation if SFTP connection is broken
fixFix: Fix metadata error on Windows for backups using VSS
featureEnh: Allow prune --dry-run without lock
fixBugfix #4971: Fix unusable mount on macOS Sonoma On macOS Sonoma when using FUSE-T, it was not possible to access files in a mounted repository. This issue is now resolved.
securityBugfix #5003: Fix metadata errors during backup of removable disks on Windows Since restic 0.17.0, backing up removable disks on Windows could report errors with retrieving metadata like shown below. error: incomplete metadata for d:\filename: get named security info failed with: Access is denied.…
fixBugfix #5101: Do not retry load/list operation if SFTP connection is broken When using restic with the SFTP backend, backend operations that load a file or list files were retried even if the SFTP connection was broken. This has now been fixed.…
fixBugfix #5107: Fix metadata error on Windows for backups using VSS Since restic 0.17.2, when creating a backup on Windows using --use-fs-snapshot, restic would report an error like the following: error: incomplete metadata for C:\: get EA failed while opening file handle for path…
featureEnhancement #5096: Allow prune --dry-run without lock The prune --dry-run --no-lock now allows performing a dry-run without locking the repository. Note that if the repository is modified concurrently, prune may return inaccurate statistics or errors.
fixFix: Support container-level SAS/SAT tokens for Azure backend
fixFix: Resolve potential error during concurrent cache cleanup
fixFix: Return error if tag fails to lock repository
fixFix: Exclude irregular files from backups
fixFix: Correctly backup extended metadata when using VSS on Windows
fixBugfix #4004: Support container-level SAS/SAT tokens for Azure backend Restic previously expected SAS/SAT tokens to be generated at the account level, which prevented tokens created at the container level from being used to initialize a repository. This caused an error when attempting to…
fixBugfix #5047: Resolve potential error during concurrent cache cleanup When multiple restic processes ran concurrently, they could compete to remove obsolete snapshots from the local backend cache, sometimes leading to a "no such file or directory" error. Restic now suppresses this error to prevent…
fixBugfix #5050: Return error if tag fails to lock repository Since restic 0.17.0, the tag command did not return an error when it failed to open or lock the repository. This issue has now been fixed.
fixBugfix #5057: Exclude irregular files from backups Since restic 0.17.1, files with the type irregular could mistakenly be included in snapshots, especially when backing up special file types on Windows that restic cannot process. This issue has now been fixed. Previously, this bug caused the check…
breakingBugfix #5063: Correctly backup extended metadata when using VSS on Windows On Windows, when creating a backup with the --use-fs-snapshot option, restic read extended metadata from the original filesystem path instead of from the snapshot. This could result in errors if files were removed during…
fixFix: Correctly handle volume names in backup command on Windows
fixFix: Include missing backup error text with --json
fixFix: Correctly handle long paths on older Windows versions
fixFix: Fix delayed cancellation of certain commands
fixFix: Don't ignore metadata-setting errors during restore
fixFix: Correctly restore timestamp for files with resource forks on macOS
fixFix: Prevent backup --stdin-from-command from panicking
fixFix: Skip extended attribute processing on unsupported Windows volumes
fixFix: Fix spurious "A Required Privilege Is Not Held by the Client" error
fixFix: Fix rare failures to retry locking a repository
fixFix: Improve HTTP/2 support for REST backend
otherChg: Also back up files with incomplete metadata
otherEnh: Display progress bar for restore --verify
otherEnh: Automatically clear removed snapshots from cache
otherEnh: Print JSON-formatted errors during restore --json
otherEnh: Return exit code 12 for "bad password" errors
otherEnh: Make timeout for stuck requests customizable
fixBugfix #2004: Correctly handle volume names in backup command on Windows On Windows, when the specified backup target only included the volume name without a trailing slash, for example, C:, then restoring the resulting snapshot would result in an error. Note that using C:\ as backup target worked…
fixBugfix #4945: Include missing backup error text with --json Previously, when running a backup with the --json option, restic failed to include the actual error message in the output, resulting in "error": {} being displayed. This has now been fixed, and restic now includes the error text in JSON…
fixBugfix #4953: Correctly handle long paths on older Windows versions On older Windows versions, like Windows Server 2012, restic 0.17.0 failed to back up files with long paths. This problem has now been resolved.
fixBugfix #4957: Fix delayed cancellation of certain commands Since restic 0.17.0, some commands did not immediately respond to cancellation via Ctrl-C (SIGINT) and continued running for a short period. The most affected commands were diff,find, ls, stats and rewrite. This is now resolved.
fixBugfix #4958: Don't ignore metadata-setting errors during restore Previously, restic used to ignore errors when setting timestamps, attributes, or file modes during a restore. It now reports those errors, except for permission related errors when running without root privileges.
fixBugfix #4969: Correctly restore timestamp for files with resource forks on macOS On macOS, timestamps were not restored for files with resource forks. This has now been fixed.
fixBugfix #4975: Prevent backup --stdin-from-command from panicking Restic would previously crash if --stdin-from-command was specified without providing a command. This issue has now been fixed.
fixBugfix #4980: Skip extended attribute processing on unsupported Windows volumes With restic 0.17.0, backups of certain Windows paths, such as network drives, failed due to errors while fetching extended attributes. Restic now skips extended attribute processing for volumes where they are not…
securityBugfix #5004: Fix spurious "A Required Privilege Is Not Held by the Client" error On Windows, creating a backup could sometimes trigger the following error: error: nodeFromFileInfo [...]: get named security info failed with: a required privilege is not held by the client. This has now been fixed.
fixBugfix #5005: Fix rare failures to retry locking a repository Restic 0.17.0 could in rare cases fail to retry locking a repository if one of the lock files failed to load, resulting in the error: unable to create lock in backend: circuit breaker open for file This issue has now been addressed. The…
fixBugfix #5018: Improve HTTP/2 support for REST backend If rest-server tried to gracefully shut down an HTTP/2 connection still in use by the client, it could result in the following error: http2: Transport: cannot retry err [http2: Transport received Server's graceful shutdown GOAWAY] after…
otherChange #4953: Also back up files with incomplete metadata If restic failed to read extended metadata for a file or folder during a backup, then the file or folder was not included in the resulting snapshot. Instead, a warning message was printed along with returning exit code 3 once the backup was…
otherEnhancement #4795: Display progress bar for restore --verify When the restore command is run with --verify, it now displays a progress bar while the verification step is running. The progress bar is not shown when the --json flag is specified.
otherEnhancement #4934: Automatically clear removed snapshots from cache Previously, restic only removed snapshots from the cache on the host where the forget command was executed. On other hosts that use the same repository, the old snapshots remained in the cache. Restic now automatically clears old…
otherEnhancement #4944: Print JSON-formatted errors during restore --json Restic used to print any restore errors directly to the console as freeform text messages, even when using the --json option. Now, when --json is specified, restic prints them as JSON formatted messages.
otherEnhancement #4959: Return exit code 12 for "bad password" errors Restic now returns exit code 12 when it cannot open the repository due to an incorrect password.
otherEnhancement #4970: Make timeout for stuck requests customizable Restic monitors connections to the backend to detect stuck requests. If a request does not return any data within five minutes, restic assumes the request is stuck and retries it. However, for large repositories this timeout might be…
fixFix: Handle unreadable xattrs in folders above backup source
fixFix: Fix slow SFTP upload performance
fixFix: Correct hardlink handling in stats command
deprecatedChg: Deprecate legacy index format and s3legacy repository layout
featureEnh: Add bitrot detection to diff command
featureEnh: Add --delete option to restore command
featureEnh: Add extended options to configure Windows Shadow Copy Service
featureEnh: Add support for FUSE-T with mount on macOS
featureEnh: Add --json option to version command
featureEnh: Add --ncdu option to ls command
featureEnh: Add support for feature flags
featureEnh: Add --target option to the dump command
featureEnh: Allow specifying --host via environment variable
featureEnh: Allow specifying custom User-Agent for outgoing requests
featureEnh: Add restore options to read include/exclude patterns from files
featureEnh: Add dry-run support to restore command
featureChange #4540: Require at least ARMv6 for ARM binaries The official release binaries of restic now require at least ARMv6 support for ARM platforms.
deprecatedChange #4602: Deprecate legacy index format and s3legacy repository layout Support for the legacy index format used by restic before version 0.2.0 has been deprecated and will be removed in the next minor restic version. You can use restic repair index to update the index to the current format. It…
featureChange #4627: Redesign backend error handling to improve reliability Restic now downloads pack files in large chunks instead of using a streaming download. This prevents failures due to interrupted streams. The restore command now also retries downloading individual blobs that could not be…
featureChange #4707: Disable S3 anonymous authentication by default When using the S3 backend with anonymous authentication, it continuously tried to retrieve new authentication credentials, causing bad performance. Now, to use anonymous authentication, it is necessary to pass the extended option -o…
featureEnhancement #662: Optionally skip snapshot creation if nothing changed The backup command always created a snapshot even if nothing in the backup set changed compared to the parent snapshot. Restic now supports the --skip-if-unchanged option for the backup command, which omits creating a snapshot…
featureEnhancement #805: Add bitrot detection to diff command The output of the diff command now includes the modifier ? for files to indicate bitrot in backed up files. The ? will appear whenever there is a difference in content while the metadata is exactly the same. Since files with unchanged metadata…
securityEnhancement #1786: Support repositories with empty password Restic previously required a password to create or operate on repositories. Using the new option --insecure-no-password it is now possible to disable this requirement. Restic will not prompt for a password when using this option. For…
featureEnhancement #2348: Add --delete option to restore command The restore command now supports a --delete option that allows removing files and directories from the target directory that do not exist in the snapshot. This option also allows files in the snapshot to replace non-empty directories having…
featureEnhancement #3067: Add extended options to configure Windows Shadow Copy Service Previous, restic always used a 120 seconds timeout and unconditionally created VSS snapshots for all volume mount points on disk. This behavior can now be fine-tuned by the following new extended options (available…
featureEnhancement #4048: Add support for FUSE-T with mount on macOS The restic mount command now supports creating FUSE mounts using FUSE-T on macOS.
featureEnhancement #4287: Support connection to rest-server using unix socket Restic now supports using a unix socket to connect to a rest-server version 0.13.0 or later. This allows running restic as follows: rest-server --listen unix:/tmp/rest.socket --data /path/to/data & restic -r…
featureEnhancement #4472: Support AWS Assume Role for S3 backend Previously only credentials discovered via the Minio discovery methods were used to authenticate. However, there are many circumstances where the discovered credentials have lower permissions and need to assume a specific role. This is now…
featureEnhancement #4547: Add --json option to version command Restic now supports outputting restic version along with the Go version, OS and architecture used to build restic in JSON format using version --json.
featureEnhancement #4549: Add --ncdu option to ls command NCDU (NCurses Disk Usage) is a tool to analyse disk usage of directories. It has an option to save a directory tree and analyse it later. The ls command now supports outputting snapshot information in the NCDU format using the --ncdu option.…
featureEnhancement #4573: Support rewriting host and time metadata in snapshots The rewrite command now supports rewriting the host and/or time metadata of a snapshot using the new --new-host and --new-time options.
featureEnhancement #4601: Add support for feature flags Restic now supports feature flags that can be used to enable and disable experimental features. The flags can be set using the environment variable RESTIC_FEATURES. To get a list of currently supported feature flags, use the features command.
deprecatedEnhancement #4664: Make ls use message_type field in JSON output The ls command was the only restic command that used the struct_type field in its JSON output format to specify the message type. The JSON output of the ls command now also includes the message_type field, which is consistent with…
featureEnhancement #4676: Make key command's actions separate sub-commands Each of the add, list, remove and passwd actions provided by the key command is now a separate sub-command and have its own documentation which can be invoked using restic key --help.
featureEnhancement #4678: Add --target option to the dump command Restic dump always printed to the standard output. It now supports specifying a --target file to write its output to.
featureEnhancement #4733: Allow specifying --host via environment variable Restic commands that operate on snapshots, such as restic backup and restic snapshots, support the --host option to specify the hostname for grouping snapshots. Such commands now also support specifying the hostname via the…
featureEnhancement #4764: Support forgetting all snapshots The forget command now supports the --unsafe-allow-remove-all option, which removes all snapshots in the repository. This option must always be combined with a snapshot filter (by host, path or tag). For example, the command forget --tag example…
featureEnhancement #4768: Allow specifying custom User-Agent for outgoing requests Restic now supports setting a custom User-Agent for outgoing HTTP requests using the global option --http-user-agent or the RESTIC_HTTP_USER_AGENT environment variable.
featureEnhancement #4781: Add restore options to read include/exclude patterns from files Restic now supports reading include and exclude patterns from files using the --include-file, --exclude-file, --iinclude-file and --iexclude-file options of the restore command.
featureEnhancement #4839: Add dry-run support to restore command The restore command now supports the --dry-run option to perform a dry run. Pass the --verbose=2 option to see which files would remain unchanged, and which would be updated or freshly restored.
+78 more items in the release notesfeatureEnh: Add option to force use of Azure CLI credential
otherEnh: Update dependencies
featureEnhancement #4799: Add option to force use of Azure CLI credential A new environment variable AZURE_FORCE_CLI_CREDENTIAL=true allows forcing the use of Azure CLI credential, ignoring other credentials like managed identity.
securityEnhancement #4873: Update dependencies A few potentially vulnerable dependencies were updated.
fixFix: Downgrade zstd library to fix rare data corruption at max. compression
featureEnh: Add extra verification of data integrity before upload
fixBugfix #4677: Downgrade zstd library to fix rare data corruption at max. compression In restic 0.16.3, backups where the compression level was set to max (using --compression max) could in rare and very specific circumstances result in data corruption due to a bug in the library used for…
fixEnhancement #4529: Add extra verification of data integrity before upload Hardware issues, or a bug in restic or its dependencies, could previously cause corruption in the files restic created and stored in the repository. Detecting such corruption previously required explicitly running the check…
fixFix: Improve errors for irregular files on Windows
fixFix: Support backup of deduplicated files on Windows again
fixFix: Improve error handling for rclone backend
fixFix: Correct restore progress information if an error occurs
fixFix: Improve reliability of restoring large files
fixBugfix #4560: Improve errors for irregular files on Windows Since Go 1.21, most filesystem reparse points on Windows are considered to be irregular files. This caused restic to show an error: invalid node type "" error message for those files. This error message has now been improved and includes…
fixBugfix #4574: Support backup of deduplicated files on Windows again With the official release builds of restic 0.16.1 and 0.16.2, it was not possible to back up files that were deduplicated by the corresponding Windows Server feature. This also applied to restic versions built using Go…
fixBugfix #4612: Improve error handling for rclone backend Since restic 0.16.0, if rclone encountered an error while listing files, this could in rare circumstances cause restic to assume that there are no files. Although unlikely, this situation could result in data loss if it were to happen right…
fixBugfix #4624: Correct restore progress information if an error occurs If an error occurred while restoring a snapshot, this could cause the restore progress bar to show incorrect information. In addition, if a data file could not be loaded completely, then errors would also be reported for some…
fixBugfix #4626: Improve reliability of restoring large files In some cases restic failed to restore large files that frequently contain the same file chunk. In combination with certain backends, this could result in network connection timeouts that caused incomplete restores. Restic now includes…
fixFix: Restore ARMv5 support for ARM binaries
fixFix: Repair documentation build on Read the Docs
breakingBugfix #4540: Restore ARMv5 support for ARM binaries The official release binaries for restic 0.16.1 were accidentally built to require ARMv7. The build process is now updated to restore support for ARMv5. Please note that restic 0.17.0 will drop support for ARMv5 and require at least ARMv6.
fixBugfix #4545: Repair documentation build on Read the Docs For restic 0.16.1, no documentation was available at https://restic.readthedocs.io/ . The documentation build process is now updated to work again.
fixFix: Make key list command honor --no-lock
fixFix: Do not try to load password on command line autocomplete
fixFix: Update zstd library to fix possible data corruption at max. compression
otherChg: Update dependencies and require Go 1.19 or newer
otherEnh: Show progress bar while loading the index
otherEnh: Automatically set GOMAXPROCS in resource-constrained containers
featureEnh: Allow setting REST password and username via environment variables
otherEnh: Include inode numbers in JSON output for find and ls commands
featureEnh: Add config option to set SFTP command arguments
fixBugfix #4513: Make key list command honor --no-lock The key list command now supports the --no-lock options. This allows determining which keys a repo can be accessed by without the need for having write access (e.g., read-only sftp access, filesystem snapshot).
fixBugfix #4516: Do not try to load password on command line autocomplete The command line autocompletion previously tried to load the repository password. This could cause the autocompletion not to work. Now, this step gets skipped.
fixBugfix #4523: Update zstd library to fix possible data corruption at max. compression In restic 0.16.0, backups where the compression level was set to max (using --compression max) could in rare and very specific circumstances result in data corruption due to a bug in the library used for…
featureChange #4532: Update dependencies and require Go 1.19 or newer We have updated all dependencies. Since some libraries require newer Go standard library features, support for Go 1.18 has been dropped, which means that restic now requires at least Go 1.19 to build.
otherEnhancement #229: Show progress bar while loading the index Restic did not provide any feedback while loading index files. Now, there is a progress bar that shows the index loading progress.
otherEnhancement #4128: Automatically set GOMAXPROCS in resource-constrained containers When running restic in a Linux container with CPU-usage limits, restic now automatically adjusts GOMAXPROCS. This helps to reduce the memory consumption on hosts with many CPU cores.
featureEnhancement #4480: Allow setting REST password and username via environment variables Previously, it was only possible to specify the REST-server username and password in the repository URL, or by using the --repository-file option. This meant it was not possible to use authentication in contexts…
otherEnhancement #4511: Include inode numbers in JSON output for find and ls commands Restic used to omit the inode numbers in the JSON messages emitted for nodes by the ls command as well as for matches by the find command. It now includes those values whenever they are available.
featureEnhancement #4519: Add config option to set SFTP command arguments When using the sftp backend, scenarios where a custom identity file was needed for the SSH connection, required the full command to be specified: -o sftp.command='ssh user@host:port -i /ssh/my_private_key -s sftp' Now, the -o…
fixFix: Support "unlimited" in forget --keep-* options
fixFix: Support non-UTF8 paths as symlink target
fixFix: Avoid lock refresh issues on slow network connections
fixFix: Improve lock refresh handling after standby
fixFix: Correctly clean up status bar output of the backup command
fixFix: generate and init no longer silently ignore unexpected arguments
fixFix: Ignore missing folders in rest backend
fixChg: Fix JSON message type of scan_finished for the backup command
otherChg: Require Go 1.20 for Solaris builds
otherEnh: Show progress bar during restore
featureEnh: Add --retry-lock option
otherEnh: Sort snapshots by timestamp in restic find
featureEnh: Add repair index and repair snapshots commands
featureEnh: Allow certificate paths to be passed through environment variables
featureEnh: Add support for non-global Azure clouds
featureEnh: Add support for Managed / Workload Identity to azure backend
featureEnh: Add --human-readable option to ls and find commands
featureEnh: Add jq binary to Docker image
featureEnh: Allow specifying region of new buckets in the gs backend
featureEnh: Add support for extended attributes on symlinks
fixBugfix #2565: Support "unlimited" in forget --keep- options Restic would previously forget snapshots that should have been kept when a negative value was passed to the --keep- options. Negative values are now forbidden. To keep all snapshots, the special value unlimited is now supported. For…
fixBugfix #3311: Support non-UTF8 paths as symlink target Earlier restic versions did not correctly backup and restore symlinks that contain a non-UTF8 target. Note that this only affected systems that still use a non-Unicode encoding for filesystem paths. The repository format is now extended to add…
fixBugfix #4199: Avoid lock refresh issues on slow network connections On network connections with a low upload speed, backups and other operations could fail with the error message Fatal: failed to refresh lock in time. This has now been fixed by reworking the lock refresh handling.
fixBugfix #4274: Improve lock refresh handling after standby If the restic process was stopped or the host running restic entered standby during a long running operation such as a backup, this previously resulted in the operation failing with Fatal: failed to refresh lock in time. This has now been…
fixBugfix #4319: Correctly clean up status bar output of the backup command Due to a regression in restic 0.15.2, the status bar of the backup command could leave some output behind. This happened if filenames were printed that are wider than the current terminal width. This has now been fixed.
fixBugfix #4333: generate and init no longer silently ignore unexpected arguments
fixBugfix #4400: Ignore missing folders in rest backend If a repository accessed via the REST backend was missing folders, then restic would fail with an error while trying to list the data in the repository. This has been now fixed.
fixChange #4176: Fix JSON message type of scan_finished for the backup command Restic incorrectly set the message_type of the scan_finished message to status instead of verbose_status. This has now been corrected so that the messages report the correct type.
featureEnhancement #719: Add --retry-lock option This option allows specifying a duration for which restic will wait if the repository is already locked.
deprecatedEnhancement #1759: Add repair index and repair snapshots commands The rebuild-index command has been renamed to repair index. The old name will still work, but is deprecated. When a snapshot was damaged, the only option up to now was to completely forget the snapshot, even if only some unimportant…
featureEnhancement #1926: Allow certificate paths to be passed through environment variables Restic will now read paths to certificates from the environment variables RESTIC_CACERT or RESTIC_TLS_CLIENT_CERT if --cacert or --tls-client-cert are not specified.
featureEnhancement #2468: Add support for non-global Azure clouds The azure backend previously only supported storages using the global domain core.windows.net. This meant that backups to other domains such as Azure China (core.chinacloudapi.cn) or Azure Germany (core.cloudapi.de) were not supported.…
featureEnhancement #3698: Add support for Managed / Workload Identity to azure backend Restic now additionally supports authenticating to Azure using Workload Identity or Managed Identity credentials, which are automatically injected in several environments such as a managed Kubernetes cluster.
featureEnhancement #3871: Support : syntax to select subfolders Commands like diff or restore always worked with the full snapshot. This did not allow comparing only a specific subfolder or only restoring that folder (restore --include subfolder filters the restored files, but still creates the…
featureEnhancement #3941: Support --group-by for backup parent selection Previously, the backup command by default selected the parent snapshot based on the hostname and the backup targets. When the backup path list changed, the backup command was unable to determine a suitable parent snapshot and had to…
breakingEnhancement #4130: Cancel current command if cache becomes unusable If the cache directory was removed or ran out of space while restic was running, this would previously cause further caching attempts to fail and thereby drastically slow down the command execution. Now, the currently running…
featureEnhancement #4159: Add --human-readable option to ls and find commands Previously, when using the -l option with the ls and find commands, the displayed size was always in bytes, without an option for a more human readable format such as MiB or GiB. The new --human-readable option will convert…
featureEnhancement #4220: Add jq binary to Docker image The Docker image now contains jq, which can be useful to process JSON data output by restic.
featureEnhancement #4226: Allow specifying region of new buckets in the gs backend Previously, buckets used by the Google Cloud Storage backend would always get created in the "us" region. It is now possible to specify the region where a bucket should be created by using the -o gs.region=us option.
securityEnhancement #4375: Add support for extended attributes on symlinks Restic now supports extended attributes on symlinks when backing up, restoring, or FUSE-mounting snapshots. This includes, for example, the security.selinux xattr on Linux distributions that use SELinux.
+18 more items in the release notessecuritySec: Update golang.org/x/net to address CVE-2022-41723
fixFix: Sanitize filenames printed by backup during processing
fixFix: Make dump interpret --host and --path correctly
fixFix: Correct number of blocks reported in mount point
fixFix: Minimize risk of spurious filesystem loops with mount
featureEnh: Add release binaries for riscv64 architecture on Linux
otherEnh: Upgrade Minio to version 7.0.49
securitySecurity #4275: Update golang.org/x/net to address CVE-2022-41723
fixBugfix #2260: Sanitize filenames printed by backup during processing The backup command would previously not sanitize the filenames it printed during processing, potentially causing newlines or terminal control characters to mangle the status output or even change the state of a terminal.…
fixBugfix #4211: Make dump interpret --host and --path correctly A regression in restic 0.15.0 caused dump to confuse its --host= and --path= options: it looked for snapshots with paths called from hosts called . It now treats the options as intended.
fixBugfix #4239: Correct number of blocks reported in mount point Restic mount points reported an incorrect number of 512-byte (POSIX standard) blocks for files and links due to a rounding bug. In particular, empty files were reported as taking one block instead of zero. The rounding is now fixed:…
fixBugfix #4253: Minimize risk of spurious filesystem loops with mount When a backup contains a directory that has the same name as its parent, say a/b/b, and the GNU find command was run on this backup in a restic mount, find would refuse to traverse the lowest b directory, instead printing File…
featureEnhancement #4180: Add release binaries for riscv64 architecture on Linux Builds for the riscv64 architecture on Linux are now included in the release binaries.
featureEnhancement #4219: Upgrade Minio to version 7.0.49 The upgraded version now allows use of the ap-southeast-4 region (Melbourne).
fixFix: Remove b2_download_file_by_name: 404 warning from B2 backend
fixFix: Make prune --quiet not print progress bar
fixFix: Make self-update --output work with new filename on Windows
fixFix: Add missing ETA in backup progress bar
otherEnh: Ignore empty lock files
breakingBugfix #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…
fixBugfix #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.
fixBugfix #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…
fixBugfix #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.
featureEnhancement #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(, 0, 0) returned error, retrying after 552.330144ms: load():…
fixFix: Make mount return exit code 0 after receiving Ctrl-C / SIGINT
fixFix: Make restore replace existing symlinks
fixFix: Don't read password from stdin for backup --stdin
fixFix: Delete files on Backblaze B2 more reliably
fixFix: Make SFTP backend report no space left on device
fixFix: Improve handling of interrupted syscalls in mount command
fixFix: Fix stuck copy command when -o .connections=1
fixFix: Correct prune statistics for partially compressed repositories
fixFix: Make ls return exit code 1 if snapshot cannot be loaded
fixFix: Make backup no longer hang on Solaris when seeing a FIFO file
fixFix: Support ExFAT-formatted local backends on macOS Ventura
fixFix: Make init ignore "Access Denied" errors when creating S3 buckets
fixFix: Make self-update enabled by default only in release builds
fixFix: Don't generate negative UIDs and GIDs in tar files from dump
featureEnh: Implement rewrite command
featureEnh: Add support for credential_process to S3 backend
featureEnh: Add compression statistics to the stats command
featureEnh: Allow backup file tree scanner to be disabled
fixBugfix #2015: Make mount return exit code 0 after receiving Ctrl-C / SIGINT To stop the mount command, a user has to press Ctrl-C or send a SIGINT signal to restic. This used to cause restic to exit with a non-zero exit code. The exit code has now been changed to zero as the above is the expected…
fixBugfix #2578: Make restore replace existing symlinks When restoring a symlink, restic used to report an error if the target path already existed. This has now been fixed such that the potentially existing target path is first removed before the symlink is restored.
fixBugfix #2591: Don't read password from stdin for backup --stdin The backup command when used with --stdin previously tried to read first the password, then the data to be backed up from standard input. This meant it would often confuse part of the data for the password. From now on, it will…
fixBugfix #3161: Delete files on Backblaze B2 more reliably Restic used to only delete the latest version of files stored in B2. In most cases this worked well as there was only a single version of the file. However, due to retries while uploading it is possible for multiple file versions to be…
fixBugfix #3336: Make SFTP backend report no space left on device Backing up to an SFTP backend would spew repeated SSH_FX_FAILURE messages when the remote disk was full. Restic now reports "sftp: no space left on device" and exits immediately when it detects this condition. A fix for this issue was…
fixBugfix #3567: Improve handling of interrupted syscalls in mount command Accessing restic's FUSE mount could result in "input/output" errors when using programs in which syscalls can be interrupted. This is for example the case for Go programs. This has now been fixed by improved error handling of…
fixBugfix #3897: Fix stuck copy command when -o .connections=1 When running the copy command with -o .connections=1 the command would be infinitely stuck. This has now been fixed.
fixBugfix #3918: Correct prune statistics for partially compressed repositories In a partially compressed repository, one data blob can exist both in an uncompressed and a compressed version. This caused the prune statistics to become inaccurate and e.g. report a too high value for the unused size,…
fixBugfix #3951: Make ls return exit code 1 if snapshot cannot be loaded The ls command used to show a warning and return exit code 0 when failing to load a snapshot. This has now been fixed such that it instead returns exit code 1 (still showing a warning).
fixBugfix #4003: Make backup no longer hang on Solaris when seeing a FIFO file The backup command used to hang on Solaris whenever it encountered a FIFO file (named pipe), due to a bug in the handling of extended attributes. This bug has now been fixed.
fixBugfix #4016: Support ExFAT-formatted local backends on macOS Ventura ExFAT-formatted disks could not be used as local backends starting from macOS Ventura. Restic commands would fail with an "inappropriate ioctl for device" error. This has now been fixed.
fixBugfix #4085: Make init ignore "Access Denied" errors when creating S3 buckets In restic 0.9.0 through 0.13.0, the init command ignored some permission errors from S3 backends when trying to check for bucket existence, so that manually created buckets with custom permissions could be used for…
featureChange #4041: Update dependencies and require Go 1.18 or newer Most dependencies have been updated. Since some libraries require newer language features, support for Go 1.15-1.17 has been dropped, which means that restic now requires at least Go 1.18 to build.
featureEnhancement #14: Implement rewrite command Restic now has a rewrite command which allows to rewrite existing snapshots to remove unwanted files.
featureEnhancement #2134: Support B2 API keys restricted to hiding but not deleting files When the B2 backend does not have the necessary permissions to permanently delete files, it now automatically falls back to hiding files. This allows using restic with an application key which is not allowed to…
featureEnhancement #2715: Stricter repository lock handling Previously, restic commands kept running even if they failed to refresh their locks in time. This could be a problem e.g. in case the client system running a backup entered the standby power mode while the backup was still in progress (which…
featureEnhancement #2750: Make backup file read concurrency configurable The backup command now supports a --read-concurrency option which allows tuning restic for very fast storage like NVMe disks by controlling the number of concurrent file reads during the backup process.
featureEnhancement #3029: Add support for credential_process to S3 backend Restic now uses a newer library for the S3 backend, which adds support for the credential_process option in the AWS credential configuration.
featureEnhancement #3096: Make mount command support macOS using macFUSE 4.x Restic now uses a different FUSE library for mounting snapshots and making them available as a FUSE filesystem using the mount command. This adds support for macFUSE 4.x which can be used to make this work on recent macOS…
featureEnhancement #3915: Add compression statistics to the stats command When executed with --mode raw-data on a repository that supports compression, the stats command now calculates and displays, for the selected repository or snapshots: the uncompressed size of the data; the compression progress…
featureEnhancement #3931: Allow backup file tree scanner to be disabled The backup command walks the file tree in a separate scanner process to find the total size and file/directory count, and uses this to provide an ETA. This can slow down backups, especially of network filesystems. The command now has…
securityEnhancement #3932: Improve handling of ErrDot errors in rclone and sftp backends Since Go 1.19, restic can no longer implicitly run relative executables which are found in the current directory (e.g. rclone if found in .). This is a security feature of Go to prevent against running unintended and…
+38 more items in the release notesfixFix: Support self-update on Windows
fixFix: List snapshots in backend at most once to resolve snapshot IDs
fixFix: Fix rare 'not found in repository' error for copy command
fixFix: The diff command incorrectly listed some files as added
fixFix: Fix rclone (shimmed by Scoop) and sftp not working on Windows
fixFix: Directory sync errors for repositories accessed via SMB
fixFix: The stats command miscalculated restore size for multiple snapshots
fixFix: Yield error on invalid policy to forget
fixFix: Print "wrong password" to stderr instead of stdout
fixFix: Correctly rebuild index for legacy repositories
fixFix: Limit number of key files tested while opening a repository
otherChg: Support debug log creation in release builds
deprecatedChg: Deprecate check --check-unused and add further checks
otherChg: Update dependencies and require Go 1.15 or newer
featureEnh: Add compression support
featureEnh: Allow pack size customization
featureEnh: Allow use of SAS token to authenticate to Azure
featureEnh: Allow limiting IO concurrency for local and SFTP backend
fixBugfix #2248: Support self-update on Windows Restic self-update would fail in situations where the operating system locks running binaries, including Windows. The new behavior works around this by renaming the running file and swapping the updated file in place.
fixBugfix #3428: List snapshots in backend at most once to resolve snapshot IDs Many commands support specifying a list of snapshot IDs which are then used to determine the snapshots to be processed by the command. To resolve snapshot IDs or latest, and check that these exist, restic previously…
fixBugfix #3432: Fix rare 'not found in repository' error for copy command In rare cases copy (and other commands) would report that LoadTree(...) returned an id [...] not found in repository error. This could be caused by a backup or copy command running concurrently. The error was only temporary;…
fixBugfix #3685: The diff command incorrectly listed some files as added There was a bug in the diff command, causing it to always show files in a removed directory as added. This has now been fixed.
fixBugfix #3681: Fix rclone (shimmed by Scoop) and sftp not working on Windows In #3602 a fix was introduced to address the problem of rclone prematurely exiting when Ctrl+C is pressed on Windows. The solution was to create the subprocess with its console detached from the restic console. However,…
fixBugfix #3720: Directory sync errors for repositories accessed via SMB On Linux and macOS, accessing a repository via a SMB/CIFS mount resulted in restic failing to save the lock file, yielding the following errors: Save() returned error, retrying after 552.330144ms: sync /repo/locks: no such file…
fixBugfix #3736: The stats command miscalculated restore size for multiple snapshots Since restic 0.10.0 the restore size calculated by the stats command for multiple snapshots was too low. The hardlink detection was accidentally applied across multiple snapshots and thus ignored many files. This has…
fixBugfix #3861: Yield error on invalid policy to forget The forget command previously silently ignored invalid/unsupported units in the duration options, such as e.g. --keep-within-daily 2w. Specifying an invalid/unsupported duration unit now results in an error.
fixBugfix #3716: Print "wrong password" to stderr instead of stdout If an invalid password was entered, the error message was printed on stdout and not on stderr as intended. This has now been fixed. https://forum.restic.net/t/4965
fixBugfix #3772: Correctly rebuild index for legacy repositories After running rebuild-index on a legacy repository containing mixed pack files (that is, pack files which store both metadata and file data), check printed warnings like pack 12345678 contained in several indexes: .... This warning was…
fixBugfix #3776: Limit number of key files tested while opening a repository Previously, restic tested the password against every key in the repository when opening a repository. The more keys there were in the repository, the slower this operation became. Restic now tests the password against up to…
featureChange #1842: Support debug log creation in release builds Creating a debug log was only possible in debug builds which required users to manually build restic. We changed the release builds to allow creating debug logs by simply setting the environment variable DEBUG_LOG=logname.log.
deprecatedChange #3295: Deprecate check --check-unused and add further checks Since restic 0.12.0, it is expected to still have unused blobs after running prune. This made the --check-unused option of the check command rather useless and tended to confuse users. This option has been deprecated and is now…
featureChange #3680: Update dependencies and require Go 1.15 or newer We've updated most dependencies. Since some libraries require newer language features we're dropping support for Go 1.14, which means that restic now requires at least Go 1.15 to build.
deprecatedChange #3742: Replace --repo2 option used by init/copy with --from-repo The init and copy commands can read data from another repository. However, confusingly --repo2 referred to the repository from which the init command copies parameters, but for the copy command --repo2 referred to the copy…
featureEnhancement #1153: Support pruning even when the disk is full When running out of disk space it was no longer possible to add or remove data from a repository. To help with recovering from such a deadlock, the prune command now supports an --unsafe-recover-no-free-space option to recover from…
featureEnhancement #21: Add compression support We've added compression support to the restic repository format. To create a repository using the new format run init --repository-version 2. Please note that the repository cannot be read by restic versions prior to 0.14.0. You can configure whether data…
featureEnhancement #2291: Allow pack size customization Restic now uses a target pack size of 16 MiB by default. This can be customized using the --pack-size size option. Supported pack sizes range between 4 and 128 MiB. It is possible to migrate an existing repository to larger pack files using prune…
featureEnhancement #2295: Allow use of SAS token to authenticate to Azure Previously restic only supported AccountKeys to authenticate to Azure storage accounts, which necessitates giving a significant amount of access. We added support for Azure SAS tokens which are a more fine-grained and time-limited…
featureEnhancement #2696: Improve backup speed with many small files We have restructured the backup pipeline to continue reading files while all upload connections are busy. This allows the backup to already prepare the next data file such that the upload can continue as soon as a connection becomes…
featureEnhancement #2907: Make snapshot directory structure of mount command customizable We've added the possibility to customize the snapshot directory structure of the mount command using templates passed to the --snapshot-template option. The formatting of snapshots' timestamps is now controlled…
featureEnhancement #3475: Allow limiting IO concurrency for local and SFTP backend Restic did not support limiting the IO concurrency / number of connections for accessing repositories stored using the local or SFTP backends. The number of connections is now limited as for other backends, and can be…
+26 more items in the release notes