@@ -48,49 +48,54 @@ Major new features
4848 and optimizes working with archives (caching, pruning, repo-list output).
4949
5050 An archive series is now simply all the archives in a repository that have
51- the same name. On the other hand, the unique identifier for a single archive is now its ID
52- (the hash, which can be shortened as long as it is unique).
51+ the same name. On the other hand, the unique identifier for a single archive
52+ is now its ID (the hash, which can be shortened as long as it is unique).
5353
5454- separation of archive metadata: name, tags, user, host, timestamp
5555
5656 To support having a simple, clean archive (series) name, Borg now tracks and
57- displays name, tags, user, host, and timestamp separately (so you don't need to
58- put everything into the archive name as when using Borg 1.x).
57+ displays name, tags, user, host, and timestamp separately (so you don't need
58+ to put everything into the archive name as when using Borg 1.x).
5959
6060 It's now possible to tag (label) archives. There is a special tag for
6161 protecting archives against delete/prune/recreate.
6262
6363 Matching can be done on archive (series) name, tags, user, host, and archive ID.
6464
65+ - packs
66+
67+ - a pack contains multiple chunks - less latency impact, less storage space overhead
68+ - packs are assembled client-side, then stored into the repository, enabling
69+ efficient usage of cloud storage (and other high-latency storages)
70+ - optionally, BORG_STORE_CACHE can be used to enable borgstore caching
71+
6572- new repository and locking implementation based on the borgstore project
6673
6774 - borgstore is a key/value store in Python, currently supporting file:, REST
68- (https/http talking to the REST server that comes with borgstore also),
69- sftp:, rclone:, and s3:/b2: backends.
75+ (talking to the REST server that comes with borgstore also, either via a TCP
76+ connection to a reachable IP:port or via stdio over an ssh tunnel), sftp:,
77+ rclone:, and s3:/b2: backends.
7078 Borgstore backends are easy to implement, so there might be even more in
7179 the future.
72- - Borg uses these to implement file: and ssh: repositories and (new) sftp: and
73- rclone: repositories. Via rclone, Borg can use cloud repositories now!
74- - In addition to ssh: repositories, we also have socket: repositories now.
80+ - Borg uses these to implement file:, rest:, https:, sftp:, s3: / b2: and
81+ rclone: repositories. Via rclone, all sorts of cloud repositories can be used!
82+ - Remote repositories (ssh flavour) are implemented as REST-over-stdio-over-ssh,
83+ so we can get rid of the old RPC-over-stdio-over-ssh method.
7584 - Concurrent parallel access to a repository is now possible for most Borg
7685 commands (except check and compact).
77- - A "repository index" is no longer needed because objects are directly
78- found by their ID. The memory requirements of this index were proportional to
79- the object count in the repository. Thus, Borg now needs less RAM.
86+ - The "chunks index" now lives in the repository, so all clients can share it.
87+ No more expensive re-syncing the chunks index.
8088 - Stale repository locks get auto-removed if they don't get refreshed or if
8189 their owner process is known dead.
82- - Borg compact does much less I/O because it does not need to compact large
83- "segment files" to free space; each repository object is now stored separately
84- and thus can also be deleted individually.
8590 - Borg delete and prune are much faster now.
8691 - The repository works very differently now:
8792
8893 - borg 1.x: transaction-based (commit or roll back), log-like, append-only
8994 segment files, precise refcounting, repo index needed, exclusive lock
9095 needed, checkpointing and .part files needed.
9196 - borg 2: convergence, write order, separate objects, no refcounting,
92- garbage collection, no repo index needed, simplicity, mostly works with
93- a shared lock, no need for checkpointing or .part files.
97+ garbage collection, mostly works with a shared lock, no need for
98+ archive creation checkpointing or .part files.
9499
95100- uses a new hashtable (used for indexes, caches) based on the borghash project
96101
@@ -126,14 +131,19 @@ Major new features
126131 - Using session keys: more secure and easier to manage, especially in multi-
127132 client or multi-repo contexts. By doing this, we could get rid of problematic
128133 long-term nonce/counter management.
134+ - borg keys:
135+
136+ - locate the key automatically in the key directory or in the repository
137+ - support multiple borg keys per repository
138+ - The super-fast blake3 algorithm replaces blake2b for new repos.
129139 - The old crypto code will be removed in Borg 2.1 (currently we still need
130140 it to read from your old Borg 1.x repositories). Removing AES-CTR, PBKDF2,
131- encrypt-and-mac, counter/nonce management will make Borg more secure,
141+ blake2b, encrypt-and-mac, counter/nonce management will make Borg more secure,
132142 easier to use and develop.
133143
134144- chunker improvements
135145
136- - New and improved "buzhash64" chunker
146+ - New and improved "buzhash64" and "fastcdc" chunkers.
137147 - All chunker code is now in Cython (the buzhash chunker used to be a big,
138148 hard-to-maintain piece of C code that included file reading and buffer
139149 management). The file reading and buffer management code has been moved
@@ -153,11 +163,13 @@ Major new features
153163 - remote repository URLs default to relative paths, using an absolute path
154164 is possible.
155165 - no longer supports SCP-style repo parameters (parsing ambiguity issues; no
156- :port possible); just use ssh ://user@host:port/path.
166+ :port possible); just use rest ://user@host:port/path.
157167 - Separated repo and archive; no "::" anymore
158168 - Split some commands that worked on archives and repositories into two separate
159169 commands (makes the code/docs/help easier).
160170 - Renamed Borg init to Borg repo-create for better consistency
171+ - Separate ``borg repo-create `` options to specify encryption, key location
172+ and ID algorithm.
161173 - BORG_EXIT_CODES=modern is the default now to get more specific process
162174 exit codes
163175 - Use jsonargparse as CLI argument/option parser, also supporting YAML configs
@@ -170,9 +182,10 @@ Major new features
170182
171183 - identical, regex, or glob/shell-style matching on the archive name
172184 - matching on archive tags, user, host, and ID (prefix)
185+ - matching on the archive creation timestamp
173186 - giving the option multiple times (logical AND)
174187 - extract --continue: continue a previously interrupted extraction
175- - new borg repo-compress command can do a repo-wide efficient recompression.
188+
176189 - borg analyze: list changed chunks' sizes per directory.
177190 - borg key change-location: usable for repokey <-> keyfile location change
178191 - borg benchmark cpu (so you can actually see what's fastest for your CPU)
@@ -185,7 +198,10 @@ Major new features
185198 - borg repo-space: optionally, you can allocate some reserved space in the
186199 repo to free in "file system full" conditions.
187200 - borg version: show local/remote Borg version
188- - borg prune: add quarterly pruning strategies (3M and 13W)
201+ - borg prune:
202+
203+ - add quarterly pruning strategies (3M and 13W)
204+ - add optional interval support for all prune retention flags
189205 - borg delete: it now SOFT-deletes archives and there is "borg undelete"
190206 to undo that. "borg compact" will free all space in the repository that
191207 belongs to soft-deleted archives, thus undelete only works for soft-deleted
@@ -198,10 +214,9 @@ Major new features
198214 e.g., -a 'PREFIX*'
199215 - borg upgrade (was only relevant for Attic/old Borg)
200216 - removed deprecated CLI options
201- - Remove recreate --recompress option; the repo-wide "repo-compress" is
202- more efficient.
217+ - Remove recreate --recompress option.
203218 - Remove borg config command (it only worked locally anyway)
204- - repository storage quota limit
219+ - repository quota (was replaced by borgstore posixfs backend quota support)
205220 - repository append-only mode (was replaced by borgstore posixfs backend
206221 permissions [all, read-only, write-only, no-delete])
207222
@@ -231,7 +246,6 @@ Other changes
231246- make user/group/uid/gid optional in archived files
232247- make sure archive name/comment and other data that get into JSON are valid
233248 UTF-8 (no surrogate escapes)
234- - new remote and progress logging (tunneled through the RPC result channel)
235249- internal data format/processing changes
236250
237251 - Using msgpack spec 2.0 now, cleanly differentiating between text and
@@ -270,7 +284,7 @@ Other changes
270284
271285- python, packaging and library changes
272286
273- - minimum requirement: Python 3.10
287+ - minimum requirement: Python 3.11
274288 - we unbundled all third-party code and require the respective libraries to
275289 be available and installed. This makes packaging easier for distribution package
276290 maintainers.
0 commit comments