borg/docs/usage/create.rst
Thomas Waldmann 61b1b83059
make fastcdc the default chunker, fixes #9957
fastcdc is ~1.3x faster than buzhash/buzhash64 at the same deduplication
and (with normalized chunking) a tighter chunk size distribution.

It is also the better choice security-wise: its Gear table is derived
from secret key material, while the "buzhash" chunker only XORs a 32bit
seed into its table - so chunk cut points are much harder to predict
without the key (resistance against chunk-size fingerprinting attacks).

Both places using a chunker are switched:

- CHUNKER_PARAMS (file content data): fastcdc,19,23,21,2
- ITEMS_CHUNKER_PARAMS (item metadata stream): fastcdc,15,19,17,2

The metadata stream chunker was still using the 32bit seeded buzhash, so
this also closes that gap.

Also rename CHUNKER64_PARAMS -> BUZHASH64_PARAMS and add BUZHASH_PARAMS,
so the per-algorithm defaults are named consistently and CHUNKER_PARAMS
unambiguously means "the default chunker".

This is intentionally done during the beta phase so it gets plenty of
practical testing before borg2 is released for production.
2026-08-02 00:40:58 +02:00

100 lines
4.4 KiB
ReStructuredText

.. include:: create.rst.inc
.. note::
Archive series and performance: In Borg 2, archives that share the same NAME form an "archive series".
The files cache is maintained per series. For best performance on repeated backups, reuse the same
NAME every time you run ``borg create`` for the same dataset (e.g. always use ``my-documents``).
Frequently changing the NAME (for example by embedding date/time like ``my-documents-2025-11-10``)
prevents cache reuse and forces Borg to re-scan and re-chunk files, which can make incremental
backups vastly slower. Only vary the NAME if you intentionally want to start a new series.
If you must vary the archive name but still want cache reuse across names, see the advanced
knobs described in :ref:`upgradenotes2` (``BORG_FILES_CACHE_SUFFIX`` and ``BORG_FILES_CACHE_TTL``),
but the recommended approach is to keep a stable NAME per series.
Examples
~~~~~~~~
::
# Backup ~/Documents into an archive named "my-documents"
$ borg create my-documents ~/Documents
# same, but list all files as we process them
$ borg create --list my-documents ~/Documents
# Backup /mnt/disk/docs, but strip path prefix using the slashdot hack
$ borg create --repo /path/to/repo docs /mnt/disk/./docs
# Backup ~/Documents and ~/src but exclude pyc files
$ borg create my-files \
~/Documents \
~/src \
--exclude '*.pyc'
# Backup home directories excluding image thumbnails (i.e. only
# /home/<one directory>/.thumbnails is excluded, not /home/*/*/.thumbnails etc.)
$ borg create my-files /home --exclude 'sh:home/*/.thumbnails'
# Back up the root filesystem into an archive named "root-archive"
# Use zlib compression (good, but slow) — default is LZ4 (fast, low compression ratio)
$ borg create -C zlib,6 --one-file-system root-archive /
# Backup into an archive name like FQDN-root
$ borg create '{fqdn}-root' /
# Back up a remote host locally ("pull" style) using SSHFS
$ mkdir sshfs-mount
$ sshfs root@example.com:/ sshfs-mount
$ cd sshfs-mount
$ borg create example.com-root .
$ cd ..
$ fusermount -u sshfs-mount
# Make a big effort in fine-grained deduplication (big chunk management
# overhead, needs a lot of RAM and disk space; see the formula in the internals docs):
$ borg create --chunker-params fastcdc,10,23,16,2 small /smallstuff
# Backup a raw device (must not be active/in use/mounted at that time)
$ borg create --read-special --chunker-params fixed,4194304 my-sdx /dev/sdX
# Backup a sparse disk image (must not be active/in use/mounted at that time)
$ borg create --sparse --chunker-params fixed,4194304 my-disk my-disk.raw
# No compression (none)
$ borg create --compression none arch ~
# Super fast, low compression (lz4, default)
$ borg create arch ~
# Less fast, higher compression (zlib, N = 0..9)
$ borg create --compression zlib,N arch ~
# Even slower, even higher compression (lzma, N = 0..9)
$ borg create --compression lzma,N arch ~
# Only compress compressible data with lzma,N (N = 0..9)
$ borg create --compression auto,lzma,N arch ~
# Use the short hostname and username as the archive name
$ borg create '{hostname}-{user}' ~
# Back up relative paths by moving into the correct directory first
$ cd /home/user/Documents
# The root directory of the archive will be "projectA"
$ borg create 'daily-projectA' projectA
# Use external command to determine files to archive
# Use --paths-from-stdin with find to back up only files less than 1 MB in size
$ find ~ -size -1000k | borg create --paths-from-stdin small-files-only
# Use --paths-from-command with find to back up files from only a given user
$ borg create --paths-from-command joes-files -- find /srv/samba/shared -user joe
# Use --paths-from-shell-command with find to back up a few files from only a given user -
# BE VERY CAREFUL AND ONLY USE TRUSTED INPUT FOR THE SHELL COMMAND!
$ borg create --paths-from-shell-command some-of-joes-files -- "find /srv/samba/shared -user joe | head"
# Use --paths-from-stdin with --paths-delimiter (for example, for filenames with newlines in them)
$ find ~ -size -1000k -print0 | borg create \
--paths-from-stdin \
--paths-delimiter "\0" \
smallfiles-handle-newline