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
21       notice 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       http://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
74       directory
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,
131       error 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_HOSTNAME_IS_UNIQUE=no
226                     Borg assumes that it can derive a unique hostname / iden‐
227                     tity (see borg debug info).  If this is not the  case  or
228                     you do not want Borg to automatically remove stale locks,
229                     set this to no.
230
231              BORG_HOST_ID
232                     Borg usually computes a host id from the  FQDN  plus  the
233                     results of uuid.getnode() (which usually returns a unique
234                     id based on the MAC address  of  the  network  interface.
235                     Except  if that MAC happens to be all-zero - in that case
236                     it returns a random value, which  is  not  what  we  want
237                     (because  it kills automatic stale lock removal).  So, if
238                     you have a all-zero MAC address or other reasons to  bet‐
239                     ter  externally  control the host id, just set this envi‐
240                     ronment variable to a unique value. If all your FQDNs are
241                     unique,   you   can  just  use  the  FQDN.  If  not,  use
242                     fqdn@uniqueid.
243
244              BORG_LOGGING_CONF
245                     When set, use the given  filename  as  INI-style  logging
246                     configuration.   A  basic  example  conf  can be found at
247                     docs/misc/logging.conf.
248
249              BORG_RSH
250                     When set, use this command instead of ssh.  This  can  be
251                     used  to  specify  ssh options, such as a custom identity
252                     file ssh -i /path/to/private/key. See man ssh  for  other
253                     options. Using the --rsh CMD commandline option overrides
254                     the environment variable.
255
256              BORG_REMOTE_PATH
257                     When set, use the given path as borg  executable  on  the
258                     remote    (defaults   to   "borg"   if   unset).    Using
259                     --remote-path PATH commandline option overrides the envi‐
260                     ronment variable.
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              TMPDIR where temporary files are stored (might  need  a  lot  of
276                     temporary  space  for  some operations), see tempfile for
277                     details
278
279       Some automatic answerers (if set, they automatically  answer  confirma‐
280       tion questions):
281
282              BORG_UNKNOWN_UNENCRYPTED_REPO_ACCESS_IS_OK=no (or =yes)
283                     For  "Warning:  Attempting to access a previously unknown
284                     unencrypted repository"
285
286              BORG_RELOCATED_REPO_ACCESS_IS_OK=no (or =yes)
287                     For "Warning: The repository at location ...  was  previ‐
288                     ously located at ..."
289
290              BORG_CHECK_I_KNOW_WHAT_I_AM_DOING=NO (or =YES)
291                     For "Warning: 'check --repair' is an experimental feature
292                     that might result in data loss."
293
294              BORG_DELETE_I_KNOW_WHAT_I_AM_DOING=NO (or =YES)
295                     For "You requested to completely  DELETE  the  repository
296                     including all archives it contains:"
297
298              BORG_RECREATE_I_KNOW_WHAT_I_AM_DOING=NO (or =YES)
299                     For "recreate is an experimental feature."
300
301              Note:  answers  are  case  sensitive.  setting an invalid answer
302              value might either give the default answer or ask  you  interac‐
303              tively,  depending  on  whether  retries  are  allowed  (they by
304              default are allowed). So please test your scripts  interactively
305              before making them a non-interactive script.
306
307       Directories and files:
308
309              BORG_BASE_DIR
310                     Default  to  '$HOME', '~$USER', '~' (in that order)'.  If
311                     we refer to ~ below, we in fact mean BORG_BASE_DIR.
312
313              BORG_CONFIG_DIR
314                     Default to '~/.config/borg'. This directory contains  the
315                     whole config directories.
316
317              BORG_CACHE_DIR
318                     Default  to  '~/.cache/borg'. This directory contains the
319                     local cache and might need a lot  of  space  for  dealing
320                     with big repositories.
321
322              BORG_SECURITY_DIR
323                     Default to '~/.config/borg/security'. This directory con‐
324                     tains information borg uses to track its usage of  NONCES
325                     ("numbers used once" - usually in encryption context) and
326                     other security relevant data.
327
328              BORG_KEYS_DIR
329                     Default to '~/.config/borg/keys'. This directory contains
330                     keys for encrypted repositories.
331
332              BORG_KEY_FILE
333                     When set, use the given filename as repository key file.
334
335       Building:
336
337              BORG_OPENSSL_PREFIX
338                     Adds  given  OpenSSL header file directory to the default
339                     locations (setup.py).
340
341              BORG_LIBLZ4_PREFIX
342                     Adds given prefix directory to the default locations.  If
343                     a  'include/lz4.h'  is  found Borg will be linked against
344                     the system liblz4 instead of  a  bundled  implementation.
345                     (setup.py)
346
347              BORG_LIBB2_PREFIX
348                     Adds  given prefix directory to the default locations. If
349                     a 'include/blake2.h' is found Borg will be linked against
350                     the  system  libb2  instead  of a bundled implementation.
351                     (setup.py)
352
353              BORG_LIBZSTD_PREFIX
354                     Adds given prefix directory to the default locations.  If
355                     a  'include/zstd.h'  is found Borg will be linked against
356                     the system libzstd instead of a  bundled  implementation.
357                     (setup.py)
358
359       Please note:
360
361       · be very careful when using the "yes" sayers, the warnings with prompt
362         exist for your / your data's security/safety
363
364       · also be very careful when putting your passphrase into a script, make
365         sure it has appropriate file permissions (e.g. mode 600, root:root).
366
367   File systems
368       We  strongly  recommend  against using Borg (or any other database-like
369       software) on non-journaling file systems like FAT, since it is not pos‐
370       sible  to assume any consistency in case of power failures (or a sudden
371       disconnect of an external drive or similar failures).
372
373       While Borg uses a data store that is resilient against  these  failures
374       when  used  on journaling file systems, it is not possible to guarantee
375       this with some hardware -- independent of the software used.  We  don't
376       know a list of affected hardware.
377
378       If  you are suspicious whether your Borg repository is still consistent
379       and readable after one of the failures mentioned  above  occurred,  run
380       borg  check  --verify-data to make sure it is consistent.  Requirements
381       for Borg repository file systems.INDENT 0.0
382
383       · Long file names
384
385       · At least three directory levels with short names
386
387       · Typically, file sizes up to a few hundred MB.  Large repositories may
388         require large files (>2 GB).
389
390       · Up  to  1000  files per directory (10000 for repositories initialized
391         with Borg 1.0)
392
393       · mkdir(2) should be atomic, since it is used for locking
394
395       · Hardlinks are needed for borg_upgrade --inplace
396
397   Units
398       To display quantities, Borg takes care of respecting the usual  conven‐
399       tions  of  scale.  Disk sizes are displayed in decimal, using powers of
400       ten (so kB means 1000 bytes). For memory  usage,  binary  prefixes  are
401       used,  and are indicated using the IEC binary prefixes, using powers of
402       two (so KiB means 1024 bytes).
403
404   Date and Time
405       We format date and time conforming to ISO-8601, that is: YYYY-MM-DD and
406       HH:MM:SS (24h clock).
407
408       For more information about that, see: https://xkcd.com/1179/
409
410       Unless otherwise noted, we display local date and time.  Internally, we
411       store and process date and time as UTC.
412
413   Resource Usage
414       Borg might use a lot of resources depending on the size of the data set
415       it is dealing with.
416
417       If  one  uses Borg in a client/server way (with a ssh: repository), the
418       resource usage occurs in part on the client and in another part on  the
419       server.
420
421       If  one uses Borg as a single process (with a filesystem repo), all the
422       resource usage occurs in that one process, so  just  add  up  client  +
423       server to get the approximate resource usage.
424
425       CPU client:
426
427              · borg create: does chunking, hashing, compression, crypto (high
428                CPU usage)
429
430              · chunks cache sync: quite heavy on CPU, doing lots of hashtable
431                operations.
432
433              · borg extract: crypto, decompression (medium to high CPU usage)
434
435              · borg check: similar to extract, but depends on options given.
436
437              · borg prune / borg delete archive: low to medium CPU usage
438
439              · borg delete repo: done on the server
440
441              It  won't go beyond 100% of 1 core as the code is currently sin‐
442              gle-threaded.  Especially higher zlib and lzma compression  lev‐
443              els use significant amounts of CPU cycles. Crypto might be cheap
444              on the CPU (if hardware accelerated) or expensive (if not).
445
446       CPU server:
447              It usually doesn't  need  much  CPU,  it  just  deals  with  the
448              key/value  store  (repository) and uses the repository index for
449              that.
450
451              borg check: the repository check computes the checksums  of  all
452              chunks (medium CPU usage) borg delete repo: low CPU usage
453
454       CPU (only for client/server operation):
455              When  using  borg  in a client/server way with a ssh:-type repo,
456              the ssh processes used for the transport layer  will  need  some
457              CPU  on  the client and on the server due to the crypto they are
458              doing - esp. if you are pumping big amounts of data.
459
460       Memory (RAM) client:
461              The chunks index and the files index are read  into  memory  for
462              performance  reasons.  Might  need  big  amounts  of memory (see
463              below).  Compression, esp. lzma  compression  with  high  levels
464              might need substantial amounts of memory.
465
466       Memory (RAM) server:
467              The  server  process will load the repository index into memory.
468              Might need considerable amounts of memory, but less than on  the
469              client (see below).
470
471       Chunks index (client only):
472              Proportional  to the amount of data chunks in your repo. Lots of
473              chunks in your repo imply a big chunks index.  It is possible to
474              tweak the chunker params (see create options).
475
476       Files index (client only):
477              Proportional to the amount of files in your last backups. Can be
478              switched off (see create options), but next backup might be much
479              slower if you do.  The speed benefit of using the files cache is
480              proportional to file size.
481
482       Repository index (server only):
483              Proportional to the amount of data chunks in your repo. Lots  of
484              chunks  in your repo imply a big repository index.  It is possi‐
485              ble to tweak the chunker params (see create options)  to  influ‐
486              ence the amount of chunks being created.
487
488       Temporary files (client):
489              Reading  data  and  metadata from a FUSE mounted repository will
490              consume up to the size of all deduplicated, small chunks in  the
491              repository. Big chunks won't be locally cached.
492
493       Temporary files (server):
494              None.
495
496       Cache files (client only):
497              Contains  the chunks index and files index (plus a collection of
498              single- archive chunk indexes which might need huge  amounts  of
499              disk  space, depending on archive count and size - see FAQ about
500              how to reduce).
501
502       Network (only for client/server operation):
503              If your repository is remote, all deduplicated  (and  optionally
504              compressed/ encrypted) data of course has to go over the connec‐
505              tion (ssh:// repo url).  If you use a  locally  mounted  network
506              filesystem,  additionally some copy operations used for transac‐
507              tion support also go over the connection. If you backup multiple
508              sources to one target repository, additional traffic happens for
509              cache resynchronization.
510
511   Support for file metadata
512       Besides regular file and directory structures, Borg can preserve
513
514       · symlinks (stored as symlink, the symlink is not followed)
515
516       · special files:
517
518         · character and block device files (restored via mknod)
519
520         · FIFOs ("named pipes")
521
522         · special file contents can be backed up in --read-special mode.   By
523           default  the  metadata to create them with mknod(2), mkfifo(2) etc.
524           is stored.
525
526       · hardlinked regular files, devices, FIFOs (considering  all  items  in
527         the same archive)
528
529       · timestamps in nanosecond precision: mtime, atime, ctime
530
531       · other timestamps: birthtime (on platforms supporting it)
532
533       · permissions:
534
535         · IDs of owning user and owning group
536
537         · names of owning user and owning group (if the IDs can be resolved)
538
539         · Unix Mode/Permissions (u/g/o permissions, suid, sgid, sticky)
540
541       On some platforms additional features are supported:
542
543                ┌─────────────────┬──────────┬───────────┬───────────┐
544                │Platform         │ ACLs [5] │ xattr [6] │ Flags [7] │
545                ├─────────────────┼──────────┼───────────┼───────────┤
546                │Linux            │ Yes      │ Yes       │ Yes [1]   │
547                ├─────────────────┼──────────┼───────────┼───────────┤
548                │Mac OS X         │ Yes      │ Yes       │ Yes (all) │
549                ├─────────────────┼──────────┼───────────┼───────────┤
550                │FreeBSD          │ Yes      │ Yes       │ Yes (all) │
551                ├─────────────────┼──────────┼───────────┼───────────┤
552                │OpenBSD          │ n/a      │ n/a       │ Yes (all) │
553                ├─────────────────┼──────────┼───────────┼───────────┤
554                │NetBSD           │ n/a      │ No [2]    │ Yes (all) │
555                ├─────────────────┼──────────┼───────────┼───────────┤
556                │Solaris  and de‐ │ No [3]   │ No [3]    │ n/a       │
557                │rivatives        │          │           │           │
558                ├─────────────────┼──────────┼───────────┼───────────┤
559                │Windows (cygwin) │ No [4]   │ No        │ No        │
560                └─────────────────┴──────────┴───────────┴───────────┘
561
562       Other Unix-like operating systems may work as well, but have  not  been
563       tested at all.
564
565       Note  that  most  of the platform-dependent features also depend on the
566       file system.  For example, ntfs-3g on Linux isn't able to  convey  NTFS
567       ACLs.
568
569       [1]  Only  "nodump",  "immutable",  "compressed"  and "append" are sup‐
570            ported.  Feature request #618 for more flags.
571
572       [2]  Feature request #1332
573
574       [3]  Feature request #1337
575
576       [4]  Cygwin tries to map NTFS ACLs to permissions with varying  degress
577            of success.
578
579       [5]  The  native access control list mechanism of the OS. This normally
580            limits access to non-native ACLs. For example,  NTFS  ACLs  aren't
581            completely accessible on Linux with ntfs-3g.
582
583       [6]  extended  attributes;  key-value  pairs attached to a file, mainly
584            used by the OS.  This includes resource forks on Mac OS X.
585
586       [7]  aka BSD flags. The Linux set of flags [1] is portable across plat‐
587            forms.  The BSDs define additional flags.
588
589            In case you are interested in more details (like formulas), please
590            see internals. For details on the available JSON output, refer  to
591            json_output.
592
593   Common options
594       All Borg commands share these options:
595
596       -h, --help
597              show this help message and exit
598
599       --critical
600              work on log level CRITICAL
601
602       --error
603              work on log level ERROR
604
605       --warning
606              work on log level WARNING (default)
607
608       --info, -v, --verbose
609              work on log level INFO
610
611       --debug
612              enable debug output, work on log level DEBUG
613
614       --debug-topic TOPIC
615              enable  TOPIC  debugging  (can be specified multiple times). The
616              logger path is borg.debug.<TOPIC> if TOPIC is not  fully  quali‐
617              fied.
618
619       -p, --progress
620              show progress information
621
622       --log-json
623              Output one JSON object per log line instead of formatted text.
624
625       --lock-wait SECONDS
626              wait  at  most  SECONDS  for  acquiring  a repository/cache lock
627              (default: 1).
628
629       --show-version
630              show/log the borg version
631
632       --show-rc
633              show/log the return code (rc)
634
635       --umask M
636              set umask to M (local and remote, default: 0077)
637
638       --remote-path PATH
639              use PATH as borg executable on the remote (default: "borg")
640
641       --remote-ratelimit RATE
642              set remote network  upload  rate  limit  in  kiByte/s  (default:
643              0=unlimited)
644
645       --consider-part-files
646              treat part files like normal files (e.g. to list/extract them)
647
648       --debug-profile FILE
649              Write  execution profile in Borg format into FILE. For local use
650              a Python-compatible file can be generated by suffixing FILE with
651              ".pyprof".
652
653       --rsh RSH
654              Use  this  command  to  connect  to  the  'borg  serve'  process
655              (default: 'ssh')
656
657   Examples
658          # Create an archive and log: borg version, files list, return code
659          $ borg create --show-version --list --show-rc /path/to/repo::my-files files
660

BORG INIT

662          borg [common options] init [options] [REPOSITORY]
663
664   Description
665       This command  initializes  an  empty  repository.  A  repository  is  a
666       filesystem directory containing the deduplicated data from zero or more
667       archives.
668
669       Encryption can be enabled at repository init time. It cannot be changed
670       later.
671
672       It is not recommended to work without encryption. Repository encryption
673       protects you e.g. against the case that an attacker has access to  your
674       backup repository.
675
676       But be careful with the key / the passphrase:
677
678       If  you  want "passphrase-only" security, use one of the repokey modes.
679       The key will be stored inside the repository (in its "config" file). In
680       above  mentioned  attack  scenario, the attacker will have the key (but
681       not the passphrase).
682
683       If you want "passphrase and having-the-key" security, use  one  of  the
684       keyfile  modes. The key will be stored in your home directory (in .con‐
685       fig/borg/keys).  In the attack scenario,  the  attacker  who  has  just
686       access to your repo won't have the key (and also not the passphrase).
687
688       Make  a  backup copy of the key file (keyfile mode) or repo config file
689       (repokey mode) and keep it at a safe place, so you still have  the  key
690       in  case  it gets corrupted or lost. Also keep the passphrase at a safe
691       place.  The backup that is encrypted with that key won't help you  with
692       that, of course.
693
694       Make sure you use a good passphrase. Not too short, not too simple. The
695       real encryption / decryption key is encrypted with  /  locked  by  your
696       passphrase.   If  an attacker gets your key, he can't unlock and use it
697       without knowing the passphrase.
698
699       Be careful with special or non-ascii characters in your passphrase:
700
701       · Borg processes the passphrase as unicode (and encodes it  as  utf-8),
702         so  it does not have problems dealing with even the strangest charac‐
703         ters.
704
705       · BUT: that does not necessarily apply to your OS / VM / keyboard  con‐
706         figuration.
707
708       So  better  use a long passphrase made from simple ascii chars than one
709       that includes non-ascii stuff or characters that are hard/impossible to
710       enter on a different keyboard layout.
711
712       You can change your passphrase for existing repos at any time, it won't
713       affect the encryption/decryption key or other secrets.
714
715   Encryption modes
716         ┌─────────┬──────────────────┬──────────────────┬──────────────────┐
717         │Hash/MAC │ Not encrypted no │ Not   encrypted, │ Encrypted  (AEAD │
718         │         │ auth             │ but    authenti‐ │ w/   AES)    and │
719         │         │                  │ cated            │ authenticated    │
720         ├─────────┼──────────────────┼──────────────────┼──────────────────┤
721         │SHA-256  │ none             │ authenticated    │ repokey keyfile  │
722         ├─────────┼──────────────────┼──────────────────┼──────────────────┤
723         │BLAKE2b  │ n/a              │ authenti‐repokey-blake2
724         │         │                  │ cated-blake2keyfile-blake2
725         └─────────┴──────────────────┴──────────────────┴──────────────────┘
726
727       Marked  modes are new in Borg 1.1 and are not backwards-compatible with
728       Borg 1.0.x.
729
730       On modern Intel/AMD CPUs (except very cheap ones), AES is usually hard‐
731       ware-accelerated.   BLAKE2b  is  faster than SHA256 on Intel/AMD 64-bit
732       CPUs (except AMD Ryzen and future  CPUs  with  SHA  extensions),  which
733       makes authenticated-blake2 faster than none and authenticated.
734
735       On modern ARM CPUs, NEON provides hardware acceleration for SHA256 mak‐
736       ing it faster than BLAKE2b-256 there. NEON accelerates AES as well.
737
738       Hardware acceleration is always used automatically when available.
739
740       repokey and keyfile use AES-CTR-256 for encryption and HMAC-SHA256  for
741       authentication  in an encrypt-then-MAC (EtM) construction. The chunk ID
742       hash is HMAC-SHA256 as well (with a separate  key).   These  modes  are
743       compatible with Borg 1.0.x.
744
745       repokey-blake2  and  keyfile-blake2  are  also authenticated encryption
746       modes, but use BLAKE2b-256 instead of HMAC-SHA256  for  authentication.
747       The chunk ID hash is a keyed BLAKE2b-256 hash.  These modes are new and
748       not compatible with Borg 1.0.x.
749
750       authenticated mode uses no  encryption,  but  authenticates  repository
751       contents  through  the same HMAC-SHA256 hash as the repokey and keyfile
752       modes (it uses it as the  chunk  ID  hash).  The  key  is  stored  like
753       repokey.  This mode is new and not compatible with Borg 1.0.x.
754
755       authenticated-blake2   is   like  authenticated,  but  uses  the  keyed
756       BLAKE2b-256 hash from the other blake2 modes.  This mode is new and not
757       compatible with Borg 1.0.x.
758
759       none  mode  uses no encryption and no authentication. It uses SHA256 as
760       chunk ID hash. Not recommended, rather consider using an  authenticated
761       or  authenticated/encrypted mode. This mode has possible denial-of-ser‐
762       vice issues when running borg  create  on  contents  controlled  by  an
763       attacker.   Use  it  only  for  new repositories where no encryption is
764       wanted and when compatibility with 1.0.x is important. If compatibility
765       with  1.0.x is not important, use authenticated-blake2 or authenticated
766       instead.  This mode is compatible with Borg 1.0.x.
767
768   Examples
769          # Local repository, repokey encryption, BLAKE2b (often faster, since Borg 1.1)
770          $ borg init --encryption=repokey-blake2 /path/to/repo
771
772          # Local repository (no encryption)
773          $ borg init --encryption=none /path/to/repo
774
775          # Remote repository (accesses a remote borg via ssh)
776          $ borg init --encryption=repokey-blake2 user@hostname:backup
777
778          # Remote repository (store the key your home dir)
779          $ borg init --encryption=keyfile user@hostname:backup
780

BORG CREATE

782          borg [common options] create [options] ARCHIVE [PATH...]
783
784   Description
785       This command creates a backup archive containing all files found  while
786       recursively  traversing all paths specified. Paths are added to the ar‐
787       chive as they are given, that means if relative paths are desired,  the
788       command has to be run from the correct directory.
789
790       When  giving  '-'  as path, borg will read data from standard input and
791       create a file 'stdin' in the created archive from that data.
792
793       The archive will consume almost no disk space for  files  or  parts  of
794       files that have already been stored in other archives.
795
796       The  archive  name needs to be unique. It must not end in '.checkpoint'
797       or '.checkpoint.N' (with N being a number),  because  these  names  are
798       used for checkpoints and treated in special ways.
799
800       In  the  archive  name,  you may use the following placeholders: {now},
801       {utcnow}, {fqdn}, {hostname}, {user} and some others.
802
803       Backup speed is increased by not reprocessing files  that  are  already
804       part of existing archives and weren't modified. The detection of unmod‐
805       ified files is done by comparing multiple  file  metadata  values  with
806       previous values kept in the files cache.
807
808       This   comparison   can   operate   in  different  modes  as  given  by
809       --files-cache:
810
811       · ctime,size,inode (default)
812
813       · mtime,size,inode (default  behaviour  of  borg  versions  older  than
814         1.1.0rc4)
815
816       · ctime,size (ignore the inode number)
817
818       · mtime,size (ignore the inode number)
819
820       · rechunk,ctime  (all  files  are  considered modified - rechunk, cache
821         ctime)
822
823       · rechunk,mtime (all files are considered  modified  -  rechunk,  cache
824         mtime)
825
826       · disabled  (disable  the  files cache, all files considered modified -
827         rechunk)
828
829       inode number: better safety, but often unstable on network filesystems
830
831       Normally, detecting file modifications will take inode information into
832       consideration  to  improve  the  reliability  of file change detection.
833       This is problematic for files located on sshfs and similar network file
834       systems  which  do  not  provide  stable inode numbers, such files will
835       always be considered modified. You can use modes without inode in  this
836       case  to improve performance, but reliability of change detection might
837       be reduced.
838
839       ctime vs. mtime: safety vs. speed
840
841       · ctime is a rather safe way to detect changes to a file (metadata  and
842         contents)  as  it can not be set from userspace. But, a metadata-only
843         change will already update the ctime, so there might be some unneces‐
844         sary  chunking/hashing even without content changes. Some filesystems
845         do not support ctime (change time).
846
847       · mtime usually works and only updates if file contents  were  changed.
848         But  mtime  can  be arbitrarily set from userspace, e.g. to set mtime
849         back to the same value it had before a content change happened.  This
850         can  be  used  maliciously  as  well as well-meant, but in both cases
851         mtime based cache modes can be problematic.
852
853       The mount points of filesystems or filesystem snapshots should  be  the
854       same for every creation of a new archive to ensure fast operation. This
855       is because the file cache that  is  used  to  determine  changed  files
856       quickly  uses  absolute  filenames.   If this is not possible, consider
857       creating a bind mount to a stable location.
858
859       The --progress option shows (from left to right)  Original,  Compressed
860       and  Deduplicated  (O, C and D, respectively), then the Number of files
861       (N) processed so far, followed by the currently processed path.
862
863       When using --stats, you will get some statistics about  how  much  data
864       was  added  - the "This Archive" deduplicated size there is most inter‐
865       esting as that is how much your repository will grow. Please note  that
866       the  "All  archives" stats refer to the state after creation. Also, the
867       --stats and --dry-run options are mutually exclusive because  the  data
868       is not actually compressed and deduplicated during a dry run.
869
870       See  the  output  of  the "borg help patterns" command for more help on
871       exclude patterns.  See the output of the "borg help placeholders"  com‐
872       mand for more help on placeholders.
873
874       The --exclude patterns are not like tar. In tar --exclude .bundler/gems
875       will exclude foo/.bundler/gems. In borg it will not, you  need  to  use
876       --exclude  '*/.bundler/gems' to get the same effect. See borg help pat‐
877       terns for more information.
878
879       In addition  to  using  --exclude  patterns,  it  is  possible  to  use
880       --exclude-if-present to specify the name of a filesystem object (e.g. a
881       file or folder name) which, when contained within another folder,  will
882       prevent  the  containing  folder from being backed up.  By default, the
883       containing folder and all of its contents  will  be  omitted  from  the
884       backup.  If, however, you wish to only include the objects specified by
885       --exclude-if-present in your backup, and not include any other contents
886       of  the  containing  folder,  this  can  be  enabled  through using the
887       --keep-exclude-tags option.
888
889   Item flags
890       --list outputs a list of all files, directories and other  file  system
891       items  it  considered  (no  matter  whether they had content changes or
892       not). For each item, it prefixes a single-letter  flag  that  indicates
893       type and/or status of the item.
894
895       If  you  are  interested  only in a subset of that output, you can give
896       e.g.  --filter=AME and it will only show regular files with A, M  or  E
897       status (see below).
898
899       A  uppercase character represents the status of a regular file relative
900       to the "files" cache (not relative to the repo -- this is an  issue  if
901       the  files  cache  is not used). Metadata is stored in any case and for
902       'A' and 'M' also new data chunks are stored. For 'U'  all  data  chunks
903       refer to already existing chunks.
904
905       · 'A' = regular file, added (see also a_status_oddity in the FAQ)
906
907       · 'M' = regular file, modified
908
909       · 'U' = regular file, unchanged
910
911       · 'E'  =  regular  file, an error happened while accessing/reading this
912         file
913
914       A lowercase character means a file type other than a regular file, borg
915       usually just stores their metadata:
916
917       · 'd' = directory
918
919       · 'b' = block device
920
921       · 'c' = char device
922
923       · 'h' = regular file, hardlink (to already seen inodes)
924
925       · 's' = symlink
926
927       · 'f' = fifo
928
929       Other flags used include:
930
931       · 'i' = backup data was read from standard input (stdin)
932
933       · '-' = dry run, item was not backed up
934
935       · 'x' = excluded, item was not backed up
936
937       · '?'  =  missing  status  code  (if  you  see  this, please file a bug
938         report!)
939
940   Examples
941          # Backup ~/Documents into an archive named "my-documents"
942          $ borg create /path/to/repo::my-documents ~/Documents
943
944          # same, but list all files as we process them
945          $ borg create --list /path/to/repo::my-documents ~/Documents
946
947          # Backup ~/Documents and ~/src but exclude pyc files
948          $ borg create /path/to/repo::my-files \
949              ~/Documents                       \
950              ~/src                             \
951              --exclude '*.pyc'
952
953          # Backup home directories excluding image thumbnails (i.e. only
954          # /home/<one directory>/.thumbnails is excluded, not /home/*/*/.thumbnails etc.)
955          $ borg create /path/to/repo::my-files /home \
956              --exclude 'sh:/home/*/.thumbnails'
957
958          # Backup the root filesystem into an archive named "root-YYYY-MM-DD"
959          # use zlib compression (good, but slow) - default is lz4 (fast, low compression ratio)
960          $ borg create -C zlib,6 --one-file-system /path/to/repo::root-{now:%Y-%m-%d} /
961
962          # Backup a remote host locally ("pull" style) using sshfs
963          $ mkdir sshfs-mount
964          $ sshfs root@example.com:/ sshfs-mount
965          $ cd sshfs-mount
966          $ borg create /path/to/repo::example.com-root-{now:%Y-%m-%d} .
967          $ cd ..
968          $ fusermount -u sshfs-mount
969
970          # Make a big effort in fine granular deduplication (big chunk management
971          # overhead, needs a lot of RAM and disk space, see formula in internals
972          # docs - same parameters as borg < 1.0 or attic):
973          $ borg create --chunker-params 10,23,16,4095 /path/to/repo::small /smallstuff
974
975          # Backup a raw device (must not be active/in use/mounted at that time)
976          $ dd if=/dev/sdx bs=10M | borg create /path/to/repo::my-sdx -
977
978          # No compression (none)
979          $ borg create --compression none /path/to/repo::arch ~
980
981          # Super fast, low compression (lz4, default)
982          $ borg create /path/to/repo::arch ~
983
984          # Less fast, higher compression (zlib, N = 0..9)
985          $ borg create --compression zlib,N /path/to/repo::arch ~
986
987          # Even slower, even higher compression (lzma, N = 0..9)
988          $ borg create --compression lzma,N /path/to/repo::arch ~
989
990          # Only compress compressible data with lzma,N (N = 0..9)
991          $ borg create --compression auto,lzma,N /path/to/repo::arch ~
992
993          # Use short hostname, user name and current time in archive name
994          $ borg create /path/to/repo::{hostname}-{user}-{now} ~
995          # Similar, use the same datetime format as borg 1.1 will have as default
996          $ borg create /path/to/repo::{hostname}-{user}-{now:%Y-%m-%dT%H:%M:%S} ~
997          # As above, but add nanoseconds
998          $ borg create /path/to/repo::{hostname}-{user}-{now:%Y-%m-%dT%H:%M:%S.%f} ~
999
1000          # Backing up relative paths by moving into the correct directory first
1001          $ cd /home/user/Documents
1002          # The root directory of the archive will be "projectA"
1003          $ borg create /path/to/repo::daily-projectA-{now:%Y-%m-%d} projectA
1004

BORG EXTRACT

1006          borg [common options] extract [options] ARCHIVE [PATH...]
1007
1008   Description
1009       This command extracts the contents of an archive. By default the entire
1010       archive  is  extracted  but  a  subset  of files and directories can be
1011       selected by passing a list of PATHs as arguments.  The  file  selection
1012       can further be restricted by using the --exclude option.
1013
1014       See  the  output  of  the "borg help patterns" command for more help on
1015       exclude patterns.
1016
1017       By using --dry-run, you can do all  extraction  steps  except  actually
1018       writing  the  output  data:  reading  metadata and data chunks from the
1019       repo, checking the hash/hmac, decrypting, decompressing.
1020
1021       --progress can be slower than no progress display, since it  makes  one
1022       additional pass over the archive metadata.
1023
1024       NOTE:
1025          Currently,  extract always writes into the current working directory
1026          ("."), so make sure you cd to the right place  before  calling  borg
1027          extract.
1028
1029   Examples
1030          # Extract entire archive
1031          $ borg extract /path/to/repo::my-files
1032
1033          # Extract entire archive and list files while processing
1034          $ borg extract --list /path/to/repo::my-files
1035
1036          # Verify whether an archive could be successfully extracted, but do not write files to disk
1037          $ borg extract --dry-run /path/to/repo::my-files
1038
1039          # Extract the "src" directory
1040          $ borg extract /path/to/repo::my-files home/USERNAME/src
1041
1042          # Extract the "src" directory but exclude object files
1043          $ borg extract /path/to/repo::my-files home/USERNAME/src --exclude '*.o'
1044
1045          # Restore a raw device (must not be active/in use/mounted at that time)
1046          $ borg extract --stdout /path/to/repo::my-sdx | dd of=/dev/sdx bs=10M
1047

BORG CHECK

1049          borg [common options] check [options] [REPOSITORY_OR_ARCHIVE]
1050
1051   Description
1052       The check command verifies the consistency of a repository and the cor‐
1053       responding archives.
1054
1055       First, the underlying repository data files are checked:
1056
1057       · For all segments the segment magic (header) is checked
1058
1059       · For all objects stored in the segments, all metadata  (e.g.  crc  and
1060         size) and all data is read. The read data is checked by size and CRC.
1061         Bit rot and other types of accidental damage  can  be  detected  this
1062         way.
1063
1064       · If we are in repair mode and a integrity error is detected for a seg‐
1065         ment, we try to recover as many objects from the segment as possible.
1066
1067       · In repair mode, it makes sure that the index is consistent  with  the
1068         data stored in the segments.
1069
1070       · If  you use a remote repo server via ssh:, the repo check is executed
1071         on the repo server without causing significant network traffic.
1072
1073       · The repository check can be skipped using the --archives-only option.
1074
1075       Second, the consistency and correctness of the archive metadata is ver‐
1076       ified:
1077
1078       · Is  the  repo  manifest  present?  If not, it is rebuilt from archive
1079         metadata chunks (this requires reading and decrypting of all metadata
1080         and data).
1081
1082       · Check  if  archive  metadata chunk is present. if not, remove archive
1083         from manifest.
1084
1085       · For all files (items) in the archive, for all  chunks  referenced  by
1086         these  files,  check  if chunk is present.  If a chunk is not present
1087         and we are in repair mode, replace it with  a  same-size  replacement
1088         chunk  of  zeros.   If  a previously lost chunk reappears (e.g. via a
1089         later backup) and we are in repair  mode,  the  all-zero  replacement
1090         chunk  will  be replaced by the correct chunk.  This requires reading
1091         of archive and file metadata, but not data.
1092
1093       · If we are in repair mode and we  checked  all  the  archives:  delete
1094         orphaned chunks from the repo.
1095
1096       · if  you  use a remote repo server via ssh:, the archive check is exe‐
1097         cuted on the client machine (because if encryption  is  enabled,  the
1098         checks  will  require decryption and this is always done client-side,
1099         because key access will be required).
1100
1101       · The archive checks can be time consuming, they can be  skipped  using
1102         the --repository-only option.
1103
1104       The --verify-data option will perform a full integrity verification (as
1105       opposed to checking the CRC32 of the  segment)  of  data,  which  means
1106       reading  the data from the repository, decrypting and decompressing it.
1107       This is a cryptographic verification, which  will  detect  (accidental)
1108       corruption.  For encrypted repositories it is tamper-resistant as well,
1109       unless the attacker has access to the keys.
1110
1111       It is also very slow.
1112

BORG RENAME

1114          borg [common options] rename [options] ARCHIVE NEWNAME
1115
1116   Description
1117       This command renames an archive in the repository.
1118
1119       This results in a different archive ID.
1120
1121   Examples
1122          $ borg create /path/to/repo::archivename ~
1123          $ borg list /path/to/repo
1124          archivename                          Mon, 2016-02-15 19:50:19
1125
1126          $ borg rename /path/to/repo::archivename newname
1127          $ borg list /path/to/repo
1128          newname                              Mon, 2016-02-15 19:50:19
1129

BORG LIST

1131          borg [common options] list [options] [REPOSITORY_OR_ARCHIVE] [PATH...]
1132
1133   Description
1134       This command lists the contents of a repository or an archive.
1135
1136       See the "borg help patterns" command for more help on exclude patterns.
1137
1138       The following keys are available for --format:
1139
1140       · NEWLINE: OS dependent line separator
1141
1142       · NL: alias of NEWLINE
1143
1144       · NUL: NUL character for creating print0 / xargs -0  like  output,  see
1145         barchive/bpath
1146
1147       · SPACE
1148
1149       · TAB
1150
1151       · CR
1152
1153       · LF
1154
1155       Keys for listing repository archives:
1156
1157       · archive:  archive name interpreted as text (might be missing non-text
1158         characters, see barchive)
1159
1160       · name: alias of "archive"
1161
1162       · barchive: verbatim archive name, can contain any character except NUL
1163
1164       · comment: archive  comment  interpreted  as  text  (might  be  missing
1165         non-text characters, see bcomment)
1166
1167       · bcomment:  verbatim archive comment, can contain any character except
1168         NUL
1169
1170       · id: internal ID of the archive
1171
1172       · start: time (start) of creation of the archive
1173
1174       · time: alias of "start"
1175
1176       · end: time (end) of creation of the archive
1177
1178       · hostname: hostname of host on which this archive was created
1179
1180       · username: username of user who created this archive
1181
1182       Keys for listing archive files:
1183
1184       · type
1185
1186       · mode
1187
1188       · uid
1189
1190       · gid
1191
1192       · user
1193
1194       · group
1195
1196       · path: path interpreted as text (might be missing non-text characters,
1197         see bpath)
1198
1199       · bpath: verbatim POSIX path, can contain any character except NUL
1200
1201       · source: link target for links (identical to linktarget)
1202
1203       · linktarget
1204
1205       · flags
1206
1207       · size
1208
1209       · csize: compressed size
1210
1211       · dsize: deduplicated size
1212
1213       · dcsize: deduplicated compressed size
1214
1215       · num_chunks: number of chunks in this file
1216
1217       · unique_chunks: number of unique chunks in this file
1218
1219       · mtime
1220
1221       · ctime
1222
1223       · atime
1224
1225       · isomtime
1226
1227       · isoctime
1228
1229       · isoatime
1230
1231       · md5
1232
1233       · sha1
1234
1235       · sha224
1236
1237       · sha256
1238
1239       · sha384
1240
1241       · sha512
1242
1243       · archiveid
1244
1245       · archivename
1246
1247       · extra:  prepends  {source} with " -> " for soft links and " link to "
1248         for hard links
1249
1250       · health: either "healthy" (file ok) or "broken" (if file has  all-zero
1251         replacement chunks)
1252
1253   Examples
1254          $ borg list /path/to/repo
1255          Monday                               Mon, 2016-02-15 19:15:11
1256          repo                                 Mon, 2016-02-15 19:26:54
1257          root-2016-02-15                      Mon, 2016-02-15 19:36:29
1258          newname                              Mon, 2016-02-15 19:50:19
1259          ...
1260
1261          $ borg list /path/to/repo::root-2016-02-15
1262          drwxr-xr-x root   root          0 Mon, 2016-02-15 17:44:27 .
1263          drwxrwxr-x root   root          0 Mon, 2016-02-15 19:04:49 bin
1264          -rwxr-xr-x root   root    1029624 Thu, 2014-11-13 00:08:51 bin/bash
1265          lrwxrwxrwx root   root          0 Fri, 2015-03-27 20:24:26 bin/bzcmp -> bzdiff
1266          -rwxr-xr-x root   root       2140 Fri, 2015-03-27 20:24:22 bin/bzdiff
1267          ...
1268
1269          $ borg list /path/to/repo::archiveA --format="{mode} {user:6} {group:6} {size:8d} {isomtime} {path}{extra}{NEWLINE}"
1270          drwxrwxr-x user   user          0 Sun, 2015-02-01 11:00:00 .
1271          drwxrwxr-x user   user          0 Sun, 2015-02-01 11:00:00 code
1272          drwxrwxr-x user   user          0 Sun, 2015-02-01 11:00:00 code/myproject
1273          -rw-rw-r-- user   user    1416192 Sun, 2015-02-01 11:00:00 code/myproject/file.ext
1274          ...
1275

BORG DIFF

1277          borg [common options] diff [options] REPO::ARCHIVE1 ARCHIVE2 [PATH...]
1278
1279   Description
1280       This command finds differences (file contents, user/group/mode) between
1281       archives.
1282
1283       A repository location  and  an  archive  name  must  be  specified  for
1284       REPO::ARCHIVE1.   ARCHIVE2 is just another archive name in same reposi‐
1285       tory (no repository location allowed).
1286
1287       For archives created with Borg 1.1 or newer diff automatically  detects
1288       whether  the  archives are created with the same chunker params. If so,
1289       only chunk IDs are compared, which is very fast.
1290
1291       For archives prior to Borg 1.1 chunk contents are compared by  default.
1292       If  you did not create the archives with different chunker params, pass
1293       --same-chunker-params.  Note that the chunker params changed from  Borg
1294       0.xx to 1.0.
1295
1296       See  the  output  of  the "borg help patterns" command for more help on
1297       exclude patterns.
1298
1299   Examples
1300          $ borg init -e=none testrepo
1301          $ mkdir testdir
1302          $ cd testdir
1303          $ echo asdf > file1
1304          $ dd if=/dev/urandom bs=1M count=4 > file2
1305          $ touch file3
1306          $ borg create ../testrepo::archive1 .
1307
1308          $ chmod a+x file1
1309          $ echo "something" >> file2
1310          $ borg create ../testrepo::archive2 .
1311
1312          $ rm file3
1313          $ touch file4
1314          $ borg create ../testrepo::archive3 .
1315
1316          $ cd ..
1317          $ borg diff testrepo::archive1 archive2
1318          [-rw-r--r-- -> -rwxr-xr-x] file1
1319             +135 B    -252 B file2
1320
1321          $ borg diff testrepo::archive2 archive3
1322          added           0 B file4
1323          removed         0 B file3
1324
1325          $ borg diff testrepo::archive1 archive3
1326          [-rw-r--r-- -> -rwxr-xr-x] file1
1327             +135 B    -252 B file2
1328          added           0 B file4
1329          removed         0 B file3
1330

BORG DELETE

1332          borg [common options] delete [options] [TARGET] [ARCHIVE...]
1333
1334   Description
1335       This command deletes an archive from the  repository  or  the  complete
1336       repository.   Disk  space  is  reclaimed accordingly. If you delete the
1337       complete repository, the local cache for it (if any) is also deleted.
1338
1339       When using --stats, you will get some statistics about  how  much  data
1340       was deleted - the "Deleted data" deduplicated size there is most inter‐
1341       esting as that is how much your repository will  shrink.   Please  note
1342       that the "All archives" stats refer to the state after deletion.
1343
1344   Examples
1345          # delete a single backup archive:
1346          $ borg delete /path/to/repo::Monday
1347
1348          # delete the whole repository and the related local cache:
1349          $ borg delete /path/to/repo
1350          You requested to completely DELETE the repository *including* all archives it contains:
1351          repo                                 Mon, 2016-02-15 19:26:54
1352          root-2016-02-15                      Mon, 2016-02-15 19:36:29
1353          newname                              Mon, 2016-02-15 19:50:19
1354          Type 'YES' if you understand this and want to continue: YES
1355

BORG PRUNE

1357          borg [common options] prune [options] [REPOSITORY]
1358
1359   Description
1360       The  prune  command  prunes  a  repository by deleting all archives not
1361       matching any of the specified retention options. This command  is  nor‐
1362       mally used by automated backup scripts wanting to keep a certain number
1363       of historic backups.
1364
1365       Also, prune automatically removes checkpoint archives  (incomplete  ar‐
1366       chives left behind by interrupted backup runs) except if the checkpoint
1367       is the latest archive (and thus still needed). Checkpoint archives  are
1368       not considered when comparing archive counts against the retention lim‐
1369       its (--keep-X).
1370
1371       If a prefix is set with -P, then only archives that start with the pre‐
1372       fix  are  considered for deletion and only those archives count towards
1373       the totals specified by the rules.   Otherwise,  all  archives  in  the
1374       repository are candidates for deletion!  There is no automatic distinc‐
1375       tion between archives representing different contents. These need to be
1376       distinguished by specifying matching prefixes.
1377
1378       If  you  have  multiple  sequences of archives with different data sets
1379       (e.g.  from different machines) in one shared repository, use one prune
1380       call  per  data set that matches only the respective archives using the
1381       -P option.
1382
1383       The --keep-within option takes an argument of the  form  "<int><char>",
1384       where  char  is  "H", "d", "w", "m", "y". For example, --keep-within 2d
1385       means to keep all archives that were created within the past 48  hours.
1386       "1m"  is taken to mean "31d". The archives kept with this option do not
1387       count towards the totals specified by any other options.
1388
1389       A good procedure is to thin out more and more the  older  your  backups
1390       get.   As an example, --keep-daily 7 means to keep the latest backup on
1391       each day, up to 7 most recent days with backups (days  without  backups
1392       do  not  count).   The  rules  are applied from secondly to yearly, and
1393       backups selected by previous rules do not count towards those of  later
1394       rules.  The  time that each backup starts is used for pruning purposes.
1395       Dates and times are interpreted in the local  timezone,  and  weeks  go
1396       from Monday to Sunday. Specifying a negative number of archives to keep
1397       means that there is no limit.
1398
1399       The --keep-last N option is doing the same as --keep-secondly N (and it
1400       will keep the last N archives under the assumption that you do not cre‐
1401       ate more than one backup archive in the same second).
1402
1403       When using --stats, you will get some statistics about  how  much  data
1404       was deleted - the "Deleted data" deduplicated size there is most inter‐
1405       esting as that is how much your repository will  shrink.   Please  note
1406       that the "All archives" stats refer to the state after pruning.
1407
1408   Examples
1409       Be  careful,  prune  is a potentially dangerous command, it will remove
1410       backup archives.
1411
1412       The default of prune is to apply to  all  archives  in  the  repository
1413       unless  you  restrict  its  operation to a subset of the archives using
1414       --prefix.  When using --prefix, be careful to choose a  good  prefix  -
1415       e.g.  do  not use a prefix "foo" if you do not also want to match "foo‐
1416       bar".
1417
1418       It is strongly recommended to always run prune -v --list --dry-run  ...
1419       first  so  you will see what it would do without it actually doing any‐
1420       thing.
1421
1422          # Keep 7 end of day and 4 additional end of week archives.
1423          # Do a dry-run without actually deleting anything.
1424          $ borg prune -v --list --dry-run --keep-daily=7 --keep-weekly=4 /path/to/repo
1425
1426          # Same as above but only apply to archive names starting with the hostname
1427          # of the machine followed by a "-" character:
1428          $ borg prune -v --list --keep-daily=7 --keep-weekly=4 --prefix='{hostname}-' /path/to/repo
1429
1430          # Keep 7 end of day, 4 additional end of week archives,
1431          # and an end of month archive for every month:
1432          $ borg prune -v --list --keep-daily=7 --keep-weekly=4 --keep-monthly=-1 /path/to/repo
1433
1434          # Keep all backups in the last 10 days, 4 additional end of week archives,
1435          # and an end of month archive for every month:
1436          $ borg prune -v --list --keep-within=10d --keep-weekly=4 --keep-monthly=-1 /path/to/repo
1437
1438       There is also  a  visualized  prune  example  in  docs/misc/prune-exam‐
1439       ple.txt:
1440
1441          borg prune visualized
1442          =====================
1443
1444          Assume it is 2016-01-01, today's backup has not yet been made and you have
1445          created at least one backup on each day in 2015 except on 2015-12-19 (no
1446          backup made on that day).
1447
1448          This is what borg prune --keep-daily 14 --keep-monthly 6 would keep.
1449
1450          Backups kept by the --keep-daily rule are marked by a "d" to the right,
1451          backups kept by the --keep-monthly rule are marked by a "m" to the right.
1452
1453          Calendar view
1454          -------------
1455
1456                                      2015
1457                January               February               March
1458          Mo Tu We Th Fr Sa Su  Mo Tu We Th Fr Sa Su  Mo Tu We Th Fr Sa Su
1459                    1  2  3  4                     1                     1
1460           5  6  7  8  9 10 11   2  3  4  5  6  7  8   2  3  4  5  6  7  8
1461          12 13 14 15 16 17 18   9 10 11 12 13 14 15   9 10 11 12 13 14 15
1462          19 20 21 22 23 24 25  16 17 18 19 20 21 22  16 17 18 19 20 21 22
1463          26 27 28 29 30 31     23 24 25 26 27 28     23 24 25 26 27 28 29
1464                                                      30 31
1465
1466                 April                  May                   June
1467          Mo Tu We Th Fr Sa Su  Mo Tu We Th Fr Sa Su  Mo Tu We Th Fr Sa Su
1468                 1  2  3  4  5               1  2  3   1  2  3  4  5  6  7
1469           6  7  8  9 10 11 12   4  5  6  7  8  9 10   8  9 10 11 12 13 14
1470          13 14 15 16 17 18 19  11 12 13 14 15 16 17  15 16 17 18 19 20 21
1471          20 21 22 23 24 25 26  18 19 20 21 22 23 24  22 23 24 25 26 27 28
1472          27 28 29 30           25 26 27 28 29 30 31  29 30m
1473
1474
1475                  July                 August              September
1476          Mo Tu We Th Fr Sa Su  Mo Tu We Th Fr Sa Su  Mo Tu We Th Fr Sa Su
1477                 1  2  3  4  5                  1  2      1  2  3  4  5  6
1478           6  7  8  9 10 11 12   3  4  5  6  7  8  9   7  8  9 10 11 12 13
1479          13 14 15 16 17 18 19  10 11 12 13 14 15 16  14 15 16 17 18 19 20
1480          20 21 22 23 24 25 26  17 18 19 20 21 22 23  21 22 23 24 25 26 27
1481          27 28 29 30 31m       24 25 26 27 28 29 30  28 29 30m
1482                                31m
1483
1484                October               November              December
1485          Mo Tu We Th Fr Sa Su  Mo Tu We Th Fr Sa Su  Mo Tu We Th Fr Sa Su
1486                    1  2  3  4                     1      1  2  3  4  5  6
1487           5  6  7  8  9 10 11   2  3  4  5  6  7  8   7  8  9 10 11 12 13
1488          12 13 14 15 16 17 18   9 10 11 12 13 14 15  14 15 16 17d18d19 20d
1489          19 20 21 22 23 24 25  16 17 18 19 20 21 22  21d22d23d24d25d26d27d
1490          26 27 28 29 30 31m    23 24 25 26 27 28 29  28d29d30d31d
1491                                30m
1492
1493          List view
1494          ---------
1495
1496          --keep-daily 14     --keep-monthly 6
1497          -------------------------------------------------
1498           1. 2015-12-31          (2015-12-31 kept by daily rule)
1499           2. 2015-12-30       1. 2015-11-30
1500           3. 2015-12-29       2. 2015-10-31
1501           4. 2015-12-28       3. 2015-09-30
1502           5. 2015-12-27       4. 2015-08-31
1503           6. 2015-12-26       5. 2015-07-31
1504           7. 2015-12-25       6. 2015-06-30
1505           8. 2015-12-24
1506           9. 2015-12-23
1507          10. 2015-12-22
1508          11. 2015-12-21
1509          12. 2015-12-20
1510              (no backup made on 2015-12-19)
1511          13. 2015-12-18
1512          14. 2015-12-17
1513
1514
1515          Notes
1516          -----
1517
1518          2015-12-31 is kept due to the --keep-daily 14 rule (because it is applied
1519          first), not due to the --keep-monthly rule.
1520
1521          Because of that, the --keep-monthly 6 rule keeps Nov, Oct, Sep, Aug, Jul and
1522          Jun. December is not considered for this rule, because that backup was already
1523          kept because of the daily rule.
1524
1525          2015-12-17 is kept to satisfy the --keep-daily 14 rule - because no backup was
1526          made on 2015-12-19. If a backup had been made on that day, it would not keep
1527          the one from 2015-12-17.
1528
1529          We did not include yearly, weekly, hourly, minutely or secondly rules to keep
1530          this example simple. They all work in basically the same way.
1531
1532          The weekly rule is easy to understand roughly, but hard to understand in all
1533          details. If interested, read "ISO 8601:2000 standard week-based year".
1534
1535

BORG INFO

1537          borg [common options] info [options] [REPOSITORY_OR_ARCHIVE]
1538
1539   Description
1540       This  command displays detailed information about the specified archive
1541       or repository.
1542
1543       Please note that the deduplicated sizes of the individual  archives  do
1544       not add up to the deduplicated size of the repository ("all archives"),
1545       because the two are meaning different things:
1546
1547       This archive / deduplicated size = amount of data stored ONLY for  this
1548       archive  =  unique chunks of this archive.  All archives / deduplicated
1549       size = amount of data stored in the repo = all chunks  in  the  reposi‐
1550       tory.
1551
1552       Borg  archives can only contain a limited amount of file metadata.  The
1553       size of an archive relative to this limit depends on a number  of  fac‐
1554       tors,  mainly the number of files, the lengths of paths and other meta‐
1555       data stored for files.  This is shown as utilization  of  maximum  sup‐
1556       ported archive size.
1557
1558   Examples
1559          $ borg info /path/to/repo::2017-06-29T11:00-srv
1560          Archive name: 2017-06-29T11:00-srv
1561          Archive fingerprint: b2f1beac2bd553b34e06358afa45a3c1689320d39163890c5bbbd49125f00fe5
1562          Comment:
1563          Hostname: myhostname
1564          Username: root
1565          Time (start): Thu, 2017-06-29 11:03:07
1566          Time (end): Thu, 2017-06-29 11:03:13
1567          Duration: 5.66 seconds
1568          Number of files: 17037
1569          Command line: /usr/sbin/borg create /path/to/repo::2017-06-29T11:00-srv /srv
1570          Utilization of max. archive size: 0%
1571          ------------------------------------------------------------------------------
1572                                 Original size      Compressed size    Deduplicated size
1573          This archive:               12.53 GB             12.49 GB              1.62 kB
1574          All archives:              121.82 TB            112.41 TB            215.42 GB
1575
1576                                 Unique chunks         Total chunks
1577          Chunk index:                 1015213            626934122
1578
1579          $ borg info /path/to/repo --last 1
1580          Archive name: 2017-06-29T11:00-srv
1581          Archive fingerprint: b2f1beac2bd553b34e06358afa45a3c1689320d39163890c5bbbd49125f00fe5
1582          Comment:
1583          Hostname: myhostname
1584          Username: root
1585          Time (start): Thu, 2017-06-29 11:03:07
1586          Time (end): Thu, 2017-06-29 11:03:13
1587          Duration: 5.66 seconds
1588          Number of files: 17037
1589          Command line: /usr/sbin/borg create /path/to/repo::2017-06-29T11:00-srv /srv
1590          Utilization of max. archive size: 0%
1591          ------------------------------------------------------------------------------
1592                                 Original size      Compressed size    Deduplicated size
1593          This archive:               12.53 GB             12.49 GB              1.62 kB
1594          All archives:              121.82 TB            112.41 TB            215.42 GB
1595
1596                                 Unique chunks         Total chunks
1597          Chunk index:                 1015213            626934122
1598
1599          $ borg info /path/to/repo
1600          Repository ID: d857ce5788c51272c61535062e89eac4e8ef5a884ffbe976e0af9d8765dedfa5
1601          Location: /path/to/repo
1602          Encrypted: Yes (repokey)
1603          Cache: /root/.cache/borg/d857ce5788c51272c61535062e89eac4e8ef5a884ffbe976e0af9d8765dedfa5
1604          Security dir: /root/.config/borg/security/d857ce5788c51272c61535062e89eac4e8ef5a884ffbe976e0af9d8765dedfa5
1605          ------------------------------------------------------------------------------
1606                                 Original size      Compressed size    Deduplicated size
1607          All archives:              121.82 TB            112.41 TB            215.42 GB
1608
1609                                 Unique chunks         Total chunks
1610          Chunk index:                 1015213            626934122
1611

BORG MOUNT

1613          borg [common options] mount [options] REPOSITORY_OR_ARCHIVE MOUNTPOINT [PATH...]
1614
1615   Description
1616       This command mounts an archive as a FUSE filesystem. This can be useful
1617       for browsing an archive  or  restoring  individual  files.  Unless  the
1618       --foreground  option  is  given  the command will run in the background
1619       until the filesystem is umounted.
1620
1621       The command borgfs provides a wrapper for borg mount. This can also  be
1622       used   in   fstab   entries:   /path/to/repo   /mnt/point   fuse.borgfs
1623       defaults,noauto 0 0
1624
1625       To allow a regular user to use fstab  entries,  add  the  user  option:
1626       /path/to/repo /mnt/point fuse.borgfs defaults,noauto,user 0 0
1627
1628       For  FUSE configuration and mount options, see the mount.fuse(8) manual
1629       page.
1630
1631       Additional mount options supported by borg:
1632
1633       · versions: when used with a repository mount,  this  gives  a  merged,
1634         versioned view of the files in the archives. EXPERIMENTAL, layout may
1635         change in future.
1636
1637       · allow_damaged_files: by default damaged files (where  missing  chunks
1638         were  replaced  with  runs  of  zeros by borg check --repair) are not
1639         readable and return EIO (I/O error). Set this  option  to  read  such
1640         files.
1641
1642       · ignore_permissions:  for  security  reasons the "default_permissions"
1643         mount option is internally enforced by borg. "ignore_permissions" can
1644         be given to not enforce "default_permissions".
1645
1646       The  BORG_MOUNT_DATA_CACHE_ENTRIES  environment  variable  is meant for
1647       advanced users to tweak the performance. It sets the number  of  cached
1648       data  chunks;  additional  memory  usage can be up to ~8 MiB times this
1649       number. The default is the number of CPU cores.
1650
1651       When the daemonized process receives a signal or crashes, it  does  not
1652       unmount.  Unmounting in these cases could cause an active rsync or sim‐
1653       ilar process to unintentionally delete data.
1654
1655       When running in the foreground ^C/SIGINT unmounts  cleanly,  but  other
1656       signals or crashes do not.
1657

BORG UMOUNT

1659          borg [common options] umount [options] MOUNTPOINT
1660
1661   Description
1662       This  command  un-mounts  a  FUSE filesystem that was mounted with borg
1663       mount.
1664
1665       This is a convenience wrapper that  just  calls  the  platform-specific
1666       shell command - usually this is either umount or fusermount -u.
1667
1668   Examples
1669          # Mounting the repository shows all archives.
1670          # Archives are loaded lazily, expect some delay when navigating to an archive
1671          # for the first time.
1672          $ borg mount /path/to/repo /tmp/mymountpoint
1673          $ ls /tmp/mymountpoint
1674          root-2016-02-14 root-2016-02-15
1675          $ borg umount /tmp/mymountpoint
1676
1677          # Mounting a specific archive is possible as well.
1678          $ borg mount /path/to/repo::root-2016-02-15 /tmp/mymountpoint
1679          $ ls /tmp/mymountpoint
1680          bin  boot  etc      home  lib  lib64  lost+found  media  mnt  opt
1681          root  sbin  srv  tmp  usr  var
1682          $ borg umount /tmp/mymountpoint
1683
1684          # The experimental "versions view" merges all archives in the repository
1685          # and provides a versioned view on files.
1686          $ borg mount -o versions /path/to/repo /tmp/mymountpoint
1687          $ ls -l /tmp/mymountpoint/home/user/doc.txt/
1688          total 24
1689          -rw-rw-r-- 1 user group 12357 Aug 26 21:19 doc.cda00bc9.txt
1690          -rw-rw-r-- 1 user group 12204 Aug 26 21:04 doc.fa760f28.txt
1691          $ borg umount /tmp/mymountpoint
1692
1693          # Archive filters are supported.
1694          # These are especially handy for the "versions view",
1695          # which does not support lazy processing of archives.
1696          $ borg mount -o versions --glob-archives '*-my-home' --last 10 /path/to/repo /tmp/mymountpoint
1697
1698          # Exclusion options are supported.
1699          # These can speed up mounting and lower memory needs significantly.
1700          $ borg mount /path/to/repo /tmp/mymountpoint only/that/path
1701          $ borg mount --exclude '...' /path/to/repo /tmp/mymountpoint
1702
1703   borgfs
1704          $ echo '/mnt/backup /tmp/myrepo fuse.borgfs defaults,noauto 0 0' >> /etc/fstab
1705          $ echo '/mnt/backup::root-2016-02-15 /tmp/myarchive fuse.borgfs defaults,noauto 0 0' >> /etc/fstab
1706          $ mount /tmp/myrepo
1707          $ mount /tmp/myarchive
1708          $ ls /tmp/myrepo
1709          root-2016-02-01 root-2016-02-2015
1710          $ ls /tmp/myarchive
1711          bin  boot  etc      home  lib  lib64  lost+found  media  mnt  opt  root  sbin  srv  tmp  usr  var
1712
1713       NOTE:
1714          borgfs  will  be  automatically  provided if you used a distribution
1715          package, pip or setup.py to install Borg. Users  of  the  standalone
1716          binary   will   have   to  manually  create  a  symlink  (see  pyin‐
1717          staller-binary).
1718

BORG KEY CHANGE-PASSPHRASE

1720          borg [common options] key change-passphrase [options] [REPOSITORY]
1721
1722   Description
1723       The key files used for repository encryption are optionally  passphrase
1724       protected. This command can be used to change this passphrase.
1725
1726       Please  note that this command only changes the passphrase, but not any
1727       secret protected by it (like e.g. encryption/MAC keys or chunker seed).
1728       Thus, changing the passphrase after passphrase and borg key got compro‐
1729       mised does not protect future (nor past) backups to  the  same  reposi‐
1730       tory.
1731
1732   Examples
1733          # Create a key file protected repository
1734          $ borg init --encryption=keyfile -v /path/to/repo
1735          Initializing repository at "/path/to/repo"
1736          Enter new passphrase:
1737          Enter same passphrase again:
1738          Remember your passphrase. Your data will be inaccessible without it.
1739          Key in "/root/.config/borg/keys/mnt_backup" created.
1740          Keep this key safe. Your data will be inaccessible without it.
1741          Synchronizing chunks cache...
1742          Archives: 0, w/ cached Idx: 0, w/ outdated Idx: 0, w/o cached Idx: 0.
1743          Done.
1744
1745          # Change key file passphrase
1746          $ borg key change-passphrase -v /path/to/repo
1747          Enter passphrase for key /root/.config/borg/keys/mnt_backup:
1748          Enter new passphrase:
1749          Enter same passphrase again:
1750          Remember your passphrase. Your data will be inaccessible without it.
1751          Key updated
1752
1753       Fully automated using environment variables:
1754
1755          $ BORG_NEW_PASSPHRASE=old borg init -e=repokey repo
1756          # now "old" is the current passphrase.
1757          $ BORG_PASSPHRASE=old BORG_NEW_PASSPHRASE=new borg key change-passphrase repo
1758          # now "new" is the current passphrase.
1759

BORG KEY EXPORT

1761          borg [common options] key export [options] [REPOSITORY] [PATH]
1762
1763   Description
1764       If  repository encryption is used, the repository is inaccessible with‐
1765       out the key. This command allows to backup this  essential  key.   Note
1766       that  the  backup produced does not include the passphrase itself (i.e.
1767       the exported key stays encrypted). In  order  to  regain  access  to  a
1768       repository,   one   needs  both  the  exported  key  and  the  original
1769       passphrase.
1770
1771       There are two backup formats. The normal backup format is suitable  for
1772       digital  storage  as a file. The --paper backup format is optimized for
1773       printing and typing in while importing, with per line checks to  reduce
1774       problems with manual input.
1775
1776       For  repositories  using keyfile encryption the key is saved locally on
1777       the system that is capable of doing backups. To guard against  loss  of
1778       this  key, the key needs to be backed up independently of the main data
1779       backup.
1780
1781       For repositories using the repokey encryption the key is saved  in  the
1782       repository  in  the  config file. A backup is thus not strictly needed,
1783       but guards against the repository becoming inaccessible if the file  is
1784       damaged for some reason.
1785

BORG KEY IMPORT

1787          borg [common options] key import [options] [REPOSITORY] [PATH]
1788
1789   Description
1790       This  command  allows  to  restore  a key previously backed up with the
1791       export command.
1792
1793       If the --paper option is given,  the  import  will  be  an  interactive
1794       process  in which each line is checked for plausibility before proceed‐
1795       ing to the next line. For this format PATH must not be given.
1796

BORG UPGRADE

1798          borg [common options] upgrade [options] [REPOSITORY]
1799
1800   Description
1801       Upgrade an existing, local Borg repository.
1802
1803   When you do not need borg upgrade
1804       Not every change requires that you run borg upgrade.
1805
1806       You do not need to run it when:
1807
1808       · moving your repository to a different place
1809
1810       · upgrading to another point release (like 1.0.x to 1.0.y), except when
1811         noted otherwise in the changelog
1812
1813       · upgrading  from  1.0.x  to  1.1.x, except when noted otherwise in the
1814         changelog
1815
1816   Borg 1.x.y upgrades
1817       Use borg upgrade --tam REPO to require manifest  authentication  intro‐
1818       duced with Borg 1.0.9 to address security issues. This means that modi‐
1819       fying the repository after doing this with a  version  prior  to  1.0.9
1820       will  raise  a  validation  error,  so  only perform this upgrade after
1821       updating all clients using the repository to 1.0.9 or newer.
1822
1823       This upgrade should be done on each client for safety reasons.
1824
1825       If a repository is accidentally modified with a pre-1.0.9 client  after
1826       this upgrade, use borg upgrade --tam --force REPO to remedy it.
1827
1828       If  you  routinely  do  this  you might not want to enable this upgrade
1829       (which will leave you exposed to the security issue). You  can  reverse
1830       the upgrade by issuing borg upgrade --disable-tam REPO.
1831
1832       See
1833       https://borgbackup.readthedocs.io/en/stable/changes.html#pre-1-0-9-manifest-spoofing-vulnerability
1834       for details.
1835
1836   Attic and Borg 0.xx to Borg 1.x
1837       This currently supports converting an Attic repository to Borg and also
1838       helps with converting Borg 0.xx to 1.0.
1839
1840       Currently, only LOCAL repositories can be upgraded (issue #465).
1841
1842       Please note that borg  create  (since  1.0.0)  uses  bigger  chunks  by
1843       default than old borg or attic did, so the new chunks won't deduplicate
1844       with the old chunks in the upgraded repository.   See  --chunker-params
1845       option of borg create and borg recreate.
1846
1847       borg upgrade will change the magic strings in the repository's segments
1848       to  match  the  new  Borg  magic  strings.  The   keyfiles   found   in
1849       $ATTIC_KEYS_DIR  or ~/.attic/keys/ will also be converted and copied to
1850       $BORG_KEYS_DIR or ~/.config/borg/keys.
1851
1852       The cache files are converted, from $ATTIC_CACHE_DIR or  ~/.cache/attic
1853       to  $BORG_CACHE_DIR or ~/.cache/borg, but the cache layout between Borg
1854       and Attic changed, so it is possible the first backup after the conver‐
1855       sion takes longer than expected due to the cache resync.
1856
1857       Upgrade should be able to resume if interrupted, although it will still
1858       iterate over all segments. If you want to start from scratch, use  borg
1859       delete over the copied repository to make sure the cache files are also
1860       removed:
1861          borg delete borg
1862
1863       Unless --inplace is specified, the  upgrade  process  first  creates  a
1864       backup  copy  of the repository, in REPOSITORY.before-upgrade-DATETIME,
1865       using hardlinks.  This requires that  the  repository  and  its  parent
1866       directory  reside  on  same  filesystem  so the hardlink copy can work.
1867       This takes longer than in place upgrades, but is much safer  and  gives
1868       progress  information  (as  opposed  to cp -al). Once you are satisfied
1869       with the conversion, you can safely destroy the backup copy.
1870
1871       WARNING: Running the upgrade in place will make the current copy  unus‐
1872       able  with  older  version,  with no way of going back to previous ver‐
1873       sions. This can PERMANENTLY DAMAGE YOUR REPOSITORY!  Attic CAN NOT READ
1874       BORG  REPOSITORIES,  as  the  magic strings have changed. You have been
1875       warned.
1876
1877   Examples
1878          # Upgrade the borg repository to the most recent version.
1879          $ borg upgrade -v /path/to/repo
1880          making a hardlink copy in /path/to/repo.before-upgrade-2016-02-15-20:51:55
1881          opening attic repository with borg and converting
1882          no key file found for repository
1883          converting repo index /path/to/repo/index.0
1884          converting 1 segments...
1885          converting borg 0.xx to borg current
1886          no key file found for repository
1887
1888   Upgrading a passphrase encrypted attic repo
1889       attic offered a "passphrase" encryption mode, but this was  removed  in
1890       borg  1.0  and  replaced  by  the  "repokey"  mode  (which  stores  the
1891       passphrase-protected encryption key into the repository config).
1892
1893       Thus, to upgrade a "passphrase" attic repo to a "repokey" borg repo,  2
1894       steps are needed, in this order:
1895
1896       · borg upgrade repo
1897
1898       · borg key migrate-to-repokey repo
1899

BORG RECREATE

1901          borg [common options] recreate [options] [REPOSITORY_OR_ARCHIVE] [PATH...]
1902
1903   Description
1904       Recreate the contents of existing archives.
1905
1906       This is an experimental feature. Do not use this on your only backup.
1907
1908       --exclude,  --exclude-from,  --exclude-if-present, --keep-exclude-tags,
1909       and PATH have the exact same semantics as in "borg  create".  If  PATHs
1910       are  specified the resulting archive will only contain files from these
1911       PATHs.
1912
1913       Note that all paths in an archive are relative, therefore absolute pat‐
1914       terns/paths will not match (--exclude, --exclude-from, PATHs).
1915
1916       --recompress  allows  to change the compression of existing data in ar‐
1917       chives.  Due to how Borg stores compressed size information this  might
1918       display  incorrect  information for archives that were not recreated at
1919       the same time.  There is no risk of data loss by this.
1920
1921       --chunker-params will re-chunk all files in the archive,  this  can  be
1922       used to have upgraded Borg 0.xx or Attic archives deduplicate with Borg
1923       1.x archives.
1924
1925       USE WITH CAUTION.  Depending on the PATHs and patterns given,  recreate
1926       can  be used to permanently delete files from archives.  When in doubt,
1927       use --dry-run --verbose --list to see  how  patterns/PATHS  are  inter‐
1928       preted.
1929
1930       The  archive  being  recreated is only removed after the operation com‐
1931       pletes. The archive that is built during the operation  exists  at  the
1932       same  time at "<ARCHIVE>.recreate". The new archive will have a differ‐
1933       ent archive ID.
1934
1935       With --target the original archive is not replaced, instead a  new  ar‐
1936       chive is created.
1937
1938       When  rechunking  space  usage  can be substantial, expect at least the
1939       entire deduplicated size of the archives  using  the  previous  chunker
1940       params.    When  recompressing  expect  approx.  (throughput  /  check‐
1941       point-interval) in space usage, assuming all chunks are recompressed.
1942
1943       If you recently ran borg check --repair and it had to fix  lost  chunks
1944       with  all-zero  replacement chunks, please first run another backup for
1945       the same data and re-run borg check --repair afterwards to heal any ar‐
1946       chives  that  had  lost chunks which are still generated from the input
1947       data.
1948
1949       Important:  running  borg  recreate  to  re-chunk   will   remove   the
1950       chunks_healthy  metadata of all items with replacement chunks, so heal‐
1951       ing will not be  possible  any  more  after  re-chunking  (it  is  also
1952       unlikely  it would ever work: due to the change of chunking parameters,
1953       the missing chunk likely will never be seen again  even  if  you  still
1954       have the data that produced it).
1955
1956   Examples
1957          # Make old (Attic / Borg 0.xx) archives deduplicate with Borg 1.x archives.
1958          # Archives created with Borg 1.1+ and the default chunker params are skipped
1959          # (archive ID stays the same).
1960          $ borg recreate /mnt/backup --chunker-params default --progress
1961
1962          # Create a backup with little but fast compression
1963          $ borg create /mnt/backup::archive /some/files --compression lz4
1964          # Then compress it - this might take longer, but the backup has already completed,
1965          # so no inconsistencies from a long-running backup job.
1966          $ borg recreate /mnt/backup::archive --recompress --compression zlib,9
1967
1968          # Remove unwanted files from all archives in a repository.
1969          # Note the relative path for the --exclude option - archives only contain relative paths.
1970          $ borg recreate /mnt/backup --exclude home/icke/Pictures/drunk_photos
1971
1972          # Change archive comment
1973          $ borg create --comment "This is a comment" /mnt/backup::archivename ~
1974          $ borg info /mnt/backup::archivename
1975          Name: archivename
1976          Fingerprint: ...
1977          Comment: This is a comment
1978          ...
1979          $ borg recreate --comment "This is a better comment" /mnt/backup::archivename
1980          $ borg info /mnt/backup::archivename
1981          Name: archivename
1982          Fingerprint: ...
1983          Comment: This is a better comment
1984          ...
1985

BORG EXPORT-TAR

1987          borg [common options] export-tar [options] ARCHIVE FILE [PATH...]
1988
1989   Description
1990       This command creates a tarball from an archive.
1991
1992       When  giving  '-'  as  the output FILE, Borg will write a tar stream to
1993       standard output.
1994
1995       By default (--tar-filter=auto) Borg will detect whether the FILE should
1996       be  compressed based on its file extension and pipe the tarball through
1997       an appropriate filter before writing it to FILE:
1998
1999       · .tar.gz: gzip
2000
2001       · .tar.bz2: bzip2
2002
2003       · .tar.xz: xz
2004
2005       Alternatively a --tar-filter program may be  explicitly  specified.  It
2006       should  read  the  uncompressed  tar stream from stdin and write a com‐
2007       pressed/filtered tar stream to stdout.
2008
2009       The generated tarball uses the GNU tar format.
2010
2011       export-tar is a lossy conversion: BSD flags, ACLs, extended  attributes
2012       (xattrs),  atime  and  ctime are not exported.  Timestamp resolution is
2013       limited to whole seconds, not the nanosecond resolution otherwise  sup‐
2014       ported by Borg.
2015
2016       A --sparse option (as found in borg extract) is not supported.
2017
2018       By  default  the  entire archive is extracted but a subset of files and
2019       directories can be selected by passing a list of  PATHs  as  arguments.
2020       The  file  selection  can  further be restricted by using the --exclude
2021       option.
2022
2023       See the output of the "borg help patterns" command  for  more  help  on
2024       exclude patterns.
2025
2026       --progress  can  be slower than no progress display, since it makes one
2027       additional pass over the archive metadata.
2028
2029   Examples
2030          # export as uncompressed tar
2031          $ borg export-tar /path/to/repo::Monday Monday.tar
2032
2033          # exclude some types, compress using gzip
2034          $ borg export-tar /path/to/repo::Monday Monday.tar.gz --exclude '*.so'
2035
2036          # use higher compression level with gzip
2037          $ borg export-tar --tar-filter="gzip -9" testrepo::linux Monday.tar.gz
2038
2039          # export a tar, but instead of storing it on disk,
2040          # upload it to a remote site using curl.
2041          $ borg export-tar /path/to/repo::Monday - | curl --data-binary @- https://somewhere/to/POST
2042
2043          # remote extraction via "tarpipe"
2044          $ borg export-tar /path/to/repo::Monday - | ssh somewhere "cd extracted; tar x"
2045

BORG SERVE

2047          borg [common options] serve [options]
2048
2049   Description
2050       This command starts a repository server process. This command  is  usu‐
2051       ally not used manually.
2052
2053   Examples
2054       borg  serve  has  special  support  for ssh forced commands (see autho‐
2055       rized_keys example below): it will detect that you use  such  a  forced
2056       command and extract the value of the --restrict-to-path option(s).
2057
2058       It  will  then  parse  the  original command that came from the client,
2059       makes sure that it is also borg serve and enforce  path  restriction(s)
2060       as  given  by  the forced command. That way, other options given by the
2061       client (like --info or --umask) are preserved (and are not fixed by the
2062       forced command).
2063
2064       Environment  variables  (such  as BORG_HOSTNAME_IS_UNIQUE) contained in
2065       the original command sent  by  the  client  are  not  interpreted,  but
2066       ignored.  If  BORG_XXX  environment variables should be set on the borg
2067       serve side, then these must be set in  system-specific  locations  like
2068       /etc/environment or in the forced command itself (example below).
2069
2070          # Allow an SSH keypair to only run borg, and only have access to /path/to/repo.
2071          # Use key options to disable unneeded and potentially dangerous SSH functionality.
2072          # This will help to secure an automated remote backup system.
2073          $ cat ~/.ssh/authorized_keys
2074          command="borg serve --restrict-to-path /path/to/repo",restrict ssh-rsa AAAAB3[...]
2075
2076          # Set a BORG_XXX environment variable on the "borg serve" side
2077          $ cat ~/.ssh/authorized_keys
2078          command="export BORG_XXX=value; borg serve [...]",restrict ssh-rsa [...]
2079
2080       NOTE:
2081          The  examples  above use the restrict directive. This does automati‐
2082          cally block potential dangerous ssh features,  even  when  they  are
2083          added in a future update. Thus, this option should be preferred.
2084
2085          If  you're  using openssh-server < 7.2, however, you have to explic‐
2086          itly specify the ssh features to restrict and cannot simply use  the
2087          restrict  option  as it has been introduced in v7.2. We recommend to
2088          use    no-port-forwarding,no-X11-forwarding,no-pty,no-agent-forward‐
2089          ing,no-user-rc in this case.
2090
2091   SSH Configuration
2092       borg  serve's  pipes  (stdin/stdout/stderr)  are  connected to the sshd
2093       process on the server side.  In  the  event  that  the  SSH  connection
2094       between  borg  serve and the client is disconnected or stuck abnormally
2095       (for example, due to a network outage), it can take  a  long  time  for
2096       sshd  to  notice the client is disconnected. In the meantime, sshd con‐
2097       tinues running, and as a result so does the borg serve process  holding
2098       the  lock  on the repository. This can cause subsequent borg operations
2099       on the remote repository  to  fail  with  the  error:  Failed  to  cre‐
2100       ate/acquire the lock.
2101
2102       In  order  to  avoid  this,  it is recommended to perform the following
2103       additional SSH configuration:
2104
2105       Either in the client side's ~/.ssh/config  file,  or  in  the  client's
2106       /etc/ssh/ssh_config file:
2107
2108          Host backupserver
2109                  ServerAliveInterval 10
2110                  ServerAliveCountMax 30
2111
2112       Replacing  backupserver  with  the  hostname, FQDN or IP address of the
2113       borg server.
2114
2115       This will cause the client to send a keepalive to the server  every  10
2116       seconds.  If  30  consecutive keepalives are sent without a response (a
2117       time of 300 seconds), the ssh client process will be terminated,  caus‐
2118       ing the borg process to terminate gracefully.
2119
2120       On    the    server   side's   sshd   configuration   file   (typically
2121       /etc/ssh/sshd_config):
2122
2123          ClientAliveInterval 10
2124          ClientAliveCountMax 30
2125
2126       This will cause the server to send a keep alive to the client every  10
2127       seconds.  If  30  consecutive keepalives are sent without a response (a
2128       time of 300 seconds), the server's sshd  process  will  be  terminated,
2129       causing  the borg serve process to terminate gracefully and release the
2130       lock on the repository.
2131
2132       If you then run borg commands with --lock-wait 600, this  gives  suffi‐
2133       cient time for the borg serve processes to terminate after the SSH con‐
2134       nection is torn down after the 300 second wait for  the  keepalives  to
2135       fail.
2136
2137       You  may,  of  course,  modify the timeout values demonstrated above to
2138       values that suit your environment and use case.
2139

BORG CONFIG

2141          borg [common options] config [options] REPOSITORY [NAME] [VALUE]
2142
2143   Description
2144       This command gets and sets options in a local repository or cache  con‐
2145       fig  file.   For  security  reasons,  this  command only works on local
2146       repositories.
2147
2148       To delete a config value entirely, use --delete. To list the values  of
2149       the  configuration  file or the default values, use --list.  To get and
2150       existing key, pass only the key name. To set a key, pass both  the  key
2151       name  and  the  new  value.  Keys  can be specified in the format "sec‐
2152       tion.name" or simply "name"; the section will default  to  "repository"
2153       and "cache" for the repo and cache configs, respectively.
2154
2155       By  default,  borg config manipulates the repository config file. Using
2156       --cache edits the repository cache's config file instead.
2157
2158       NOTE:
2159          The repository & cache config files are some of  the  only  directly
2160          manipulable  parts  of  a repository that aren't versioned or backed
2161          up, so be careful when making changes!
2162
2163   Examples
2164          # find cache directory
2165          $ cd ~/.cache/borg/$(borg config /path/to/repo id)
2166
2167          # reserve some space
2168          $ borg config /path/to/repo additional_free_space 2G
2169
2170          # make a repo append-only
2171          $ borg config /path/to/repo append_only 1
2172

BORG WITH-LOCK

2174          borg [common options] with-lock [options] REPOSITORY COMMAND [ARGS...]
2175
2176   Description
2177       This command runs a user-specified command while the repository lock is
2178       held.
2179
2180       It  will  first try to acquire the lock (make sure that no other opera‐
2181       tion is running in the repo), then execute the given command as a  sub‐
2182       process  and  wait for its termination, release the lock and return the
2183       user command's return code as borg's return code.
2184
2185       NOTE:
2186          If you copy a repository with  the  lock  held,  the  lock  will  be
2187          present in the copy. Thus, before using borg on the copy from a dif‐
2188          ferent host, you need to use "borg break-lock" on the copied reposi‐
2189          tory,  because  Borg  is  cautious and does not automatically remove
2190          stale locks made by a different host.
2191

BORG BREAK-LOCK

2193          borg [common options] break-lock [options] [REPOSITORY]
2194
2195   Description
2196       This command breaks the repository and cache locks.  Please  use  care‐
2197       fully  and  only  while  no  borg process (on any machine) is trying to
2198       access the Cache or the Repository.
2199

BORG BENCHMARK CRUD

2201          borg [common options] benchmark crud [options] REPO PATH
2202
2203   Description
2204       This command benchmarks borg CRUD (create, read, update, delete) opera‐
2205       tions.
2206
2207       It  creates  input data below the given PATH and backups this data into
2208       the given REPO.  The REPO must already exist (it could be a fresh empty
2209       repo  or  an  existing  repo, the command will create / read / update /
2210       delete some archives named borg-benchmark-crud* there.
2211
2212       Make sure you have free space there, you'll  need  about  1GB  each  (+
2213       overhead).
2214
2215       If  your  repository is encrypted and borg needs a passphrase to unlock
2216       the key, use:
2217
2218       BORG_PASSPHRASE=mysecret borg benchmark crud REPO PATH
2219
2220       Measurements are done with different input file sizes and counts.   The
2221       file contents are very artificial (either all zero or all random), thus
2222       the measurement results do not  necessarily  reflect  performance  with
2223       real  data.   Also,  due to the kind of content used, no compression is
2224       used in these benchmarks.
2225
2226       C- == borg create (1st archive creation, no  compression,  do  not  use
2227       files cache)
2228              C-Z-  == all-zero files. full dedup, this is primarily measuring
2229              reader/chunker/hasher.  C-R- == random files. no dedup,  measur‐
2230              ing throughput through all processing stages.
2231
2232       R- == borg extract (extract archive, dry-run, do everything, but do not
2233       write files to disk)
2234              R-Z- == all zero  files.  Measuring  heavily  duplicated  files.
2235              R-R-  == random files. No duplication here, measuring throughput
2236              through all processing stages, except writing to disk.
2237
2238       U- == borg create (2nd archive creation of unchanged input files,  mea‐
2239       sure files cache speed)
2240              The  throughput value is kind of virtual here, it does not actu‐
2241              ally read the file.  U-Z- ==  needs  to  check  the  2  all-zero
2242              chunks' existence in the repo.  U-R- == needs to check existence
2243              of a lot of different chunks in the repo.
2244
2245       D- == borg delete archive (delete last remaining archive, measure dele‐
2246       tion + compaction)
2247              D-Z-  ==  few chunks to delete / few segments to compact/remove.
2248              D-R- == many chunks to delete / many segments to compact/remove.
2249
2250       Please note that there might be quite some variance in  these  measure‐
2251       ments.   Try  multiple measurements and having a otherwise idle machine
2252       (and network, if you use it).
2253

MISCELLANEOUS HELP

2255   borg help patterns
2256       The path/filenames used as input for the pattern  matching  start  from
2257       the  currently  active  recursion  root. You usually give the recursion
2258       root(s) when invoking borg and these can be either relative or absolute
2259       paths.
2260
2261       So,  when  you give relative/ as root, the paths going into the matcher
2262       will look like relative/.../file.ext. When you give /absolute/ as root,
2263       they  will look like /absolute/.../file.ext. This is meant when we talk
2264       about "full path" below.
2265
2266       File patterns support these styles:  fnmatch,  shell,  regular  expres‐
2267       sions, path prefixes and path full-matches. By default, fnmatch is used
2268       for --exclude patterns and shell-style is  used  for  the  experimental
2269       --pattern option.
2270
2271       If  followed by a colon (':') the first two characters of a pattern are
2272       used as a style selector. Explicit style selection is necessary when  a
2273       non-default  style  is  desired or when the desired pattern starts with
2274       two alphanumeric characters followed by a colon (i.e. aa:something/*).
2275
2276       Fnmatch, selector fm:
2277              This is the default  style  for  --exclude  and  --exclude-from.
2278              These  patterns  use a variant of shell pattern syntax, with '*'
2279              matching any number of characters, '?' matching any single char‐
2280              acter,  '[...]' matching any single character specified, includ‐
2281              ing ranges, and '[!...]' matching any character  not  specified.
2282              For the purpose of these patterns, the path separator (backslash
2283              for Windows and '/' on other systems) is not treated  specially.
2284              Wrap  meta-characters  in brackets for a literal match (i.e. [?]
2285              to match the literal character ?). For a path to  match  a  pat‐
2286              tern,  the full path must match, or it must match from the start
2287              of the full path to just before a path separator. Except for the
2288              root  path,  paths  will  never  end  in the path separator when
2289              matching is attempted.  Thus, if a given pattern ends in a  path
2290              separator, a '*' is appended before matching is attempted.
2291
2292       Shell-style patterns, selector sh:
2293              This  is  the  default  style for --pattern and --patterns-from.
2294              Like fnmatch patterns these are similar to shell  patterns.  The
2295              difference is that the pattern may include **/ for matching zero
2296              or more directory levels, * for matching zero or more  arbitrary
2297              characters with the exception of any path separator.
2298
2299       Regular expressions, selector re:
2300              Regular  expressions  similar  to  those  found in Perl are sup‐
2301              ported.  Unlike  shell  patterns  regular  expressions  are  not
2302              required  to match the full path and any substring match is suf‐
2303              ficient. It is strongly recommended to anchor  patterns  to  the
2304              start  ('^'),  to  the end ('$') or both. Path separators (back‐
2305              slash for Windows and '/' on other systems) in paths are  always
2306              normalized  to  a forward slash ('/') before applying a pattern.
2307              The regular expression syntax is described in the  Python  docu‐
2308              mentation for the re module.
2309
2310       Path prefix, selector pp:
2311              This pattern style is useful to match whole sub-directories. The
2312              pattern  pp:root/somedir  matches  root/somedir  and  everything
2313              therein.
2314
2315       Path full-match, selector pf:
2316              This  pattern  style is (only) useful to match full paths.  This
2317              is kind of a pseudo pattern as it can not have any  variable  or
2318              unspecified   parts   -   the   full   path   must   be   given.
2319              pf:root/file.ext matches root/file.txt only.
2320
2321              Implementation note: this is implemented via very time-efficient
2322              O(1)  hashtable lookups (this means you can have huge amounts of
2323              such patterns without impacting performance much).  Due to that,
2324              this  kind of pattern does not respect any context or order.  If
2325              you use such a pattern to include a  file,  it  will  always  be
2326              included  (if  the  directory  recursion  encounters it).  Other
2327              include/exclude patterns  that  would  normally  match  will  be
2328              ignored.  Same logic applies for exclude.
2329
2330       NOTE:
2331          re:,  sh:  and fm: patterns are all implemented on top of the Python
2332          SRE engine. It is very easy to formulate patterns for each of  these
2333          types which requires an inordinate amount of time to match paths. If
2334          untrusted users are able to supply patterns, ensure they cannot sup‐
2335          ply  re:  patterns.   Further, ensure that sh: and fm: patterns only
2336          contain a handful of wildcards at most.
2337
2338       Exclusions can be passed via the command line  option  --exclude.  When
2339       used  from within a shell the patterns should be quoted to protect them
2340       from expansion.
2341
2342       The --exclude-from option permits loading  exclusion  patterns  from  a
2343       text  file  with one pattern per line. Lines empty or starting with the
2344       number sign ('#') after removing whitespace on both ends  are  ignored.
2345       The  optional  style  selector  prefix  is  also supported for patterns
2346       loaded from a file. Due to whitespace removal paths with whitespace  at
2347       the beginning or end can only be excluded using regular expressions.
2348
2349       Examples:
2350
2351          # Exclude '/home/user/file.o' but not '/home/user/file.odt':
2352          $ borg create -e '*.o' backup /
2353
2354          # Exclude '/home/user/junk' and '/home/user/subdir/junk' but
2355          # not '/home/user/importantjunk' or '/etc/junk':
2356          $ borg create -e '/home/*/junk' backup /
2357
2358          # Exclude the contents of '/home/user/cache' but not the directory itself:
2359          $ borg create -e /home/user/cache/ backup /
2360
2361          # The file '/home/user/cache/important' is *not* backed up:
2362          $ borg create -e /home/user/cache/ backup / /home/user/cache/important
2363
2364          # The contents of directories in '/home' are not backed up when their name
2365          # ends in '.tmp'
2366          $ borg create --exclude 're:^/home/[^/]+\.tmp/' backup /
2367
2368          # Load exclusions from file
2369          $ cat >exclude.txt <<EOF
2370          # Comment line
2371          /home/*/junk
2372          *.tmp
2373          fm:aa:something/*
2374          re:^/home/[^/]\.tmp/
2375          sh:/home/*/.thumbnails
2376          EOF
2377          $ borg create --exclude-from exclude.txt backup /
2378       A  more  general and easier to use way to define filename matching pat‐
2379       terns  exists  with  the  experimental  --pattern  and  --patterns-from
2380       options.  Using  these,  you  may  specify  the  backup roots (starting
2381       points) and patterns for inclusion/exclusion.  A root path starts  with
2382       the prefix R, followed by a path (a plain path, not a file pattern). An
2383       include rule starts with the prefix +, an exclude rule starts with  the
2384       prefix  -,  an  exclude-norecurse rule starts with !, all followed by a
2385       pattern.  Inclusion patterns are useful to include paths that are  con‐
2386       tained in an excluded path. The first matching pattern is used so if an
2387       include pattern matches before an exclude pattern, the file  is  backed
2388       up.  If  an  exclude-norecurse  pattern  matches  a directory, it won't
2389       recurse into it and won't discover any potential  matches  for  include
2390       rules below that directory.
2391
2392       Note  that  the default pattern style for --pattern and --patterns-from
2393       is shell style  (sh:),  so  those  patterns  behave  similar  to  rsync
2394       include/exclude  patterns.  The pattern style can be set via the P pre‐
2395       fix.
2396
2397       Patterns (--pattern) and excludes (--exclude) from the command line are
2398       considered  first  (in  the  order  of  appearance). Then patterns from
2399       --patterns-from are added. Exclusion patterns from --exclude-from files
2400       are appended last.
2401
2402       Examples:
2403
2404          # backup pics, but not the ones from 2018, except the good ones:
2405          # note: using = is essential to avoid cmdline argument parsing issues.
2406          borg create --pattern=+pics/2018/good --pattern=-pics/2018 repo::arch pics
2407
2408          # use a file with patterns:
2409          borg create --patterns-from patterns.lst repo::arch
2410
2411       The patterns.lst file could look like that:
2412
2413          # "sh:" pattern style is the default, so the following line is not needed:
2414          P sh
2415          R /
2416          # can be rebuild
2417          - /home/*/.cache
2418          # they're downloads for a reason
2419          - /home/*/Downloads
2420          # susan is a nice person
2421          # include susans home
2422          + /home/susan
2423          # don't backup the other home directories
2424          - /home/*
2425
2426   borg help placeholders
2427       Repository  (or Archive) URLs, --prefix, --glob-archives, --comment and
2428       --remote-path values support these placeholders:
2429
2430       {hostname}
2431              The (short) hostname of the machine.
2432
2433       {fqdn} The full name of the machine.
2434
2435       {reverse-fqdn}
2436              The full name of the machine in reverse domain name notation.
2437
2438       {now}  The current local date and time, by default in ISO-8601  format.
2439              You   can   also   supply   your   own   format   string,   e.g.
2440              {now:%Y-%m-%d_%H:%M:%S}
2441
2442       {utcnow}
2443              The current UTC date and time, by default  in  ISO-8601  format.
2444              You   can  also  supply  your  own  format  string,  e.g.  {utc‐
2445              now:%Y-%m-%d_%H:%M:%S}
2446
2447       {user} The user name (or UID, if no name is available) of the user run‐
2448              ning borg.
2449
2450       {pid}  The current process ID.
2451
2452       {borgversion}
2453              The version of borg, e.g.: 1.0.8rc1
2454
2455       {borgmajor}
2456              The version of borg, only the major version, e.g.: 1
2457
2458       {borgminor}
2459              The version of borg, only major and minor version, e.g.: 1.0
2460
2461       {borgpatch}
2462              The  version of borg, only major, minor and patch version, e.g.:
2463              1.0.8
2464
2465       If literal curly braces need to be used, double them for escaping:
2466
2467          borg create /path/to/repo::{{literal_text}}
2468
2469       Examples:
2470
2471          borg create /path/to/repo::{hostname}-{user}-{utcnow} ...
2472          borg create /path/to/repo::{hostname}-{now:%Y-%m-%d_%H:%M:%S} ...
2473          borg prune --prefix '{hostname}-' ...
2474
2475       NOTE:
2476          systemd uses a difficult, non-standard syntax for command  lines  in
2477          unit files (refer to the systemd.unit(5) manual page).
2478
2479          When  invoking  borg  from  unit  files, pay particular attention to
2480          escaping, especially when using the now/utcnow  placeholders,  since
2481          systemd performs its own %-based variable replacement even in quoted
2482          text. To avoid interference from systemd, double all  percent  signs
2483          ({hostname}-{now:%Y-%m-%d_%H:%M:%S}          becomes          {host‐
2484          name}-{now:%%Y-%%m-%%d_%%H:%%M:%%S}).
2485
2486   borg help compression
2487       It is no problem to mix different  compression  methods  in  one  repo,
2488       deduplication  is done on the source data chunks (not on the compressed
2489       or encrypted data).
2490
2491       If some specific chunk was once compressed and stored  into  the  repo,
2492       creating  another  backup that also uses this chunk will not change the
2493       stored chunk.  So if you use different compression specs for the  back‐
2494       ups,  whichever  stores  a  chunk first determines its compression. See
2495       also borg recreate.
2496
2497       Compression is lz4 by default. If you want something else, you have  to
2498       specify what you want.
2499
2500       Valid compression specifiers are:
2501
2502       none   Do not compress.
2503
2504       lz4    Use  lz4  compression.  Very  high  speed, very low compression.
2505              (default)
2506
2507       zstd[,L]
2508              Use zstd ("zstandard") compression, a  modern  wide-range  algo‐
2509              rithm.   If  you do not explicitely give the compression level L
2510              (ranging from 1 to 22), it will  use  level  3.   Archives  com‐
2511              pressed with zstd are not compatible with borg < 1.1.4.
2512
2513       zlib[,L]
2514              Use  zlib  ("gz") compression. Medium speed, medium compression.
2515              If you do not explicitely give the compression level L  (ranging
2516              from  0  to  9), it will use level 6.  Giving level 0 (means "no
2517              compression", but still has zlib protocol overhead)  is  usually
2518              pointless, you better use "none" compression.
2519
2520       lzma[,L]
2521              Use  lzma  ("xz")  compression. Low speed, high compression.  If
2522              you do not explicitely give the  compression  level  L  (ranging
2523              from  0  to  9),  it will use level 6.  Giving levels above 6 is
2524              pointless and counterproductive because  it  does  not  compress
2525              better  due to the buffer size used by borg - but it wastes lots
2526              of CPU cycles and RAM.
2527
2528       auto,C[,L]
2529              Use a built-in heuristic to decide per chunk whether to compress
2530              or  not.   The heuristic tries with lz4 whether the data is com‐
2531              pressible.  For incompressible data, it will not use compression
2532              (uses  "none").   For compressible data, it uses the given C[,L]
2533              compression - with C[,L] being any valid compression specifier.
2534
2535       Examples:
2536
2537          borg create --compression lz4 REPO::ARCHIVE data
2538          borg create --compression zstd REPO::ARCHIVE data
2539          borg create --compression zstd,10 REPO::ARCHIVE data
2540          borg create --compression zlib REPO::ARCHIVE data
2541          borg create --compression zlib,1 REPO::ARCHIVE data
2542          borg create --compression auto,lzma,6 REPO::ARCHIVE data
2543          borg create --compression auto,lzma ...
2544

DEBUGGING FACILITIES

2546       There is a borg debug command that has some subcommands which  are  all
2547       not  intended  for  normal  use  and potentially very dangerous if used
2548       incorrectly.
2549
2550       For example, borg debug put-obj and borg debug delete-obj will only  do
2551       what  their  name suggests: put objects into repo / delete objects from
2552       repo.
2553
2554       Please note:
2555
2556       · they will not update the chunks cache (chunks index) about the object
2557
2558       · they will not update the  manifest  (so  no  automatic  chunks  index
2559         resync is triggered)
2560
2561       · they  will  not  check  whether  the  object  is  in use (e.g. before
2562         delete-obj)
2563
2564       · they will not update any metadata which may point to the object
2565
2566       They exist to improve  debugging  capabilities  without  direct  system
2567       access,  e.g.   in  case you ever run into some severe malfunction. Use
2568       them only if you know what you are doing or if a trusted Borg developer
2569       tells you what to do.
2570
2571       Borg has a --debug-topic TOPIC option to enable specific debugging mes‐
2572       sages. Topics are generally not documented.
2573
2574       A --debug-profile FILE option exists which writes a profile of the main
2575       program's  execution  to  a  file.  The  format  of  these files is not
2576       directly compatible with the Python profiling tools,  since  these  use
2577       the  "marshal"  format, which is not intended to be secure (quoting the
2578       Python docs: "Never unmarshal data received from an untrusted or  unau‐
2579       thenticated source.").
2580
2581       The  borg debug profile-convert command can be used to take a Borg pro‐
2582       file and convert it to a profile  file  that  is  compatible  with  the
2583       Python tools.
2584
2585       Additionally,  if  the filename specified for --debug-profile ends with
2586       ".pyprof" a Python  compatible  profile  is  generated.  This  is  only
2587       intended for local use by developers.
2588

ADDITIONAL NOTES

2590       Here  are misc. notes about topics that are maybe not covered in enough
2591       detail in the usage section.
2592
2593   --chunker-params
2594       The chunker params influence  how  input  files  are  cut  into  pieces
2595       (chunks)  which are then considered for deduplication. They also have a
2596       big impact on resource usage (RAM and disk  space)  as  the  amount  of
2597       resources  needed is (also) determined by the total amount of chunks in
2598       the repository (see cache-memory-usage for details).
2599
2600       --chunker-params=10,23,16,4095 results in a fine-grained deduplication|
2601       and  creates a big amount of chunks and thus uses a lot of resources to
2602       manage them. This is good for relatively small data volumes and if  the
2603       machine has a good amount of free RAM and disk space.
2604
2605       --chunker-params=19,23,21,4095  (default)  results  in a coarse-grained
2606       deduplication and creates a much smaller amount of chunks and thus uses
2607       less resources. This is good for relatively big data volumes and if the
2608       machine has a relatively low amount of free RAM and disk space.
2609
2610       If you already have made some archives in a  repository  and  you  then
2611       change  chunker  params,  this  of  course impacts deduplication as the
2612       chunks will be cut differently.
2613
2614       In the worst case (all files are big and were touched in between  back‐
2615       ups), this will store all content into the repository again.
2616
2617       Usually, it is not that bad though:
2618
2619       · usually  most  files  are not touched, so it will just re-use the old
2620         chunks it already has in the repo
2621
2622       · files smaller than the (both old and new) minimum chunksize result in
2623         only  one chunk anyway, so the resulting chunks are same and dedupli‐
2624         cation will apply
2625
2626       If you switch chunker params to save resources  for  an  existing  repo
2627       that  already  has  some  backup  archives,  you will see an increasing
2628       effect over time, when more and more files have been touched and stored
2629       again  using  the  bigger  chunksize  and all references to the smaller
2630       older chunks have been removed (by deleting / pruning archives).
2631
2632       If you want to see an immediate big effect on resource usage, you  bet‐
2633       ter start a new repository when changing chunker params.
2634
2635       For more details, see chunker_details.
2636
2637   --noatime / --noctime
2638       You can use these borg create options to not store the respective time‐
2639       stamp into the archive, in case you do not really need it.
2640
2641       Besides saving a little space for the not archived timestamp, it  might
2642       also  affect  metadata  stream  deduplication:  if  only this timestamp
2643       changes between backups and is stored into  the  metadata  stream,  the
2644       metadata stream chunks won't deduplicate just because of that.
2645
2646   --nobsdflags
2647       You  can  use this to not query and store (or not extract and set) bsd‐
2648       flags - in case you don't need them or if they are broken  somehow  for
2649       your fs.
2650
2651       On  Linux,  dealing  with  the  bsflags needs some additional syscalls.
2652       Especially when dealing with lots of small files, this causes a notica‐
2653       ble  overhead,  so  you can use this option also for speeding up opera‐
2654       tions.
2655
2656   --umask
2657       If you use --umask, make sure that all repository-modifying  borg  com‐
2658       mands  (create,  delete,  prune) that access the repository in question
2659       use the same --umask value.
2660
2661       If multiple machines access the same repository, this should hold  true
2662       for all of them.
2663
2664   --read-special
2665       The  --read-special  option  is special - you do not want to use it for
2666       normal full-filesystem backups, but rather after carefully picking some
2667       targets for it.
2668
2669       The option --read-special triggers special treatment for block and char
2670       device files as well as FIFOs. Instead of storing them as such a device
2671       (or  FIFO), they will get opened, their content will be read and in the
2672       backup archive they will show up like a regular file.
2673
2674       Symlinks will also get special treatment if (and only if) they point to
2675       such  a  special file: instead of storing them as a symlink, the target
2676       special file will get processed as described above.
2677
2678       One intended use case of this is backing up the contents of one or mul‐
2679       tiple  block  devices,  like e.g. LVM snapshots or inactive LVs or disk
2680       partitions.
2681
2682       You need to be careful about what you include  when  using  --read-spe‐
2683       cial, e.g. if you include /dev/zero, your backup will never terminate.
2684
2685       Restoring such files' content is currently only supported one at a time
2686       via --stdout option (and you have to redirect stdout to where  ever  it
2687       shall go, maybe directly into an existing device file of your choice or
2688       indirectly via dd).
2689
2690       To some extent, mounting a backup archive with the backups  of  special
2691       files via borg mount and then loop-mounting the image files from inside
2692       the mount point will work. If you plan to  access  a  lot  of  data  in
2693       there,  it  likely will scale and perform better if you do not work via
2694       the FUSE mount.
2695
2696   Example
2697       Imagine you have made some snapshots of logical volumes (LVs) you  want
2698       to backup.
2699
2700       NOTE:
2701          For  some  scenarios, this is a good method to get "crash-like" con‐
2702          sistency (I call it crash-like because it is the same as  you  would
2703          get  if you just hit the reset button or your machine would abrubtly
2704          and completely crash).  This is better than no  consistency  at  all
2705          and  a good method for some use cases, but likely not good enough if
2706          you have databases running.
2707
2708       Then you create a backup archive of all  these  snapshots.  The  backup
2709       process  will  see  a  "frozen" state of the logical volumes, while the
2710       processes working in the original volumes continue  changing  the  data
2711       stored there.
2712
2713       You also add the output of lvdisplay to your backup, so you can see the
2714       LV sizes in case you ever need to recreate and restore them.
2715
2716       After the backup has completed, you remove the snapshots again.
2717
2718          $ # create snapshots here
2719          $ lvdisplay > lvdisplay.txt
2720          $ borg create --read-special /path/to/repo::arch lvdisplay.txt /dev/vg0/*-snapshot
2721          $ # remove snapshots here
2722
2723       Now, let's see how to restore some LVs from such a backup.
2724
2725          $ borg extract /path/to/repo::arch lvdisplay.txt
2726          $ # create empty LVs with correct sizes here (look into lvdisplay.txt).
2727          $ # we assume that you created an empty root and home LV and overwrite it now:
2728          $ borg extract --stdout /path/to/repo::arch dev/vg0/root-snapshot > /dev/vg0/root
2729          $ borg extract --stdout /path/to/repo::arch dev/vg0/home-snapshot > /dev/vg0/home
2730
2731   Append-only mode
2732       A repository can be made "append-only",  which  means  that  Borg  will
2733       never  overwrite  or  delete  committed data (append-only refers to the
2734       segment files, but borg will also reject to delete the repository  com‐
2735       pletely).  This  is  useful for scenarios where a backup client machine
2736       backups remotely to a backup server using borg serve,  since  a  hacked
2737       client machine cannot delete backups on the server permanently.
2738
2739       To  activate  append-only  mode, set append_only to 1 in the repository
2740       config:
2741
2742          borg config /path/to/repo append_only 1
2743
2744       Note that you can go  back-and-forth  between  normal  and  append-only
2745       operation with borg config; it's not a "one way trip."
2746
2747       In  append-only mode Borg will create a transaction log in the transac‐
2748       tions file, where each line is a transaction and a UTC timestamp.
2749
2750       In addition, borg serve can act as if a repository  is  in  append-only
2751       mode  with  its  option  --append-only.  This  can  be  very useful for
2752       fine-tuning access control in .ssh/authorized_keys
2753
2754          command="borg serve --append-only ..." ssh-rsa <key used for not-always-trustable backup clients>
2755          command="borg serve ..." ssh-rsa <key used for backup management>
2756
2757       Running borg init via a borg serve --append-only server will not create
2758       an  append-only  repository. Running borg init --append-only creates an
2759       append-only repository regardless of server settings.
2760
2761   Example
2762       Suppose an attacker remotely deleted all backups, but  your  repository
2763       was in append-only mode. A transaction log in this situation might look
2764       like this:
2765
2766          transaction 1, UTC time 2016-03-31T15:53:27.383532
2767          transaction 5, UTC time 2016-03-31T15:53:52.588922
2768          transaction 11, UTC time 2016-03-31T15:54:23.887256
2769          transaction 12, UTC time 2016-03-31T15:55:54.022540
2770          transaction 13, UTC time 2016-03-31T15:55:55.472564
2771
2772       From your security logs you conclude  the  attacker  gained  access  at
2773       15:54:00  and  all the backups where deleted or replaced by compromised
2774       backups. From the log you know that transactions 11 and later are  com‐
2775       promised.  Note that the transaction ID is the name of the last file in
2776       the transaction. For example, transaction 11 spans files 6 to 11.
2777
2778       In a real attack you'll likely want to keep the compromised  repository
2779       intact  to analyze what the attacker tried to achieve. It's also a good
2780       idea to make this copy just in case something  goes  wrong  during  the
2781       recovery.  Since  recovery  is done by deleting some files, a hard link
2782       copy (cp -al) is sufficient.
2783
2784       The first step to reset the  repository  to  transaction  5,  the  last
2785       uncompromised transaction, is to remove the hints.N, index.N and
2786       ``
2787       integrity.N``files  in  the  repository (these files are always expend‐
2788       able). In this example N is 13.
2789
2790       Then remove or move all segment files from the segment  directories  in
2791       data/ starting with file 6:
2792
2793          rm data/**/{6..13}
2794
2795       That's all to do in the repository.
2796
2797       If  you  want  to  access this rollbacked repository from a client that
2798       already has a cache for this repository, the cache will reflect a newer
2799       repository  state  than  what  you actually have in the repository now,
2800       after the rollback.
2801
2802       Thus, you need to clear the cache:
2803
2804          borg delete --cache-only repo
2805
2806       The cache will get rebuilt automatically. Depending on  repo  size  and
2807       archive count, it may take a while.
2808
2809       You  also  will  need  to  remove  ~/.config/borg/security/REPOID/mani‐
2810       fest-timestamp.
2811
2812   Drawbacks
2813       As data is only appended, and nothing removed, commands like  prune  or
2814       delete  won't free disk space, they merely tag data as deleted in a new
2815       transaction.
2816
2817       Be aware that as soon as you write to the repo in non-append-only  mode
2818       (e.g.  prune, delete or create archives from an admin machine), it will
2819       remove the deleted objects permanently (including the  ones  that  were
2820       already marked as deleted, but not removed, in append-only mode). Auto‐
2821       mated edits to the repository (such as a cron job running  borg  prune)
2822       will render append-only mode moot if data is deleted.
2823
2824       Even  if an archive appears to be available, it is possible an attacker
2825       could delete just a few chunks from an archive and silently corrupt its
2826       data.  While  in  append-only  mode, this is reversible, but borg check
2827       should be run before a  writing/pruning  operation  on  an  append-only
2828       repository to catch accidental or malicious corruption:
2829
2830          # run without append-only mode
2831          borg check --verify-data repo && borg compact repo
2832
2833       Aside from checking repository & archive integrity you may want to also
2834       manually check backups to ensure their content seems correct.
2835
2836   Further considerations
2837       Append-only mode is not respected by tools other than  Borg.  rm  still
2838       works on the repository. Make sure that backup client machines only get
2839       to access the repository via borg serve.
2840
2841       Ensure that no remote access is possible if the repository is temporar‐
2842       ily set to normal mode for e.g. regular pruning.
2843
2844       Further  protections  can  be  implemented,  but  are outside of Borg's
2845       scope. For example, file system snapshots or wrapping borg serve to set
2846       special permissions or ACLs on new data files.
2847
2848   SSH batch mode
2849       When  running Borg using an automated script, ssh might still ask for a
2850       password, even if there is an SSH key for the target server.  Use  this
2851       to make scripts more robust:
2852
2853          export BORG_RSH='ssh -oBatchMode=yes'
2854

AUTHOR

2856       The Borg Collective (see AUTHORS file)
2857
2859       2010-2014  Jonas  Borgström, 2015-2019 The Borg Collective (see AUTHORS
2860       file)
2861
2862
2863
2864
28651.1.10                            2019-05-16                           BORG(1)
Impressum