1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030 |
- '\" t
- .\" Man page generated from reStructuredText.
- .
- .
- .nr rst2man-indent-level 0
- .
- .de1 rstReportMargin
- \\$1 \\n[an-margin]
- level \\n[rst2man-indent-level]
- level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
- -
- \\n[rst2man-indent0]
- \\n[rst2man-indent1]
- \\n[rst2man-indent2]
- ..
- .de1 INDENT
- .\" .rstReportMargin pre:
- . RS \\$1
- . nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
- . nr rst2man-indent-level +1
- .\" .rstReportMargin post:
- ..
- .de UNINDENT
- . RE
- .\" indent \\n[an-margin]
- .\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
- .nr rst2man-indent-level -1
- .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
- .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
- ..
- .TH "BORG" "1" "2025-05-22" "" "borg backup tool"
- .SH NAME
- borg \- deduplicating and encrypting backup tool
- .SH SYNOPSIS
- .sp
- borg [common options] <command> [options] [arguments]
- .SH DESCRIPTION
- .\" we don't include the README.rst here since we want to keep this terse.
- .
- .sp
- BorgBackup (short: Borg) is a deduplicating backup program.
- Optionally, it supports compression and authenticated encryption.
- .sp
- The main goal of Borg is to provide an efficient and secure way to back data up.
- The data deduplication technique used makes Borg suitable for daily backups
- since only changes are stored.
- The authenticated encryption technique makes it suitable for backups to targets not
- fully trusted.
- .sp
- Borg stores a set of files in an \fIarchive\fP\&. A \fIrepository\fP is a collection
- of \fIarchives\fP\&. The format of repositories is Borg\-specific. Borg does not
- distinguish archives from each other in any way other than their name,
- it does not matter when or where archives were created (e.g. different hosts).
- .SH EXAMPLES
- .SS A step\-by\-step example
- .INDENT 0.0
- .IP 1. 3
- Before a backup can be made, a repository has to be initialized:
- .INDENT 3.0
- .INDENT 3.5
- .sp
- .EX
- $ borg \-r /path/to/repo repo\-create \-\-encryption=repokey\-aes\-ocb
- .EE
- .UNINDENT
- .UNINDENT
- .IP 2. 3
- Back up the \fB~/src\fP and \fB~/Documents\fP directories into an archive called
- \fIdocs\fP:
- .INDENT 3.0
- .INDENT 3.5
- .sp
- .EX
- $ borg \-r /path/to/repo create docs ~/src ~/Documents
- .EE
- .UNINDENT
- .UNINDENT
- .IP 3. 3
- The next day create a new archive using the same archive name:
- .INDENT 3.0
- .INDENT 3.5
- .sp
- .EX
- $ borg \-r /path/to/repo create \-\-stats docs ~/src ~/Documents
- .EE
- .UNINDENT
- .UNINDENT
- .sp
- This backup will be a lot quicker and a lot smaller since only new, never
- before seen data is stored. The \fB\-\-stats\fP option causes Borg to
- output statistics about the newly created archive such as the deduplicated
- size (the amount of unique data not shared with other archives):
- .INDENT 3.0
- .INDENT 3.5
- .sp
- .EX
- Repository: /path/to/repo
- Archive name: docs
- Archive fingerprint: bcd1b53f9b4991b7afc2b339f851b7ffe3c6d030688936fe4552eccc1877718d
- Time (start): Sat, 2022\-06\-25 20:21:43
- Time (end): Sat, 2022\-06\-25 20:21:43
- Duration: 0.07 seconds
- Utilization of max. archive size: 0%
- Number of files: 699
- Original size: 31.14 MB
- Deduplicated size: 502 B
- .EE
- .UNINDENT
- .UNINDENT
- .IP 4. 3
- List all archives in the repository:
- .INDENT 3.0
- .INDENT 3.5
- .sp
- .EX
- $ borg \-r /path/to/repo repo\-list
- docs Sat, 2022\-06\-25 20:21:14 [b80e24d2...b179f298]
- docs Sat, 2022\-06\-25 20:21:43 [bcd1b53f...1877718d]
- .EE
- .UNINDENT
- .UNINDENT
- .IP 5. 3
- List the contents of the first archive:
- .INDENT 3.0
- .INDENT 3.5
- .sp
- .EX
- $ borg \-r /path/to/repo list aid:b80e24d2
- drwxr\-xr\-x user group 0 Mon, 2016\-02\-15 18:22:30 home/user/Documents
- \-rw\-r\-\-r\-\- user group 7961 Mon, 2016\-02\-15 18:22:30 home/user/Documents/Important.doc
- \&...
- .EE
- .UNINDENT
- .UNINDENT
- .IP 6. 3
- Restore the first archive by extracting the files relative to the current directory:
- .INDENT 3.0
- .INDENT 3.5
- .sp
- .EX
- $ borg \-r /path/to/repo extract aid:b80e24d2
- .EE
- .UNINDENT
- .UNINDENT
- .IP 7. 3
- Delete the first archive (please note that this does \fBnot\fP free repo disk space):
- .INDENT 3.0
- .INDENT 3.5
- .sp
- .EX
- $ borg \-r /path/to/repo delete aid:b80e24d2
- .EE
- .UNINDENT
- .UNINDENT
- .sp
- Be careful if you use an archive NAME (and not an archive ID), that might match multiple archives!
- Always first use with \fB\-\-dry\-run\fP and \fB\-\-list\fP!
- .IP 8. 3
- Recover disk space by compacting the segment files in the repo:
- .INDENT 3.0
- .INDENT 3.5
- .sp
- .EX
- $ borg \-r /path/to/repo compact \-v
- .EE
- .UNINDENT
- .UNINDENT
- .UNINDENT
- .sp
- \fBNOTE:\fP
- .INDENT 0.0
- .INDENT 3.5
- Borg is quiet by default (it defaults to WARNING log level).
- You can use options like \fB\-\-progress\fP or \fB\-\-list\fP to get specific
- reports during command execution. You can also add the \fB\-v\fP (or
- \fB\-\-verbose\fP or \fB\-\-info\fP) option to adjust the log level to INFO to
- get other informational messages.
- .UNINDENT
- .UNINDENT
- .SH NOTES
- .SS Positional Arguments and Options: Order matters
- .sp
- Borg only supports taking options (\fB\-s\fP and \fB\-\-progress\fP in the example)
- to the left or right of all positional arguments (\fBrepo::archive\fP and \fBpath\fP
- in the example), but not in between them:
- .INDENT 0.0
- .INDENT 3.5
- .sp
- .EX
- borg create \-s \-\-progress archive path # good and preferred
- borg create archive path \-s \-\-progress # also works
- borg create \-s archive path \-\-progress # works, but ugly
- borg create archive \-s \-\-progress path # BAD
- .EE
- .UNINDENT
- .UNINDENT
- .sp
- This is due to a problem in the argparse module: <https://bugs.python.org/issue15112>
- .SS Repository URLs
- .sp
- \fBLocal filesystem\fP (or locally mounted network filesystem):
- .sp
- \fB/path/to/repo\fP \- filesystem path to repo directory, absolute path
- .sp
- \fBpath/to/repo\fP \- filesystem path to repo directory, relative path
- .sp
- Also, stuff like \fB~/path/to/repo\fP or \fB~other/path/to/repo\fP works (this is
- expanded by your shell).
- .sp
- Note: you may also prepend a \fBfile://\fP to a filesystem path to get URL style.
- .sp
- \fBRemote repositories\fP accessed via ssh <user@host> :
- .sp
- \fBssh://user@host:port//abs/path/to/repo\fP \- absolute path
- .sp
- \fBssh://user@host:port/rel/path/to/repo\fP \- path relative to current directory
- .sp
- \fBRemote repositories\fP accessed via sftp:
- .sp
- \fBsftp://user@host:port//abs/path/to/repo\fP \- absolute path
- .sp
- \fBsftp://user@host:port/rel/path/to/repo\fP \- path relative to current directory
- .sp
- For ssh and sftp URLs, the \fBuser@\fP and \fB:port\fP parts are optional.
- .sp
- \fBRemote repositories\fP accessed via rclone:
- .sp
- \fBrclone:remote:path\fP \- see the rclone docs for more details about remote:path.
- .sp
- \fBRemote repositories\fP accessed via S3:
- .sp
- \fB(s3|b2):[profile|(access_key_id:access_key_secret)@][schema://hostname[:port]]/bucket/path\fP \- see the boto3 docs for more details about the credentials.
- .sp
- If you\(aqre connecting to AWS S3, \fB[schema://hostname[:port]]\fP is optional, but \fBbucket\fP and \fBpath\fP are always required.
- .sp
- Note: There is a known issue with some S3\-compatible services, e.g., Backblaze B2. If you encounter problems, try using \fBb2:\fP instead of \fBs3:\fP in the url.
- .sp
- If you frequently need the same repo URL, it is a good idea to set the
- \fBBORG_REPO\fP environment variable to set a default for the repo URL:
- .INDENT 0.0
- .INDENT 3.5
- .sp
- .EX
- export BORG_REPO=\(aqssh://user@host:port/rel/path/to/repo\(aq
- .EE
- .UNINDENT
- .UNINDENT
- .sp
- Then just leave away the \fB\-\-repo\fP option if you want
- to use the default \- it will be read from BORG_REPO then.
- .SS Repository Locations / Archive names
- .sp
- Many commands need to know the repository location, give it via \fB\-r\fP / \fB\-\-repo\fP
- or use the \fBBORG_REPO\fP environment variable.
- .sp
- Commands needing one or two archive names usually get them as positional argument.
- .sp
- Commands working with an arbitrary amount of archives, usually take \fB\-a ARCH_GLOB\fP\&.
- .sp
- Archive names must not contain the \fB/\fP (slash) character. For simplicity,
- maybe also avoid blanks or other characters that have special meaning on the
- shell or in a filesystem (borg mount will use the archive name as directory
- name).
- .SS Logging
- .sp
- Borg writes all log output to stderr by default. But please note that something
- showing up on stderr does \fInot\fP indicate an error condition just because it is
- on stderr. Please check the log levels of the messages and the return code of
- borg for determining error, warning or success conditions.
- .sp
- If you want to capture the log output to a file, just redirect it:
- .INDENT 0.0
- .INDENT 3.5
- .sp
- .EX
- borg create \-\-repo repo archive myfiles 2>> logfile
- .EE
- .UNINDENT
- .UNINDENT
- .sp
- Custom logging configurations can be implemented via BORG_LOGGING_CONF.
- .sp
- The log level of the builtin logging configuration defaults to WARNING.
- This is because we want Borg to be mostly silent and only output
- warnings, errors and critical messages, unless output has been requested
- by supplying an option that implies output (e.g. \fB\-\-list\fP or \fB\-\-progress\fP).
- .sp
- Log levels: DEBUG < INFO < WARNING < ERROR < CRITICAL
- .sp
- Use \fB\-\-debug\fP to set DEBUG log level \-
- to get debug, info, warning, error and critical level output.
- .sp
- Use \fB\-\-info\fP (or \fB\-v\fP or \fB\-\-verbose\fP) to set INFO log level \-
- to get info, warning, error and critical level output.
- .sp
- Use \fB\-\-warning\fP (default) to set WARNING log level \-
- to get warning, error and critical level output.
- .sp
- Use \fB\-\-error\fP to set ERROR log level \-
- to get error and critical level output.
- .sp
- Use \fB\-\-critical\fP to set CRITICAL log level \-
- to get critical level output.
- .sp
- While you can set misc. log levels, do not expect that every command will
- give different output on different log levels \- it\(aqs just a possibility.
- .sp
- \fBWARNING:\fP
- .INDENT 0.0
- .INDENT 3.5
- Options \fB\-\-critical\fP and \fB\-\-error\fP are provided for completeness,
- their usage is not recommended as you might miss important information.
- .UNINDENT
- .UNINDENT
- .SS Return codes
- .sp
- Borg can exit with the following return codes (rc):
- .TS
- box center;
- l|l.
- T{
- Return code
- T} T{
- Meaning
- T}
- _
- T{
- 0
- T} T{
- success (logged as INFO)
- T}
- _
- T{
- 1
- T} T{
- generic warning (operation reached its normal end, but there were warnings \-\-
- you should check the log, logged as WARNING)
- T}
- _
- T{
- 2
- T} T{
- generic error (like a fatal error, a local or remote exception, the operation
- did not reach its normal end, logged as ERROR)
- T}
- _
- T{
- 3..99
- T} T{
- specific error (enabled by BORG_EXIT_CODES=modern)
- T}
- _
- T{
- 100..127
- T} T{
- specific warning (enabled by BORG_EXIT_CODES=modern)
- T}
- _
- T{
- 128+N
- T} T{
- killed by signal N (e.g. 137 == kill \-9)
- T}
- .TE
- .sp
- If you use \fB\-\-show\-rc\fP, the return code is also logged at the indicated
- level as the last log entry.
- .sp
- The modern exit codes (return codes, \(dqrc\(dq) are documented there: \fImsgid\fP
- .SS Environment Variables
- .sp
- Borg uses some environment variables for automation:
- .INDENT 0.0
- .TP
- .B General:
- .INDENT 7.0
- .TP
- .B BORG_REPO
- When set, use the value to give the default repository location.
- Use this so you do not need to type \fB\-\-repo /path/to/my/repo\fP all the time.
- .TP
- .B BORG_OTHER_REPO
- Similar to BORG_REPO, but gives the default for \fB\-\-other\-repo\fP\&.
- .TP
- .B BORG_PASSPHRASE (and BORG_OTHER_PASSPHRASE)
- When set, use the value to answer the passphrase question for encrypted repositories.
- It is used when a passphrase is needed to access an encrypted repo as well as when a new
- passphrase should be initially set when initializing an encrypted repo.
- See also BORG_NEW_PASSPHRASE.
- .TP
- .B BORG_PASSCOMMAND (and BORG_OTHER_PASSCOMMAND)
- When set, use the standard output of the command (trailing newlines are stripped) to answer the
- passphrase question for encrypted repositories.
- It is used when a passphrase is needed to access an encrypted repo as well as when a new
- passphrase should be initially set when initializing an encrypted repo. Note that the command
- is executed without a shell. So variables, like \fB$HOME\fP will work, but \fB~\fP won\(aqt.
- If BORG_PASSPHRASE is also set, it takes precedence.
- See also BORG_NEW_PASSPHRASE.
- .TP
- .B BORG_PASSPHRASE_FD (and BORG_OTHER_PASSPHRASE_FD)
- When set, specifies a file descriptor to read a passphrase
- from. Programs starting borg may choose to open an anonymous pipe
- and use it to pass a passphrase. This is safer than passing via
- BORG_PASSPHRASE, because on some systems (e.g. Linux) environment
- can be examined by other processes.
- If BORG_PASSPHRASE or BORG_PASSCOMMAND are also set, they take precedence.
- .TP
- .B BORG_NEW_PASSPHRASE
- When set, use the value to answer the passphrase question when a \fBnew\fP passphrase is asked for.
- This variable is checked first. If it is not set, BORG_PASSPHRASE and BORG_PASSCOMMAND will also
- be checked.
- Main usecase for this is to automate fully \fBborg change\-passphrase\fP\&.
- .TP
- .B BORG_DISPLAY_PASSPHRASE
- When set, use the value to answer the \(dqdisplay the passphrase for verification\(dq question when defining a new passphrase for encrypted repositories.
- .TP
- .B BORG_DEBUG_PASSPHRASE
- When set to YES, display debugging information that includes passphrases used and passphrase related env vars set.
- .TP
- .B BORG_EXIT_CODES
- When set to \(dqmodern\(dq, the borg process will return more specific exit codes (rc).
- When set to \(dqlegacy\(dq, the borg process will return rc 2 for all errors, 1 for all warnings, 0 for success.
- Default is \(dqmodern\(dq.
- .TP
- .B BORG_HOST_ID
- Borg usually computes a host id from the FQDN plus the results of \fBuuid.getnode()\fP (which usually returns
- a unique id based on the MAC address of the network interface. Except if that MAC happens to be all\-zero \- in
- that case it returns a random value, which is not what we want (because it kills automatic stale lock removal).
- So, if you have a all\-zero MAC address or other reasons to control better externally the host id, just set this
- environment variable to a unique value. If all your FQDNs are unique, you can just use the FQDN. If not,
- use <fqdn@uniqueid> \&.
- .TP
- .B BORG_LOCK_WAIT
- You can set the default value for the \fB\-\-lock\-wait\fP option with this, so
- you do not need to give it as a commandline option.
- .TP
- .B BORG_LOGGING_CONF
- When set, use the given filename as INI <https://docs.python.org/3/library/logging.config.html#configuration-file-format>
- \-style logging configuration.
- A basic example conf can be found at \fBdocs/misc/logging.conf\fP\&.
- .TP
- .B BORG_RSH
- When set, use this command instead of \fBssh\fP\&. This can be used to specify ssh options, such as
- a custom identity file \fBssh \-i /path/to/private/key\fP\&. See \fBman ssh\fP for other options. Using
- the \fB\-\-rsh CMD\fP commandline option overrides the environment variable.
- .TP
- .B BORG_REMOTE_PATH
- When set, use the given path as borg executable on the remote (defaults to \(dqborg\(dq if unset).
- Using \fB\-\-remote\-path PATH\fP commandline option overrides the environment variable.
- .TP
- .B BORG_FILES_CACHE_SUFFIX
- When set to a value at least one character long, instructs borg to use a specifically named
- (based on the suffix) alternative files cache. This can be used to avoid loading and saving
- cache entries for backup sources other than the current sources.
- .TP
- .B BORG_FILES_CACHE_TTL
- When set to a numeric value, this determines the maximum \(dqtime to live\(dq for the files cache
- entries (default: 2). The files cache is used to determine quickly whether a file is unchanged.
- .TP
- .B BORG_USE_CHUNKS_ARCHIVE
- When set to no (default: yes), the \fBchunks.archive.d\fP folder will not be used. This reduces
- disk space usage but slows down cache resyncs.
- .TP
- .B BORG_SHOW_SYSINFO
- When set to no (default: yes), system information (like OS, Python version, ...) in
- exceptions is not shown.
- Please only use for good reasons as it makes issues harder to analyze.
- .TP
- .B BORG_FUSE_IMPL
- Choose the lowlevel FUSE implementation borg shall use for \fBborg mount\fP\&.
- This is a comma\-separated list of implementation names, they are tried in the
- given order, e.g.:
- .INDENT 7.0
- .IP \(bu 2
- \fBpyfuse3,llfuse\fP: default, first try to load pyfuse3, then try to load llfuse.
- .IP \(bu 2
- \fBllfuse,pyfuse3\fP: first try to load llfuse, then try to load pyfuse3.
- .IP \(bu 2
- \fBpyfuse3\fP: only try to load pyfuse3
- .IP \(bu 2
- \fBllfuse\fP: only try to load llfuse
- .IP \(bu 2
- \fBnone\fP: do not try to load an implementation
- .UNINDENT
- .TP
- .B BORG_SELFTEST
- This can be used to influence borg\(aqs builtin self\-tests. The default is to execute the tests
- at the beginning of each borg command invocation.
- .sp
- BORG_SELFTEST=disabled can be used to switch off the tests and rather save some time.
- Disabling is not recommended for normal borg users, but large scale borg storage providers can
- use this to optimize production servers after at least doing a one\-time test borg (with
- selftests not disabled) when installing or upgrading machines / OS / borg.
- .TP
- .B BORG_WORKAROUNDS
- A list of comma separated strings that trigger workarounds in borg,
- e.g. to work around bugs in other software.
- .sp
- Currently known strings are:
- .INDENT 7.0
- .TP
- .B basesyncfile
- Use the more simple BaseSyncFile code to avoid issues with sync_file_range.
- You might need this to run borg on WSL (Windows Subsystem for Linux) or
- in systemd.nspawn containers on some architectures (e.g. ARM).
- Using this does not affect data safety, but might result in a more bursty
- write to disk behaviour (not continuously streaming to disk).
- .TP
- .B retry_erofs
- Retry opening a file without O_NOATIME if opening a file with O_NOATIME
- caused EROFS. You will need this to make archives from volume shadow copies
- in WSL1 (Windows Subsystem for Linux 1).
- .TP
- .B authenticated_no_key
- Work around a lost passphrase or key for an \fBauthenticated\fP mode repository
- (these are only authenticated, but not encrypted).
- If the key is missing in the repository config, add \fBkey = anything\fP there.
- .sp
- This workaround is \fBonly\fP for emergencies and \fBonly\fP to extract data
- from an affected repository (read\-only access):
- .INDENT 7.0
- .INDENT 3.5
- .sp
- .EX
- BORG_WORKAROUNDS=authenticated_no_key borg extract \-\-repo repo archive
- .EE
- .UNINDENT
- .UNINDENT
- .sp
- After you have extracted all data you need, you MUST delete the repository:
- .INDENT 7.0
- .INDENT 3.5
- .sp
- .EX
- BORG_WORKAROUNDS=authenticated_no_key borg delete repo
- .EE
- .UNINDENT
- .UNINDENT
- .sp
- Now you can init a fresh repo. Make sure you do not use the workaround any more.
- .UNINDENT
- .UNINDENT
- .TP
- .B Output formatting:
- .INDENT 7.0
- .TP
- .B BORG_LIST_FORMAT
- Giving the default value for \fBborg repo\-list \-\-format=X\fP\&.
- .TP
- .B BORG_RLIST_FORMAT
- Giving the default value for \fBborg repo\-list \-\-format=X\fP\&.
- .TP
- .B BORG_PRUNE_FORMAT
- Giving the default value for \fBborg prune \-\-format=X\fP\&.
- .UNINDENT
- .TP
- .B Some automatic \(dqanswerers\(dq (if set, they automatically answer confirmation questions):
- .INDENT 7.0
- .TP
- .B BORG_UNKNOWN_UNENCRYPTED_REPO_ACCESS_IS_OK=no (or =yes)
- For \(dqWarning: Attempting to access a previously unknown unencrypted repository\(dq
- .TP
- .B BORG_RELOCATED_REPO_ACCESS_IS_OK=no (or =yes)
- For \(dqWarning: The repository at location ... was previously located at ...\(dq
- .TP
- .B BORG_CHECK_I_KNOW_WHAT_I_AM_DOING=NO (or =YES)
- For \(dqThis is a potentially dangerous function...\(dq (check \-\-repair)
- .TP
- .B BORG_DELETE_I_KNOW_WHAT_I_AM_DOING=NO (or =YES)
- For \(dqYou requested to DELETE the repository completely \fIincluding\fP all archives it contains:\(dq
- .UNINDENT
- .sp
- Note: answers are case sensitive. setting an invalid answer value might either give the default
- answer or ask you interactively, depending on whether retries are allowed (they by default are
- allowed). So please test your scripts interactively before making them a non\-interactive script.
- .UNINDENT
- .INDENT 0.0
- .TP
- .B Directories and files:
- .INDENT 7.0
- .TP
- .B BORG_BASE_DIR
- Defaults to \fB$HOME\fP or \fB~$USER\fP or \fB~\fP (in that order).
- If you want to move all borg\-specific folders to a custom path at once, all you need to do is
- to modify \fBBORG_BASE_DIR\fP: the other paths for cache, config etc. will adapt accordingly
- (assuming you didn\(aqt set them to a different custom value).
- .TP
- .B BORG_CACHE_DIR
- Defaults to \fB$BORG_BASE_DIR/.cache/borg\fP\&. If \fBBORG_BASE_DIR\fP is not explicitly set while
- XDG env var <https://specifications.freedesktop.org/basedir-spec/0.6/ar01s03.html>
- \fBXDG_CACHE_HOME\fP is set, then \fB$XDG_CACHE_HOME/borg\fP is being used instead.
- This directory contains the local cache and might need a lot
- of space for dealing with big repositories. Make sure you\(aqre aware of the associated
- security aspects of the cache location: \fIcache_security\fP
- .TP
- .B BORG_CONFIG_DIR
- Defaults to \fB$BORG_BASE_DIR/.config/borg\fP\&. If \fBBORG_BASE_DIR\fP is not explicitly set while
- XDG env var <https://specifications.freedesktop.org/basedir-spec/0.6/ar01s03.html>
- \fBXDG_CONFIG_HOME\fP is set, then \fB$XDG_CONFIG_HOME/borg\fP is being used instead.
- This directory contains all borg configuration directories, see the FAQ
- for a security advisory about the data in this directory: \fIhome_config_borg\fP
- .TP
- .B BORG_DATA_DIR
- Defaults to \fB$BORG_BASE_DIR/.local/share/borg\fP\&. If \fBBORG_BASE_DIR\fP is not explicitly set while
- XDG env var <https://specifications.freedesktop.org/basedir-spec/0.6/ar01s03.html>
- \fBXDG_DATA_HOME\fP is set, then \fB$XDG_DATA_HOME/borg\fP is being used instead.
- This directory contains all borg data directories, see the FAQ
- for a security advisory about the data in this directory: \fIhome_data_borg\fP
- .TP
- .B BORG_RUNTIME_DIR
- Defaults to \fB$BORG_BASE_DIR/.cache/borg\fP\&. If \fBBORG_BASE_DIR\fP is not explicitly set while
- XDG env var <https://specifications.freedesktop.org/basedir-spec/0.6/ar01s03.html>
- \fBXDG_RUNTIME_DIR\fP is set, then \fB$XDG_RUNTIME_DIR/borg\fP is being used instead.
- This directory contains borg runtime files, like e.g. the socket file.
- .TP
- .B BORG_SECURITY_DIR
- Defaults to \fB$BORG_DATA_DIR/security\fP\&.
- This directory contains security relevant data.
- .TP
- .B BORG_KEYS_DIR
- Defaults to \fB$BORG_CONFIG_DIR/keys\fP\&.
- This directory contains keys for encrypted repositories.
- .TP
- .B BORG_KEY_FILE
- When set, use the given path as repository key file. Please note that this is only
- for rather special applications that externally fully manage the key files:
- .INDENT 7.0
- .IP \(bu 2
- this setting only applies to the keyfile modes (not to the repokey modes).
- .IP \(bu 2
- using a full, absolute path to the key file is recommended.
- .IP \(bu 2
- all directories in the given path must exist.
- .IP \(bu 2
- this setting forces borg to use the key file at the given location.
- .IP \(bu 2
- the key file must either exist (for most commands) or will be created (\fBborg repo\-create\fP).
- .IP \(bu 2
- you need to give a different path for different repositories.
- .IP \(bu 2
- you need to point to the correct key file matching the repository the command will operate on.
- .UNINDENT
- .TP
- .B TMPDIR
- This is where temporary files are stored (might need a lot of temporary space for some
- operations), see tempfile <https://docs.python.org/3/library/tempfile.html#tempfile.gettempdir>
- for details.
- .UNINDENT
- .TP
- .B Building:
- .INDENT 7.0
- .TP
- .B BORG_OPENSSL_NAME
- Defines the subdirectory name for OpenSSL (setup.py).
- .TP
- .B BORG_OPENSSL_PREFIX
- Adds given OpenSSL header file directory to the default locations (setup.py).
- .TP
- .B BORG_LIBACL_PREFIX
- Adds given prefix directory to the default locations. If an \(aqinclude/acl/libacl.h\(aq is found
- Borg will be linked against the system libacl instead of a bundled implementation. (setup.py)
- .TP
- .B BORG_LIBLZ4_PREFIX
- Adds given prefix directory to the default locations. If a \(aqinclude/lz4.h\(aq is found Borg
- will be linked against the system liblz4 instead of a bundled implementation. (setup.py)
- .TP
- .B BORG_LIBZSTD_PREFIX
- Adds given prefix directory to the default locations. If a \(aqinclude/zstd.h\(aq is found Borg
- will be linked against the system libzstd instead of a bundled implementation. (setup.py)
- .UNINDENT
- .UNINDENT
- .sp
- Please note:
- .INDENT 0.0
- .IP \(bu 2
- Be very careful when using the \(dqyes\(dq sayers, the warnings with prompt exist for your / your data\(aqs security/safety.
- .IP \(bu 2
- Also be very careful when putting your passphrase into a script, make sure it has appropriate file permissions (e.g.
- mode 600, root:root).
- .UNINDENT
- .SS File systems
- .sp
- We recommend using a reliable, scalable journaling filesystem for the
- repository, e.g. zfs, btrfs, ext4, apfs.
- .sp
- Borg now uses the \fBborgstore\fP package to implement the key/value store it
- uses for the repository.
- .sp
- It currently uses the \fBfile:\fP Store (posixfs backend) either with a local
- directory or via ssh and a remote \fBborg serve\fP agent using borgstore on the
- remote side.
- .sp
- This means that it will store each chunk into a separate filesystem file
- (for more details, see the \fBborgstore\fP project).
- .sp
- This has some pros and cons (compared to legacy borg 1.x\(aqs segment files):
- .sp
- Pros:
- .INDENT 0.0
- .IP \(bu 2
- Simplicity and better maintainability of the borg code.
- .IP \(bu 2
- Sometimes faster, less I/O, better scalability: e.g. borg compact can just
- remove unused chunks by deleting a single file and does not need to read
- and re\-write segment files to free space.
- .IP \(bu 2
- In future, easier to adapt to other kinds of storage:
- borgstore\(aqs backends are quite simple to implement.
- \fBsftp:\fP and \fBrclone:\fP backends already exist, others might be easy to add.
- .IP \(bu 2
- Parallel repository access with less locking is easier to implement.
- .UNINDENT
- .sp
- Cons:
- .INDENT 0.0
- .IP \(bu 2
- The repository filesystem will have to deal with a big amount of files (there
- are provisions in borgstore against having too many files in a single directory
- by using a nested directory structure).
- .IP \(bu 2
- Bigger fs space usage overhead (will depend on allocation block size \- modern
- filesystems like zfs are rather clever here using a variable block size).
- .IP \(bu 2
- Sometimes slower, due to less sequential / more random access operations.
- .UNINDENT
- .SS Units
- .sp
- To display quantities, Borg takes care of respecting the
- usual conventions of scale. Disk sizes are displayed in decimal <https://en.wikipedia.org/wiki/Decimal>
- , using powers of ten (so
- \fBkB\fP means 1000 bytes). For memory usage, binary prefixes <https://en.wikipedia.org/wiki/Binary_prefix>
- are used, and are
- indicated using the IEC binary prefixes <https://en.wikipedia.org/wiki/IEC_80000-13#Prefixes_for_binary_multiples>
- ,
- using powers of two (so \fBKiB\fP means 1024 bytes).
- .SS Date and Time
- .sp
- We format date and time conforming to ISO\-8601, that is: YYYY\-MM\-DD and
- HH:MM:SS (24h clock).
- .sp
- For more information about that, see: <https://xkcd.com/1179/>
- .sp
- Unless otherwise noted, we display local date and time.
- Internally, we store and process date and time as UTC.
- TIMESPAN
- .sp
- Some options accept a TIMESPAN parameter, which can be given as a number of
- years (e.g. \fB2y\fP), months (e.g. \fB12m\fP), weeks (e.g. \fB2w\fP),
- days (e.g. \fB7d\fP), hours (e.g. \fB8H\fP), minutes (e.g. \fB30M\fP),
- or seconds (e.g. \fB150S\fP).
- .SS Resource Usage
- .sp
- Borg might use a lot of resources depending on the size of the data set it is dealing with.
- .sp
- If one uses Borg in a client/server way (with a ssh: repository),
- the resource usage occurs in part on the client and in another part on the
- server.
- .sp
- If one uses Borg as a single process (with a filesystem repo),
- all the resource usage occurs in that one process, so just add up client +
- server to get the approximate resource usage.
- .INDENT 0.0
- .TP
- .B CPU client:
- .INDENT 7.0
- .IP \(bu 2
- \fBborg create:\fP does chunking, hashing, compression, crypto (high CPU usage)
- .IP \(bu 2
- \fBchunks cache sync:\fP quite heavy on CPU, doing lots of hashtable operations.
- .IP \(bu 2
- \fBborg extract:\fP crypto, decompression (medium to high CPU usage)
- .IP \(bu 2
- \fBborg check:\fP similar to extract, but depends on options given.
- .IP \(bu 2
- \fBborg prune / borg delete archive:\fP low to medium CPU usage
- .IP \(bu 2
- \fBborg delete repo:\fP done on the server
- .UNINDENT
- .sp
- It won\(aqt go beyond 100% of 1 core as the code is currently single\-threaded.
- Especially higher zlib and lzma compression levels use significant amounts
- of CPU cycles. Crypto might be cheap on the CPU (if hardware accelerated) or
- expensive (if not).
- .TP
- .B CPU server:
- It usually doesn\(aqt need much CPU, it just deals with the key/value store
- (repository) and uses the repository index for that.
- .sp
- borg check: the repository check computes the checksums of all chunks
- (medium CPU usage)
- borg delete repo: low CPU usage
- .TP
- .B CPU (only for client/server operation):
- When using borg in a client/server way with a <ssh:\-type> repo, the ssh
- processes used for the transport layer will need some CPU on the client and
- on the server due to the crypto they are doing \- esp. if you are pumping
- big amounts of data.
- .TP
- .B Memory (RAM) client:
- The chunks index and the files index are read into memory for performance
- reasons. Might need big amounts of memory (see below).
- Compression, esp. lzma compression with high levels might need substantial
- amounts of memory.
- .TP
- .B Memory (RAM) server:
- The server process will load the repository index into memory. Might need
- considerable amounts of memory, but less than on the client (see below).
- .TP
- .B Chunks index (client only):
- Proportional to the amount of data chunks in your repo. Lots of chunks
- in your repo imply a big chunks index.
- It is possible to tweak the chunker params (see create options).
- .TP
- .B Files index (client only):
- Proportional to the amount of files in your last backups. Can be switched
- off (see create options), but next backup might be much slower if you do.
- The speed benefit of using the files cache is proportional to file size.
- .TP
- .B Repository index (server only):
- Proportional to the amount of data chunks in your repo. Lots of chunks
- in your repo imply a big repository index.
- It is possible to tweak the chunker params (see create options) to
- influence the amount of chunks being created.
- .TP
- .B Temporary files (client):
- Reading data and metadata from a FUSE mounted repository will consume up to
- the size of all deduplicated, small chunks in the repository. Big chunks
- won\(aqt be locally cached.
- .TP
- .B Temporary files (server):
- A non\-trivial amount of data will be stored on the remote temp directory
- for each client that connects to it. For some remotes, this can fill the
- default temporary directory at /tmp. This can be remediated by ensuring the
- $TMPDIR, $TEMP, or $TMP environment variable is properly set for the sshd
- process.
- For some OSes, this can be done just by setting the correct value in the
- \&.bashrc (or equivalent login config file for other shells), however in
- other cases it may be necessary to first enable \fBPermitUserEnvironment yes\fP
- in your \fBsshd_config\fP file, then add \fBenvironment=\(dqTMPDIR=/my/big/tmpdir\(dq\fP
- at the start of the public key to be used in the \fBauthorized_hosts\fP file.
- .TP
- .B Cache files (client only):
- Contains the chunks index and files index (plus a collection of single\-
- archive chunk indexes which might need huge amounts of disk space,
- depending on archive count and size \- see FAQ about how to reduce).
- .TP
- .B Network (only for client/server operation):
- If your repository is remote, all deduplicated (and optionally compressed/
- encrypted) data of course has to go over the connection (\fBssh://\fP repo url).
- If you use a locally mounted network filesystem, additionally some copy
- operations used for transaction support also go over the connection. If
- you back up multiple sources to one target repository, additional traffic
- happens for cache resynchronization.
- .UNINDENT
- .SS Support for file metadata
- .sp
- Besides regular file and directory structures, Borg can preserve
- .INDENT 0.0
- .IP \(bu 2
- symlinks (stored as symlink, the symlink is not followed)
- .IP \(bu 2
- special files:
- .INDENT 2.0
- .IP \(bu 2
- character and block device files (restored via mknod)
- .IP \(bu 2
- FIFOs (\(dqnamed pipes\(dq)
- .IP \(bu 2
- special file \fIcontents\fP can be backed up in \fB\-\-read\-special\fP mode.
- By default the metadata to create them with mknod(2), mkfifo(2) etc. is stored.
- .UNINDENT
- .IP \(bu 2
- hardlinked regular files, devices, symlinks, FIFOs (considering all items in the same archive)
- .IP \(bu 2
- timestamps in nanosecond precision: mtime, atime, ctime
- .IP \(bu 2
- other timestamps: birthtime (on platforms supporting it)
- .IP \(bu 2
- permissions:
- .INDENT 2.0
- .IP \(bu 2
- IDs of owning user and owning group
- .IP \(bu 2
- names of owning user and owning group (if the IDs can be resolved)
- .IP \(bu 2
- Unix Mode/Permissions (u/g/o permissions, suid, sgid, sticky)
- .UNINDENT
- .UNINDENT
- .sp
- On some platforms additional features are supported:
- .\" Yes/No's are grouped by reason/mechanism/reference.
- .
- .TS
- box center;
- l|l|l|l.
- T{
- Platform
- T} T{
- ACLs
- [5]
- T} T{
- xattr
- [6]
- T} T{
- Flags
- [7]
- T}
- _
- T{
- Linux
- T} T{
- Yes
- T} T{
- Yes
- T} T{
- Yes [1]
- T}
- _
- T{
- macOS
- T} T{
- Yes
- T} T{
- Yes
- T} T{
- Yes (all)
- T}
- _
- T{
- FreeBSD
- T} T{
- Yes
- T} T{
- Yes
- T} T{
- Yes (all)
- T}
- _
- T{
- OpenBSD
- T} T{
- n/a
- T} T{
- n/a
- T} T{
- Yes (all)
- T}
- _
- T{
- NetBSD
- T} T{
- n/a
- T} T{
- No [2]
- T} T{
- Yes (all)
- T}
- _
- T{
- Solaris and derivatives
- T} T{
- No [3]
- T} T{
- No [3]
- T} T{
- n/a
- T}
- _
- T{
- Windows (cygwin)
- T} T{
- No [4]
- T} T{
- No
- T} T{
- No
- T}
- .TE
- .sp
- Other Unix\-like operating systems may work as well, but have not been tested at all.
- .sp
- Note that most of the platform\-dependent features also depend on the file system.
- For example, ntfs\-3g on Linux isn\(aqt able to convey NTFS ACLs.
- .IP [1] 5
- Only \(dqnodump\(dq, \(dqimmutable\(dq, \(dqcompressed\(dq and \(dqappend\(dq are supported.
- Feature request #618 for more flags.
- .IP [2] 5
- Feature request #1332
- .IP [3] 5
- Feature request #1337
- .IP [4] 5
- Cygwin tries to map NTFS ACLs to permissions with varying degrees of success.
- .IP [5] 5
- The native access control list mechanism of the OS. This normally limits access to
- non\-native ACLs. For example, NTFS ACLs aren\(aqt completely accessible on Linux with ntfs\-3g.
- .IP [6] 5
- extended attributes; key\-value pairs attached to a file, mainly used by the OS.
- This includes resource forks on Mac OS X.
- .IP [7] 5
- aka \fIBSD flags\fP\&. The Linux set of flags [1] is portable across platforms.
- The BSDs define additional flags.
- .SH SEE ALSO
- .sp
- \fIborg\-common(1)\fP for common command line options
- .sp
- \fIborg\-repo\-create(1)\fP, \fIborg\-repo\-delete(1)\fP, \fIborg\-repo\-list(1)\fP, \fIborg\-repo\-info(1)\fP,
- \fIborg\-create(1)\fP, \fIborg\-mount(1)\fP, \fIborg\-extract(1)\fP,
- \fIborg\-list(1)\fP, \fIborg\-info(1)\fP,
- \fIborg\-delete(1)\fP, \fIborg\-prune(1)\fP, \fIborg\-compact(1)\fP,
- \fIborg\-recreate(1)\fP
- .sp
- \fIborg\-compression(1)\fP, \fIborg\-patterns(1)\fP, \fIborg\-placeholders(1)\fP
- .INDENT 0.0
- .IP \(bu 2
- Main web site <https://www.borgbackup.org/>
- .IP \(bu 2
- Releases <https://github.com/borgbackup/borg/releases>
- .IP \(bu 2
- Changelog <https://github.com/borgbackup/borg/blob/master/docs/changes.rst>
- .IP \(bu 2
- GitHub <https://github.com/borgbackup/borg>
- .IP \(bu 2
- Security contact <https://borgbackup.readthedocs.io/en/latest/support.html#security\-contact>
- .UNINDENT
- .SH AUTHOR
- The Borg Collective
- orphan:
- .\" Generated by docutils manpage writer.
- .
|