Document Archive: btrbk-0.23.0-rc1

NAME

btrbk.conf − btrbk configuration file

SYNOPSIS

/etc/btrbk.conf
/etc/btrbk/btrbk.conf

DESCRIPTION

The btrbk configuration file specifies which btrfs subvolumes on the filesystem are to be processed, what target subvolumes should be used to create the backups, and where the snapshots should be generated. The retention policy, as well as most other options can be defined either globally or within a section.

The options specified always apply to the last section encountered, superseding the values set in upper-level sections. This means that global options must be set before any sections are defined.

SECTIONS

volume <volume-directory>|<url>

Directory of a btrfs volume containing the source subvolume(s) to be backed up. <volume-directory> must be an absolute path and point to a btrfs volume (or subvolume). Usually the mount point of a btrfs filesystem mounted with the subvolid=0 option.

subvolume <subvolume-name>

Subvolume to be backed up, relative to the <volume-directory> specified in the volume section. Multiple subvolume sections are allowed within volume sections.

target <type> <target-directory>|<url>

Target type and directory where the backup subvolumes are to be created. See the TARGET TYPES section for supported <type>. Multiple target sections are allowed within subvolume sections. A target section defined in the global context or in a volume section is propagated (mulitplied) to all underlying subvolume sections, unless a target with the same declaration already exists (hint: run "btrbk config print" to see the resulting configuration).

For the volume and target sections, you can specify a ssh-url instead of a local directory. The syntax for <url> is:

ssh://host.xz/path/to/volume

Note that btrfs is very picky on file names (mainly for security reasons), only the characters [0-9] [a-z] [A-Z] and "._+-@" are allowed.

OPTIONS

transaction_log <file>

If set, all transactions (snapshot create, subvolume send-receive, subvolume delete) as well as abort messages are logged to <file>, in a space-separated table format.

timestamp_format short|long

Timestamp format used as postfix for new snapshot subvolume names. Defaults to “short”.

short

YYYYMMDD[_N] (e.g. "20150825", "20150825_1")

long

YYYYMMDD<T>hhmm[_N] (e.g. "20150825T1531")

Note that a postfix "_N" is only appended to the timestamp if a snapshot/backup already exists with the timestamp of current date/time.

snapshot_dir <directory>

Directory in which the btrfs snapshots are created, relative to <volume-directory> of the volume section. Note that btrbk does not autmatically create this directory, and the snapshot creation will fail if it is not present.

snapshot_name <basename>

Base name of the created snapshot (and backup). This option is only valid in the subvolume section. Defaults to <subvolume-name>.

snapshot_create always|onchange|ondemand|no

If set to “always”, snapshots are always created. If set to “onchange”, snapshots are only created if the source subvolume has changed since the last snapshot (more precisely: if the btrfs generation has been increased since the last snapshot). If set to “ondemand”, snapshots are only created if the target subvolume is reachable (useful if you are tight on disk space and you only need btrbk for backups to an external disk which is not always connected). If set to “no”, the snapshots are never created (useful if another instance of btrbk is taking care of snapshot creation). Defaults to “always”.

incremental yes|no|strict

If set, incremental backups are created. If set to “strict”, non-incremental (initial) backups are never created. Defaults to “yes”.

snapshot_preserve no|<retention_policy>

Set retention policy for snapshots (see RETENTION POLICY below). If set to “no”, preserve snapshots according to snapshot_preserve_min only. Defaults to “no”.

snapshot_preserve_min all|latest|<number>{h,d,w,m,y}

Preserve all snapshots for a minimum amount of hours (h), days (d), weeks (w), months (m) or years (y), regardless of how many there are. If set to “all”, preserve all snapshots forever. If set to “latest”, preserve latest snapshot. Defaults to “1d”.

target_preserve no|<retention_policy>

Set retention policy for backups (see RETENTION POLICY below). If set to “no”, preserve backups according to target_preserve_min only. Defaults to “no”.

target_preserve_min all|latest|no|<number>{h,d,w,m,y}

Preserve all backups for a minimum amount of hours (h), days (d), weeks (w), months (m) or years (y), regardless of how many there are. If set to “all”, preserve all backups forever. If set to “latest”, always preserve the latest backup (useful in conjunction with "target_preserve no", if you want to keep the latest backup only). If set to “no”, only the backups following the target_preserve policy are created. Defaults to “no”.

preserve_day_of_week monday|tuesday|...|sunday

Defines on what day a backup/snapshot is considered as a weekly backup. Defaults to “sunday”.

group <group-name>[,<group-name>]...

Add the current section (volume, subvolume or target) to a user-defined group, which can be used as filter for several btrbk commands.

ssh_identity <file>

Absolute path to a ssh identity file (private key). Note that if the private key is password protected, btrbk will prompt for user input, which is usually not desired.

ssh_user <username>

Remote username for ssh. Defaults to “root”. Note that you will have to make sure that the remote user is able to run /sbin/btrfs (which needs root privileges).

ssh_port <port>

Port to connect to on the remote host. Defaults to “default” (the port specified in ssh_config, which defaults to 22).

ssh_compression yes|no

Enables or disables the compression of ssh connections. Defaults to “no”.

ssh_cipher_spec <cipher_spec>

Selects the cipher specification for encrypting the session (comma-separated list of ciphers in order of preference). See the "-c cipher_spec" option in ssh(1) for more information. Defaults to “default” (the ciphers specified in ssh_config).

rate_limit <rate>|no

Limit the transfer to a maximum of <rate> bytes per second. A suffix of "k", "m", "g", or "t" can be added to denote kilobytes (*1024), megabytes, and so on. Defaults to “no”.

btrfs_commit_delete after|each|no

If set, make sure the deletion of snapshot and backup subvolumes are committed to disk when btrbk terminates. Defaults to “no”.

Lines that contain a hash character (#) in the first column are treated as comments.

RETENTION POLICY

btrbk uses separate retention policies for snapshots and backups, which are defined by the snapshot_preserve_min, snapshot_preserve, target_preserve_min, target_preserve, and the preserve_day_of_week configuration options.

Within this section, any statement about "backups" is always valid for backups as well as snapshots, referring to target_preserve or snapshot_preserve respectively.

The format for <retention_policy> is:

[<hourly>h] [<daily>d] [<weekly>w] [<monthly>m] [<yearly>y]

With the following semantics:

hourly

Defines how many hours back hourly backups should be preserved. The first backup of an hour is considered an hourly backup. Note that if you use <hourly> scheduling, make sure to also set timestamp_format to “long”, or the scheduler will interpret the time as "00:00" (midnight).

daily

Defines how many days back daily backups should be preserved. The first backup of a day is considered a daily backup.

weekly

Defines how many weeks back weekly backups should be preserved. The first daily backup created at preserve_day_of_week (or the first backup in this week if none was made on the exact day) is considered as a weekly backup.

monthly

Defines how many months back monthly backups should be preserved. Every first weekly backup in a month is considered a monthly backup.

yearly

Defines for how many years back yearly backups should be preserved. Every first monthly backup in a year is considered a yearly backup.

Use an asterisk for “all” (e.g. "target_preserve 60d *m" states: "preserve daily backups for 60 days back, and all monthly backups").

TARGET TYPES

send-receive

Backup to a btrfs filesystem, using "btrfs send/receive". This is the recommended (standard) target type. The <target-directory> must be an absolute path and point to a btrfs volume (or subvolume), or to a directory within a subvolume. See btrfs-send(8), btrfs-receive(8).

raw *experimental*

Backup to a raw (filesystem independent) file from the output of btrfs-send(8), with optional compression and encryption.

Note that the target preserve mechanism is currently disabled for raw backups (btrbk does not delete any raw files)!

Additional options for raw targets:

raw_target_compress gzip|bzip2|xz|no
raw_target_compress_level default|<number>
raw_target_compress_threads default|<number>
raw_target_encrypt gpg|no
gpg_keyring <file>
gpg_recipient <name>

Target file name syntax:

<snapshot-name>--<received_uuid>[@<parent_uuid>].btrfs[.gz|.bz2|.xz][.gpg]

The <parent_uuid> is only set on incremental backups, and points to the <received_uuid> of the previous backup in a incremental backup chain.

For incremental backups ("incremental yes"), please note that:

1.

As soon as a single incremental backup file is lost or corrupted, all later incremental backups become invalid, as there is no common parent for the subsequent incremental images anymore. This might be a good compromise for a vacation backup plan, but for the long term make sure that a non-incremental backup is triggered from time to time.

2.

There is currently no support for rotation of incremental backups: if incremental is set, a full backup must be triggered manually from time to time in order to be able to delete old backups.

AVAILABILITY

Please refer to the btrbk project page http://digint.ch/btrbk/ for further details.

SEE ALSO

btrbk(1)

AUTHOR

Axel Burri <axel@tty0.ch>