mirror of
https://github.com/borgbackup/borg.git
synced 2026-10-12 02:11:36 +00:00
docs: fix broken examples and stale output samples in the usage docs
All command lines were executed against scratch repositories and all output samples regenerated from real runs (prettified, not invented): - recreate: the example used the removed --recompress; show borg repo-compress instead; refresh the borg info samples. - diff: default/text output has modified:/added:/removed: labels and mtime/ctime brackets now; the JSON-lines example used borg1 keys and lacked --json-lines on the command; add --content-only. - mount: example passed the repository as a positional (it would have been taken as the mountpoint); use -r. - tar: the archive-copy loop was a bash syntax error and used borg list with repo-list-only format keys; replaced with a working while-read loop over borg repo-list (verified end-to-end, identical archive contents in the destination repo). - key: regenerate repo-create/change-passphrase samples (hex-id named keyfiles, Key location line, no "Synchronizing index"); the import example silently did nothing without --key-location=keyfile; fix the Windows keys path (AppData\Local, not Roaming); explain why the keyfile name changes on passphrase change. - transfer: the borg1->borg2 upgrade steps were missing --from-borg1 and used a ssh:// destination URL (rejected for current repos); fix the Windows keys path. - notes: --noatime and --nobsdflags no longer exist (atime is opt-in via --atime); stray "|" removed. - compact: segments wording removed. - info/repo-info/repo-delete/list/find: output samples regenerated (new labels/order, UTC offsets, repo version line, prompt text; isomtime format and symlink size corrected in list). - general: fix broken inline markup (stray backtick). - serve: the authorized_keys forced command needs --rest (it is deliberately not client-suppliable); document the actual client argument allowlist including --backend. Co-Authored-By: Claude Fable 5 <[email protected]>
This commit is contained in:
co-authored by
Claude Fable 5
parent
8a817db167
commit
df6f4201f8
@@ -4,6 +4,6 @@ Examples
|
||||
~~~~~~~~
|
||||
::
|
||||
|
||||
# Compact segments and free repository disk space
|
||||
# Free repository disk space by deleting unused chunks (rewriting packs as needed)
|
||||
$ borg compact
|
||||
|
||||
|
||||
+24
-14
@@ -4,23 +4,33 @@ Examples
|
||||
~~~~~~~~
|
||||
::
|
||||
|
||||
# By default, borg diff reports metadata changes (mode, mtime, ctime, ...) besides
|
||||
# the content changes, so the lines can get quite long:
|
||||
$ borg diff archive1 archive2
|
||||
+17 B -5 B [-rw-r--r-- -> -rwxr-xr-x] file1
|
||||
+135 B -252 B file2
|
||||
added 0 B file4
|
||||
removed 0 B file3
|
||||
[mtime: Fri, 2026-08-28 12:26:23.433047048 +0200 -> Fri, 2026-08-28 12:26:24.204040020 +0200] [ctime: Fri, 2026-08-28 12:26:23.433047048 +0200 -> Fri, 2026-08-28 12:26:24.204040020 +0200] .
|
||||
modified: +17 B -5 B [-rw-r--r-- -> -rwxr-xr-x] [mtime: Fri, 2026-08-28 12:26:23.431245244 +0200 -> Fri, 2026-08-28 12:26:24.199251801 +0200] [ctime: Fri, 2026-08-28 12:26:23.431245244 +0200 -> Fri, 2026-08-28 12:26:24.200688313 +0200] file1
|
||||
modified: +135 B -252 B [mtime: Fri, 2026-08-28 12:26:23.432895166 +0200 -> Fri, 2026-08-28 12:26:24.202236091 +0200] [ctime: Fri, 2026-08-28 12:26:23.432895166 +0200 -> Fri, 2026-08-28 12:26:24.202236091 +0200] file2
|
||||
added: 0 B file4
|
||||
removed: 0 B file3
|
||||
|
||||
$ borg diff archive1 archive2
|
||||
{"path": "file1", "changes": [{"type": "modified", "added": 17, "removed": 5}, {"type": "mode", "old_mode": "-rw-r--r--", "new_mode": "-rwxr-xr-x"}]}
|
||||
{"path": "file2", "changes": [{"type": "modified", "added": 135, "removed": 252}]}
|
||||
{"path": "file4", "changes": [{"type": "added", "size": 0}]}
|
||||
{"path": "file3", "changes": [{"type": "removed", "size": 0}]}
|
||||
# --content-only hides the metadata changes and only reports content differences:
|
||||
$ borg diff --content-only archive1 archive2
|
||||
modified: +17 B -5 B file1
|
||||
modified: +135 B -252 B file2
|
||||
added: 0 B file4
|
||||
removed: 0 B file3
|
||||
|
||||
# Use --json-lines to get one JSON object per changed path:
|
||||
$ borg diff --json-lines --content-only archive1 archive2
|
||||
{"changes": [{"added": 17, "removed": 5, "type": "modified"}], "path": "file1"}
|
||||
{"changes": [{"added": 135, "removed": 252, "type": "modified"}], "path": "file2"}
|
||||
{"changes": [{"added": 0, "removed": 0, "type": "added"}], "path": "file4"}
|
||||
{"changes": [{"added": 0, "removed": 0, "type": "removed"}], "path": "file3"}
|
||||
|
||||
# Use --sort-by with a comma-separated list; sorts apply stably from last to first.
|
||||
# Here: primary by net size change descending, tie-breaker by path ascending
|
||||
$ borg diff --sort-by=">size_diff,path" archive1 archive2
|
||||
+17 B -5 B [-rw-r--r-- -> -rwxr-xr-x] file1
|
||||
removed 0 B file3
|
||||
added 0 B file4
|
||||
+135 B -252 B file2
|
||||
$ borg diff --content-only --sort-by=">size_diff,path" archive1 archive2
|
||||
modified: +17 B -5 B file1
|
||||
removed: 0 B file3
|
||||
added: 0 B file4
|
||||
modified: +135 B -252 B file2
|
||||
|
||||
+5
-5
@@ -6,14 +6,14 @@ Examples
|
||||
|
||||
# In which archives is this file? Searched / printed from newest to oldest archive.
|
||||
$ borg find home/user/file.txt
|
||||
41a2ed21 docs -rw-rw-r-- user user 1522 Sun, 2022-02-06 21:02:18 home/user/file.txt
|
||||
20e70e3a docs -rw-rw-r-- user user 1440 Sun, 2022-01-30 20:47:32 home/user/file.txt
|
||||
41a2ed21 docs -rw-rw-r-- user user 1522 Sun, 2022-02-06 21:02:18 +0100 home/user/file.txt
|
||||
20e70e3a docs -rw-rw-r-- user user 1440 Sun, 2022-01-30 20:47:32 +0100 home/user/file.txt
|
||||
|
||||
# Find all jpg files in the last 3 archives.
|
||||
$ borg find 'sh:**/*.jpg' --last 3
|
||||
39c8956e photos -rw-rw-r-- user user 919337 Sat, 2022-01-01 14:20:21 photos/paris/eiffel.jpg
|
||||
39c8956e photos -rw-rw-r-- user user 1023881 Sun, 2022-02-06 09:12:44 photos/rome/colosseum.jpg
|
||||
04061a53 photos -rw-rw-r-- user user 919337 Sat, 2022-01-01 14:20:21 photos/paris/eiffel.jpg
|
||||
39c8956e photos -rw-rw-r-- user user 919337 Sat, 2022-01-01 14:20:21 +0100 photos/paris/eiffel.jpg
|
||||
39c8956e photos -rw-rw-r-- user user 1023881 Sun, 2022-02-06 09:12:44 +0100 photos/rome/colosseum.jpg
|
||||
04061a53 photos -rw-rw-r-- user user 919337 Sat, 2022-01-01 14:20:21 +0100 photos/paris/eiffel.jpg
|
||||
|
||||
# Only print the archive and the path, nothing else.
|
||||
$ borg find --format '{archiveid:.8} {archivename} {path}{NL}' home/user/file.txt
|
||||
|
||||
@@ -6,7 +6,7 @@ a number of arguments and options and interprets various environment variables.
|
||||
The following sections will describe each command in detail.
|
||||
|
||||
Commands, options, parameters, paths, and similar elements are shown in ``fixed-width``.
|
||||
Option values are `underlined. Borg has a few options that accept a fixed set
|
||||
Option values are underlined. Borg has a few options that accept a fixed set
|
||||
of values (e.g., ``--encryption`` of :ref:`borg_repo-create`).
|
||||
|
||||
.. container:: experimental
|
||||
|
||||
+13
-12
@@ -4,18 +4,19 @@ Examples
|
||||
~~~~~~~~
|
||||
::
|
||||
|
||||
$ borg info aid:f7dea078
|
||||
$ borg info aid:059743db
|
||||
Archive name: source-backup
|
||||
Archive fingerprint: f7dea0788dfc026cc2be1c0f5b94beb4e4084eb3402fc40c38d8719b1bf2d943
|
||||
Archive fingerprint: 059743db538840c04ee323673ac579d0b5433f2741c41f9643975df6370474f0
|
||||
Comment:
|
||||
Hostname: mba2020
|
||||
Username: tw
|
||||
Time (start): Sat, 2022-06-25 20:51:40
|
||||
Time (end): Sat, 2022-06-25 20:51:40
|
||||
Duration: 0.03 seconds
|
||||
Command line: /usr/bin/borg -r path/to/repo create source-backup src
|
||||
Utilization of maximum supported archive size: 0%
|
||||
Number of files: 244
|
||||
Original size: 13.80 MB
|
||||
Deduplicated size: 531 B
|
||||
Hostname: host
|
||||
Username: user
|
||||
Tags:
|
||||
Time (nominal): Fri, 2026-08-28 12:25:52 +0200
|
||||
Time (start): Fri, 2026-08-28 12:25:52 +0200
|
||||
Time (end): Fri, 2026-08-28 12:25:52 +0200
|
||||
Duration: 0.006 seconds
|
||||
Command line: /usr/bin/borg -r /path/to/repo create source-backup src
|
||||
Working Directory: /home/user
|
||||
Number of files: 3
|
||||
Original size: 3.00 MB
|
||||
|
||||
|
||||
+19
-10
@@ -13,34 +13,43 @@ Examples
|
||||
Initializing repository at "/path/to/repo"
|
||||
Enter new passphrase:
|
||||
Enter same passphrase again:
|
||||
Do you want your passphrase to be displayed for verification? [yN]: n
|
||||
Remember your passphrase. Your data will be inaccessible without it.
|
||||
Key in "/root/.config/borg/keys/mnt_backup" created.
|
||||
Key in "/root/.config/borg/keys/f23b5f0703c06dc7d9d889b5867496d8cb8ef5b42a5005221d3c7373ec6d6353" created.
|
||||
Keep this key safe. Your data will be inaccessible without it.
|
||||
Synchronizing index...
|
||||
Archives: 0, w/ index: 0, w/ outdated index: 0, w/o index: 0.
|
||||
Done.
|
||||
...
|
||||
|
||||
# Change key file passphrase
|
||||
$ borg key change-passphrase -v
|
||||
Enter passphrase for key /root/.config/borg/keys/mnt_backup:
|
||||
Enter passphrase for key /root/.config/borg/keys/f23b5f0703c06dc7d9d889b5867496d8cb8ef5b42a5005221d3c7373ec6d6353:
|
||||
Enter new passphrase:
|
||||
Enter same passphrase again:
|
||||
Do you want your passphrase to be displayed for verification? [yN]: n
|
||||
Remember your passphrase. Your data will be inaccessible without it.
|
||||
Key updated
|
||||
Key location: /root/.config/borg/keys/4881c2f73d9f173bd4c4d30a9f397a596bc742bfa1f652fac3f83cee3f26cb00
|
||||
|
||||
.. note::
|
||||
|
||||
Automatically placed key files are named after the SHA-256 hash of their own
|
||||
contents, not after the repository directory name. Because changing the
|
||||
passphrase re-encrypts the key, the key file is rewritten under a new name and
|
||||
the previous one is removed — that is why the two paths above differ. Use
|
||||
``BORG_KEY_FILE`` if you want to choose the key file name yourself.
|
||||
|
||||
The key file paths shown above are the defaults for Linux (``~/.config/borg/keys/``).
|
||||
On macOS, key files are stored in ``~/Library/Application Support/borg/keys/``.
|
||||
On Windows, they are stored in ``C:\Users\<user>\AppData\Roaming\borg\keys\``.
|
||||
On Windows, they are stored in ``C:\Users\<user>\AppData\Local\borg\borg\keys\``.
|
||||
See :ref:`env_vars` for details.
|
||||
|
||||
::
|
||||
|
||||
# Import a previously-exported key into the specified
|
||||
# key file (creating or overwriting the output key)
|
||||
# (keyfile repositories only)
|
||||
$ BORG_KEY_FILE=/path/to/output-key borg key import /path/to/exported
|
||||
# Import a previously-exported key into a key file, using BORG_KEY_FILE to
|
||||
# choose the output key file (creating or overwriting it).
|
||||
# --key-location=keyfile is required: "borg key import" defaults to
|
||||
# --key-location=repokey, which stores the key in the repository and
|
||||
# ignores BORG_KEY_FILE.
|
||||
$ BORG_KEY_FILE=/path/to/output-key borg key import --key-location=keyfile /path/to/exported
|
||||
|
||||
Fully automated using environment variables:
|
||||
|
||||
|
||||
+17
-17
@@ -5,35 +5,35 @@ Examples
|
||||
::
|
||||
|
||||
$ borg list root-2016-02-15
|
||||
drwxr-xr-x root root 0 Mon, 2016-02-15 17:44:27 .
|
||||
drwxrwxr-x root root 0 Mon, 2016-02-15 19:04:49 bin
|
||||
-rwxr-xr-x root root 1029624 Thu, 2014-11-13 00:08:51 bin/bash
|
||||
lrwxrwxrwx root root 0 Fri, 2015-03-27 20:24:26 bin/bzcmp -> bzdiff
|
||||
-rwxr-xr-x root root 2140 Fri, 2015-03-27 20:24:22 bin/bzdiff
|
||||
drwxr-xr-x root root 0 Mon, 2016-02-15 17:44:27 +0100 .
|
||||
drwxrwxr-x root root 0 Mon, 2016-02-15 19:04:49 +0100 bin
|
||||
-rwxr-xr-x root root 1029624 Thu, 2014-11-13 00:08:51 +0100 bin/bash
|
||||
lrwxrwxrwx root root 6 Fri, 2015-03-27 20:24:26 +0100 bin/bzcmp -> bzdiff
|
||||
-rwxr-xr-x root root 2140 Fri, 2015-03-27 20:24:22 +0100 bin/bzdiff
|
||||
...
|
||||
|
||||
$ borg list root-2016-02-15 --pattern "- bin/ba*"
|
||||
drwxr-xr-x root root 0 Mon, 2016-02-15 17:44:27 .
|
||||
drwxrwxr-x root root 0 Mon, 2016-02-15 19:04:49 bin
|
||||
lrwxrwxrwx root root 0 Fri, 2015-03-27 20:24:26 bin/bzcmp -> bzdiff
|
||||
-rwxr-xr-x root root 2140 Fri, 2015-03-27 20:24:22 bin/bzdiff
|
||||
drwxr-xr-x root root 0 Mon, 2016-02-15 17:44:27 +0100 .
|
||||
drwxrwxr-x root root 0 Mon, 2016-02-15 19:04:49 +0100 bin
|
||||
lrwxrwxrwx root root 6 Fri, 2015-03-27 20:24:26 +0100 bin/bzcmp -> bzdiff
|
||||
-rwxr-xr-x root root 2140 Fri, 2015-03-27 20:24:22 +0100 bin/bzdiff
|
||||
...
|
||||
|
||||
$ borg list archiveA --format="{mode} {user:6} {group:6} {size:8d} {isomtime} {path}{extra}{NEWLINE}"
|
||||
drwxrwxr-x user user 0 Sun, 2015-02-01 11:00:00 .
|
||||
drwxrwxr-x user user 0 Sun, 2015-02-01 11:00:00 code
|
||||
drwxrwxr-x user user 0 Sun, 2015-02-01 11:00:00 code/myproject
|
||||
-rw-rw-r-- user user 1416192 Sun, 2015-02-01 11:00:00 code/myproject/file.ext
|
||||
-rw-rw-r-- user user 1416192 Sun, 2015-02-01 11:00:00 code/myproject/file.text
|
||||
drwxrwxr-x user user 0 2015-02-01T11:00:00.000000+01:00 .
|
||||
drwxrwxr-x user user 0 2015-02-01T11:00:00.000000+01:00 code
|
||||
drwxrwxr-x user user 0 2015-02-01T11:00:00.000000+01:00 code/myproject
|
||||
-rw-rw-r-- user user 1416192 2015-02-01T11:00:00.000000+01:00 code/myproject/file.ext
|
||||
-rw-rw-r-- user user 1416192 2015-02-01T11:00:00.000000+01:00 code/myproject/file.text
|
||||
...
|
||||
|
||||
$ borg list archiveA --pattern '+ re:\.ext$' --pattern '- re:^.*$'
|
||||
-rw-rw-r-- user user 1416192 Sun, 2015-02-01 11:00:00 code/myproject/file.ext
|
||||
-rw-rw-r-- user user 1416192 Sun, 2015-02-01 11:00:00 +0100 code/myproject/file.ext
|
||||
...
|
||||
|
||||
$ borg list archiveA --pattern '+ re:.ext$' --pattern '- re:^.*$'
|
||||
-rw-rw-r-- user user 1416192 Sun, 2015-02-01 11:00:00 code/myproject/file.ext
|
||||
-rw-rw-r-- user user 1416192 Sun, 2015-02-01 11:00:00 code/myproject/file.text
|
||||
-rw-rw-r-- user user 1416192 Sun, 2015-02-01 11:00:00 +0100 code/myproject/file.ext
|
||||
-rw-rw-r-- user user 1416192 Sun, 2015-02-01 11:00:00 +0100 code/myproject/file.text
|
||||
...
|
||||
|
||||
# Use --sort-by with a comma-separated list; sorts apply stably from last to first.
|
||||
|
||||
@@ -39,7 +39,7 @@ Examples
|
||||
|
||||
# Exclusion options are supported.
|
||||
# These can speed up mounting and lower memory needs significantly.
|
||||
$ borg mount /path/to/repo /tmp/mymountpoint only/that/path
|
||||
$ borg mount -r /path/to/repo /tmp/mymountpoint only/that/path
|
||||
$ borg mount --exclude '...' /tmp/mymountpoint
|
||||
|
||||
|
||||
|
||||
+12
-11
@@ -14,7 +14,7 @@ resource usage (RAM and disk space) as the amount of resources needed is
|
||||
(also) determined by the total number of chunks in the repository (see
|
||||
:ref:`cache-memory-usage` for details).
|
||||
|
||||
``--chunker-params=fastcdc,10,23,16,2`` results in a fine-grained deduplication|
|
||||
``--chunker-params=fastcdc,10,23,16,2`` results in a fine-grained deduplication
|
||||
and creates a large number of chunks and thus uses a lot of resources to manage
|
||||
them. This is good for relatively small data volumes and if the machine has a
|
||||
good amount of free RAM and disk space.
|
||||
@@ -60,19 +60,20 @@ a new repository when changing chunker parameters.
|
||||
For more details, see :ref:`chunker_details`.
|
||||
|
||||
|
||||
``--noatime / --noctime``
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
``--atime / --noctime / --nobirthtime``
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
You can use these ``borg create`` options to not store the respective timestamp
|
||||
into the archive, in case you do not really need it.
|
||||
``borg create`` does not store atime by default — use ``--atime`` if you do
|
||||
need it. ctime and birthtime are stored by default and can be omitted with
|
||||
``--noctime`` and ``--nobirthtime``.
|
||||
|
||||
Besides saving a little space by omitting the timestamp, it might also
|
||||
affect metadata stream deduplication: if only this timestamp changes between
|
||||
backups and is stored into the metadata stream, the metadata stream chunks
|
||||
will not deduplicate just because of that.
|
||||
Besides saving a little space by omitting a timestamp, storing fewer timestamps
|
||||
might also help metadata stream deduplication: if only such a timestamp changes
|
||||
between backups and is stored into the metadata stream, the metadata stream
|
||||
chunks will not deduplicate just because of that.
|
||||
|
||||
``--nobsdflags / --noflags``
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
``--noflags``
|
||||
~~~~~~~~~~~~~
|
||||
|
||||
You can use this to avoid querying and storing (or extracting and setting) flags — in case
|
||||
you don't need them or if they are broken for your filesystem.
|
||||
|
||||
+17
-10
@@ -5,26 +5,33 @@ Examples
|
||||
::
|
||||
|
||||
# Create a backup with fast, low compression
|
||||
$ borg create archive /some/files --compression lz4
|
||||
# Then recompress it — this might take longer, but the backup has already completed,
|
||||
# so there are no inconsistencies from a long-running backup job.
|
||||
$ borg recreate -a archive --recompress --compression zlib,9
|
||||
$ borg create archive files --compression lz4
|
||||
# Then recompress the data already stored in the repository — this might take longer,
|
||||
# but the backup has already completed, so there are no inconsistencies from a
|
||||
# long-running backup job. Note that recompressing existing repository data is the
|
||||
# job of "borg repo-compress", not of "borg recreate".
|
||||
$ borg repo-compress --compression zlib,9 --stats
|
||||
Recompression stats:
|
||||
Packs: 2 total, 2 rewritten.
|
||||
Objects: 5 total, 2 recompressed, 0 already had the desired compression, 3 kept as-is (recompression brings no gain).
|
||||
Repository size: 301.59 kB before, 301.53 kB after, shrunk by 60 B.
|
||||
|
||||
# Remove unwanted files from all archives in a repository.
|
||||
# Note the relative path for the --exclude option — archives only contain relative paths.
|
||||
$ borg recreate --exclude home/icke/Pictures/drunk_photos
|
||||
|
||||
# Change the archive comment
|
||||
$ borg create --comment "This is a comment" archivename ~
|
||||
# Change the archive comment. Note that recreate writes a new archive,
|
||||
# so the archive fingerprint changes.
|
||||
$ borg create --comment "This is a comment" archivename files
|
||||
$ borg info -a archivename
|
||||
Name: archivename
|
||||
Fingerprint: ...
|
||||
Archive name: archivename
|
||||
Archive fingerprint: 6cfecdd4e963bbe150c08169407de0353a4c5f2f90221646a9ebb0ce9be2529a
|
||||
Comment: This is a comment
|
||||
...
|
||||
$ borg recreate --comment "This is a better comment" -a archivename
|
||||
$ borg info -a archivename
|
||||
Name: archivename
|
||||
Fingerprint: ...
|
||||
Archive name: archivename
|
||||
Archive fingerprint: 259b5302a8de9c889fb4915fe5df128f6c22776966db2dc3c7d3c8e741bf45b6
|
||||
Comment: This is a better comment
|
||||
...
|
||||
|
||||
|
||||
@@ -6,9 +6,10 @@ Examples
|
||||
|
||||
# delete the whole repository and the related local cache:
|
||||
$ borg repo-delete
|
||||
You requested to DELETE the repository completely *including* all archives it contains:
|
||||
repo Mon, 2016-02-15 19:26:54
|
||||
root-2016-02-15 Mon, 2016-02-15 19:36:29
|
||||
newname Mon, 2016-02-15 19:50:19
|
||||
You requested to DELETE the following repository completely *including* 2 archives it contains:
|
||||
------------------------------------------------------------------------------
|
||||
Repository ID: e7046adda9b2a76bb4fac8d707ab7dc12a836391c8c3612cc12d461e713c5bc1
|
||||
Location: /path/to/repo
|
||||
------------------------------------------------------------------------------
|
||||
Type 'YES' if you understand this and want to continue: YES
|
||||
|
||||
|
||||
@@ -5,13 +5,10 @@ Examples
|
||||
::
|
||||
|
||||
$ borg repo-info
|
||||
Repository ID: 0e85a7811022326c067acb2a7181d5b526b7d2f61b34470fb8670c440a67f1a9
|
||||
Location: /Users/tw/w/borg/path/to/repo
|
||||
Repository ID: 0a2744f216526be75ae14a5fa5b123127bb218558219f6203e09e4f220e45903
|
||||
Location: /path/to/repo
|
||||
Repository version: 4
|
||||
Encrypted: Yes (repokey, aes256-ocb, sha256)
|
||||
Cache: /Users/tw/.cache/borg/0e85a7811022326c067acb2a7181d5b526b7d2f61b34470fb8670c440a67f1a9
|
||||
Security dir: /Users/tw/.config/borg/security/0e85a7811022326c067acb2a7181d5b526b7d2f61b34470fb8670c440a67f1a9
|
||||
Original size: 152.14 MB
|
||||
Deduplicated size: 30.38 MB
|
||||
Unique chunks: 654
|
||||
Total chunks: 3302
|
||||
Security directory: /home/user/.local/share/borg/security/0a2744f216526be75ae14a5fa5b123127bb218558219f6203e09e4f220e45903
|
||||
Cache: /home/user/.cache/borg/0a2744f216526be75ae14a5fa5b123127bb218558219f6203e09e4f220e45903
|
||||
|
||||
|
||||
+14
-2
@@ -13,6 +13,15 @@ options. This list currently contains:
|
||||
such as ``--verbose``, ``--info``, ``--debug``, ``--debug-topic``, etc.
|
||||
- ``--lock-wait`` to allow the client to control how long to wait before
|
||||
giving up and aborting the operation when another process is holding a lock.
|
||||
- ``--backend`` to allow the client to choose *which* repository it wants to
|
||||
use (see ``borg serve --rest``). The forced command keeps pinning the
|
||||
restrictions: the client-given backend is validated against
|
||||
``--restrict-to-path`` / ``--restrict-to-repository``.
|
||||
|
||||
Notably, ``--rest`` is *not* in the allowlist, so the forced command pins the
|
||||
mode (current ``rest://`` repositories vs. legacy Borg 1.x repositories), and
|
||||
neither are ``--restrict-to-path``, ``--restrict-to-repository``, ``--umask``
|
||||
and ``--permissions``.
|
||||
|
||||
Environment variables (such as BORG_XXX) contained in the original
|
||||
command sent by the client are *not* interpreted, but ignored. If BORG_XXX environment
|
||||
@@ -24,12 +33,15 @@ locations like ``/etc/environment`` or in the forced command itself (example bel
|
||||
# Allow an SSH keypair to run only borg, and only have access to /path/to/repo.
|
||||
# Use key options to disable unneeded and potentially dangerous SSH functionality.
|
||||
# This will help to secure an automated remote backup system.
|
||||
# --rest serves a current (rest://) repository; without it, a legacy Borg 1.x
|
||||
# repository would be served. The client supplies --backend FILE:<path>,
|
||||
# which is validated against --restrict-to-path.
|
||||
$ cat ~/.ssh/authorized_keys
|
||||
command="borg serve --restrict-to-path /path/to/repo",restrict ssh-rsa AAAAB3[...]
|
||||
command="borg serve --rest --restrict-to-path /path/to/repo",restrict ssh-rsa AAAAB3[...]
|
||||
|
||||
# Specify repository permissions for an SSH keypair.
|
||||
$ cat ~/.ssh/authorized_keys
|
||||
command="borg serve --permissions=read-only",restrict ssh-rsa AAAAB3[...]
|
||||
command="borg serve --rest --permissions=read-only",restrict ssh-rsa AAAAB3[...]
|
||||
|
||||
# Set a BORG_XXX environment variable on the "borg serve" side
|
||||
$ cat ~/.ssh/authorized_keys
|
||||
|
||||
+5
-3
@@ -33,14 +33,16 @@ Examples
|
||||
Archives transfer script
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Outputs a script that copies all archives from repo1 to repo2:
|
||||
Outputs a script that copies all archives from repo1 to repo2
|
||||
(``bash``, because it uses process substitution). Remove the ``echo`` to
|
||||
actually run the commands instead of just printing them:
|
||||
|
||||
::
|
||||
|
||||
for N I T in `borg list --format='{archive} {id} {time:%Y-%m-%dT%H:%M:%S}{NL}'`
|
||||
while read -r N I T
|
||||
do
|
||||
echo "borg -r repo1 export-tar --tar-format=BORG aid:$I - | borg -r repo2 import-tar --timestamp=$T $N -"
|
||||
done
|
||||
done < <(borg -r repo1 repo-list --format='{name} {id} {time:%Y-%m-%dT%H:%M:%S}{NL}')
|
||||
|
||||
Kept:
|
||||
|
||||
|
||||
@@ -8,7 +8,9 @@ locations and passphrases first:
|
||||
|
||||
::
|
||||
|
||||
export BORG_REPO=ssh://borg2@borgbackup/./tests/b20
|
||||
# The destination is a Borg 2 repository: use a rest:// (or local) location,
|
||||
# ssh:// is only supported for the legacy Borg 1.x source repository.
|
||||
export BORG_REPO=rest://borg2@borgbackup/tests/b20
|
||||
export BORG_PASSPHRASE='your-borg2-repo-passphrase'
|
||||
export BORG_OTHER_REPO=ssh://borg2@borgbackup/./tests/b1x
|
||||
export BORG_OTHER_PASSPHRASE='your-borg1-repo-passphrase'
|
||||
@@ -27,7 +29,8 @@ locations and passphrases first:
|
||||
# between old archives (copied with borg transfer) and future ones.
|
||||
# The AEAD cipher does not matter (everything must be re-encrypted and
|
||||
# re-authenticated anyway); you could also choose chacha20-poly1305.
|
||||
$ borg repo-create -e aes256-ocb
|
||||
# --from-borg1 is required so the other repository is opened as a Borg 1.x repository.
|
||||
$ borg repo-create --from-borg1 -e aes256-ocb
|
||||
|
||||
# 2. Check what and how much it would transfer:
|
||||
$ borg transfer --from-borg1 --dry-run
|
||||
@@ -54,7 +57,8 @@ locations and passphrases first:
|
||||
# use for all future Borg 2.0 archives.
|
||||
# The AEAD cipher does not matter (everything must be re-encrypted and
|
||||
# re-authenticated anyway); you could also choose -e chacha20-poly1305 -i blake3.
|
||||
$ borg repo-create -e aes256-ocb -i blake3
|
||||
# --from-borg1 is required so the other repository is opened as a Borg 1.x repository.
|
||||
$ borg repo-create --from-borg1 -e aes256-ocb -i blake3
|
||||
$ export CHUNKER_PARAMS="fastcdc,19,23,21,2"
|
||||
|
||||
# 2. Check what and how much it would transfer:
|
||||
@@ -81,7 +85,7 @@ On **macOS**, Borg 1.x stored key files in ``~/.config/borg/keys/``,
|
||||
but Borg 2 defaults to ``~/Library/Application Support/borg/keys/``.
|
||||
|
||||
On **Windows**, Borg 1.x used XDG-style paths (e.g. ``~/.config/borg/keys/``),
|
||||
while Borg 2 defaults to ``C:\Users\<user>\AppData\Roaming\borg\keys\``.
|
||||
while Borg 2 defaults to ``C:\Users\<user>\AppData\Local\borg\borg\keys\``.
|
||||
|
||||
If Borg 2 cannot find your key file, you have several options:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user