1BORG(1)                  Borg - Deduplicating Archiver                 BORG(1)
2
3
4

NAME

6       borg  - BorgBackup is a deduplicating backup program with optional com‐
7       pression and authenticated encryption.
8

GENERAL

10       Borg consists of a number of commands. Each command accepts a number of
11       arguments  and  options  and  interprets various environment variables.
12       The following sections will describe each command in detail.
13
14       Commands, options, parameters, paths and such are set  in  fixed-width.
15       Option  values  are  underlined. Borg has few options accepting a fixed
16       set of values (e.g. --encryption of borg_init).  Experimental  features
17       are marked with red stripes on the sides, like this paragraph.
18
19       Experimental  features  are  not  stable,  which means that they may be
20       changed in incompatible ways or even removed entirely without prior no‐
21       tice in following releases.
22
23   Positional Arguments and Options: Order matters
24       Borg only supports taking options (-s and --progress in the example) to
25       the left or right of all positional arguments (repo::archive  and  path
26       in the example), but not in between them:
27
28          borg create -s --progress repo::archive path  # good and preferred
29          borg create repo::archive path -s --progress  # also works
30          borg create -s repo::archive path --progress  # works, but ugly
31          borg create repo::archive -s --progress path  # BAD
32
33       This    is    due    to    a    problem   in   the   argparse   module:
34       https://bugs.python.org/issue15112
35
36   Repository URLs
37       Local filesystem (or locally mounted network filesystem):
38
39       /path/to/repo - filesystem path to repo directory, absolute path
40
41       path/to/repo - filesystem path to repo directory, relative path
42
43       Also, stuff like ~/path/to/repo or ~other/path/to/repo works  (this  is
44       expanded by your shell).
45
46       Note:  you  may  also prepend a file:// to a filesystem path to get URL
47       style.
48
49       Remote repositories accessed via ssh user@host:
50
51       user@host:/path/to/repo - remote repo, absolute path
52
53       ssh://user@host:port/path/to/repo - same, alternative syntax, port  can
54       be given
55
56       Remote repositories with relative paths can be given using this syntax:
57
58       user@host:path/to/repo - path relative to current directory
59
60       user@host:~/path/to/repo - path relative to user's home directory
61
62       user@host:~other/path/to/repo - path relative to other's home directory
63
64       Note:  giving user@host:/./path/to/repo or user@host:/~/path/to/repo or
65       user@host:/~other/path/to/repo is  also  supported,  but  not  required
66       here.
67
68       Remote repositories with relative paths, alternative syntax with port:
69
70       ssh://user@host:port/./path/to/repo  -  path relative to current direc‐
71       tory
72
73       ssh://user@host:port/~/path/to/repo - path relative to user's home  di‐
74       rectory
75
76       ssh://user@host:port/~other/path/to/repo  -  path  relative  to other's
77       home directory
78
79       If you frequently need the same repo URL, it is a good idea to set  the
80       BORG_REPO environment variable to set a default for the repo URL:
81
82          export BORG_REPO='ssh://user@host:port/path/to/repo'
83
84       Then  just leave away the repo URL if only a repo URL is needed and you
85       want to use the default - it will be read from BORG_REPO then.
86
87       Use :: syntax to give the repo URL when syntax requires giving a  posi‐
88       tional argument for the repo (e.g. borg mount :: /mnt).
89
90   Repository / Archive Locations
91       Many  commands  want  either  a repository (just give the repo URL, see
92       above) or an archive location, which is a repo URL  followed  by  ::ar‐
93       chive_name.
94
95       Archive names must not contain the / (slash) character. For simplicity,
96       maybe also avoid blanks or other characters that have  special  meaning
97       on  the  shell or in a filesystem (borg mount will use the archive name
98       as directory name).
99
100       If you have set BORG_REPO  (see  above)  and  an  archive  location  is
101       needed,  use  ::archive_name  -  the  repo  URL  part is then read from
102       BORG_REPO.
103
104   Logging
105       Borg writes all log output to stderr by default. But please  note  that
106       something  showing  up  on  stderr does not indicate an error condition
107       just because it is on stderr. Please check the log levels of  the  mes‐
108       sages  and  the  return  code of borg for determining error, warning or
109       success conditions.
110
111       If you want to capture the log output to a file, just redirect it:
112
113          borg create repo::archive myfiles 2>> logfile
114
115       Custom logging configurations can be implemented via BORG_LOGGING_CONF.
116
117       The log level of the builtin logging configuration defaults to WARNING.
118       This  is because we want Borg to be mostly silent and only output warn‐
119       ings, errors and critical messages, unless output has been requested by
120       supplying an option that implies output (e.g. --list or --progress).
121
122       Log levels: DEBUG < INFO < WARNING < ERROR < CRITICAL
123
124       Use --debug to set DEBUG log level - to get debug, info, warning, error
125       and critical level output.
126
127       Use --info (or -v or --verbose) to set INFO log level -  to  get  info,
128       warning, error and critical level output.
129
130       Use  --warning (default) to set WARNING log level - to get warning, er‐
131       ror and critical level output.
132
133       Use --error to set ERROR log level - to get error  and  critical  level
134       output.
135
136       Use  --critical  to set CRITICAL log level - to get critical level out‐
137       put.
138
139       While you can set misc. log levels, do not expect  that  every  command
140       will give different output on different log levels - it's just a possi‐
141       bility.
142
143       WARNING:
144          Options --critical and --error are provided for completeness,  their
145          usage is not recommended as you might miss important information.
146
147   Return codes
148       Borg can exit with the following return codes (rc):
149
150                     ┌────────────┬────────────────────────────┐
151                     │Return code │ Meaning                    │
152                     ├────────────┼────────────────────────────┤
153                     │0           │ success (logged as INFO)   │
154                     ├────────────┼────────────────────────────┤
155                     │1           │ warning (operation reached │
156                     │            │ its normal end, but  there │
157                     │            │ were   warnings   --   you │
158                     │            │ should  check   the   log, │
159                     │            │ logged as WARNING)         │
160                     ├────────────┼────────────────────────────┤
161                     │2           │ error (like a fatal error, │
162                     │            │ a local or  remote  excep‐ │
163                     │            │ tion,  the  operation  did │
164                     │            │ not reach its normal  end, │
165                     │            │ logged as ERROR)           │
166                     ├────────────┼────────────────────────────┤
167                     │128+N       │ killed  by  signal N (e.g. │
168                     │            │ 137 == kill -9)            │
169                     └────────────┴────────────────────────────┘
170
171       If you use --show-rc, the return code is also logged at  the  indicated
172       level as the last log entry.
173
174   Environment Variables
175       Borg uses some environment variables for automation:
176
177       General:
178
179              BORG_REPO
180                     When  set,  use  the value to give the default repository
181                     location. If a command needs an  archive  parameter,  you
182                     can abbreviate as ::archive. If a command needs a reposi‐
183                     tory parameter, you can either leave it away or  abbrevi‐
184                     ate as ::, if a positional parameter is required.
185
186              BORG_PASSPHRASE
187                     When set, use the value to answer the passphrase question
188                     for encrypted repositories.  It is used when a passphrase
189                     is  needed  to access an encrypted repo as well as when a
190                     new passphrase should be initially set when  initializing
191                     an encrypted repo.  See also BORG_NEW_PASSPHRASE.
192
193              BORG_PASSCOMMAND
194                     When  set, use the standard output of the command (trail‐
195                     ing newlines are stripped) to answer the passphrase ques‐
196                     tion  for  encrypted  repositories.   It  is  used when a
197                     passphrase is needed to access an encrypted repo as  well
198                     as  when  a  new  passphrase should be initially set when
199                     initializing an encrypted repo. Note that the command  is
200                     executed  without  a shell. So variables, like $HOME will
201                     work, but ~ won't.  If BORG_PASSPHRASE is  also  set,  it
202                     takes precedence.  See also BORG_NEW_PASSPHRASE.
203
204              BORG_PASSPHRASE_FD
205                     When   set,   specifies  a  file  descriptor  to  read  a
206                     passphrase from. Programs starting  borg  may  choose  to
207                     open  an  anonymous pipe and use it to pass a passphrase.
208                     This is safer than passing via  BORG_PASSPHRASE,  because
209                     on  some systems (e.g. Linux) environment can be examined
210                     by other processes.  If BORG_PASSPHRASE or  BORG_PASSCOM‐
211                     MAND are also set, they take precedence.
212
213              BORG_NEW_PASSPHRASE
214                     When set, use the value to answer the passphrase question
215                     when a new passphrase is asked  for.   This  variable  is
216                     checked  first.  If  it  is  not set, BORG_PASSPHRASE and
217                     BORG_PASSCOMMAND will also be checked.  Main usecase  for
218                     this is to fully automate borg change-passphrase.
219
220              BORG_DISPLAY_PASSPHRASE
221                     When  set,  use  the  value  to  answer  the "display the
222                     passphrase for verification" question when defining a new
223                     passphrase for encrypted repositories.
224
225              BORG_HOST_ID
226                     Borg  usually  computes  a host id from the FQDN plus the
227                     results of uuid.getnode() (which usually returns a unique
228                     id based on the MAC address of the network interface. Ex‐
229                     cept if that MAC happens to be all-zero - in that case it
230                     returns  a  random  value, which is not what we want (be‐
231                     cause it kills automatic stale lock removal).  So, if you
232                     have  a  all-zero  MAC address or other reasons to better
233                     externally control the host id, just set this environment
234                     variable to a unique value. If all your FQDNs are unique,
235                     you can just use the FQDN. If not, use fqdn@uniqueid.
236
237              BORG_LOGGING_CONF
238                     When set, use the given  filename  as  INI-style  logging
239                     configuration.   A  basic  example  conf  can be found at
240                     docs/misc/logging.conf.
241
242              BORG_RSH
243                     When set, use this command instead of ssh.  This  can  be
244                     used  to  specify  ssh options, such as a custom identity
245                     file ssh -i /path/to/private/key. See man ssh  for  other
246                     options. Using the --rsh CMD commandline option overrides
247                     the environment variable.
248
249              BORG_REMOTE_PATH
250                     When set, use the given path as borg  executable  on  the
251                     remote  (defaults  to  "borg"  if  unset).   Using  --re‐
252                     mote-path PATH commandline option overrides the  environ‐
253                     ment variable.
254
255              BORG_FILES_CACHE_SUFFIX
256                     When  set  to  a  value  at least one character long, in‐
257                     structs borg to use a specifically named  (based  on  the
258                     suffix)  alternative  files  cache.  This  can be used to
259                     avoid loading and saving cache entries for backup sources
260                     other than the current sources.
261
262              BORG_FILES_CACHE_TTL
263                     When  set to a numeric value, this determines the maximum
264                     "time to live" for the files cache entries (default: 20).
265                     The  files  cache  is used to quickly determine whether a
266                     file is unchanged.  The FAQ explains this  more  detailed
267                     in: always_chunking
268
269              BORG_SHOW_SYSINFO
270                     When  set  to no (default: yes), system information (like
271                     OS, Python version, ...)  in  exceptions  is  not  shown.
272                     Please  only  use  for  good  reasons  as it makes issues
273                     harder to analyze.
274
275              BORG_FUSE_IMPL
276                     Choose the lowlevel FUSE implementation  borg  shall  use
277                     for borg mount.  This is a comma-separated list of imple‐
278                     mentation names, they are tried in the given order, e.g.:
279
280pyfuse3,llfuse: default, first  try  to  load  pyfuse3,
281                       then try to load llfuse.
282
283llfuse,pyfuse3:  first  try to load llfuse, then try to
284                       load pyfuse3.
285
286pyfuse3: only try to load pyfuse3
287
288llfuse: only try to load llfuse
289
290none: do not try to load an implementation
291
292              BORG_SELFTEST
293                     This can be used to influence borg's builtin  self-tests.
294                     The  default  is to execute the tests at the beginning of
295                     each borg command invocation.
296
297                     BORG_SELFTEST=disabled can be  used  to  switch  off  the
298                     tests and rather save some time.  Disabling is not recom‐
299                     mended for normal borg users, but large scale borg  stor‐
300                     age providers can use this to optimize production servers
301                     after at least doing a one-time test borg (with selftests
302                     not  disabled) when installing or upgrading machines / OS
303                     / borg.
304
305              BORG_WORKAROUNDS
306                     A list of comma  separated  strings  that  trigger  work‐
307                     arounds  in borg, e.g. to work around bugs in other soft‐
308                     ware.
309
310                     Currently known strings are:
311
312                     basesyncfile
313                            Use the more simple BaseSyncFile code to avoid is‐
314                            sues with sync_file_range.  You might need this to
315                            run borg on WSL (Windows Subsystem for  Linux)  or
316                            in systemd.nspawn containers on some architectures
317                            (e.g. ARM).   Using  this  does  not  affect  data
318                            safety, but might result in a more bursty write to
319                            disk  behaviour  (not  continuously  streaming  to
320                            disk).
321
322                     retry_erofs
323                            Retry  opening a file without O_NOATIME if opening
324                            a file with O_NOATIME caused EROFS. You will  need
325                            this to make archives from volume shadow copies in
326                            WSL1 (Windows Subsystem for Linux 1).
327
328       Some automatic answerers (if set, they automatically  answer  confirma‐
329       tion questions):
330
331              BORG_UNKNOWN_UNENCRYPTED_REPO_ACCESS_IS_OK=no (or =yes)
332                     For  "Warning:  Attempting to access a previously unknown
333                     unencrypted repository"
334
335              BORG_RELOCATED_REPO_ACCESS_IS_OK=no (or =yes)
336                     For "Warning: The repository at location ...  was  previ‐
337                     ously located at ..."
338
339              BORG_CHECK_I_KNOW_WHAT_I_AM_DOING=NO (or =YES)
340                     For  "This is a potentially dangerous function..." (check
341                     --repair)
342
343              BORG_DELETE_I_KNOW_WHAT_I_AM_DOING=NO (or =YES)
344                     For "You requested to completely  DELETE  the  repository
345                     including all archives it contains:"
346
347              Note:  answers  are  case  sensitive.  setting an invalid answer
348              value might either give the default answer or ask  you  interac‐
349              tively,  depending  on  whether retries are allowed (they by de‐
350              fault are allowed). So please test  your  scripts  interactively
351              before making them a non-interactive script.
352
353       Directories and files:
354
355              BORG_BASE_DIR
356                     Defaults to $HOME or ~$USER or ~ (in that order).  If you
357                     want to move all borg-specific folders to a  custom  path
358                     at  once,  all you need to do is to modify BORG_BASE_DIR:
359                     the other paths for cache, config etc. will adapt accord‐
360                     ingly (assuming you didn't set them to a different custom
361                     value).
362
363              BORG_CACHE_DIR
364                     Defaults to $BORG_BASE_DIR/.cache/borg. If  BORG_BASE_DIR
365                     is not explicitly set while XDG env var XDG_CACHE_HOME is
366                     set, then $XDG_CACHE_HOME/borg  is  being  used  instead.
367                     This  directory contains the local cache and might need a
368                     lot of space for dealing with big repositories. Make sure
369                     you're  aware  of  the associated security aspects of the
370                     cache location: cache_security
371
372              BORG_CONFIG_DIR
373                     Defaults to $BORG_BASE_DIR/.config/borg. If BORG_BASE_DIR
374                     is  not  explicitly set while XDG env var XDG_CONFIG_HOME
375                     is set, then $XDG_CONFIG_HOME/borg is being used instead.
376                     This  directory  contains all borg configuration directo‐
377                     ries, see the FAQ for a security advisory about the  data
378                     in this directory: home_config_borg
379
380              BORG_SECURITY_DIR
381                     Defaults  to  $BORG_CONFIG_DIR/security.   This directory
382                     contains information borg uses  to  track  its  usage  of
383                     NONCES  ("numbers used once" - usually in encryption con‐
384                     text) and other security relevant data.
385
386              BORG_KEYS_DIR
387                     Defaults to $BORG_CONFIG_DIR/keys.  This  directory  con‐
388                     tains keys for encrypted repositories.
389
390              BORG_KEY_FILE
391                     When set, use the given filename as repository key file.
392
393              TMPDIR This  is  where  temporary files are stored (might need a
394                     lot of temporary space for some operations), see tempfile
395                     for details.
396
397       Building:
398
399              BORG_OPENSSL_PREFIX
400                     Adds  given  OpenSSL header file directory to the default
401                     locations (setup.py).
402
403              BORG_LIBLZ4_PREFIX
404                     Adds given prefix directory to the default locations.  If
405                     a  'include/lz4.h'  is  found Borg will be linked against
406                     the system liblz4 instead of  a  bundled  implementation.
407                     (setup.py)
408
409              BORG_LIBB2_PREFIX
410                     Adds  given prefix directory to the default locations. If
411                     a 'include/blake2.h' is found Borg will be linked against
412                     the  system  libb2  instead  of a bundled implementation.
413                     (setup.py)
414
415              BORG_LIBZSTD_PREFIX
416                     Adds given prefix directory to the default locations.  If
417                     a  'include/zstd.h'  is found Borg will be linked against
418                     the system libzstd instead of a  bundled  implementation.
419                     (setup.py)
420
421       Please note:
422
423       • Be very careful when using the "yes" sayers, the warnings with prompt
424         exist for your / your data's security/safety.
425
426       • Also be very careful when putting your passphrase into a script, make
427         sure it has appropriate file permissions (e.g.  mode 600, root:root).
428
429   File systems
430       We  strongly  recommend  against using Borg (or any other database-like
431       software) on non-journaling file systems like FAT, since it is not pos‐
432       sible  to assume any consistency in case of power failures (or a sudden
433       disconnect of an external drive or similar failures).
434
435       While Borg uses a data store that is resilient against  these  failures
436       when  used  on journaling file systems, it is not possible to guarantee
437       this with some hardware -- independent of the software used.  We  don't
438       know a list of affected hardware.
439
440       If  you are suspicious whether your Borg repository is still consistent
441       and readable after one of the failures mentioned  above  occurred,  run
442       borg check --verify-data to make sure it is consistent.
443
444       Requirements for Borg repository file systems
445
446       • Long file names
447
448       • At least three directory levels with short names
449
450       • Typically, file sizes up to a few hundred MB.  Large repositories may
451         require large files (>2 GB).
452
453       • Up to 1000 files per directory (10000  for  repositories  initialized
454         with Borg 1.0)
455
456rename(2)  /  MoveFile(Ex) should work as specified, i.e. on the same
457         file system it should be a move (not a copy) operation, and  in  case
458         of a directory it should fail if the destination exists and is not an
459         empty directory, since this is used for locking.
460
461       • Hardlinks are needed for borg_upgrade (if  --inplace  option  is  not
462         used).   Also hardlinks are used for more safe and secure file updat‐
463         ing (e.g. of the repo config file), but the code tries to  work  also
464         if hardlinks are not supported.
465
466   Units
467       To  display quantities, Borg takes care of respecting the usual conven‐
468       tions of scale. Disk sizes are displayed in decimal,  using  powers  of
469       ten  (so  kB  means  1000 bytes). For memory usage, binary prefixes are
470       used, and are indicated using the IEC binary prefixes, using powers  of
471       two (so KiB means 1024 bytes).
472
473   Date and Time
474       We format date and time conforming to ISO-8601, that is: YYYY-MM-DD and
475       HH:MM:SS (24h clock).
476
477       For more information about that, see: https://xkcd.com/1179/
478
479       Unless otherwise noted, we display local date and time.  Internally, we
480       store and process date and time as UTC.
481
482   Resource Usage
483       Borg might use a lot of resources depending on the size of the data set
484       it is dealing with.
485
486       If one uses Borg in a client/server way (with a ssh:  repository),  the
487       resource  usage occurs in part on the client and in another part on the
488       server.
489
490       If one uses Borg as a single process (with a filesystem repo), all  the
491       resource  usage  occurs  in  that  one process, so just add up client +
492       server to get the approximate resource usage.
493
494       CPU client:
495
496borg create: does chunking, hashing, compression, crypto (high
497                CPU usage)
498
499chunks cache sync: quite heavy on CPU, doing lots of hashtable
500                operations.
501
502borg extract: crypto, decompression (medium to high CPU usage)
503
504borg check: similar to extract, but depends on options given.
505
506borg prune / borg delete archive: low to medium CPU usage
507
508borg delete repo: done on the server
509
510              It won't go beyond 100% of 1 core as the code is currently  sin‐
511              gle-threaded.   Especially higher zlib and lzma compression lev‐
512              els use significant amounts of CPU cycles. Crypto might be cheap
513              on the CPU (if hardware accelerated) or expensive (if not).
514
515       CPU server:
516              It  usually  doesn't  need  much  CPU,  it  just  deals with the
517              key/value store (repository) and uses the repository  index  for
518              that.
519
520              borg  check:  the repository check computes the checksums of all
521              chunks (medium CPU usage) borg delete repo: low CPU usage
522
523       CPU (only for client/server operation):
524              When using borg in a client/server way with  a  ssh:-type  repo,
525              the  ssh  processes  used for the transport layer will need some
526              CPU on the client and on the server due to the crypto  they  are
527              doing - esp. if you are pumping big amounts of data.
528
529       Memory (RAM) client:
530              The  chunks  index  and the files index are read into memory for
531              performance reasons. Might need big amounts of memory  (see  be‐
532              low).  Compression, esp. lzma compression with high levels might
533              need substantial amounts of memory.
534
535       Memory (RAM) server:
536              The server process will load the repository index  into  memory.
537              Might  need considerable amounts of memory, but less than on the
538              client (see below).
539
540       Chunks index (client only):
541              Proportional to the amount of data chunks in your repo. Lots  of
542              chunks in your repo imply a big chunks index.  It is possible to
543              tweak the chunker params (see create options).
544
545       Files index (client only):
546              Proportional to the amount of files in your last backups. Can be
547              switched off (see create options), but next backup might be much
548              slower if you do.  The speed benefit of using the files cache is
549              proportional to file size.
550
551       Repository index (server only):
552              Proportional  to the amount of data chunks in your repo. Lots of
553              chunks in your repo imply a big repository index.  It is  possi‐
554              ble  to  tweak the chunker params (see create options) to influ‐
555              ence the amount of chunks being created.
556
557       Temporary files (client):
558              Reading data and metadata from a FUSE  mounted  repository  will
559              consume  up to the size of all deduplicated, small chunks in the
560              repository. Big chunks won't be locally cached.
561
562       Temporary files (server):
563              A non-trivial amount of data will be stored on the  remote  temp
564              directory for each client that connects to it. For some remotes,
565              this can fill the default temporary directory at /tmp. This  can
566              be  remediated  by ensuring the $TMPDIR, $TEMP, or $TMP environ‐
567              ment variable is properly set for the sshd  process.   For  some
568              OSes,  this can be done just by setting the correct value in the
569              .bashrc (or equivalent login config file for other shells), how‐
570              ever  in  other cases it may be necessary to first enable Permi‐
571              tUserEnvironment yes in your sshd_config file, then add environ‐
572              ment="TMPDIR=/my/big/tmpdir"  at  the start of the public key to
573              be used in the authorized_hosts file.
574
575       Cache files (client only):
576              Contains the chunks index and files index (plus a collection  of
577              single-  archive  chunk indexes which might need huge amounts of
578              disk space, depending on archive count and size - see FAQ  about
579              how to reduce).
580
581       Network (only for client/server operation):
582              If  your  repository is remote, all deduplicated (and optionally
583              compressed/ encrypted) data of course has to go over the connec‐
584              tion  (ssh://  repo  url).  If you use a locally mounted network
585              filesystem, additionally some copy operations used for  transac‐
586              tion support also go over the connection. If you backup multiple
587              sources to one target repository, additional traffic happens for
588              cache resynchronization.
589
590   Support for file metadata
591       Besides regular file and directory structures, Borg can preserve
592
593       • symlinks (stored as symlink, the symlink is not followed)
594
595       • special files:
596
597         • character and block device files (restored via mknod)
598
599         • FIFOs ("named pipes")
600
601         • special  file contents can be backed up in --read-special mode.  By
602           default the metadata to create them with mknod(2),  mkfifo(2)  etc.
603           is stored.
604
605       • hardlinked  regular  files,  devices, FIFOs (considering all items in
606         the same archive)
607
608       • timestamps in nanosecond precision: mtime, atime, ctime
609
610       • other timestamps: birthtime (on platforms supporting it)
611
612       • permissions:
613
614         • IDs of owning user and owning group
615
616         • names of owning user and owning group (if the IDs can be resolved)
617
618         • Unix Mode/Permissions (u/g/o permissions, suid, sgid, sticky)
619
620       On some platforms additional features are supported:
621
622                ┌─────────────────┬──────────┬───────────┬───────────┐
623                │Platform         │ ACLs [5] │ xattr [6] │ Flags [7] │
624                ├─────────────────┼──────────┼───────────┼───────────┤
625                │Linux            │ Yes      │ Yes       │ Yes [1]   │
626                ├─────────────────┼──────────┼───────────┼───────────┤
627                │Mac OS X         │ Yes      │ Yes       │ Yes (all) │
628                ├─────────────────┼──────────┼───────────┼───────────┤
629                │FreeBSD          │ Yes      │ Yes       │ Yes (all) │
630                ├─────────────────┼──────────┼───────────┼───────────┤
631                │OpenBSD          │ n/a      │ n/a       │ Yes (all) │
632                ├─────────────────┼──────────┼───────────┼───────────┤
633                │NetBSD           │ n/a      │ No [2]    │ Yes (all) │
634                ├─────────────────┼──────────┼───────────┼───────────┤
635                │Solaris and  de‐ │ No [3]   │ No [3]    │ n/a       │
636                │rivatives        │          │           │           │
637                ├─────────────────┼──────────┼───────────┼───────────┤
638                │Windows (cygwin) │ No [4]   │ No        │ No        │
639                └─────────────────┴──────────┴───────────┴───────────┘
640
641       Other  Unix-like  operating systems may work as well, but have not been
642       tested at all.
643
644       Note that most of the platform-dependent features also  depend  on  the
645       file  system.   For example, ntfs-3g on Linux isn't able to convey NTFS
646       ACLs.
647
648       [1]  Only "nodump", "immutable", "compressed"  and  "append"  are  sup‐
649            ported.  Feature request #618 for more flags.
650
651       [2]  Feature request #1332
652
653       [3]  Feature request #1337
654
655       [4]  Cygwin  tries to map NTFS ACLs to permissions with varying degrees
656            of success.
657
658       [5]  The native access control list mechanism of the OS. This  normally
659            limits  access  to  non-native ACLs. For example, NTFS ACLs aren't
660            completely accessible on Linux with ntfs-3g.
661
662       [6]  extended attributes; key-value pairs attached to  a  file,  mainly
663            used by the OS.  This includes resource forks on Mac OS X.
664
665       [7]  aka BSD flags. The Linux set of flags [1] is portable across plat‐
666            forms.  The BSDs define additional flags.
667
668            In case you are interested in more details (like formulas), please
669            see  internals. For details on the available JSON output, refer to
670            json_output.
671
672   Common options
673       All Borg commands share these options:
674
675       -h, --help
676              show this help message and exit
677
678       --critical
679              work on log level CRITICAL
680
681       --error
682              work on log level ERROR
683
684       --warning
685              work on log level WARNING (default)
686
687       --info, -v, --verbose
688              work on log level INFO
689
690       --debug
691              enable debug output, work on log level DEBUG
692
693       --debug-topic TOPIC
694              enable TOPIC debugging (can be specified  multiple  times).  The
695              logger  path  is borg.debug.<TOPIC> if TOPIC is not fully quali‐
696              fied.
697
698       -p, --progress
699              show progress information
700
701       --iec  format using IEC units (1KiB = 1024B)
702
703       --log-json
704              Output one JSON object per log line instead of formatted text.
705
706       --lock-wait SECONDS
707              wait at most SECONDS for acquiring a repository/cache lock  (de‐
708              fault: 1).
709
710       --bypass-lock
711              Bypass locking mechanism
712
713       --show-version
714              show/log the borg version
715
716       --show-rc
717              show/log the return code (rc)
718
719       --umask M
720              set umask to M (local only, default: 0077)
721
722       --remote-path PATH
723              use PATH as borg executable on the remote (default: "borg")
724
725       --remote-ratelimit RATE
726              deprecated, use --upload-ratelimit instead
727
728       --upload-ratelimit RATE
729              set network upload rate limit in kiByte/s (default: 0=unlimited)
730
731       --remote-buffer UPLOAD_BUFFER
732              deprecated, use --upload-buffer instead
733
734       --upload-buffer UPLOAD_BUFFER
735              set network upload buffer size in MiB. (default: 0=no buffer)
736
737       --consider-part-files
738              treat part files like normal files (e.g. to list/extract them)
739
740       --debug-profile FILE
741              Write  execution profile in Borg format into FILE. For local use
742              a Python-compatible file can be generated by suffixing FILE with
743              ".pyprof".
744
745       --rsh RSH
746              Use  this  command  to  connect to the 'borg serve' process (de‐
747              fault: 'ssh')
748
749       Option --bypass-lock allows you to access the repository while  bypass‐
750       ing  borg's  locking mechanism. This is necessary if your repository is
751       on a read-only storage where you don't have write permissions or  capa‐
752       bilities  and therefore cannot create a lock. Examples are repositories
753       stored on a Bluray disc or a read-only network storage. Avoid this  op‐
754       tion  if  you  are  able to use locks as that is the safer way; see the
755       warning below.
756
757       WARNING:
758          If you do use --bypass-lock, you are responsible to ensure  that  no
759          other borg instances have write access to the repository. Otherwise,
760          you might experience errors and read broken data if changes to  that
761          repository are being made at the same time.
762
763   Examples
764          # Create an archive and log: borg version, files list, return code
765          $ borg create --show-version --list --show-rc /path/to/repo::my-files files
766

BORG INIT

768          borg [common options] init [options] [REPOSITORY]
769
770   Description
771       This  command  initializes  an  empty  repository.  A  repository  is a
772       filesystem directory containing the deduplicated data from zero or more
773       archives.
774
775   Encryption mode TLDR
776       The  encryption mode can only be configured when creating a new reposi‐
777       tory - you can neither configure it on a per-archive basis  nor  change
778       the encryption mode of an existing repository.
779
780       Use repokey:
781
782          borg init --encryption repokey /path/to/repo
783
784       Or  repokey-blake2 depending on which is faster on your client machines
785       (see below):
786
787          borg init --encryption repokey-blake2 /path/to/repo
788
789       Borg will:
790
791       1. Ask you to come up with a passphrase.
792
793       2. Create a borg key (which contains 3 random secrets. See key_files).
794
795       3. Encrypt the key with your passphrase.
796
797       4. Store the encrypted borg key inside the repository directory (in the
798          repo  config).   This  is  why  it  is  essential  to  use  a secure
799          passphrase.
800
801       5. Encrypt and sign your backups to  prevent  anyone  from  reading  or
802          forging  them unless they have the key and know the passphrase. Make
803          sure to keep a backup of your key outside the repository  -  do  not
804          lock  yourself  out  by  "leaving  your  keys  inside your car" (see
805          borg_key_export).  For remote backups the encryption is done locally
806          -  the  remote  machine never sees your passphrase, your unencrypted
807          key or your unencrypted files.  Chunking and id generation are  also
808          based on your key to improve your privacy.
809
810       6. Use the key when extracting files to decrypt them and to verify that
811          the contents of the backups have  not  been  accidentally  or  mali‐
812          ciously altered.
813
814   Picking a passphrase
815       Make sure you use a good passphrase. Not too short, not too simple. The
816       real encryption / decryption key is encrypted with  /  locked  by  your
817       passphrase.   If  an attacker gets your key, he can't unlock and use it
818       without knowing the passphrase.
819
820       Be careful with special or non-ascii characters in your passphrase:
821
822       • Borg processes the passphrase as unicode (and encodes it  as  utf-8),
823         so  it does not have problems dealing with even the strangest charac‐
824         ters.
825
826       • BUT: that does not necessarily apply to your OS / VM / keyboard  con‐
827         figuration.
828
829       So  better  use a long passphrase made from simple ascii chars than one
830       that includes non-ascii stuff or characters that are hard/impossible to
831       enter on a different keyboard layout.
832
833       You can change your passphrase for existing repos at any time, it won't
834       affect the encryption/decryption key or other secrets.
835
836   More encryption modes
837       Only use --encryption none if you are OK with anyone who has access  to
838       your  repository  being able to read your backups and tamper with their
839       contents without you noticing.
840
841       If you want "passphrase and having-the-key" security, use  --encryption
842       keyfile.   The  key  will  be stored in your home directory (in ~/.con‐
843       fig/borg/keys).
844
845       If you do not want to encrypt the contents of your backups,  but  still
846       want to detect malicious tampering use --encryption authenticated.
847
848       If  BLAKE2b  is  faster than SHA-256 on your hardware, use --encryption
849       authenticated-blake2, --encryption repokey-blake2 or --encryption  key‐
850       file-blake2. Note: for remote backups the hashing is done on your local
851       machine.
852
853         ┌─────────┬──────────────────┬──────────────────┬──────────────────┐
854         │Hash/MAC │ Not encrypted no │ Not   encrypted, │ Encrypted  (AEAD │
855         │         │ auth             │ but    authenti‐ │ w/ AES) and  au‐ │
856         │         │                  │ cated            │ thenticated      │
857         ├─────────┼──────────────────┼──────────────────┼──────────────────┤
858         │SHA-256  │ none             │ authenticated    │ repokey keyfile  │
859         └─────────┴──────────────────┴──────────────────┴──────────────────┘
860
861
862         │BLAKE2b  │ n/a              │ authenti‐repokey-blake2
863         │         │                  │ cated-blake2keyfile-blake2
864         └─────────┴──────────────────┴──────────────────┴──────────────────┘
865
866       Modes  marked  like this in the above table are new in Borg 1.1 and are
867       not backwards-compatible with Borg 1.0.x.
868
869       On modern Intel/AMD CPUs (except very cheap ones), AES is usually hard‐
870       ware-accelerated.   BLAKE2b  is  faster than SHA256 on Intel/AMD 64-bit
871       CPUs (except AMD Ryzen and future  CPUs  with  SHA  extensions),  which
872       makes authenticated-blake2 faster than none and authenticated.
873
874       On modern ARM CPUs, NEON provides hardware acceleration for SHA256 mak‐
875       ing it faster than BLAKE2b-256 there. NEON accelerates AES as well.
876
877       Hardware acceleration is always used automatically when available.
878
879       repokey and keyfile use AES-CTR-256 for encryption and HMAC-SHA256  for
880       authentication  in an encrypt-then-MAC (EtM) construction. The chunk ID
881       hash is HMAC-SHA256 as well (with a separate  key).   These  modes  are
882       compatible with Borg 1.0.x.
883
884       repokey-blake2  and  keyfile-blake2  are  also authenticated encryption
885       modes, but use BLAKE2b-256 instead of HMAC-SHA256  for  authentication.
886       The chunk ID hash is a keyed BLAKE2b-256 hash.  These modes are new and
887       not compatible with Borg 1.0.x.
888
889       authenticated mode uses no  encryption,  but  authenticates  repository
890       contents  through  the same HMAC-SHA256 hash as the repokey and keyfile
891       modes (it uses it as the chunk ID hash). The key  is  stored  like  re‐
892       pokey.  This mode is new and not compatible with Borg 1.0.x.
893
894       authenticated-blake2   is   like  authenticated,  but  uses  the  keyed
895       BLAKE2b-256 hash from the other blake2 modes.  This mode is new and not
896       compatible with Borg 1.0.x.
897
898       none  mode  uses no encryption and no authentication. It uses SHA256 as
899       chunk ID hash. This mode is not recommended, you should rather consider
900       using  an  authenticated or authenticated/encrypted mode. This mode has
901       possible denial-of-service issues when running borg create on  contents
902       controlled  by  an attacker.  Use it only for new repositories where no
903       encryption is wanted and when compatibility with 1.0.x is important. If
904       compatibility  with 1.0.x is not important, use authenticated-blake2 or
905       authenticated instead.  This mode is compatible with Borg 1.0.x.
906
907   Examples
908          # Local repository, repokey encryption, BLAKE2b (often faster, since Borg 1.1)
909          $ borg init --encryption=repokey-blake2 /path/to/repo
910
911          # Local repository (no encryption)
912          $ borg init --encryption=none /path/to/repo
913
914          # Remote repository (accesses a remote borg via ssh)
915          # repokey: stores the (encrypted) key into <REPO_DIR>/config
916          $ borg init --encryption=repokey-blake2 user@hostname:backup
917
918          # Remote repository (accesses a remote borg via ssh)
919          # keyfile: stores the (encrypted) key into ~/.config/borg/keys/
920          $ borg init --encryption=keyfile user@hostname:backup
921

BORG CREATE

923          borg [common options] create [options] ARCHIVE [PATH...]
924
925   Description
926       This command creates a backup archive containing all files found  while
927       recursively  traversing all paths specified. Paths are added to the ar‐
928       chive as they are given, that means if relative paths are desired,  the
929       command has to be run from the correct directory.
930
931       When  giving  '-'  as path, borg will read data from standard input and
932       create a file 'stdin' in the created archive from that  data.  In  some
933       cases it's more appropriate to use --content-from-command, however. See
934       section Reading from stdin below for details.
935
936       The archive will consume almost no disk space for  files  or  parts  of
937       files that have already been stored in other archives.
938
939       The  archive  name needs to be unique. It must not end in '.checkpoint'
940       or '.checkpoint.N' (with N being a number),  because  these  names  are
941       used for checkpoints and treated in special ways.
942
943       In  the  archive  name,  you may use the following placeholders: {now},
944       {utcnow}, {fqdn}, {hostname}, {user} and some others.
945
946       Backup speed is increased by not reprocessing files  that  are  already
947       part of existing archives and weren't modified. The detection of unmod‐
948       ified files is done by comparing multiple  file  metadata  values  with
949       previous values kept in the files cache.
950
951       This   comparison   can   operate   in  different  modes  as  given  by
952       --files-cache:
953
954       • ctime,size,inode (default)
955
956       • mtime,size,inode (default  behaviour  of  borg  versions  older  than
957         1.1.0rc4)
958
959       • ctime,size (ignore the inode number)
960
961       • mtime,size (ignore the inode number)
962
963       • rechunk,ctime  (all  files  are  considered modified - rechunk, cache
964         ctime)
965
966       • rechunk,mtime (all files are considered  modified  -  rechunk,  cache
967         mtime)
968
969       • disabled  (disable  the  files cache, all files considered modified -
970         rechunk)
971
972       inode number: better safety, but often unstable on network filesystems
973
974       Normally, detecting file modifications will take inode information into
975       consideration  to  improve  the  reliability  of file change detection.
976       This is problematic for files located on sshfs and similar network file
977       systems  which do not provide stable inode numbers, such files will al‐
978       ways be considered modified. You can use modes without  inode  in  this
979       case  to improve performance, but reliability of change detection might
980       be reduced.
981
982       ctime vs. mtime: safety vs. speed
983
984       • ctime is a rather safe way to detect changes to a file (metadata  and
985         contents)  as  it can not be set from userspace. But, a metadata-only
986         change will already update the ctime, so there might be some unneces‐
987         sary  chunking/hashing even without content changes. Some filesystems
988         do not support ctime (change time).  E.g. doing a chown or chmod to a
989         file will change its ctime.
990
991       • mtime  usually  works and only updates if file contents were changed.
992         But mtime can be arbitrarily set from userspace, e.g.  to  set  mtime
993         back  to the same value it had before a content change happened. This
994         can be used maliciously as well as  well-meant,  but  in  both  cases
995         mtime based cache modes can be problematic.
996
997       The  mount  points of filesystems or filesystem snapshots should be the
998       same for every creation of a new archive to ensure fast operation. This
999       is  because  the  file  cache  that  is used to determine changed files
1000       quickly uses absolute filenames.  If this  is  not  possible,  consider
1001       creating a bind mount to a stable location.
1002
1003       The  --progress  option shows (from left to right) Original, Compressed
1004       and Deduplicated (O, C and D, respectively), then the Number  of  files
1005       (N) processed so far, followed by the currently processed path.
1006
1007       When  using  --stats,  you will get some statistics about how much data
1008       was added - the "This Archive" deduplicated size there is  most  inter‐
1009       esting  as that is how much your repository will grow. Please note that
1010       the "All archives" stats refer to the state after creation.  Also,  the
1011       --stats  and  --dry-run options are mutually exclusive because the data
1012       is not actually compressed and deduplicated during a dry run.
1013
1014       For more help on include/exclude patterns, see the  borg_patterns  com‐
1015       mand output.
1016
1017       For  more  help on placeholders, see the borg_placeholders command out‐
1018       put.
1019
1020       The --exclude patterns are not like tar. In tar --exclude .bundler/gems
1021       will  exclude  foo/.bundler/gems.  In borg it will not, you need to use
1022       --exclude '*/.bundler/gems' to get the same effect.
1023
1024       In addition to using --exclude patterns, it is possible  to  use  --ex‐
1025       clude-if-present  to  specify  the  name of a filesystem object (e.g. a
1026       file or folder name) which, when contained within another folder,  will
1027       prevent  the  containing  folder from being backed up.  By default, the
1028       containing folder and all of its contents  will  be  omitted  from  the
1029       backup.  If, however, you wish to only include the objects specified by
1030       --exclude-if-present in your backup, and not include any other contents
1031       of  the  containing  folder,  this  can  be  enabled  through using the
1032       --keep-exclude-tags option.
1033
1034       The -x or  --one-file-system  option  excludes  directories,  that  are
1035       mountpoints  (and  everything in them).  It detects mountpoints by com‐
1036       paring the device number from the output of stat() of the directory and
1037       its  parent  directory. Specifically, it excludes directories for which
1038       stat() reports a device number different  from  the  device  number  of
1039       their parent. Be aware that in Linux (and possibly elsewhere) there are
1040       directories with device number different from their parent,  which  the
1041       kernel  does  not  consider a mountpoint and also the other way around.
1042       Examples are bind mounts (possibly same device  number,  but  always  a
1043       mountpoint) and ALL subvolumes of a btrfs (different device number from
1044       parent  but  not  necessarily  a  mountpoint).  Therefore  when   using
1045       --one-file-system, one should make doubly sure that the backup works as
1046       intended especially when using btrfs. This is even more  important,  if
1047       the  btrfs  layout was created by someone else, e.g. a distribution in‐
1048       staller.
1049
1050   Item flags
1051       --list outputs a list of all files, directories and other  file  system
1052       items  it  considered  (no  matter  whether they had content changes or
1053       not). For each item, it prefixes a single-letter  flag  that  indicates
1054       type and/or status of the item.
1055
1056       If  you  are  interested  only in a subset of that output, you can give
1057       e.g.  --filter=AME and it will only show regular files with A, M  or  E
1058       status (see below).
1059
1060       A  uppercase character represents the status of a regular file relative
1061       to the "files" cache (not relative to the repo -- this is an  issue  if
1062       the  files  cache  is not used). Metadata is stored in any case and for
1063       'A' and 'M' also new data chunks are stored. For 'U'  all  data  chunks
1064       refer to already existing chunks.
1065
1066       • 'A' = regular file, added (see also a_status_oddity in the FAQ)
1067
1068       • 'M' = regular file, modified
1069
1070       • 'U' = regular file, unchanged
1071
1072       • 'C' = regular file, it changed while we backed it up
1073
1074       • 'E'  =  regular  file, an error happened while accessing/reading this
1075         file
1076
1077       A lowercase character means a file type other than a regular file, borg
1078       usually just stores their metadata:
1079
1080       • 'd' = directory
1081
1082       • 'b' = block device
1083
1084       • 'c' = char device
1085
1086       • 'h' = regular file, hardlink (to already seen inodes)
1087
1088       • 's' = symlink
1089
1090       • 'f' = fifo
1091
1092       Other flags used include:
1093
1094       • 'i' = backup data was read from standard input (stdin)
1095
1096       • '-' = dry run, item was not backed up
1097
1098       • 'x' = excluded, item was not backed up
1099
1100       • '?'  =  missing  status  code (if you see this, please file a bug re‐
1101         port!)
1102
1103   Reading from stdin
1104       There are two methods to read from stdin. Either specify - as path  and
1105       pipe directly to borg:
1106
1107          backup-vm --id myvm --stdout | borg create REPO::ARCHIVE -
1108
1109       Or  use --content-from-command to have Borg manage the execution of the
1110       command and piping. If you do so, the first  PATH  argument  is  inter‐
1111       preted  as  command to execute and any further arguments are treated as
1112       arguments to the command:
1113
1114          borg create --content-from-command REPO::ARCHIVE -- backup-vm --id myvm --stdout
1115
1116       -- is used to ensure --id and --stdout are not considered arguments  to
1117       borg but rather backup-vm.
1118
1119       The  difference  between the two approaches is that piping to borg cre‐
1120       ates an archive even if the command piping to borg exits with  a  fail‐
1121       ure.  In  this  case, one can end up with truncated output being backed
1122       up. Using --content-from-command, in contrast, borg  is  guaranteed  to
1123       fail  without  creating an archive should the command fail. The command
1124       is considered failed when it returned a non-zero exit code.
1125
1126       Reading from stdin yields just a stream of data without  file  metadata
1127       associated  with it, and the files cache is not needed at all. So it is
1128       safe to disable it via --files-cache disabled and speed up backup  cre‐
1129       ation a bit.
1130
1131       By  default,  the  content  read  from stdin is stored in a file called
1132       'stdin'.  Use --stdin-name to change the name.
1133
1134   Examples
1135          # Backup ~/Documents into an archive named "my-documents"
1136          $ borg create /path/to/repo::my-documents ~/Documents
1137
1138          # same, but list all files as we process them
1139          $ borg create --list /path/to/repo::my-documents ~/Documents
1140
1141          # Backup ~/Documents and ~/src but exclude pyc files
1142          $ borg create /path/to/repo::my-files \
1143              ~/Documents                       \
1144              ~/src                             \
1145              --exclude '*.pyc'
1146
1147          # Backup home directories excluding image thumbnails (i.e. only
1148          # /home/<one directory>/.thumbnails is excluded, not /home/*/*/.thumbnails etc.)
1149          $ borg create /path/to/repo::my-files /home \
1150              --exclude 'sh:home/*/.thumbnails'
1151
1152          # Backup the root filesystem into an archive named "root-YYYY-MM-DD"
1153          # use zlib compression (good, but slow) - default is lz4 (fast, low compression ratio)
1154          $ borg create -C zlib,6 --one-file-system /path/to/repo::root-{now:%Y-%m-%d} /
1155
1156          # Backup onto a remote host ("push" style) via ssh to port 2222,
1157          # logging in as user "borg" and storing into /path/to/repo
1158          $ borg create ssh://borg@backup.example.org:2222/path/to/repo::{fqdn}-root-{now} /
1159
1160          # Backup a remote host locally ("pull" style) using sshfs
1161          $ mkdir sshfs-mount
1162          $ sshfs root@example.com:/ sshfs-mount
1163          $ cd sshfs-mount
1164          $ borg create /path/to/repo::example.com-root-{now:%Y-%m-%d} .
1165          $ cd ..
1166          $ fusermount -u sshfs-mount
1167
1168          # Make a big effort in fine granular deduplication (big chunk management
1169          # overhead, needs a lot of RAM and disk space, see formula in internals
1170          # docs - same parameters as borg < 1.0 or attic):
1171          $ borg create --chunker-params buzhash,10,23,16,4095 /path/to/repo::small /smallstuff
1172
1173          # Backup a raw device (must not be active/in use/mounted at that time)
1174          $ borg create --read-special --chunker-params fixed,4194304 /path/to/repo::my-sdx /dev/sdX
1175
1176          # Backup a sparse disk image (must not be active/in use/mounted at that time)
1177          $ borg create --sparse --chunker-params fixed,4194304 /path/to/repo::my-disk my-disk.raw
1178
1179          # No compression (none)
1180          $ borg create --compression none /path/to/repo::arch ~
1181
1182          # Super fast, low compression (lz4, default)
1183          $ borg create /path/to/repo::arch ~
1184
1185          # Less fast, higher compression (zlib, N = 0..9)
1186          $ borg create --compression zlib,N /path/to/repo::arch ~
1187
1188          # Even slower, even higher compression (lzma, N = 0..9)
1189          $ borg create --compression lzma,N /path/to/repo::arch ~
1190
1191          # Only compress compressible data with lzma,N (N = 0..9)
1192          $ borg create --compression auto,lzma,N /path/to/repo::arch ~
1193
1194          # Use short hostname, user name and current time in archive name
1195          $ borg create /path/to/repo::{hostname}-{user}-{now} ~
1196          # Similar, use the same datetime format that is default as of borg 1.1
1197          $ borg create /path/to/repo::{hostname}-{user}-{now:%Y-%m-%dT%H:%M:%S} ~
1198          # As above, but add nanoseconds
1199          $ borg create /path/to/repo::{hostname}-{user}-{now:%Y-%m-%dT%H:%M:%S.%f} ~
1200
1201          # Backing up relative paths by moving into the correct directory first
1202          $ cd /home/user/Documents
1203          # The root directory of the archive will be "projectA"
1204          $ borg create /path/to/repo::daily-projectA-{now:%Y-%m-%d} projectA
1205
1206          # Use external command to determine files to archive
1207          # Use --paths-from-stdin with find to only backup files less than 1MB in size
1208          $ find ~ -size -1000k | borg create --paths-from-stdin /path/to/repo::small-files-only
1209          # Use --paths-from-command with find to only backup files from a given user
1210          $ borg create --paths-from-command /path/to/repo::joes-files -- find /srv/samba/shared -user joe
1211          # Use --paths-from-stdin with --paths-delimiter (for example, for filenames with newlines in them)
1212          $ find ~ -size -1000k -print0 | borg create \
1213              --paths-from-stdin \
1214              --paths-delimiter "\0" \
1215              /path/to/repo::smallfiles-handle-newline
1216

BORG EXTRACT

1218          borg [common options] extract [options] ARCHIVE [PATH...]
1219
1220   Description
1221       This command extracts the contents of an archive. By default the entire
1222       archive  is  extracted but a subset of files and directories can be se‐
1223       lected by passing a list of PATHs as arguments. The file selection  can
1224       further be restricted by using the --exclude option.
1225
1226       For  more  help on include/exclude patterns, see the borg_patterns com‐
1227       mand output.
1228
1229       By using --dry-run, you can do all  extraction  steps  except  actually
1230       writing  the  output  data:  reading  metadata and data chunks from the
1231       repo, checking the hash/hmac, decrypting, decompressing.
1232
1233       --progress can be slower than no progress display, since it  makes  one
1234       additional pass over the archive metadata.
1235
1236       NOTE:
1237          Currently,  extract always writes into the current working directory
1238          ("."), so make sure you cd to the right place  before  calling  borg
1239          extract.
1240
1241          When parent directories are not extracted (because of using file/di‐
1242          rectory selection or any other reason), borg can not restore  parent
1243          directories' metadata, e.g. owner, group, permission, etc.
1244
1245   Examples
1246          # Extract entire archive
1247          $ borg extract /path/to/repo::my-files
1248
1249          # Extract entire archive and list files while processing
1250          $ borg extract --list /path/to/repo::my-files
1251
1252          # Verify whether an archive could be successfully extracted, but do not write files to disk
1253          $ borg extract --dry-run /path/to/repo::my-files
1254
1255          # Extract the "src" directory
1256          $ borg extract /path/to/repo::my-files home/USERNAME/src
1257
1258          # Extract the "src" directory but exclude object files
1259          $ borg extract /path/to/repo::my-files home/USERNAME/src --exclude '*.o'
1260
1261          # Restore a raw device (must not be active/in use/mounted at that time)
1262          $ borg extract --stdout /path/to/repo::my-sdx | dd of=/dev/sdx bs=10M
1263

BORG CHECK

1265          borg [common options] check [options] [REPOSITORY_OR_ARCHIVE]
1266
1267   Description
1268       The check command verifies the consistency of a repository and the cor‐
1269       responding archives.
1270
1271       check --repair is a potentially dangerous function and  might  lead  to
1272       data  loss (for kinds of corruption it is not capable of dealing with).
1273       BE VERY CAREFUL!
1274
1275       Pursuant to the previous warning it is also highly recommended to  test
1276       the reliability of the hardware running this software with stress test‐
1277       ing software such as memory testers. Unreliable hardware can also  lead
1278       to data loss especially when this command is run in repair mode.
1279
1280       First, the underlying repository data files are checked:
1281
1282       • For all segments, the segment magic header is checked.
1283
1284       • For  all  objects  stored in the segments, all metadata (e.g. CRC and
1285         size) and all data is read. The read data is checked by size and CRC.
1286         Bit  rot  and  other  types of accidental damage can be detected this
1287         way.
1288
1289       • In repair mode, if an integrity error is detected in a  segment,  try
1290         to recover as many objects from the segment as possible.
1291
1292       • In  repair mode, make sure that the index is consistent with the data
1293         stored in the segments.
1294
1295       • If checking a remote repo via ssh:, the repo check is executed on the
1296         server without causing significant network traffic.
1297
1298       • The repository check can be skipped using the --archives-only option.
1299
1300       • A repository check can be time consuming. Partial checks are possible
1301         with the --max-duration option.
1302
1303       Second, the consistency and correctness of the archive metadata is ver‐
1304       ified:
1305
1306       • Is  the  repo  manifest  present?  If not, it is rebuilt from archive
1307         metadata chunks (this requires reading and decrypting of all metadata
1308         and data).
1309
1310       • Check  if  archive  metadata chunk is present; if not, remove archive
1311         from manifest.
1312
1313       • For all files (items) in the archive, for all  chunks  referenced  by
1314         these files, check if chunk is present. In repair mode, if a chunk is
1315         not present, replace it with a same-size replacement chunk of zeroes.
1316         If  a  previously  lost chunk reappears (e.g. via a later backup), in
1317         repair mode the all-zero replacement chunk will be  replaced  by  the
1318         correct  chunk.  This  requires reading of archive and file metadata,
1319         but not data.
1320
1321       • In repair mode, when all the archives were checked,  orphaned  chunks
1322         are  deleted  from  the  repo. One cause of orphaned chunks are input
1323         file related errors  (like  read  errors)  in  the  archive  creation
1324         process.
1325
1326       • In verify-data mode, a complete cryptographic verification of the ar‐
1327         chive data integrity is  performed.  This  conflicts  with  --reposi‐
1328         tory-only as this mode only makes sense if the archive checks are en‐
1329         abled. The full details of this mode are documented below.
1330
1331       • If checking a remote repo via ssh:, the archive check is executed  on
1332         the client machine because it requires decryption, and this is always
1333         done client-side as key access is needed.
1334
1335       • The archive checks can be time consuming; they can be  skipped  using
1336         the --repository-only option.
1337
1338       The  --max-duration  option can be used to split a long-running reposi‐
1339       tory check into multiple partial checks. After the given number of sec‐
1340       onds  the  check  is  interrupted. The next partial check will continue
1341       where the previous one stopped, until the complete repository has  been
1342       checked.  Example: Assuming a complete check took 7 hours, then running
1343       a daily check with --max-duration=3600 (1 hour) resulted  in  one  com‐
1344       pleted check per week.
1345
1346       Attention:  A  partial  --repository-only  check  can  only do way less
1347       checking than a full  --repository-only  check:  only  the  non-crypto‐
1348       graphic  checksum checks on segment file entries are done, while a full
1349       --repository-only check would also do a repo index  check.   A  partial
1350       check  cannot  be combined with the --repair option. Partial checks may
1351       therefore be useful only with very  large  repositories  where  a  full
1352       check would take too long.  Doing a full repository check aborts a par‐
1353       tial check; the next partial check will restart from the beginning.
1354
1355       The --verify-data option will perform a full integrity verification (as
1356       opposed  to  checking  the  CRC32  of the segment) of data, which means
1357       reading the data from the repository, decrypting and decompressing  it.
1358       This  is  a  cryptographic verification, which will detect (accidental)
1359       corruption. For encrypted repositories it is tamper-resistant as  well,
1360       unless the attacker has access to the keys. It is also very slow.
1361

BORG RENAME

1363          borg [common options] rename [options] ARCHIVE NEWNAME
1364
1365   Description
1366       This command renames an archive in the repository.
1367
1368       This results in a different archive ID.
1369
1370   Examples
1371          $ borg create /path/to/repo::archivename ~
1372          $ borg list /path/to/repo
1373          archivename                          Mon, 2016-02-15 19:50:19
1374
1375          $ borg rename /path/to/repo::archivename newname
1376          $ borg list /path/to/repo
1377          newname                              Mon, 2016-02-15 19:50:19
1378

BORG LIST

1380          borg [common options] list [options] [REPOSITORY_OR_ARCHIVE] [PATH...]
1381
1382   Description
1383       This command lists the contents of a repository or an archive.
1384
1385       For  more  help on include/exclude patterns, see the borg_patterns com‐
1386       mand output.
1387
1388   The FORMAT specifier syntax
1389       The --format option uses python's format string syntax.
1390
1391       Examples:
1392
1393          $ borg list --format '{archive}{NL}' /path/to/repo
1394          ArchiveFoo
1395          ArchiveBar
1396          ...
1397
1398          # {VAR:NUMBER} - pad to NUMBER columns.
1399          # Strings are left-aligned, numbers are right-aligned.
1400          # Note: time columns except ``isomtime``, ``isoctime`` and ``isoatime`` cannot be padded.
1401          $ borg list --format '{archive:36} {time} [{id}]{NL}' /path/to/repo
1402          ArchiveFoo                           Thu, 2021-12-09 10:22:28 [0b8e9a312bef3f2f6e2d0fc110c196827786c15eba0188738e81697a7fa3b274]
1403          $ borg list --format '{mode} {user:6} {group:6} {size:8} {mtime} {path}{extra}{NL}' /path/to/repo::ArchiveFoo
1404          -rw-rw-r-- user   user       1024 Thu, 2021-12-09 10:22:17 file-foo
1405          ...
1406
1407          # {VAR:<NUMBER} - pad to NUMBER columns left-aligned.
1408          # {VAR:>NUMBER} - pad to NUMBER columns right-aligned.
1409          $ borg list --format '{mode} {user:>6} {group:>6} {size:<8} {mtime} {path}{extra}{NL}' /path/to/repo::ArchiveFoo
1410          -rw-rw-r--   user   user 1024     Thu, 2021-12-09 10:22:17 file-foo
1411          ...
1412
1413       The following keys are always available:
1414
1415       • NEWLINE: OS dependent line separator
1416
1417       • NL: alias of NEWLINE
1418
1419       • NUL: NUL character for creating print0 / xargs -0  like  output,  see
1420         barchive and bpath keys below
1421
1422       • SPACE
1423
1424       • TAB
1425
1426       • CR
1427
1428       • LF
1429
1430       Keys available only when listing archives in a repository:
1431
1432       • archive:  archive name interpreted as text (might be missing non-text
1433         characters, see barchive)
1434
1435       • name: alias of "archive"
1436
1437       • barchive: verbatim archive name, can contain any character except NUL
1438
1439       • comment: archive  comment  interpreted  as  text  (might  be  missing
1440         non-text characters, see bcomment)
1441
1442       • bcomment:  verbatim archive comment, can contain any character except
1443         NUL
1444
1445       • id: internal ID of the archive
1446
1447       • start: time (start) of creation of the archive
1448
1449       • time: alias of "start"
1450
1451       • end: time (end) of creation of the archive
1452
1453       • command_line: command line which was used to create the archive
1454
1455       • hostname: hostname of host on which this archive was created
1456
1457       • username: username of user who created this archive
1458
1459       Keys available only when listing files in an archive:
1460
1461       • type
1462
1463       • mode
1464
1465       • uid
1466
1467       • gid
1468
1469       • user
1470
1471       • group
1472
1473       • path: path interpreted as text (might be missing non-text characters,
1474         see bpath)
1475
1476       • bpath: verbatim POSIX path, can contain any character except NUL
1477
1478       • source: link target for links (identical to linktarget)
1479
1480       • linktarget
1481
1482       • flags
1483
1484       • size
1485
1486       • csize: compressed size
1487
1488       • dsize: deduplicated size
1489
1490       • dcsize: deduplicated compressed size
1491
1492       • num_chunks: number of chunks in this file
1493
1494       • unique_chunks: number of unique chunks in this file
1495
1496       • mtime
1497
1498       • ctime
1499
1500       • atime
1501
1502       • isomtime
1503
1504       • isoctime
1505
1506       • isoatime
1507
1508       • blake2b
1509
1510       • blake2s
1511
1512       • md5
1513
1514       • sha1
1515
1516       • sha224
1517
1518       • sha256
1519
1520       • sha384
1521
1522       • sha3_224
1523
1524       • sha3_256
1525
1526       • sha3_384
1527
1528       • sha3_512
1529
1530       • sha512
1531
1532       • xxh64: XXH64 checksum of this file (note: this is NOT a cryptographic
1533         hash!)
1534
1535       • archiveid
1536
1537       • archivename
1538
1539       • extra: prepends {source} with " -> " for soft links and " link  to  "
1540         for hard links
1541
1542       • health:  either "healthy" (file ok) or "broken" (if file has all-zero
1543         replacement chunks)
1544
1545   Examples
1546          $ borg list /path/to/repo
1547          Monday                               Mon, 2016-02-15 19:15:11
1548          repo                                 Mon, 2016-02-15 19:26:54
1549          root-2016-02-15                      Mon, 2016-02-15 19:36:29
1550          newname                              Mon, 2016-02-15 19:50:19
1551          ...
1552
1553          $ borg list /path/to/repo::root-2016-02-15
1554          drwxr-xr-x root   root          0 Mon, 2016-02-15 17:44:27 .
1555          drwxrwxr-x root   root          0 Mon, 2016-02-15 19:04:49 bin
1556          -rwxr-xr-x root   root    1029624 Thu, 2014-11-13 00:08:51 bin/bash
1557          lrwxrwxrwx root   root          0 Fri, 2015-03-27 20:24:26 bin/bzcmp -> bzdiff
1558          -rwxr-xr-x root   root       2140 Fri, 2015-03-27 20:24:22 bin/bzdiff
1559          ...
1560
1561          $ borg list /path/to/repo::root-2016-02-15 --pattern "- bin/ba*"
1562          drwxr-xr-x root   root          0 Mon, 2016-02-15 17:44:27 .
1563          drwxrwxr-x root   root          0 Mon, 2016-02-15 19:04:49 bin
1564          lrwxrwxrwx root   root          0 Fri, 2015-03-27 20:24:26 bin/bzcmp -> bzdiff
1565          -rwxr-xr-x root   root       2140 Fri, 2015-03-27 20:24:22 bin/bzdiff
1566          ...
1567
1568          $ borg list /path/to/repo::archiveA --format="{mode} {user:6} {group:6} {size:8d} {isomtime} {path}{extra}{NEWLINE}"
1569          drwxrwxr-x user   user          0 Sun, 2015-02-01 11:00:00 .
1570          drwxrwxr-x user   user          0 Sun, 2015-02-01 11:00:00 code
1571          drwxrwxr-x user   user          0 Sun, 2015-02-01 11:00:00 code/myproject
1572          -rw-rw-r-- user   user    1416192 Sun, 2015-02-01 11:00:00 code/myproject/file.ext
1573          -rw-rw-r-- user   user    1416192 Sun, 2015-02-01 11:00:00 code/myproject/file.text
1574          ...
1575
1576          $ borg list /path/to/repo/::archiveA --pattern 're:\.ext$'
1577          -rw-rw-r-- user   user    1416192 Sun, 2015-02-01 11:00:00 code/myproject/file.ext
1578          ...
1579
1580          $ borg list /path/to/repo/::archiveA --pattern 're:.ext$'
1581          -rw-rw-r-- user   user    1416192 Sun, 2015-02-01 11:00:00 code/myproject/file.ext
1582          -rw-rw-r-- user   user    1416192 Sun, 2015-02-01 11:00:00 code/myproject/file.text
1583          ...
1584

BORG DIFF

1586          borg [common options] diff [options] REPO::ARCHIVE1 ARCHIVE2 [PATH...]
1587
1588   Description
1589       This command finds differences (file contents, user/group/mode) between
1590       archives.
1591
1592       A  repository  location  and  an  archive  name  must  be specified for
1593       REPO::ARCHIVE1.  ARCHIVE2 is just another archive name in same  reposi‐
1594       tory (no repository location allowed).
1595
1596       For  archives created with Borg 1.1 or newer diff automatically detects
1597       whether the archives are created with the same chunker params.  If  so,
1598       only chunk IDs are compared, which is very fast.
1599
1600       For  archives prior to Borg 1.1 chunk contents are compared by default.
1601       If you did not create the archives with different chunker params,  pass
1602       --same-chunker-params.   Note that the chunker params changed from Borg
1603       0.xx to 1.0.
1604
1605       For more help on include/exclude patterns, see the  borg_patterns  com‐
1606       mand output.
1607
1608   Examples
1609          $ borg init -e=none testrepo
1610          $ mkdir testdir
1611          $ cd testdir
1612          $ echo asdf > file1
1613          $ dd if=/dev/urandom bs=1M count=4 > file2
1614          $ touch file3
1615          $ borg create ../testrepo::archive1 .
1616
1617          $ chmod a+x file1
1618          $ echo "something" >> file2
1619          $ borg create ../testrepo::archive2 .
1620
1621          $ echo "testing 123" >> file1
1622          $ rm file3
1623          $ touch file4
1624          $ borg create ../testrepo::archive3 .
1625
1626          $ cd ..
1627          $ borg diff testrepo::archive1 archive2
1628          [-rw-r--r-- -> -rwxr-xr-x] file1
1629             +135 B    -252 B file2
1630
1631          $ borg diff testrepo::archive2 archive3
1632              +17 B      -5 B file1
1633          added           0 B file4
1634          removed         0 B file3
1635
1636          $ borg diff testrepo::archive1 archive3
1637              +17 B      -5 B [-rw-r--r-- -> -rwxr-xr-x] file1
1638             +135 B    -252 B file2
1639          added           0 B file4
1640          removed         0 B file3
1641
1642          $ borg diff --json-lines testrepo::archive1 archive3
1643          {"path": "file1", "changes": [{"type": "modified", "added": 17, "removed": 5}, {"type": "mode", "old_mode": "-rw-r--r--", "new_mode": "-rwxr-xr-x"}]}
1644          {"path": "file2", "changes": [{"type": "modified", "added": 135, "removed": 252}]}
1645          {"path": "file4", "changes": [{"type": "added", "size": 0}]}
1646          {"path": "file3", "changes": [{"type": "removed", "size": 0}]}
1647

BORG DELETE

1649          borg [common options] delete [options] [REPOSITORY_OR_ARCHIVE] [ARCHIVE...]
1650
1651   Description
1652       This  command  deletes  an  archive from the repository or the complete
1653       repository.
1654
1655       Important: When deleting archives, repository disk space is  not  freed
1656       until you run borg compact.
1657
1658       When  you  delete  a  complete  repository, the security info and local
1659       cache for it (if any) are also deleted. Alternatively, you  can  delete
1660       just the local cache with the --cache-only option, or keep the security
1661       info with the --keep-security-info option.
1662
1663       When in doubt, use --dry-run --list to see what would be deleted.
1664
1665       When using --stats, you will get some statistics about  how  much  data
1666       was deleted - the "Deleted data" deduplicated size there is most inter‐
1667       esting as that is how much your repository will  shrink.   Please  note
1668       that the "All archives" stats refer to the state after deletion.
1669
1670       You  can delete multiple archives by specifying their common prefix, if
1671       they have one, using the --prefix PREFIX option. You can also specify a
1672       shell pattern to match multiple archives using the --glob-archives GLOB
1673       option (for more info on these patterns, see borg_patterns). Note  that
1674       these two options are mutually exclusive.
1675
1676       To  avoid  accidentally  deleting  archives, especially when using glob
1677       patterns, it might be helpful to use the --dry-run to test out the com‐
1678       mand without actually making any changes to the repository.
1679
1680   Examples
1681          # delete a single backup archive:
1682          $ borg delete /path/to/repo::Monday
1683          # actually free disk space:
1684          $ borg compact /path/to/repo
1685
1686          # delete all archives whose names begin with the machine's hostname followed by "-"
1687          $ borg delete --prefix '{hostname}-' /path/to/repo
1688
1689          # delete all archives whose names contain "-2012-"
1690          $ borg delete --glob-archives '*-2012-*' /path/to/repo
1691
1692          # see what would be deleted if delete was run without --dry-run
1693          $ borg delete --list --dry-run -a '*-May-*' /path/to/repo
1694
1695          # delete the whole repository and the related local cache:
1696          $ borg delete /path/to/repo
1697          You requested to completely DELETE the repository *including* all archives it contains:
1698          repo                                 Mon, 2016-02-15 19:26:54
1699          root-2016-02-15                      Mon, 2016-02-15 19:36:29
1700          newname                              Mon, 2016-02-15 19:50:19
1701          Type 'YES' if you understand this and want to continue: YES
1702

BORG PRUNE

1704          borg [common options] prune [options] [REPOSITORY]
1705
1706   Description
1707       The  prune  command  prunes  a  repository by deleting all archives not
1708       matching any of the specified retention options.
1709
1710       Important: Repository disk space is not freed until you run  borg  com‐
1711       pact.
1712
1713       This  command  is  normally used by automated backup scripts wanting to
1714       keep a certain number of historic backups.  This  retention  policy  is
1715       commonly  referred  to  as GFS (Grandfather-father-son) backup rotation
1716       scheme.
1717
1718       Also, prune automatically removes checkpoint archives  (incomplete  ar‐
1719       chives left behind by interrupted backup runs) except if the checkpoint
1720       is the latest archive (and thus still needed). Checkpoint archives  are
1721       not considered when comparing archive counts against the retention lim‐
1722       its (--keep-X).
1723
1724       If a prefix is set with -P, then only archives that start with the pre‐
1725       fix  are  considered for deletion and only those archives count towards
1726       the totals specified by the rules.   Otherwise,  all  archives  in  the
1727       repository are candidates for deletion!  There is no automatic distinc‐
1728       tion between archives representing different contents. These need to be
1729       distinguished by specifying matching prefixes.
1730
1731       If  you  have  multiple  sequences of archives with different data sets
1732       (e.g.  from different machines) in one shared repository, use one prune
1733       call  per  data set that matches only the respective archives using the
1734       -P option.
1735
1736       The --keep-within option takes an argument of the  form  "<int><char>",
1737       where  char  is  "H", "d", "w", "m", "y". For example, --keep-within 2d
1738       means to keep all archives that were created within the past 48  hours.
1739       "1m"  is taken to mean "31d". The archives kept with this option do not
1740       count towards the totals specified by any other options.
1741
1742       A good procedure is to thin out more and more the  older  your  backups
1743       get.   As an example, --keep-daily 7 means to keep the latest backup on
1744       each day, up to 7 most recent days with backups (days  without  backups
1745       do  not  count).   The  rules  are applied from secondly to yearly, and
1746       backups selected by previous rules do not count towards those of  later
1747       rules.  The  time that each backup starts is used for pruning purposes.
1748       Dates and times are interpreted in the local  timezone,  and  weeks  go
1749       from Monday to Sunday. Specifying a negative number of archives to keep
1750       means that there is no limit. As of borg 1.2.0, borg  will  retain  the
1751       oldest archive if any of the secondly, minutely, hourly, daily, weekly,
1752       monthly, or yearly rules was not otherwise able to meet  its  retention
1753       target.  This enables the first chronological archive to continue aging
1754       until it is replaced by a newer archive that meets the retention crite‐
1755       ria.
1756
1757       The --keep-last N option is doing the same as --keep-secondly N (and it
1758       will keep the last N archives under the assumption that you do not cre‐
1759       ate more than one backup archive in the same second).
1760
1761       When  using  --stats,  you will get some statistics about how much data
1762       was deleted - the "Deleted data" deduplicated size there is most inter‐
1763       esting  as  that  is how much your repository will shrink.  Please note
1764       that the "All archives" stats refer to the state after pruning.
1765
1766   Examples
1767       Be careful, prune is a potentially dangerous command,  it  will  remove
1768       backup archives.
1769
1770       The  default of prune is to apply to all archives in the repository un‐
1771       less you restrict its operation to  a  subset  of  the  archives  using
1772       --prefix.   When  using  --prefix, be careful to choose a good prefix -
1773       e.g. do not use a prefix "foo" if you do not also want to  match  "foo‐
1774       bar".
1775
1776       It  is strongly recommended to always run prune -v --list --dry-run ...
1777       first so you will see what it would do without it actually  doing  any‐
1778       thing.
1779
1780          # Keep 7 end of day and 4 additional end of week archives.
1781          # Do a dry-run without actually deleting anything.
1782          $ borg prune -v --list --dry-run --keep-daily=7 --keep-weekly=4 /path/to/repo
1783
1784          # Same as above but only apply to archive names starting with the hostname
1785          # of the machine followed by a "-" character:
1786          $ borg prune -v --list --keep-daily=7 --keep-weekly=4 --prefix='{hostname}-' /path/to/repo
1787          # actually free disk space:
1788          $ borg compact /path/to/repo
1789
1790          # Keep 7 end of day, 4 additional end of week archives,
1791          # and an end of month archive for every month:
1792          $ borg prune -v --list --keep-daily=7 --keep-weekly=4 --keep-monthly=-1 /path/to/repo
1793
1794          # Keep all backups in the last 10 days, 4 additional end of week archives,
1795          # and an end of month archive for every month:
1796          $ borg prune -v --list --keep-within=10d --keep-weekly=4 --keep-monthly=-1 /path/to/repo
1797
1798       There  is  also  a  visualized  prune  example in docs/misc/prune-exam‐
1799       ple.txt:
1800
1801          borg prune visualized
1802          =====================
1803
1804          Assume it is 2016-01-01, today's backup has not yet been made, you have
1805          created at least one backup on each day in 2015 except on 2015-12-19 (no
1806          backup made on that day), and you started backing up with borg on
1807          2015-01-01.
1808
1809          This is what borg prune --keep-daily 14 --keep-monthly 6 --keep-yearly 1
1810          would keep.
1811
1812          Backups kept by the --keep-daily rule are marked by a "d" to the right,
1813          backups kept by the --keep-monthly rule are marked by a "m" to the right,
1814          and backups kept by the --keep-yearly rule are marked by a "y" to the
1815          right.
1816
1817          Calendar view
1818          -------------
1819
1820                                      2015
1821                January               February               March
1822          Mo Tu We Th Fr Sa Su  Mo Tu We Th Fr Sa Su  Mo Tu We Th Fr Sa Su
1823                    1y 2  3  4                     1                     1
1824           5  6  7  8  9 10 11   2  3  4  5  6  7  8   2  3  4  5  6  7  8
1825          12 13 14 15 16 17 18   9 10 11 12 13 14 15   9 10 11 12 13 14 15
1826          19 20 21 22 23 24 25  16 17 18 19 20 21 22  16 17 18 19 20 21 22
1827          26 27 28 29 30 31     23 24 25 26 27 28     23 24 25 26 27 28 29
1828                                                      30 31
1829
1830                 April                  May                   June
1831          Mo Tu We Th Fr Sa Su  Mo Tu We Th Fr Sa Su  Mo Tu We Th Fr Sa Su
1832                 1  2  3  4  5               1  2  3   1  2  3  4  5  6  7
1833           6  7  8  9 10 11 12   4  5  6  7  8  9 10   8  9 10 11 12 13 14
1834          13 14 15 16 17 18 19  11 12 13 14 15 16 17  15 16 17 18 19 20 21
1835          20 21 22 23 24 25 26  18 19 20 21 22 23 24  22 23 24 25 26 27 28
1836          27 28 29 30           25 26 27 28 29 30 31  29 30m
1837
1838
1839                  July                 August              September
1840          Mo Tu We Th Fr Sa Su  Mo Tu We Th Fr Sa Su  Mo Tu We Th Fr Sa Su
1841                 1  2  3  4  5                  1  2      1  2  3  4  5  6
1842           6  7  8  9 10 11 12   3  4  5  6  7  8  9   7  8  9 10 11 12 13
1843          13 14 15 16 17 18 19  10 11 12 13 14 15 16  14 15 16 17 18 19 20
1844          20 21 22 23 24 25 26  17 18 19 20 21 22 23  21 22 23 24 25 26 27
1845          27 28 29 30 31m       24 25 26 27 28 29 30  28 29 30m
1846                                31m
1847
1848                October               November              December
1849          Mo Tu We Th Fr Sa Su  Mo Tu We Th Fr Sa Su  Mo Tu We Th Fr Sa Su
1850                    1  2  3  4                     1      1  2  3  4  5  6
1851           5  6  7  8  9 10 11   2  3  4  5  6  7  8   7  8  9 10 11 12 13
1852          12 13 14 15 16 17 18   9 10 11 12 13 14 15  14 15 16 17d18d19 20d
1853          19 20 21 22 23 24 25  16 17 18 19 20 21 22  21d22d23d24d25d26d27d
1854          26 27 28 29 30 31m    23 24 25 26 27 28 29  28d29d30d31d
1855                                30m
1856
1857          List view
1858          ---------
1859
1860          --keep-daily 14     --keep-monthly 6     --keep-yearly 1
1861          ----------------------------------------------------------------
1862           1. 2015-12-31       (2015-12-31 kept     (2015-12-31 kept
1863           2. 2015-12-30        by daily rule)       by daily rule)
1864           3. 2015-12-29       1. 2015-11-30        1. 2015-01-01 (oldest)
1865           4. 2015-12-28       2. 2015-10-31
1866           5. 2015-12-27       3. 2015-09-30
1867           6. 2015-12-26       4. 2015-08-31
1868           7. 2015-12-25       5. 2015-07-31
1869           8. 2015-12-24       6. 2015-06-30
1870           9. 2015-12-23
1871          10. 2015-12-22
1872          11. 2015-12-21
1873          12. 2015-12-20
1874              (no backup made on 2015-12-19)
1875          13. 2015-12-18
1876          14. 2015-12-17
1877
1878
1879          Notes
1880          -----
1881
1882          2015-12-31 is kept due to the --keep-daily 14 rule (because it is applied
1883          first), not due to the --keep-monthly or --keep-yearly rule.
1884
1885          The --keep-yearly 1 rule does not consider the December 31st backup because it
1886          has already been kept due to the daily rule. There are no backups available
1887          from previous years, so the --keep-yearly target of 1 backup is not satisfied.
1888          Because of this, the 2015-01-01 archive (the oldest archive available) is kept.
1889
1890          The --keep-monthly 6 rule keeps Nov, Oct, Sep, Aug, Jul and Jun. December is
1891          not considered for this rule, because that backup was already kept because of
1892          the daily rule.
1893
1894          2015-12-17 is kept to satisfy the --keep-daily 14 rule - because no backup was
1895          made on 2015-12-19. If a backup had been made on that day, it would not keep
1896          the one from 2015-12-17.
1897
1898          We did not include weekly, hourly, minutely or secondly rules to keep this
1899          example simple. They all work in basically the same way.
1900
1901          The weekly rule is easy to understand roughly, but hard to understand in all
1902          details. If interested, read "ISO 8601:2000 standard week-based year".
1903
1904

BORG COMPACT

1906          borg [common options] compact [options] [REPOSITORY]
1907
1908   Description
1909       This command frees repository space by compacting segments.
1910
1911       Use this regularly to avoid running out of space - you do not  need  to
1912       use  this after each borg command though. It is especially useful after
1913       deleting archives, because only compaction will really free  repository
1914       space.
1915
1916       borg  compact  does not need a key, so it is possible to invoke it from
1917       the client or also from the server.
1918
1919       Depending on the amount of segments that need compaction, it may take a
1920       while, so consider using the --progress option.
1921
1922       A  segment  is compacted if the amount of saved space is above the per‐
1923       centage value given by the --threshold option. If omitted, a  threshold
1924       of  10% is used.  When using --verbose, borg will output an estimate of
1925       the freed space.
1926
1927       After upgrading borg  (server)  to  1.2+,  you  can  use  borg  compact
1928       --cleanup-commits  to clean up the numerous 17byte commit-only segments
1929       that borg 1.1 did not clean up due to a bug. It is enough  to  do  that
1930       once per repository. After cleaning up the commits, borg will also do a
1931       normal compaction.
1932
1933       See separate_compaction in Additional Notes for more details.
1934
1935   Examples
1936          # compact segments and free repo disk space
1937          $ borg compact /path/to/repo
1938
1939          # same as above plus clean up 17byte commit-only segments
1940          $ borg compact --cleanup-commits /path/to/repo
1941

BORG INFO

1943          borg [common options] info [options] [REPOSITORY_OR_ARCHIVE]
1944
1945   Description
1946       This command displays detailed information about the specified  archive
1947       or repository.
1948
1949       Please  note  that the deduplicated sizes of the individual archives do
1950       not add up to the deduplicated size of the repository ("all archives"),
1951       because the two are meaning different things:
1952
1953       This  archive / deduplicated size = amount of data stored ONLY for this
1954       archive = unique chunks of this archive.  All archives  /  deduplicated
1955       size  =  amount  of data stored in the repo = all chunks in the reposi‐
1956       tory.
1957
1958       Borg archives can only contain a limited amount of file metadata.   The
1959       size  of  an archive relative to this limit depends on a number of fac‐
1960       tors, mainly the number of files, the lengths of paths and other  meta‐
1961       data  stored  for  files.  This is shown as utilization of maximum sup‐
1962       ported archive size.
1963
1964   Examples
1965          $ borg info /path/to/repo::2017-06-29T11:00-srv
1966          Archive name: 2017-06-29T11:00-srv
1967          Archive fingerprint: b2f1beac2bd553b34e06358afa45a3c1689320d39163890c5bbbd49125f00fe5
1968          Comment:
1969          Hostname: myhostname
1970          Username: root
1971          Time (start): Thu, 2017-06-29 11:03:07
1972          Time (end): Thu, 2017-06-29 11:03:13
1973          Duration: 5.66 seconds
1974          Number of files: 17037
1975          Command line: /usr/sbin/borg create /path/to/repo::2017-06-29T11:00-srv /srv
1976          Utilization of max. archive size: 0%
1977          ------------------------------------------------------------------------------
1978                                 Original size      Compressed size    Deduplicated size
1979          This archive:               12.53 GB             12.49 GB              1.62 kB
1980          All archives:              121.82 TB            112.41 TB            215.42 GB
1981
1982                                 Unique chunks         Total chunks
1983          Chunk index:                 1015213            626934122
1984
1985          $ borg info /path/to/repo --last 1
1986          Archive name: 2017-06-29T11:00-srv
1987          Archive fingerprint: b2f1beac2bd553b34e06358afa45a3c1689320d39163890c5bbbd49125f00fe5
1988          Comment:
1989          Hostname: myhostname
1990          Username: root
1991          Time (start): Thu, 2017-06-29 11:03:07
1992          Time (end): Thu, 2017-06-29 11:03:13
1993          Duration: 5.66 seconds
1994          Number of files: 17037
1995          Command line: /usr/sbin/borg create /path/to/repo::2017-06-29T11:00-srv /srv
1996          Utilization of max. archive size: 0%
1997          ------------------------------------------------------------------------------
1998                                 Original size      Compressed size    Deduplicated size
1999          This archive:               12.53 GB             12.49 GB              1.62 kB
2000          All archives:              121.82 TB            112.41 TB            215.42 GB
2001
2002                                 Unique chunks         Total chunks
2003          Chunk index:                 1015213            626934122
2004
2005          $ borg info /path/to/repo
2006          Repository ID: d857ce5788c51272c61535062e89eac4e8ef5a884ffbe976e0af9d8765dedfa5
2007          Location: /path/to/repo
2008          Encrypted: Yes (repokey)
2009          Cache: /root/.cache/borg/d857ce5788c51272c61535062e89eac4e8ef5a884ffbe976e0af9d8765dedfa5
2010          Security dir: /root/.config/borg/security/d857ce5788c51272c61535062e89eac4e8ef5a884ffbe976e0af9d8765dedfa5
2011          ------------------------------------------------------------------------------
2012                                 Original size      Compressed size    Deduplicated size
2013          All archives:              121.82 TB            112.41 TB            215.42 GB
2014
2015                                 Unique chunks         Total chunks
2016          Chunk index:                 1015213            626934122
2017

BORG MOUNT

2019          borg [common options] mount [options] REPOSITORY_OR_ARCHIVE MOUNTPOINT [PATH...]
2020
2021   Description
2022       This command mounts an archive as a FUSE filesystem. This can be useful
2023       for  browsing  an  archive  or  restoring  individual files. Unless the
2024       --foreground option is given the command will run in the background un‐
2025       til the filesystem is umounted.
2026
2027       The  command borgfs provides a wrapper for borg mount. This can also be
2028       used  in  fstab  entries:  /path/to/repo  /mnt/point  fuse.borgfs   de‐
2029       faults,noauto 0 0
2030
2031       To  allow  a  regular  user  to use fstab entries, add the user option:
2032       /path/to/repo /mnt/point fuse.borgfs defaults,noauto,user 0 0
2033
2034       For FUSE configuration and mount options, see the mount.fuse(8)  manual
2035       page.
2036
2037       Borg's  default behavior is to use the archived user and group names of
2038       each file and map them to the system's respective user and  group  ids.
2039       Alternatively, using numeric-ids will instead use the archived user and
2040       group ids without any mapping.
2041
2042       The uid and gid mount options (implemented by  Borg)  can  be  used  to
2043       override  the  user  and  group  ids  of all files (i.e., borg mount -o
2044       uid=1000,gid=1000).
2045
2046       The man page references user_id and group_id mount options (implemented
2047       by  fuse)  which specify the user and group id of the mount owner (aka,
2048       the user who does the mounting). It is set automatically by libfuse (or
2049       the filesystem if libfuse is not used). However, you should not specify
2050       these manually. Unlike the uid and gid mount options which  affect  all
2051       files, user_id and group_id affect the user and group id of the mounted
2052       (base) directory.
2053
2054       Additional mount options supported by borg:
2055
2056       • versions: when used with a repository mount,  this  gives  a  merged,
2057         versioned view of the files in the archives. EXPERIMENTAL, layout may
2058         change in future.
2059
2060       • allow_damaged_files: by default damaged files (where  missing  chunks
2061         were  replaced  with  runs  of  zeros by borg check --repair) are not
2062         readable and return EIO (I/O error). Set this  option  to  read  such
2063         files.
2064
2065       • ignore_permissions:  for  security  reasons the "default_permissions"
2066         mount option is internally enforced by borg. "ignore_permissions" can
2067         be given to not enforce "default_permissions".
2068
2069       The BORG_MOUNT_DATA_CACHE_ENTRIES environment variable is meant for ad‐
2070       vanced users to tweak the performance. It sets  the  number  of  cached
2071       data  chunks;  additional  memory  usage can be up to ~8 MiB times this
2072       number. The default is the number of CPU cores.
2073
2074       When the daemonized process receives a signal or crashes, it  does  not
2075       unmount.  Unmounting in these cases could cause an active rsync or sim‐
2076       ilar process to unintentionally delete data.
2077
2078       When running in the foreground ^C/SIGINT unmounts  cleanly,  but  other
2079       signals or crashes do not.
2080

BORG UMOUNT

2082          borg [common options] umount [options] MOUNTPOINT
2083
2084   Description
2085       This  command  un-mounts  a  FUSE filesystem that was mounted with borg
2086       mount.
2087
2088       This is a convenience wrapper that  just  calls  the  platform-specific
2089       shell command - usually this is either umount or fusermount -u.
2090
2091   Examples
2092          # Mounting the repository shows all archives.
2093          # Archives are loaded lazily, expect some delay when navigating to an archive
2094          # for the first time.
2095          $ borg mount /path/to/repo /tmp/mymountpoint
2096          $ ls /tmp/mymountpoint
2097          root-2016-02-14 root-2016-02-15
2098          $ borg umount /tmp/mymountpoint
2099
2100          # Mounting a specific archive is possible as well.
2101          $ borg mount /path/to/repo::root-2016-02-15 /tmp/mymountpoint
2102          $ ls /tmp/mymountpoint
2103          bin  boot  etc      home  lib  lib64  lost+found  media  mnt  opt
2104          root  sbin  srv  tmp  usr  var
2105          $ borg umount /tmp/mymountpoint
2106
2107          # The "versions view" merges all archives in the repository
2108          # and provides a versioned view on files.
2109          $ borg mount -o versions /path/to/repo /tmp/mymountpoint
2110          $ ls -l /tmp/mymountpoint/home/user/doc.txt/
2111          total 24
2112          -rw-rw-r-- 1 user group 12357 Aug 26 21:19 doc.cda00bc9.txt
2113          -rw-rw-r-- 1 user group 12204 Aug 26 21:04 doc.fa760f28.txt
2114          $ borg umount /tmp/mymountpoint
2115
2116          # Archive filters are supported.
2117          # These are especially handy for the "versions view",
2118          # which does not support lazy processing of archives.
2119          $ borg mount -o versions --glob-archives '*-my-home' --last 10 /path/to/repo /tmp/mymountpoint
2120
2121          # Exclusion options are supported.
2122          # These can speed up mounting and lower memory needs significantly.
2123          $ borg mount /path/to/repo /tmp/mymountpoint only/that/path
2124          $ borg mount --exclude '...' /path/to/repo /tmp/mymountpoint
2125
2126   borgfs
2127          $ echo '/mnt/backup /tmp/myrepo fuse.borgfs defaults,noauto 0 0' >> /etc/fstab
2128          $ echo '/mnt/backup::root-2016-02-15 /tmp/myarchive fuse.borgfs defaults,noauto 0 0' >> /etc/fstab
2129          $ mount /tmp/myrepo
2130          $ mount /tmp/myarchive
2131          $ ls /tmp/myrepo
2132          root-2016-02-01 root-2016-02-2015
2133          $ ls /tmp/myarchive
2134          bin  boot  etc      home  lib  lib64  lost+found  media  mnt  opt  root  sbin  srv  tmp  usr  var
2135
2136       NOTE:
2137          borgfs  will  be  automatically  provided if you used a distribution
2138          package, pip or setup.py to install Borg. Users  of  the  standalone
2139          binary  will  have to manually create a symlink (see pyinstaller-bi‐
2140          nary).
2141

BORG KEY CHANGE-PASSPHRASE

2143          borg [common options] key change-passphrase [options] [REPOSITORY]
2144
2145   Description
2146       The key files used for repository encryption are optionally  passphrase
2147       protected. This command can be used to change this passphrase.
2148
2149       Please  note that this command only changes the passphrase, but not any
2150       secret protected by it (like e.g. encryption/MAC keys or chunker seed).
2151       Thus, changing the passphrase after passphrase and borg key got compro‐
2152       mised does not protect future (nor past) backups to  the  same  reposi‐
2153       tory.
2154
2155   Examples
2156          # Create a key file protected repository
2157          $ borg init --encryption=keyfile -v /path/to/repo
2158          Initializing repository at "/path/to/repo"
2159          Enter new passphrase:
2160          Enter same passphrase again:
2161          Remember your passphrase. Your data will be inaccessible without it.
2162          Key in "/root/.config/borg/keys/mnt_backup" created.
2163          Keep this key safe. Your data will be inaccessible without it.
2164          Synchronizing chunks cache...
2165          Archives: 0, w/ cached Idx: 0, w/ outdated Idx: 0, w/o cached Idx: 0.
2166          Done.
2167
2168          # Change key file passphrase
2169          $ borg key change-passphrase -v /path/to/repo
2170          Enter passphrase for key /root/.config/borg/keys/mnt_backup:
2171          Enter new passphrase:
2172          Enter same passphrase again:
2173          Remember your passphrase. Your data will be inaccessible without it.
2174          Key updated
2175
2176          # Import a previously-exported key into the specified
2177          # key file (creating or overwriting the output key)
2178          # (keyfile repositories only)
2179          $ BORG_KEY_FILE=/path/to/output-key borg key import /path/to/repo /path/to/exported
2180
2181       Fully automated using environment variables:
2182
2183          $ BORG_NEW_PASSPHRASE=old borg init -e=repokey repo
2184          # now "old" is the current passphrase.
2185          $ BORG_PASSPHRASE=old BORG_NEW_PASSPHRASE=new borg key change-passphrase repo
2186          # now "new" is the current passphrase.
2187

BORG KEY EXPORT

2189          borg [common options] key export [options] [REPOSITORY] [PATH]
2190
2191   Description
2192       If  repository encryption is used, the repository is inaccessible with‐
2193       out the key. This command allows one  to  backup  this  essential  key.
2194       Note  that  the  backup produced does not include the passphrase itself
2195       (i.e. the exported key stays encrypted). In order to regain access to a
2196       repository,   one   needs  both  the  exported  key  and  the  original
2197       passphrase.
2198
2199       There are three backup formats. The normal backup  format  is  suitable
2200       for  digital  storage as a file. The --paper backup format is optimized
2201       for printing and typing in while importing, with per line checks to re‐
2202       duce problems with manual input. The --qr-html creates a printable HTML
2203       template with a QR code and a copy of the --paper-formatted key.
2204
2205       For repositories using keyfile encryption the key is saved  locally  on
2206       the  system  that is capable of doing backups. To guard against loss of
2207       this key, the key needs to be backed up independently of the main  data
2208       backup.
2209
2210       For  repositories  using the repokey encryption the key is saved in the
2211       repository in the config file. A backup is thus  not  strictly  needed,
2212       but  guards against the repository becoming inaccessible if the file is
2213       damaged for some reason.
2214
2215       Examples:
2216
2217          borg key export /path/to/repo > encrypted-key-backup
2218          borg key export --paper /path/to/repo > encrypted-key-backup.txt
2219          borg key export --qr-html /path/to/repo > encrypted-key-backup.html
2220          # Or pass the output file as an argument instead of redirecting stdout:
2221          borg key export /path/to/repo encrypted-key-backup
2222          borg key export --paper /path/to/repo encrypted-key-backup.txt
2223          borg key export --qr-html /path/to/repo encrypted-key-backup.html
2224

BORG KEY IMPORT

2226          borg [common options] key import [options] [REPOSITORY] [PATH]
2227
2228   Description
2229       This command restores a key previously backed up with the  export  com‐
2230       mand.
2231
2232       If  the  --paper  option  is  given,  the import will be an interactive
2233       process in which each line is checked for plausibility before  proceed‐
2234       ing to the next line. For this format PATH must not be given.
2235
2236       For  repositories using keyfile encryption, the key file which borg key
2237       import writes to depends on several factors. If the BORG_KEY_FILE envi‐
2238       ronment variable is set and non-empty, borg key import creates or over‐
2239       writes that file named by $BORG_KEY_FILE. Otherwise,  borg  key  import
2240       searches in the $BORG_KEYS_DIR directory for a key file associated with
2241       the repository. If a key file is found in $BORG_KEYS_DIR, borg key  im‐
2242       port  overwrites  it; otherwise, borg key import creates a new key file
2243       in $BORG_KEYS_DIR.
2244

BORG UPGRADE

2246          borg [common options] upgrade [options] [REPOSITORY]
2247
2248   Description
2249       Upgrade an existing, local Borg repository.
2250
2251   When you do not need borg upgrade
2252       Not every change requires that you run borg upgrade.
2253
2254       You do not need to run it when:
2255
2256       • moving your repository to a different place
2257
2258       • upgrading to another point release (like 1.0.x to 1.0.y), except when
2259         noted otherwise in the changelog
2260
2261       • upgrading  from  1.0.x  to  1.1.x, except when noted otherwise in the
2262         changelog
2263
2264   Borg 1.x.y upgrades
2265       Use borg upgrade --tam REPO to require manifest  authentication  intro‐
2266       duced with Borg 1.0.9 to address security issues. This means that modi‐
2267       fying the repository after doing this with a  version  prior  to  1.0.9
2268       will  raise  a validation error, so only perform this upgrade after up‐
2269       dating all clients using the repository to 1.0.9 or newer.
2270
2271       This upgrade should be done on each client for safety reasons.
2272
2273       If a repository is accidentally modified with a pre-1.0.9 client  after
2274       this upgrade, use borg upgrade --tam --force REPO to remedy it.
2275
2276       If  you  routinely  do  this  you might not want to enable this upgrade
2277       (which will leave you exposed to the security issue). You  can  reverse
2278       the upgrade by issuing borg upgrade --disable-tam REPO.
2279
2280       See
2281       https://borgbackup.readthedocs.io/en/stable/changes.html#pre-1-0-9-manifest-spoofing-vulnerability
2282       for details.
2283
2284   Attic and Borg 0.xx to Borg 1.x
2285       This currently supports converting an Attic repository to Borg and also
2286       helps with converting Borg 0.xx to 1.0.
2287
2288       Currently, only LOCAL repositories can be upgraded (issue #465).
2289
2290       Please note that borg create (since 1.0.0) uses bigger  chunks  by  de‐
2291       fault  than  old borg or attic did, so the new chunks won't deduplicate
2292       with the old chunks in the upgraded repository.   See  --chunker-params
2293       option of borg create and borg recreate.
2294
2295       borg upgrade will change the magic strings in the repository's segments
2296       to match the new  Borg  magic  strings.  The  keyfiles  found  in  $AT‐
2297       TIC_KEYS_DIR  or  ~/.attic/keys/  will  also be converted and copied to
2298       $BORG_KEYS_DIR or ~/.config/borg/keys.
2299
2300       The cache files are converted, from $ATTIC_CACHE_DIR or  ~/.cache/attic
2301       to  $BORG_CACHE_DIR or ~/.cache/borg, but the cache layout between Borg
2302       and Attic changed, so it is possible the first backup after the conver‐
2303       sion takes longer than expected due to the cache resync.
2304
2305       Upgrade should be able to resume if interrupted, although it will still
2306       iterate over all segments. If you want to start from scratch, use  borg
2307       delete over the copied repository to make sure the cache files are also
2308       removed:
2309
2310          borg delete borg
2311
2312       Unless --inplace is specified, the  upgrade  process  first  creates  a
2313       backup  copy  of the repository, in REPOSITORY.before-upgrade-DATETIME,
2314       using hardlinks.  This requires that the repository and its parent  di‐
2315       rectory  reside on same filesystem so the hardlink copy can work.  This
2316       takes longer than in place  upgrades,  but  is  much  safer  and  gives
2317       progress  information  (as  opposed  to cp -al). Once you are satisfied
2318       with the conversion, you can safely destroy the backup copy.
2319
2320       WARNING: Running the upgrade in place will make the current copy  unus‐
2321       able  with  older  version,  with no way of going back to previous ver‐
2322       sions. This can PERMANENTLY DAMAGE YOUR REPOSITORY!  Attic CAN NOT READ
2323       BORG  REPOSITORIES,  as  the  magic strings have changed. You have been
2324       warned.
2325
2326   Examples
2327          # Upgrade the borg repository to the most recent version.
2328          $ borg upgrade -v /path/to/repo
2329          making a hardlink copy in /path/to/repo.before-upgrade-2016-02-15-20:51:55
2330          opening attic repository with borg and converting
2331          no key file found for repository
2332          converting repo index /path/to/repo/index.0
2333          converting 1 segments...
2334          converting borg 0.xx to borg current
2335          no key file found for repository
2336
2337   Upgrading a passphrase encrypted attic repo
2338       attic offered a "passphrase" encryption mode, but this was  removed  in
2339       borg  1.0  and  replaced  by  the  "repokey"  mode  (which  stores  the
2340       passphrase-protected encryption key into the repository config).
2341
2342       Thus, to upgrade a "passphrase" attic repo to a "repokey" borg repo,  2
2343       steps are needed, in this order:
2344
2345       • borg upgrade repo
2346
2347       • borg key migrate-to-repokey repo
2348

BORG RECREATE

2350          borg [common options] recreate [options] [REPOSITORY_OR_ARCHIVE] [PATH...]
2351
2352   Description
2353       Recreate the contents of existing archives.
2354
2355       recreate  is  a  potentially  dangerous function and might lead to data
2356       loss (if used wrongly). BE VERY CAREFUL!
2357
2358       Important: Repository disk space is not freed until you run  borg  com‐
2359       pact.
2360
2361       --exclude,  --exclude-from,  --exclude-if-present,  --keep-exclude-tags
2362       and PATH have the exact same semantics as in "borg  create",  but  they
2363       only  check for files in the archives and not in the local file system.
2364       If PATHs are specified, the resulting archives will only contain  files
2365       from these PATHs.
2366
2367       Note that all paths in an archive are relative, therefore absolute pat‐
2368       terns/paths will not match (--exclude, --exclude-from, PATHs).
2369
2370       --recompress allows one to change the compression of existing  data  in
2371       archives.   Due  to  how  Borg  stores compressed size information this
2372       might display incorrect information for archives that were  not  recre‐
2373       ated at the same time.  There is no risk of data loss by this.
2374
2375       --chunker-params  will  re-chunk  all files in the archive, this can be
2376       used to have upgraded Borg 0.xx or Attic archives deduplicate with Borg
2377       1.x archives.
2378
2379       USE  WITH CAUTION.  Depending on the PATHs and patterns given, recreate
2380       can be used to permanently delete files from archives.  When in  doubt,
2381       use  --dry-run  --verbose  --list  to see how patterns/PATHS are inter‐
2382       preted. See list_item_flags in borg create for details.
2383
2384       The archive being recreated is only removed after  the  operation  com‐
2385       pletes.  The  archive  that is built during the operation exists at the
2386       same time at "<ARCHIVE>.recreate". The new archive will have a  differ‐
2387       ent archive ID.
2388
2389       With  --target  the original archive is not replaced, instead a new ar‐
2390       chive is created.
2391
2392       When rechunking (or recompressing), space usage can  be  substantial  -
2393       expect  at least the entire deduplicated size of the archives using the
2394       previous chunker (or compression) params.
2395
2396       If you recently ran borg check --repair and it had to fix  lost  chunks
2397       with  all-zero  replacement chunks, please first run another backup for
2398       the same data and re-run borg check --repair afterwards to heal any ar‐
2399       chives  that  had  lost chunks which are still generated from the input
2400       data.
2401
2402       Important:  running  borg  recreate  to  re-chunk   will   remove   the
2403       chunks_healthy  metadata of all items with replacement chunks, so heal‐
2404       ing will not be possible any more after re-chunking  (it  is  also  un‐
2405       likely  it  would  ever work: due to the change of chunking parameters,
2406       the missing chunk likely will never be seen again  even  if  you  still
2407       have the data that produced it).
2408
2409   Examples
2410          # Make old (Attic / Borg 0.xx) archives deduplicate with Borg 1.x archives.
2411          # Archives created with Borg 1.1+ and the default chunker params are skipped
2412          # (archive ID stays the same).
2413          $ borg recreate /mnt/backup --chunker-params default --progress
2414
2415          # Create a backup with little but fast compression
2416          $ borg create /mnt/backup::archive /some/files --compression lz4
2417          # Then compress it - this might take longer, but the backup has already completed,
2418          # so no inconsistencies from a long-running backup job.
2419          $ borg recreate /mnt/backup::archive --recompress --compression zlib,9
2420
2421          # Remove unwanted files from all archives in a repository.
2422          # Note the relative path for the --exclude option - archives only contain relative paths.
2423          $ borg recreate /mnt/backup --exclude home/icke/Pictures/drunk_photos
2424
2425          # Change archive comment
2426          $ borg create --comment "This is a comment" /mnt/backup::archivename ~
2427          $ borg info /mnt/backup::archivename
2428          Name: archivename
2429          Fingerprint: ...
2430          Comment: This is a comment
2431          ...
2432          $ borg recreate --comment "This is a better comment" /mnt/backup::archivename
2433          $ borg info /mnt/backup::archivename
2434          Name: archivename
2435          Fingerprint: ...
2436          Comment: This is a better comment
2437          ...
2438

BORG IMPORT-TAR

2440          borg [common options] import-tar [options] ARCHIVE TARFILE
2441
2442   Description
2443       This command creates a backup archive from a tarball.
2444
2445       When  giving '-' as path, Borg will read a tar stream from standard in‐
2446       put.
2447
2448       By default (--tar-filter=auto) Borg will detect  whether  the  file  is
2449       compressed based on its file extension and pipe the file through an ap‐
2450       propriate filter:
2451
2452       • .tar.gz or .tgz: gzip -d
2453
2454       • .tar.bz2 or .tbz: bzip2 -d
2455
2456       • .tar.xz or .txz: xz -d
2457
2458       • .tar.zstd: zstd -d
2459
2460       • .tar.lz4: lz4 -d
2461
2462       Alternatively, a --tar-filter program may be explicitly  specified.  It
2463       should  read  compressed data from stdin and output an uncompressed tar
2464       stream on stdout.
2465
2466       Most documentation of borg create applies. Note that this command  does
2467       not support excluding files.
2468
2469       import-tar  is a lossy conversion: BSD flags, ACLs, extended attributes
2470       (xattrs), atime and ctime are not exported.   Timestamp  resolution  is
2471       limited  to whole seconds, not the nanosecond resolution otherwise sup‐
2472       ported by Borg.
2473
2474       A --sparse option (as found in borg create) is not supported.
2475
2476       import-tar reads POSIX.1-1988 (ustar),  POSIX.1-2001  (pax),  GNU  tar,
2477       UNIX V7 tar and SunOS tar with extended attributes.
2478

BORG EXPORT-TAR

2480          borg [common options] export-tar [options] ARCHIVE FILE [PATH...]
2481
2482   Description
2483       This command creates a tarball from an archive.
2484
2485       When  giving  '-'  as  the output FILE, Borg will write a tar stream to
2486       standard output.
2487
2488       By default (--tar-filter=auto) Borg will detect whether the FILE should
2489       be  compressed based on its file extension and pipe the tarball through
2490       an appropriate filter before writing it to FILE:
2491
2492       • .tar.gz or .tgz: gzip
2493
2494       • .tar.bz2 or .tbz: bzip2
2495
2496       • .tar.xz or .txz: xz
2497
2498       • .tar.zstd: zstd
2499
2500       • .tar.lz4: lz4
2501
2502       Alternatively, a --tar-filter program may be explicitly  specified.  It
2503       should  read  the  uncompressed  tar stream from stdin and write a com‐
2504       pressed/filtered tar stream to stdout.
2505
2506       The generated tarball uses the GNU tar format.
2507
2508       export-tar is a lossy conversion: BSD flags, ACLs, extended  attributes
2509       (xattrs),  atime  and  ctime are not exported.  Timestamp resolution is
2510       limited to whole seconds, not the nanosecond resolution otherwise  sup‐
2511       ported by Borg.
2512
2513       A --sparse option (as found in borg extract) is not supported.
2514
2515       By  default  the  entire archive is extracted but a subset of files and
2516       directories can be selected by passing a list of  PATHs  as  arguments.
2517       The file selection can further be restricted by using the --exclude op‐
2518       tion.
2519
2520       For more help on include/exclude patterns, see the  borg_patterns  com‐
2521       mand output.
2522
2523       --progress  can  be slower than no progress display, since it makes one
2524       additional pass over the archive metadata.
2525
2526   Examples
2527          # export as uncompressed tar
2528          $ borg export-tar /path/to/repo::Monday Monday.tar
2529
2530          # exclude some types, compress using gzip
2531          $ borg export-tar /path/to/repo::Monday Monday.tar.gz --exclude '*.so'
2532
2533          # use higher compression level with gzip
2534          $ borg export-tar --tar-filter="gzip -9" testrepo::linux Monday.tar.gz
2535
2536          # export a tar, but instead of storing it on disk,
2537          # upload it to a remote site using curl.
2538          $ borg export-tar /path/to/repo::Monday - | curl --data-binary @- https://somewhere/to/POST
2539
2540          # remote extraction via "tarpipe"
2541          $ borg export-tar /path/to/repo::Monday - | ssh somewhere "cd extracted; tar x"
2542

BORG SERVE

2544          borg [common options] serve [options]
2545
2546   Description
2547       This command starts a repository server process. This command  is  usu‐
2548       ally not used manually.
2549
2550   Examples
2551       borg  serve  has  special  support  for ssh forced commands (see autho‐
2552       rized_keys example  below):  if  the  environment  variable  SSH_ORIGI‐
2553       NAL_COMMAND  is  set  it  will ignore some options given on the command
2554       line and use the values from the variable instead. This only applies to
2555       a  carefully  controlled allowlist of safe options. This list currently
2556       contains:
2557
2558       • Options that control the log level and debug topics printed  such  as
2559         --verbose, --info, --debug, --debug-topic, etc.
2560
2561--lock-wait  to  allow  the client to control how long to wait before
2562         giving up and aborting the operation when another process is  holding
2563         a lock.
2564
2565       Environment variables (such as BORG_XXX) contained in the original com‐
2566       mand sent by the client are not interpreted, but ignored.  If  BORG_XXX
2567       environment  variables should be set on the borg serve side, then these
2568       must be set in system-specific locations like  /etc/environment  or  in
2569       the forced command itself (example below).
2570
2571          # Allow an SSH keypair to only run borg, and only have access to /path/to/repo.
2572          # Use key options to disable unneeded and potentially dangerous SSH functionality.
2573          # This will help to secure an automated remote backup system.
2574          $ cat ~/.ssh/authorized_keys
2575          command="borg serve --restrict-to-path /path/to/repo",restrict ssh-rsa AAAAB3[...]
2576
2577          # Set a BORG_XXX environment variable on the "borg serve" side
2578          $ cat ~/.ssh/authorized_keys
2579          command="export BORG_XXX=value; borg serve [...]",restrict ssh-rsa [...]
2580
2581       NOTE:
2582          The  examples  above use the restrict directive. This does automati‐
2583          cally block potential dangerous ssh features,  even  when  they  are
2584          added in a future update. Thus, this option should be preferred.
2585
2586          If  you're  using openssh-server < 7.2, however, you have to explic‐
2587          itly specify the ssh features to restrict and cannot simply use  the
2588          restrict  option  as it has been introduced in v7.2. We recommend to
2589          use    no-port-forwarding,no-X11-forwarding,no-pty,no-agent-forward‐
2590          ing,no-user-rc in this case.
2591
2592       Details about sshd usage: sshd(8)
2593
2594   SSH Configuration
2595       borg  serve's  pipes  (stdin/stdout/stderr)  are  connected to the sshd
2596       process on the server side. In the event that the  SSH  connection  be‐
2597       tween  borg  serve  and  the client is disconnected or stuck abnormally
2598       (for example, due to a network outage), it can take  a  long  time  for
2599       sshd  to  notice the client is disconnected. In the meantime, sshd con‐
2600       tinues running, and as a result so does the borg serve process  holding
2601       the  lock  on the repository. This can cause subsequent borg operations
2602       on the remote repository to fail with the error: Failed  to  create/ac‐
2603       quire the lock.
2604
2605       In  order to avoid this, it is recommended to perform the following ad‐
2606       ditional SSH configuration:
2607
2608       Either in the client side's ~/.ssh/config  file,  or  in  the  client's
2609       /etc/ssh/ssh_config file:
2610
2611          Host backupserver
2612                  ServerAliveInterval 10
2613                  ServerAliveCountMax 30
2614
2615       Replacing  backupserver  with  the  hostname, FQDN or IP address of the
2616       borg server.
2617
2618       This will cause the client to send a keepalive to the server  every  10
2619       seconds.  If  30  consecutive keepalives are sent without a response (a
2620       time of 300 seconds), the ssh client process will be terminated,  caus‐
2621       ing the borg process to terminate gracefully.
2622
2623       On    the    server   side's   sshd   configuration   file   (typically
2624       /etc/ssh/sshd_config):
2625
2626          ClientAliveInterval 10
2627          ClientAliveCountMax 30
2628
2629       This will cause the server to send a keep alive to the client every  10
2630       seconds.  If  30  consecutive keepalives are sent without a response (a
2631       time of 300 seconds), the server's sshd  process  will  be  terminated,
2632       causing  the borg serve process to terminate gracefully and release the
2633       lock on the repository.
2634
2635       If you then run borg commands with --lock-wait 600, this  gives  suffi‐
2636       cient time for the borg serve processes to terminate after the SSH con‐
2637       nection is torn down after the 300 second wait for  the  keepalives  to
2638       fail.
2639
2640       You  may,  of  course,  modify the timeout values demonstrated above to
2641       values that suit your environment and use case.
2642

BORG CONFIG

2644          borg [common options] config [options] [REPOSITORY] [NAME] [VALUE]
2645
2646   Description
2647       This command gets and sets options in a local repository or cache  con‐
2648       fig  file.   For  security  reasons,  this  command only works on local
2649       repositories.
2650
2651       To delete a config value entirely, use --delete. To list the values  of
2652       the  configuration  file or the default values, use --list.  To get and
2653       existing key, pass only the key name. To set a key, pass both  the  key
2654       name  and  the  new  value.  Keys  can be specified in the format "sec‐
2655       tion.name" or simply "name"; the section will default  to  "repository"
2656       and "cache" for the repo and cache configs, respectively.
2657
2658       By  default,  borg config manipulates the repository config file. Using
2659       --cache edits the repository cache's config file instead.
2660
2661       NOTE:
2662          The repository & cache config files are some of  the  only  directly
2663          manipulable  parts  of  a repository that aren't versioned or backed
2664          up, so be careful when making changes!
2665
2666   Examples
2667          # find cache directory
2668          $ cd ~/.cache/borg/$(borg config /path/to/repo id)
2669
2670          # reserve some space
2671          $ borg config /path/to/repo additional_free_space 2G
2672
2673          # make a repo append-only
2674          $ borg config /path/to/repo append_only 1
2675

BORG WITH-LOCK

2677          borg [common options] with-lock [options] REPOSITORY COMMAND [ARGS...]
2678
2679   Description
2680       This command runs a user-specified command while the repository lock is
2681       held.
2682
2683       It  will  first try to acquire the lock (make sure that no other opera‐
2684       tion is running in the repo), then execute the given command as a  sub‐
2685       process  and  wait for its termination, release the lock and return the
2686       user command's return code as borg's return code.
2687
2688       NOTE:
2689          If you copy a repository with  the  lock  held,  the  lock  will  be
2690          present in the copy. Thus, before using borg on the copy from a dif‐
2691          ferent host, you need to use "borg break-lock" on the copied reposi‐
2692          tory,  because  Borg  is  cautious and does not automatically remove
2693          stale locks made by a different host.
2694

BORG BREAK-LOCK

2696          borg [common options] break-lock [options] [REPOSITORY]
2697
2698   Description
2699       This command breaks the repository and cache locks.  Please  use  care‐
2700       fully  and only while no borg process (on any machine) is trying to ac‐
2701       cess the Cache or the Repository.
2702

BORG BENCHMARK CRUD

2704          borg [common options] benchmark crud [options] REPOSITORY PATH
2705
2706   Description
2707       This command benchmarks borg CRUD (create, read, update, delete) opera‐
2708       tions.
2709
2710       It  creates  input data below the given PATH and backups this data into
2711       the given REPO.  The REPO must already exist (it could be a fresh empty
2712       repo  or  an  existing  repo, the command will create / read / update /
2713       delete some archives named borg-benchmark-crud* there.
2714
2715       Make sure you have free space there, you'll  need  about  1GB  each  (+
2716       overhead).
2717
2718       If  your  repository is encrypted and borg needs a passphrase to unlock
2719       the key, use:
2720
2721          BORG_PASSPHRASE=mysecret borg benchmark crud REPO PATH
2722
2723       Measurements are done with different input file sizes and counts.   The
2724       file contents are very artificial (either all zero or all random), thus
2725       the measurement results do not  necessarily  reflect  performance  with
2726       real  data.   Also,  due to the kind of content used, no compression is
2727       used in these benchmarks.
2728
2729       C- == borg create (1st archive creation, no  compression,  do  not  use
2730       files cache)
2731              C-Z-  == all-zero files. full dedup, this is primarily measuring
2732              reader/chunker/hasher.  C-R- == random files. no dedup,  measur‐
2733              ing throughput through all processing stages.
2734
2735       R- == borg extract (extract archive, dry-run, do everything, but do not
2736       write files to disk)
2737              R-Z- == all zero  files.  Measuring  heavily  duplicated  files.
2738              R-R-  == random files. No duplication here, measuring throughput
2739              through all processing stages, except writing to disk.
2740
2741       U- == borg create (2nd archive creation of unchanged input files,  mea‐
2742       sure files cache speed)
2743              The  throughput value is kind of virtual here, it does not actu‐
2744              ally read the file.  U-Z- ==  needs  to  check  the  2  all-zero
2745              chunks' existence in the repo.  U-R- == needs to check existence
2746              of a lot of different chunks in the repo.
2747
2748       D- == borg delete archive (delete last remaining archive, measure dele‐
2749       tion + compaction)
2750              D-Z-  ==  few chunks to delete / few segments to compact/remove.
2751              D-R- == many chunks to delete / many segments to compact/remove.
2752
2753       Please note that there might be quite some variance in  these  measure‐
2754       ments.   Try  multiple measurements and having a otherwise idle machine
2755       (and network, if you use it).
2756

MISCELLANEOUS HELP

2758   borg help patterns
2759       The path/filenames used as input for the pattern  matching  start  from
2760       the  currently  active  recursion  root. You usually give the recursion
2761       root(s) when invoking borg and these can be either relative or absolute
2762       paths.
2763
2764       If  you  give /absolute/ as root, the paths going into the matcher will
2765       look relative like absolute/.../file.ext, because file  paths  in  Borg
2766       archives  are  always  stored  normalized and relative. This means that
2767       e.g.  borg create /path/to/repo ../some/path will store  all  files  as
2768       some/path/.../file.ext  and  borg  create /path/to/repo /home/user will
2769       store all files as home/user/.../file.ext.
2770
2771       A directory exclusion pattern can end either with or  without  a  slash
2772       ('/').  If it ends with a slash, such as some/path/, the directory will
2773       be included but not its content. If it does not end with a slash,  such
2774       as some/path, both the directory and content will be excluded.
2775
2776       File  patterns  support  these  styles: fnmatch, shell, regular expres‐
2777       sions, path prefixes and path full-matches. By default, fnmatch is used
2778       for  --exclude  patterns  and shell-style is used for the --pattern op‐
2779       tion. For commands that support patterns in their  PATH  argument  like
2780       (borg list), the default pattern is path prefix.
2781
2782       Starting  with Borg 1.2, discovered fs paths are normalised, have lead‐
2783       ing slashes removed and then are matched against your patterns.   Note:
2784       You  need  to review your include / exclude patterns and make sure they
2785       do not expect leading slashes. Borg can only deal with  this  for  some
2786       very simple patterns by removing leading slashes there also.
2787
2788       If  followed by a colon (':') the first two characters of a pattern are
2789       used as a style selector. Explicit style selection is necessary when  a
2790       non-default  style  is  desired or when the desired pattern starts with
2791       two alphanumeric characters followed by a colon (i.e. aa:something/*).
2792
2793       Fnmatch, selector fm:
2794              This is the default  style  for  --exclude  and  --exclude-from.
2795              These  patterns  use a variant of shell pattern syntax, with '*'
2796              matching any number of characters, '?' matching any single char‐
2797              acter,  '[...]' matching any single character specified, includ‐
2798              ing ranges, and '[!...]' matching any character  not  specified.
2799              For the purpose of these patterns, the path separator (backslash
2800              for Windows and '/' on other systems) is not treated  specially.
2801              Wrap  meta-characters  in brackets for a literal match (i.e. [?]
2802              to match the literal character ?). For a path to  match  a  pat‐
2803              tern,  the full path must match, or it must match from the start
2804              of the full path to just before a path separator. Except for the
2805              root  path,  paths  will  never  end  in the path separator when
2806              matching is attempted.  Thus, if a given pattern ends in a  path
2807              separator,  a  '*'  is  appended before matching is attempted. A
2808              leading path separator is always removed.
2809
2810       Shell-style patterns, selector sh:
2811              This is the default style  for  --pattern  and  --patterns-from.
2812              Like  fnmatch  patterns these are similar to shell patterns. The
2813              difference is that the pattern may include **/ for matching zero
2814              or  more directory levels, * for matching zero or more arbitrary
2815              characters with the exception of any path separator.  A  leading
2816              path separator is always removed.
2817
2818       Regular expressions, selector re:
2819              Regular  expressions  similar  to  those  found in Perl are sup‐
2820              ported. Unlike shell patterns regular expressions  are  not  re‐
2821              quired  to match the full path and any substring match is suffi‐
2822              cient. It is strongly recommended  to  anchor  patterns  to  the
2823              start  ('^'),  to  the end ('$') or both. Path separators (back‐
2824              slash for Windows and '/' on other systems) in paths are  always
2825              normalized  to  a forward slash ('/') before applying a pattern.
2826              The regular expression syntax is described in the  Python  docu‐
2827              mentation for the re module.
2828
2829       Path prefix, selector pp:
2830              This pattern style is useful to match whole sub-directories. The
2831              pattern  pp:root/somedir  matches  root/somedir  and  everything
2832              therein. A leading path separator is always removed.
2833
2834       Path full-match, selector pf:
2835              This  pattern  style is (only) useful to match full paths.  This
2836              is kind of a pseudo pattern as it can not have any  variable  or
2837              unspecified   parts   -   the   full   path   must   be   given.
2838              pf:root/file.ext matches root/file.ext only. A leading path sep‐
2839              arator is always removed.
2840
2841              Implementation note: this is implemented via very time-efficient
2842              O(1) hashtable lookups (this means you can have huge amounts  of
2843              such patterns without impacting performance much).  Due to that,
2844              this kind of pattern does not respect any context or order.   If
2845              you  use such a pattern to include a file, it will always be in‐
2846              cluded (if the directory recursion encounters  it).   Other  in‐
2847              clude/exclude  patterns  that  would  normally match will be ig‐
2848              nored.  Same logic applies for exclude.
2849
2850       NOTE:
2851          re:, sh: and fm: patterns are all implemented on top of  the  Python
2852          SRE  engine. It is very easy to formulate patterns for each of these
2853          types which requires an inordinate amount of time to match paths. If
2854          untrusted users are able to supply patterns, ensure they cannot sup‐
2855          ply re: patterns.  Further, ensure that sh: and  fm:  patterns  only
2856          contain a handful of wildcards at most.
2857
2858       Exclusions  can  be  passed via the command line option --exclude. When
2859       used from within a shell, the patterns should be quoted to protect them
2860       from expansion.
2861
2862       The  --exclude-from  option  permits  loading exclusion patterns from a
2863       text file with one pattern per line. Lines empty or starting  with  the
2864       number  sign  ('#') after removing whitespace on both ends are ignored.
2865       The optional style selector  prefix  is  also  supported  for  patterns
2866       loaded from a file. Due to whitespace removal, paths with whitespace at
2867       the beginning or end can only be excluded using regular expressions.
2868
2869       To test your exclusion patterns without performing an actual backup you
2870       can run borg create --list --dry-run ....
2871
2872       Examples:
2873
2874          # Exclude '/home/user/file.o' but not '/home/user/file.odt':
2875          $ borg create -e '*.o' backup /
2876
2877          # Exclude '/home/user/junk' and '/home/user/subdir/junk' but
2878          # not '/home/user/importantjunk' or '/etc/junk':
2879          $ borg create -e 'home/*/junk' backup /
2880
2881          # Exclude the contents of '/home/user/cache' but not the directory itself:
2882          $ borg create -e home/user/cache/ backup /
2883
2884          # The file '/home/user/cache/important' is *not* backed up:
2885          $ borg create -e home/user/cache/ backup / /home/user/cache/important
2886
2887          # The contents of directories in '/home' are not backed up when their name
2888          # ends in '.tmp'
2889          $ borg create --exclude 're:^home/[^/]+\.tmp/' backup /
2890
2891          # Load exclusions from file
2892          $ cat >exclude.txt <<EOF
2893          # Comment line
2894          home/*/junk
2895          *.tmp
2896          fm:aa:something/*
2897          re:^home/[^/]+\.tmp/
2898          sh:home/*/.thumbnails
2899          # Example with spaces, no need to escape as it is processed by borg
2900          some file with spaces.txt
2901          EOF
2902          $ borg create --exclude-from exclude.txt backup /
2903
2904       A  more  general and easier to use way to define filename matching pat‐
2905       terns exists with the  --pattern  and  --patterns-from  options.  Using
2906       these,  you may specify the backup roots (starting points) and patterns
2907       for inclusion/exclusion.  A root path starts with the  prefix  R,  fol‐
2908       lowed  by  a  path  (a plain path, not a file pattern). An include rule
2909       starts with the prefix +, an exclude rule starts with the prefix -,  an
2910       exclude-norecurse rule starts with !, all followed by a pattern.
2911
2912       NOTE:
2913          Via  --pattern  or --patterns-from you can define BOTH inclusion and
2914          exclusion of files using pattern prefixes + and  -.  With  --exclude
2915          and --exclude-from ONLY excludes are defined.
2916
2917       Inclusion patterns are useful to include paths that are contained in an
2918       excluded path. The first matching pattern is used so if an include pat‐
2919       tern  matches  before  an exclude pattern, the file is backed up. If an
2920       exclude-norecurse pattern matches a directory, it won't recurse into it
2921       and  won't  discover any potential matches for include rules below that
2922       directory.
2923
2924       NOTE:
2925          It's possible that a sub-directory/file is matched while parent  di‐
2926          rectories  are not.  In that case, parent directories are not backed
2927          up thus their user, group, permission, etc. can not be restored.
2928
2929       Note that the default pattern style for --pattern  and  --patterns-from
2930       is  shell  style  (sh:),  so those patterns behave similar to rsync in‐
2931       clude/exclude patterns. The pattern style can be set via the P prefix.
2932
2933       Patterns (--pattern) and excludes (--exclude) from the command line are
2934       considered  first  (in  the  order  of  appearance). Then patterns from
2935       --patterns-from are added. Exclusion patterns from --exclude-from files
2936       are appended last.
2937
2938       Examples:
2939
2940          # backup pics, but not the ones from 2018, except the good ones:
2941          # note: using = is essential to avoid cmdline argument parsing issues.
2942          borg create --pattern=+pics/2018/good --pattern=-pics/2018 repo::arch pics
2943
2944          # use a file with patterns:
2945          borg create --patterns-from patterns.lst repo::arch
2946
2947       The patterns.lst file could look like that:
2948
2949          # "sh:" pattern style is the default, so the following line is not needed:
2950          P sh
2951          R /
2952          # can be rebuild
2953          - home/*/.cache
2954          # they're downloads for a reason
2955          - home/*/Downloads
2956          # susan is a nice person
2957          # include susans home
2958          + home/susan
2959          # also back up this exact file
2960          + pf:home/bobby/specialfile.txt
2961          # don't backup the other home directories
2962          - home/*
2963          # don't even look in /proc
2964          ! proc
2965
2966       You can specify recursion roots either on the command line or in a pat‐
2967       ternfile:
2968
2969          # these two commands do the same thing
2970          borg create --exclude home/bobby/junk repo::arch /home/bobby /home/susan
2971          borg create --patterns-from patternfile.lst repo::arch
2972
2973       The patternfile:
2974
2975          # note that excludes use fm: by default and patternfiles use sh: by default.
2976          # therefore, we need to specify fm: to have the same exact behavior.
2977          P fm
2978          R /home/bobby
2979          R /home/susan
2980
2981          - home/bobby/junk
2982
2983       This allows you to share the same patterns between  multiple  reposito‐
2984       ries without needing to specify them on the command line.
2985
2986   borg help placeholders
2987       Repository  (or Archive) URLs, --prefix, --glob-archives, --comment and
2988       --remote-path values support these placeholders:
2989
2990       {hostname}
2991              The (short) hostname of the machine.
2992
2993       {fqdn} The full name of the machine.
2994
2995       {reverse-fqdn}
2996              The full name of the machine in reverse domain name notation.
2997
2998       {now}  The current local date and time, by default in ISO-8601  format.
2999              You   can   also   supply   your   own   format   string,   e.g.
3000              {now:%Y-%m-%d_%H:%M:%S}
3001
3002       {utcnow}
3003              The current UTC date and time, by default  in  ISO-8601  format.
3004              You   can  also  supply  your  own  format  string,  e.g.  {utc‐
3005              now:%Y-%m-%d_%H:%M:%S}
3006
3007       {user} The user name (or UID, if no name is available) of the user run‐
3008              ning borg.
3009
3010       {pid}  The current process ID.
3011
3012       {borgversion}
3013              The version of borg, e.g.: 1.0.8rc1
3014
3015       {borgmajor}
3016              The version of borg, only the major version, e.g.: 1
3017
3018       {borgminor}
3019              The version of borg, only major and minor version, e.g.: 1.0
3020
3021       {borgpatch}
3022              The  version of borg, only major, minor and patch version, e.g.:
3023              1.0.8
3024
3025       If literal curly braces need to be used, double them for escaping:
3026
3027          borg create /path/to/repo::{{literal_text}}
3028
3029       Examples:
3030
3031          borg create /path/to/repo::{hostname}-{user}-{utcnow} ...
3032          borg create /path/to/repo::{hostname}-{now:%Y-%m-%d_%H:%M:%S} ...
3033          borg prune --prefix '{hostname}-' ...
3034
3035       NOTE:
3036          systemd uses a difficult, non-standard syntax for command  lines  in
3037          unit files (refer to the systemd.unit(5) manual page).
3038
3039          When  invoking borg from unit files, pay particular attention to es‐
3040          caping, especially when using  the  now/utcnow  placeholders,  since
3041          systemd performs its own %-based variable replacement even in quoted
3042          text. To avoid interference from systemd, double all  percent  signs
3043          ({hostname}-{now:%Y-%m-%d_%H:%M:%S}          becomes          {host‐
3044          name}-{now:%%Y-%%m-%%d_%%H:%%M:%%S}).
3045
3046   borg help compression
3047       It is no problem to mix different  compression  methods  in  one  repo,
3048       deduplication  is done on the source data chunks (not on the compressed
3049       or encrypted data).
3050
3051       If some specific chunk was once compressed and stored  into  the  repo,
3052       creating  another  backup that also uses this chunk will not change the
3053       stored chunk.  So if you use different compression specs for the  back‐
3054       ups,  whichever  stores  a  chunk first determines its compression. See
3055       also borg recreate.
3056
3057       Compression is lz4 by default. If you want something else, you have  to
3058       specify what you want.
3059
3060       Valid compression specifiers are:
3061
3062       none   Do not compress.
3063
3064       lz4    Use lz4 compression. Very high speed, very low compression. (de‐
3065              fault)
3066
3067       zstd[,L]
3068              Use zstd ("zstandard") compression, a  modern  wide-range  algo‐
3069              rithm.   If  you  do not explicitly give the compression level L
3070              (ranging from 1 to 22), it will  use  level  3.   Archives  com‐
3071              pressed with zstd are not compatible with borg < 1.1.4.
3072
3073       zlib[,L]
3074              Use  zlib  ("gz") compression. Medium speed, medium compression.
3075              If you do not explicitly give the compression level  L  (ranging
3076              from  0  to  9), it will use level 6.  Giving level 0 (means "no
3077              compression", but still has zlib protocol overhead)  is  usually
3078              pointless, you better use "none" compression.
3079
3080       lzma[,L]
3081              Use  lzma  ("xz")  compression. Low speed, high compression.  If
3082              you do not explicitly give the compression level L (ranging from
3083              0  to  9), it will use level 6.  Giving levels above 6 is point‐
3084              less and counterproductive because it does not  compress  better
3085              due  to the buffer size used by borg - but it wastes lots of CPU
3086              cycles and RAM.
3087
3088       auto,C[,L]
3089              Use a built-in heuristic to decide per chunk whether to compress
3090              or  not.   The heuristic tries with lz4 whether the data is com‐
3091              pressible.  For incompressible data, it will not use compression
3092              (uses  "none").   For compressible data, it uses the given C[,L]
3093              compression - with C[,L] being any valid compression specifier.
3094
3095       obfuscate,SPEC,C[,L]
3096              Use compressed-size obfuscation to make  fingerprinting  attacks
3097              based on the observable stored chunk size more difficult.  Note:
3098              - you must combine this with encryption or  it  won't  make  any
3099              sense.  - your repo size will be bigger, of course.
3100
3101              The  SPEC  value  will  determine  how the size obfuscation will
3102              work:
3103
3104              Relative random reciprocal size variation: Size will increase by
3105              a factor, relative to the compressed data size.  Smaller factors
3106              are often used, larger factors rarely.  1: factor 0.01 ..  100.0
3107              2:  factor 0.1 .. 1000.0 3: factor 1.0 .. 10000.0 4: factor 10.0
3108              .. 100000.0 5: factor 100.0 .. 1000000.0  6:  factor  1000.0  ..
3109              10000000.0
3110
3111              Add a randomly sized padding up to the given size: 110: 1kiB ...
3112              120: 1MiB ...  123: 8MiB (max.)
3113
3114       Examples:
3115
3116          borg create --compression lz4 REPO::ARCHIVE data
3117          borg create --compression zstd REPO::ARCHIVE data
3118          borg create --compression zstd,10 REPO::ARCHIVE data
3119          borg create --compression zlib REPO::ARCHIVE data
3120          borg create --compression zlib,1 REPO::ARCHIVE data
3121          borg create --compression auto,lzma,6 REPO::ARCHIVE data
3122          borg create --compression auto,lzma ...
3123          borg create --compression obfuscate,3,none ...
3124          borg create --compression obfuscate,3,auto,zstd,10 ...
3125          borg create --compression obfuscate,2,zstd,6 ...
3126

DEBUGGING FACILITIES

3128       There is a borg debug command that has some subcommands which  are  all
3129       not  intended for normal use and potentially very dangerous if used in‐
3130       correctly.
3131
3132       For example, borg debug put-obj and borg debug delete-obj will only  do
3133       what  their  name suggests: put objects into repo / delete objects from
3134       repo.
3135
3136       Please note:
3137
3138       • they will not update the chunks cache (chunks index) about the object
3139
3140       • they will not update the  manifest  (so  no  automatic  chunks  index
3141         resync is triggered)
3142
3143       • they  will  not  check  whether  the  object  is  in use (e.g. before
3144         delete-obj)
3145
3146       • they will not update any metadata which may point to the object
3147
3148       They exist to improve debugging capabilities without direct system  ac‐
3149       cess, e.g.  in case you ever run into some severe malfunction. Use them
3150       only if you know what you are doing or  if  a  trusted  Borg  developer
3151       tells you what to do.
3152
3153       Borg has a --debug-topic TOPIC option to enable specific debugging mes‐
3154       sages. Topics are generally not documented.
3155
3156       A --debug-profile FILE option exists which writes a profile of the main
3157       program's  execution  to  a  file. The format of these files is not di‐
3158       rectly compatible with the Python profiling tools, since these use  the
3159       "marshal"  format,  which  is  not  intended  to be secure (quoting the
3160       Python docs: "Never unmarshal data received from an untrusted or  unau‐
3161       thenticated source.").
3162
3163       The  borg debug profile-convert command can be used to take a Borg pro‐
3164       file and convert it to a profile  file  that  is  compatible  with  the
3165       Python tools.
3166
3167       Additionally,  if  the filename specified for --debug-profile ends with
3168       ".pyprof" a Python compatible profile is generated. This  is  only  in‐
3169       tended for local use by developers.
3170

ADDITIONAL NOTES

3172       Here  are misc. notes about topics that are maybe not covered in enough
3173       detail in the usage section.
3174
3175   --chunker-params
3176       The chunker params influence  how  input  files  are  cut  into  pieces
3177       (chunks)  which are then considered for deduplication. They also have a
3178       big impact on resource usage (RAM and disk space) as the amount of  re‐
3179       sources  needed  is  (also) determined by the total amount of chunks in
3180       the repository (see cache-memory-usage for details).
3181
3182       --chunker-params=buzhash,10,23,16,4095 results in a fine-grained  dedu‐
3183       plication|  and  creates  a big amount of chunks and thus uses a lot of
3184       resources to manage them. This is good for relatively small  data  vol‐
3185       umes and if the machine has a good amount of free RAM and disk space.
3186
3187       --chunker-params=buzhash,19,23,21,4095    (default)    results   in   a
3188       coarse-grained deduplication and  creates  a  much  smaller  amount  of
3189       chunks  and  thus  uses less resources. This is good for relatively big
3190       data volumes and if the machine has a relatively low amount of free RAM
3191       and disk space.
3192
3193       --chunker-params=fixed,4194304  results in fixed 4MiB sized block dedu‐
3194       plication and is more efficient than the previous example when used for
3195       for  block  devices (like disks, partitions, LVM LVs) or raw disk image
3196       files.
3197
3198       --chunker-params=fixed,4096,512 results in fixed 4kiB sized blocks, but
3199       the  first header block will only be 512B long. This might be useful to
3200       dedup files with 1 header + N fixed size data blocks. Be careful to not
3201       produce  a  too  big  amount of chunks (like using small block size for
3202       huge files).
3203
3204       If you already have made some archives in a  repository  and  you  then
3205       change  chunker  params,  this  of  course impacts deduplication as the
3206       chunks will be cut differently.
3207
3208       In the worst case (all files are big and were touched in between  back‐
3209       ups), this will store all content into the repository again.
3210
3211       Usually, it is not that bad though:
3212
3213       • usually  most  files  are not touched, so it will just re-use the old
3214         chunks it already has in the repo
3215
3216       • files smaller than the (both old and new) minimum chunksize result in
3217         only  one chunk anyway, so the resulting chunks are same and dedupli‐
3218         cation will apply
3219
3220       If you switch chunker params to save resources  for  an  existing  repo
3221       that  already  has some backup archives, you will see an increasing ef‐
3222       fect over time, when more and more files have been touched  and  stored
3223       again  using  the  bigger  chunksize  and all references to the smaller
3224       older chunks have been removed (by deleting / pruning archives).
3225
3226       If you want to see an immediate big effect on resource usage, you  bet‐
3227       ter start a new repository when changing chunker params.
3228
3229       For more details, see chunker_details.
3230
3231   --noatime / --noctime
3232       You can use these borg create options to not store the respective time‐
3233       stamp into the archive, in case you do not really need it.
3234
3235       Besides saving a little space for the not archived timestamp, it  might
3236       also  affect  metadata  stream  deduplication:  if  only this timestamp
3237       changes between backups and is stored into  the  metadata  stream,  the
3238       metadata stream chunks won't deduplicate just because of that.
3239
3240   --nobsdflags / --noflags
3241       You  can use this to not query and store (or not extract and set) flags
3242       - in case you don't need them or if they are broken  somehow  for  your
3243       fs.
3244
3245       On  Linux, dealing with the flags needs some additional syscalls. Espe‐
3246       cially when dealing with lots of small files, this causes a  noticeable
3247       overhead, so you can use this option also for speeding up operations.
3248
3249   --umask
3250       borg  uses  a safe default umask of 077 (that means the files borg cre‐
3251       ates have only permissions for owner, but no permissions for group  and
3252       others) - so there should rarely be a need to change the default behav‐
3253       iour.
3254
3255       This option only affects the process to which it is given.  Thus,  when
3256       you run borg in client/server mode and you want to change the behaviour
3257       on the server side, you need to use borg serve --umask=XXX ... as a ssh
3258       forced  command  in  authorized_keys.  The  --umask  value given on the
3259       client side is not transferred to the server side.
3260
3261       Also, if you choose to use the --umask option, always be consistent and
3262       use the same umask value so you do not create a mixup of permissions in
3263       a borg repository or with other files borg creates.
3264
3265   --read-special
3266       The --read-special option is special - you do not want to  use  it  for
3267       normal full-filesystem backups, but rather after carefully picking some
3268       targets for it.
3269
3270       The option --read-special triggers special treatment for block and char
3271       device files as well as FIFOs. Instead of storing them as such a device
3272       (or FIFO), they will get opened, their content will be read and in  the
3273       backup archive they will show up like a regular file.
3274
3275       Symlinks will also get special treatment if (and only if) they point to
3276       such a special file: instead of storing them as a symlink,  the  target
3277       special file will get processed as described above.
3278
3279       One intended use case of this is backing up the contents of one or mul‐
3280       tiple block devices, like e.g. LVM snapshots or inactive  LVs  or  disk
3281       partitions.
3282
3283       You  need  to  be careful about what you include when using --read-spe‐
3284       cial, e.g. if you include /dev/zero, your backup will never terminate.
3285
3286       Restoring such files' content is currently only supported one at a time
3287       via  --stdout  option (and you have to redirect stdout to where ever it
3288       shall go, maybe directly into an existing device file of your choice or
3289       indirectly via dd).
3290
3291       To  some  extent, mounting a backup archive with the backups of special
3292       files via borg mount and then loop-mounting the image files from inside
3293       the  mount  point  will  work.  If  you plan to access a lot of data in
3294       there, it likely will scale and perform better if you do not  work  via
3295       the FUSE mount.
3296
3297   Example
3298       Imagine  you have made some snapshots of logical volumes (LVs) you want
3299       to backup.
3300
3301       NOTE:
3302          For some scenarios, this is a good method to get  "crash-like"  con‐
3303          sistency  (I  call it crash-like because it is the same as you would
3304          get if you just hit the reset button or your machine would  abruptly
3305          and  completely  crash).   This is better than no consistency at all
3306          and a good method for some use cases, but likely not good enough  if
3307          you have databases running.
3308
3309       Then  you  create  a  backup archive of all these snapshots. The backup
3310       process will see a "frozen" state of the  logical  volumes,  while  the
3311       processes  working  in  the original volumes continue changing the data
3312       stored there.
3313
3314       You also add the output of lvdisplay to your backup, so you can see the
3315       LV sizes in case you ever need to recreate and restore them.
3316
3317       After the backup has completed, you remove the snapshots again.
3318
3319          $ # create snapshots here
3320          $ lvdisplay > lvdisplay.txt
3321          $ borg create --read-special /path/to/repo::arch lvdisplay.txt /dev/vg0/*-snapshot
3322          $ # remove snapshots here
3323
3324       Now, let's see how to restore some LVs from such a backup.
3325
3326          $ borg extract /path/to/repo::arch lvdisplay.txt
3327          $ # create empty LVs with correct sizes here (look into lvdisplay.txt).
3328          $ # we assume that you created an empty root and home LV and overwrite it now:
3329          $ borg extract --stdout /path/to/repo::arch dev/vg0/root-snapshot > /dev/vg0/root
3330          $ borg extract --stdout /path/to/repo::arch dev/vg0/home-snapshot > /dev/vg0/home
3331
3332   Separate compaction
3333       Borg  does not auto-compact the segment files in the repository at com‐
3334       mit time (at the end of each repository-writing command) any more.
3335
3336       This is new since borg 1.2.0 and requires borg >= 1.2.0 on  client  and
3337       server.
3338
3339       This  causes  a similar behaviour of the repository as if it was in ap‐
3340       pend-only mode (see below) most of the time (until borg compact is  in‐
3341       voked or an old client triggers auto-compaction).
3342
3343       This has some notable consequences:
3344
3345       • repository space is not freed immediately when deleting / pruning ar‐
3346         chives
3347
3348       • commands finish quicker
3349
3350       • repository is more robust and might be easier to recover  after  dam‐
3351         ages (as it contains data in a more sequential manner, historic mani‐
3352         fests, multiple commits - until you run borg compact)
3353
3354       • user can choose when to run compaction (it should be done  regularly,
3355         but not necessarily after each single borg command)
3356
3357       • user  can  choose  from  where  to invoke borg compact to do the com‐
3358         paction (from client or from server, it does not need a key)
3359
3360       • less repo sync data traffic in case you create a copy of your reposi‐
3361         tory by using a sync tool (like rsync, rclone, ...)
3362
3363       You can manually run compaction by invoking the borg compact command.
3364
3365   Append-only mode (forbid compaction)
3366       A  repository  can  be  made  "append-only", which means that Borg will
3367       never overwrite or delete committed data  (append-only  refers  to  the
3368       segment  files, but borg will also reject to delete the repository com‐
3369       pletely).
3370
3371       If borg compact command is used on a repo in  append-only  mode,  there
3372       will be no warning or error, but no compaction will happen.
3373
3374       append-only is useful for scenarios where a backup client machine back‐
3375       ups remotely to a backup server using borg serve, since a hacked client
3376       machine cannot delete backups on the server permanently.
3377
3378       To  activate  append-only  mode, set append_only to 1 in the repository
3379       config:
3380
3381          borg config /path/to/repo append_only 1
3382
3383       Note that you can go back-and-forth between normal and append-only  op‐
3384       eration with borg config; it's not a "one way trip."
3385
3386       In  append-only mode Borg will create a transaction log in the transac‐
3387       tions file, where each line is a transaction and a UTC timestamp.
3388
3389       In addition, borg serve can act as if a repository  is  in  append-only
3390       mode  with  its  option  --append-only.  This  can  be  very useful for
3391       fine-tuning access control in .ssh/authorized_keys:
3392
3393          command="borg serve --append-only ..." ssh-rsa <key used for not-always-trustable backup clients>
3394          command="borg serve ..." ssh-rsa <key used for backup management>
3395
3396       Running borg init via a borg serve --append-only server will not create
3397       an  append-only  repository. Running borg init --append-only creates an
3398       append-only repository regardless of server settings.
3399
3400   Example
3401       Suppose an attacker remotely deleted all backups, but  your  repository
3402       was in append-only mode. A transaction log in this situation might look
3403       like this:
3404
3405          transaction 1, UTC time 2016-03-31T15:53:27.383532
3406          transaction 5, UTC time 2016-03-31T15:53:52.588922
3407          transaction 11, UTC time 2016-03-31T15:54:23.887256
3408          transaction 12, UTC time 2016-03-31T15:55:54.022540
3409          transaction 13, UTC time 2016-03-31T15:55:55.472564
3410
3411       From your security logs you conclude  the  attacker  gained  access  at
3412       15:54:00  and  all the backups where deleted or replaced by compromised
3413       backups. From the log you know that transactions 11 and later are  com‐
3414       promised.  Note that the transaction ID is the name of the last file in
3415       the transaction. For example, transaction 11 spans files 6 to 11.
3416
3417       In a real attack you'll likely want to keep the compromised  repository
3418       intact  to analyze what the attacker tried to achieve. It's also a good
3419       idea to make this copy just in case something goes wrong during the re‐
3420       covery. Since recovery is done by deleting some files, a hard link copy
3421       (cp -al) is sufficient.
3422
3423       The first step to reset the repository to transaction 5, the  last  un‐
3424       compromised  transaction,  is to remove the hints.N, index.N and integ‐
3425       rity.N files in the repository (these files are always expendable).  In
3426       this example N is 13.
3427
3428       Then  remove  or move all segment files from the segment directories in
3429       data/ starting with file 6:
3430
3431          rm data/**/{6..13}
3432
3433       That's all to do in the repository.
3434
3435       If you want to access this rollbacked repository from a client that al‐
3436       ready  has  a cache for this repository, the cache will reflect a newer
3437       repository state than what you actually have in the repository now, af‐
3438       ter the rollback.
3439
3440       Thus, you need to clear the cache:
3441
3442          borg delete --cache-only repo
3443
3444       The  cache  will  get rebuilt automatically. Depending on repo size and
3445       archive count, it may take a while.
3446
3447       You  also  will  need  to  remove  ~/.config/borg/security/REPOID/mani‐
3448       fest-timestamp.
3449
3450   Drawbacks
3451       As  data  is only appended, and nothing removed, commands like prune or
3452       delete won't free disk space, they merely tag data as deleted in a  new
3453       transaction.
3454
3455       Be  aware that as soon as you write to the repo in non-append-only mode
3456       (e.g. prune, delete or create archives from an admin machine), it  will
3457       remove  the  deleted  objects permanently (including the ones that were
3458       already marked as deleted, but not removed, in append-only mode). Auto‐
3459       mated  edits  to the repository (such as a cron job running borg prune)
3460       will render append-only mode moot if data is deleted.
3461
3462       Even if an archive appears to be available, it is possible an  attacker
3463       could delete just a few chunks from an archive and silently corrupt its
3464       data. While in append-only mode, this is  reversible,  but  borg  check
3465       should  be  run  before  a  writing/pruning operation on an append-only
3466       repository to catch accidental or malicious corruption:
3467
3468          # run without append-only mode
3469          borg check --verify-data repo && borg compact repo
3470
3471       Aside from checking repository & archive integrity you may want to also
3472       manually check backups to ensure their content seems correct.
3473
3474   Further considerations
3475       Append-only  mode  is  not respected by tools other than Borg. rm still
3476       works on the repository. Make sure that backup client machines only get
3477       to access the repository via borg serve.
3478
3479       Ensure that no remote access is possible if the repository is temporar‐
3480       ily set to normal mode for e.g. regular pruning.
3481
3482       Further protections can be  implemented,  but  are  outside  of  Borg's
3483       scope. For example, file system snapshots or wrapping borg serve to set
3484       special permissions or ACLs on new data files.
3485
3486   SSH batch mode
3487       When running Borg using an automated script, ssh might still ask for  a
3488       password,  even  if there is an SSH key for the target server. Use this
3489       to make scripts more robust:
3490
3491          export BORG_RSH='ssh -oBatchMode=yes'
3492

AUTHOR

3494       The Borg Collective (see AUTHORS file)
3495
3497       2010-2022 Jonas Borgström, 2015-2022 The Borg Collective  (see  AUTHORS
3498       file)
3499
3500
3501
3502
35031.2.1                             2022-06-06                           BORG(1)
Impressum