backintime-config(5)
π backintime-config(5) π
ok bestie, this is the BackInTime config file manual β section 5, USER COMMANDS, the whole thing. sit down, grab a strawberry drink π, we're going in.
πΈ NAME πΈ
config β BackInTime configuration files. yes, that's it. that's the name. iconic brevity π
β¨ SYNOPSIS β¨
~/.config/backintime/config
/etc/backintime/config
two paths, two vibes. the first one is your personal one, the second one is the system-wide one. pick your fighter π«Ά
π DESCRIPTION π
okay so here's the tea. Back In Time was built as a pure GUI program, which means most of the functions are only usable with backintime-qt. it's giving "pretty windows or nothing" energy, and honestly? fair.
BUT π¦ β and this is the part where it gets good β it is possible to use Back In Time on, like, a headless server. no screen, no mouse, no problem. the catch is you have to create the configuration file manually:
~/.config/backintime/config
look inside /usr/share/doc/backintime-common/examples/ for examples. they're right there, bestie, go look, they're free β¨
The configuration file has the following format:
keyword=arguments
Arguments don't need to be quoted. All characters are allowed except '='. literally everything else can come to the party, just not that one character. it's banned π«
run backintime check-config to verify the configfile, create the snapshot folder and crontab entries. do this. please. it's the vibe check your config deserves. π
π₯ POSSIBLE KEYWORDS π₯
this is the big one. every keyword, every type, every allowed value, every default. no skipping, no summarizing, we're eating the whole plate π½οΈ
global.hash_collision- Type:
intβ Allowed Values:0-99999 - Internal value used to prevent hash collisions on mountpoints. Do not change this. it's internal, it's doing its job, leave it alone π
- Default:
0
- Type:
global.language- Type:
strβ Allowed Values: text - Language code (ISO 639) used to translate the user interface. If empty the operating systems current local is used. If
'en'the translation is not active and the original English source strings are used. It is the same if the value is unknown. - Default:
''
- Type:
global.use_flock- Type:
boolβ Allowed Values:true|false - Prevent multiple snapshots (from different profiles or users) to be run at the same time
- Default:
false
- Type:
profile<N>.name- Type:
strβ Allowed Values: text - Name of this profile.
- Default:
Main profile
- Type:
profile<N>.schedule.custom_time- Type:
strβ Allowed Values: comma separated int (8,12,18,23) or*/3 - Custom hours for cronjob. Only valid for
profile<N>.schedule.mode=19 - Default:
8,12,18,23
- Type:
profile<N>.schedule.day- Type:
intβ Allowed Values:1-28 - Which day of month the cronjob should run? Only valid for
profile<N>.schedule.mode>=40 - Default:
1
- Type:
profile<N>.schedule.debug- Type:
boolβ Allowed Values:true|false - Enable debug output to system log for schedule mode.
- Default:
false
- Type:
profile<N>.schedule.mode- Type:
intβ Allowed Values:0|1|2|4|7|10|12|14|16|18|19|20|25|27|30|40|80 - Which schedule used for crontab. The crontab entry will be generated with
backintime check-config. 0= Disabled1= at every boot2= every 5 minute4= every 10 minute7= every 30 minute10= every hour12= every 2 hours14= every 4 hours16= every 6 hours18= every 12 hours19= custom defined hours20= every day25= daily anacron27= when drive get connected30= every week40= every month80= every year- Default:
0
- Type:
profile<N>.schedule.repeatedly.period- Type:
intβ Allowed Values:0-99999 - How many units to wait between new snapshots with anacron? Only valid for
profile<N>.schedule.mode=25|27 - Default:
1
- Type:
profile<N>.schedule.repeatedly.unit- Type:
intβ Allowed Values:10|20|30|40 - Units to wait between new snapshots with anacron.
10= hours20= days30= weeks40= months- Only valid for
profile<N>.schedule.mode=25|27 - Default:
20
- Type:
profile<N>.schedule.time- Type:
intβ Allowed Values:0-2400 - Position-coded number with the format
"hhmm"to specify the hour and minute the cronjob should start (eg.2015means a quarter past 8pm). Leading zeros can be omitted (eg.30=0030). Only valid forprofile<N>.schedule.mode=20(daily),30(weekly),40(monthly) and80(yearly) - Default:
0
- Type:
profile<N>.schedule.weekday- Type:
intβ Allowed Values:1= monday -7= sunday - Which day of week the cronjob should run? Only valid for
profile<N>.schedule.mode=30 - Default:
7
- Type:
profile<N>.snapshots.backup_on_restore.enabled- Type:
boolβ Allowed Values:true|false - Rename existing files before restore into
FILE.backup.YYYYMMDD - Default:
true
- Type:
profile<N>.snapshots.bwlimit.enabled- Type:
boolβ Allowed Values:true|false - Limit rsync bandwidth usage over network. Use this with mode SSH. For mode Local you should rather use ionice.
- Default:
false
- Type:
profile<N>.snapshots.bwlimit.value- Type:
intβ Allowed Values:0-99999 - Bandwidth limit in KB/sec.
- Default:
3000
- Type:
profile<N>.snapshots.continue_on_errors- Type:
boolβ Allowed Values:true|false - Continue on errors. This will keep incomplete snapshots rather than deleting and start over again.
- Default:
true
- Type:
profile<N>.snapshots.copy_links- Type:
boolβ Allowed Values:true|false - When symlinks are encountered, the item that they point to (the reference) is copied, rather than the symlink.
- Default:
false
- Type:
profile<N>.snapshots.copy_unsafe_links- Type:
boolβ Allowed Values:true|false - This tells rsync to copy the referent of symbolic links that point outside the copied tree. Absolute symlinks are also treated like ordinary files.
- Default:
false
- Type:
profile<N>.snapshots.cron.ionice- Type:
boolβ Allowed Values:true|false - Run cronjobs with
ionice -c2 -n7. This will give BackInTime the lowest IO bandwidth priority to not interrupt any other working process. - Default:
true
- Type:
profile<N>.snapshots.cron.nice- Type:
boolβ Allowed Values:true|false - Run cronjobs with
nice -n19. This will give BackInTime the lowest CPU priority to not interrupt any other working process. - Default:
true
- Type:
profile<N>.snapshots.cron.redirect_stderr- Type:
boolβ Allowed Values:true|false - redirect stderr to
/dev/nullin cronjobs - Default:
False
- Type:
profile<N>.snapshots.cron.redirect_stdout- Type:
boolβ Allowed Values:true|false - redirect stdout to
/dev/nullin cronjobs - Default:
true
- Type:
profile<N>.snapshots.dont_remove_named_snapshots- Type:
boolβ Allowed Values:true|false - Keep snapshots with names during
smart_remove. - Default:
true
- Type:
profile<N>.snapshots.exclude.bysize.enabled- Type:
boolβ Allowed Values:true|false - Enable exclude files by size.
- Default:
false
- Type:
profile<N>.snapshots.exclude.bysize.value- Type:
intβ Allowed Values:0-99999 - Exclude files bigger than value in MiB. With
'Full rsync mode'disabled this will only affect new files because for rsync this is a transfer option, not an exclude option. So big files that has been backed up before will remain in snapshots even if they had changed. - Default:
500
- Type:
profile<N>.snapshots.exclude.<I>.value- Type:
strβ Allowed Values: file, folder or pattern (relative or absolute) - Exclude this file or folder.
<I>must be a counter starting with1 - Default:
''
- Type:
profile<N>.snapshots.exclude.size- Type:
intβ Allowed Values:0-99999 - Quantity of
profile<N>.snapshots.exclude.<I>entries. - Default:
-1
- Type:
profile<N>.snapshots.include.<I>.type- Type:
intβ Allowed Values:0|1 - Specify if
profile<N>.snapshots.include.<I>.valueis a folder (0) or a file (1). - Default:
0
- Type:
profile<N>.snapshots.include.<I>.value- Type:
strβ Allowed Values: absolute path - Include this file or folder.
<I>must be a counter starting with1 - Default:
''
- Type:
profile<N>.snapshots.include.size- Type:
intβ Allowed Values:0-99999 - Quantity of
profile<N>.snapshots.include.<I>entries. - Default:
-1
- Type:
profile<N>.snapshots.keep_only_one_snapshot.enabled- Type:
boolβ Allowed Values:true|false - NOT YET IMPLEMENTED. Remove all snapshots but one.
- Default:
false
- Type:
bestie do NOT count on this one. it says NOT YET IMPLEMENTED and it means it. it's giving vaporware, it's giving "coming soon" on a website from 2009 π
profile<N>.snapshots.local.nocache- Type:
boolβ Allowed Values:true|false - Run rsync on local machine with
'nocache'. This will prevent files from being cached in memory. - Default:
false
- Type:
profile<N>.snapshots.local_encfs.path- Type:
strβ Allowed Values: absolute path - Where to save snapshots in mode
'local_encfs'. - Default:
''
- Type:
profile<N>.snapshots.log_level- Type:
intβ Allowed Values:1-3 - Log level used during
takeSnapshot. 1= Error2= Changes3= Info- Default:
3
- Type:
profile<N>.snapshots.min_free_inodes.enabled- Type:
boolβ Allowed Values:true|false - Remove snapshots until
profile<N>.snapshots.min_free_inodes.valuefree inodes in % is reached. - Default:
false
- Type:
profile<N>.snapshots.min_free_inodes.value- Type:
intβ Allowed Values:1-15 - Keep at least value % free inodes.
- Default:
2
- Type:
profile<N>.snapshots.min_free_space.enabled- Type:
boolβ Allowed Values:true|false - Remove snapshots until
profile<N>.snapshots.min_free_space.valuefree space is reached. - Default:
false
- Type:
profile<N>.snapshots.min_free_space.unit- Type:
intβ Allowed Values:10|20 10= MB20= GB- Default:
20
- Type:
profile<N>.snapshots.min_free_space.value- Type:
intβ Allowed Values:1-99999 - Keep at least value + unit free space.
- Default:
1
- Type:
profile<N>.snapshots.mode- Type:
strβ Allowed Values:local|local_encfs|ssh|ssh_encfs - Use mode (or backend) for this snapshot. Look at
man backintimesection'Modes'. - Default:
local
- Type:
profile<N>.snapshots.<MODE>.password.save- Type:
boolβ Allowed Values:true|false - Save password to system keyring (gnome-keyring or kwallet).
<MODE>must be the same asprofile<N>.snapshots.mode - Default:
false
- Type:
profile<N>.snapshots.<MODE>.password.use_cache- Type:
boolβ Allowed Values:true|false - Cache password in RAM so it can be read by cronjobs. Security issue: root might be able to read that password, too.
<MODE>must be the same asprofile<N>.snapshots.mode - Default:
trueif home is not encrypted
- Type:
β οΈ ok so real talk on that last one: caching the password in RAM means cronjobs can read it, which is convenient, but root might be able to read that password, too. that's not me being dramatic, that's in the manual. security issue, bestie. know it before you set it. π«Ά
and that's part 1, stay tuned for part 2 because there is more πβ¨
profile<N>.snapshots.no_on_batteryβ Type:boolΒ· Allowed Values:true|falseUnplugged laptop? No snapshot for you. If the computer is running on battery, this skips taking snapshots entirely. Default:falseprofile<N>.snapshots.notify.enabledβ Type:boolΒ· Allowed Values:true|falseWanna get pinged? This pops up notifications (errors, warnings) through libnotify. π Default:trueprofile<N>.snapshots.one_file_systemβ Type:boolΒ· Allowed Values:true|falseHands rsync its--one-file-systemflag so it does NOT cross filesystem boundaries while recursing. Boundaries stay boundaries. Default:falseprofile<N>.snapshots.pathβ Type:strΒ· Allowed Values: absolute path Where snapshots get saved in mode'local'. Heads up bestie, this path MUST contain a folder structure like'backintime/<HOST>/<USER>/<PROFILE_ID>'or it's not gonna vibe. Default:''profile<N>.snapshots.path.hostβ Type:strΒ· Allowed Values: text Sets the Host for the snapshot path. Default: local hostnameprofile<N>.snapshots.path.profileβ Type:strΒ· Allowed Values:1-99999Sets the Profile-ID for the snapshot path. Default: current Profile-IDprofile<N>.snapshots.path.userβ Type:strΒ· Allowed Values: text Sets the User for the snapshot path. Default: local usernameprofile<N>.snapshots.path.uuidβ Type:strΒ· Allowed Values: text The device's uuid β it's what gets used to automatically set up a udev rule if the drive isn't connected. Default:''profile<N>.snapshots.preserve_aclβ Type:boolΒ· Allowed Values:true|falsePreserve ACL.
β οΈ For this to actually work, the source and destination systems need compatible ACL entries. No matching entries, no preserved ACLs. That's the deal.
Default: false
profile<N>.snapshots.preserve_xattrβ Type:boolΒ· Allowed Values:true|falsePreserve extended attributes (xattr). Keep all that extra metadata, she's thorough. π Default:falseprofile<N>.snapshots.remove_old_snapshots.enabledβ Type:boolΒ· Allowed Values:true|falseRemoves ALL snapshots older than value + unit. Spring cleaning but make it automated. Default:trueprofile<N>.snapshots.remove_old_snapshots.unitβ Type:intΒ· Allowed Values:20|30|80The unit we're counting in. Decoder ring:20= days30= weeks80= years Default:80
profile<N>.snapshots.remove_old_snapshots.valueβ Type:intΒ· Allowed Values:0-99999Snapshots older than this many units get removed. Bye babes β¨ Default:10profile<N>.snapshots.rsync_options.enabledβ Type:boolΒ· Allowed Values:true|falsePasses additional options to rsync. (Yes, the original says "Past". We love her anyway. π«Ά) Default:falseprofile<N>.snapshots.rsync_options.valueβ Type:strΒ· Allowed Values: text The actual rsync options. They MUST be quoted, like--exclude-from="/path/to/my exclude file". Default:''profile<N>.snapshots.smart_removeβ Type:boolΒ· Allowed Values:true|falseRunssmart_removeto clean up old snapshots right after a new snapshot was created. Fresh snapshot, tidy archive. Default:falseprofile<N>.snapshots.smart_remove.keep_allβ Type:intΒ· Allowed Values:0-99999Keeps ALL snapshots for X days. Hoard era. Default:2profile<N>.snapshots.smart_remove.keep_one_per_dayβ Type:intΒ· Allowed Values:0-99999Keeps one snapshot per day for X days. Default:7profile<N>.snapshots.smart_remove.keep_one_per_monthβ Type:intΒ· Allowed Values:0-99999Keeps one snapshot per month for X month. (Singular "month" in the original, iconic behavior, keeping it π) Default:24profile<N>.snapshots.smart_remove.keep_one_per_weekβ Type:intΒ· Allowed Values:0-99999Keeps one snapshot per week for X weeks. Default:4profile<N>.snapshots.smart_remove.run_remote_in_backgroundβ Type:boolΒ· Allowed Values:true|falseIf you're in mode SSH or SSH-encrypted, this runssmart_removein the background on the remote machine. Default:falseprofile<N>.snapshots.ssh.check_commandsβ Type:boolΒ· Allowed Values:true|falseChecks that all the commands used duringtakeSnapshotactually work like expected on the remote host. Vibe check, but for commands. Default:trueprofile<N>.snapshots.ssh.check_pingβ Type:boolΒ· Allowed Values:true|falseChecks whether the remote host is even reachable before trying to mount. No point knocking if nobody's home. Default:trueprofile<N>.snapshots.ssh.cipherβ Type:strΒ· Allowed Values:default|aes192-cbc|aes256-cbc|aes128-ctr|aes192-ctr|aes256-ctr|arcfour|arcfour256|arcfour128|aes128-cbc|3des-cbc|blowfish-cbc|cast128-cbcThe cipher used to encrypt the SSH tunnel. Depending on your environment (network bandwidth, cpu and hdd performance) a different cipher might be faster. Default:defaultprofile<N>.snapshots.ssh.hostβ Type:strΒ· Allowed Values: IP or domain address The remote host, used for mode'ssh'and'ssh_encfs'. Default:''profile<N>.snapshots.ssh.ioniceβ Type:boolΒ· Allowed Values:true|falseRuns rsync and other commands on the remote host withionice -c2 -n7. Default:falseprofile<N>.snapshots.ssh.max_arg_lengthβ Type:intΒ· Allowed Values:0,>700Max command length of the commands run on the remote host.
You can test this for all ssh profiles in your config with python3 /usr/share/backintime/common/sshMaxArg.py LENGTH.
And 0 = unlimited. Default: 0
profile<N>.snapshots.ssh.niceβ Type:boolΒ· Allowed Values:true|falseRuns rsync and other commands on the remote host withnice -n19. Default:falseprofile<N>.snapshots.ssh.nocacheβ Type:boolΒ· Allowed Values:true|falseRuns rsync on the remote host withnocache. This stops files from being cached in memory. Default:falseprofile<N>.snapshots.ssh.pathβ Type:strΒ· Allowed Values: absolute or relative path The snapshot path on the remote host. If the path is relative (no leading/) it starts from the remote user's homedir. An empty path gets replaced with'./'. Default:''profile<N>.snapshots.ssh.portβ Type:intΒ· Allowed Values:0-65535The SSH Port on the remote host. Default:22profile<N>.snapshots.ssh.prefix.enabledβ Type:boolΒ· Allowed Values:true|falseAdds a prefix to every single command that runs through SSH on the remote host. Default:falseprofile<N>.snapshots.ssh.prefix.valueβ Type:strΒ· Allowed Values: text The prefix to run before every command on the remote host. Variables need to be escaped with\$FOO.
Heads up: this does NOT touch rsync. So if you want a prefix for rsync, useprofile<N>.snapshots.rsync_options.valuewith--rsync-path="FOO=bar:\$FOO /usr/bin/rsync".
Default: 'PATH=/opt/bin:/opt/sbin:\$PATH'
profile<N>.snapshots.ssh.private_key_fileβ Type:strΒ· Allowed Values: absolute path to private key file The private key file used for password-less authentication on the remote host. ποΈ Default:~/.ssh/id_dsaprofile<N>.snapshots.ssh.proxy_hostβ Type:strΒ· Allowed Values: text The proxy host used to connect to the remote host. Default: IP or domain addressprofile<N>.snapshots.ssh.proxy_host_portβ Type:intΒ· Allowed Values:0-65535The proxy host port used to connect to the remote host. Default:22profile<N>.snapshots.ssh.proxy_userβ Type:strΒ· Allowed Values: text Remote SSH user. Default: the local users nameprofile<N>.snapshots.ssh.userβ Type:strΒ· Allowed Values: text Remote SSH user. Default: local users nameprofile<N>.snapshots.take_snapshot_regardless_of_changesβ Type:boolΒ· Allowed Values:true|falseCreates a new snapshot no matter what β changes or no changes, she's taking one. Default:falseprofile<N>.snapshots.use_checksumβ Type:boolΒ· Allowed Values:true|falseUses checksum to detect changes instead of size + time. More thorough, more work. Default:falseprofile<N>.snapshots.user_backup.ioniceβ Type:boolΒ· Allowed Values:true|falseRuns BackInTime withionice -c2 -n7when taking a manual snapshot. This gives BackInTime the lowest IO bandwidth priority so it doesn't interrupt any other working process. Polite queen. π Default:falseprofile<N>.user_callback.no_loggingβ Type:boolΒ· Allowed Values:true|falseDoes NOT catchstd{out|err}from the user-callback script β the script will only write to the current TTY. The default behavior is to catchstd{out|err}and write it to syslog and the TTY again. Default:falseprofilesβ Type:strΒ· Allowed Values: int separated by colon (e.g.1:3:4) All active Profiles (that's the<N>inprofile<N>.snapshots...). Default:1profiles.versionβ Type:intΒ· Allowed Values:1Internal version of the profiles config. Default:1
π SEE ALSO π
backintimebackintime-qt
Back In Time also has a website: https://github.com/bit-team/backintime π¦
β¨ AUTHOR β¨
This manual page was written by BIT Team (<bit-dev@python.org>).
And that's the whole config, bestie β you made it to the end π«Ά This is version 1.6.0-dev, dated November 2024, and you've officially been reading backintime-config(5). Slay, periodt π
β¨
π¦ where this page comes from
- ubuntu resolute: backintime-common 1.6.1-1 Β· GPL-2.0-or-later
- ubuntu stonking: backintime-common 1.6.1-1 Β· GPL-2.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms