mirror of
https://github.com/borgbackup/borg.git
synced 2025-03-04 18:48:43 +00:00
Merge pull request #2235 from kmq/master_2214
Improve automated backup script in doc fixes #2214
This commit is contained in:
commit
ce57f34052
1 changed files with 84 additions and 23 deletions
|
@ -57,34 +57,95 @@ Also helpful:
|
||||||
Automating backups
|
Automating backups
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
The following example script backs up ``/home`` and ``/var/www`` to a remote
|
The following example script is meant to be run daily by the ``root`` user on
|
||||||
server. The script also uses the :ref:`borg_prune` subcommand to maintain a
|
different local machines. It backs up a machine's important files (but not the
|
||||||
certain number of old archives:
|
complete operating system) to a repository ``~/backup/main`` on a remote server.
|
||||||
|
Some files which aren't necessarily needed in this backup are excluded. See
|
||||||
|
:ref:`borg_patterns` on how to add more exclude options.
|
||||||
|
|
||||||
::
|
After the backup this script also uses the :ref:`borg_prune` subcommand to keep
|
||||||
|
only a certain number of old archives and deletes the others in order to preserve
|
||||||
|
disk space.
|
||||||
|
|
||||||
#!/bin/sh
|
Before running, make sure that the repository is initialized as documented in
|
||||||
# setting this, so the repo does not need to be given on the commandline:
|
:ref:`remote_repos` and that the script has the correct permissions to be executable
|
||||||
export BORG_REPO=username@remoteserver.com:backup
|
by the root user, but not executable or readable by anyone else, i.e. root:root 0700.
|
||||||
|
|
||||||
# setting this, so you won't be asked for your passphrase - make sure the
|
You can use this script as a starting point and modify it where it's necessary to fit
|
||||||
# script has appropriate owner/group and mode, e.g. root.root 600:
|
your setup.
|
||||||
export BORG_PASSPHRASE=mysecret
|
|
||||||
|
|
||||||
# Backup most important stuff:
|
Do not forget to test your created backups to make sure everything you need is being
|
||||||
borg create --stats -C lz4 ::'{hostname}-{now:%Y-%m-%d}' \
|
backed up and that the ``prune`` command is keeping and deleting the correct backups.
|
||||||
/etc \
|
|
||||||
/home \
|
|
||||||
/var \
|
|
||||||
--exclude '/home/*/.cache' \
|
|
||||||
--exclude '*.pyc'
|
|
||||||
|
|
||||||
# Use the `prune` subcommand to maintain 7 daily, 4 weekly and 6 monthly
|
|
||||||
# archives of THIS machine. The '{hostname}-' prefix is very important to
|
::
|
||||||
# limit prune's operation to this machine's archives and not apply to
|
#!/bin/sh
|
||||||
# other machine's archives also.
|
|
||||||
borg prune --list $REPOSITORY --prefix '{hostname}-' \
|
# Setting this, so the repo does not need to be given on the commandline:
|
||||||
--keep-daily=7 --keep-weekly=4 --keep-monthly=6
|
export BORG_REPO=ssh://username@example.com:2022/~/backup/main
|
||||||
|
|
||||||
|
# Setting this, so you won't be asked for your repository passphrase:
|
||||||
|
export BORG_PASSPHRASE='XYZl0ngandsecurepa_55_phrasea&&123'
|
||||||
|
|
||||||
|
# some helpers and error handling:
|
||||||
|
function info () { echo -e "\n"`date` $@"\n" >&2; }
|
||||||
|
trap "echo `date` Backup interrupted >&2; exit 2" SIGINT SIGTERM
|
||||||
|
|
||||||
|
info "Starting backup"
|
||||||
|
|
||||||
|
# Backup the most important directories into an archive named after
|
||||||
|
# the machine this script is currently running on:
|
||||||
|
|
||||||
|
borg create \
|
||||||
|
--verbose \
|
||||||
|
--filter AME \
|
||||||
|
--list \
|
||||||
|
--stats \
|
||||||
|
--show-rc \
|
||||||
|
--compression lz4 \
|
||||||
|
--exclude-caches \
|
||||||
|
--exclude '/home/*/.cache/*' \
|
||||||
|
--exclude '/var/cache/*' \
|
||||||
|
--exclude '/var/tmp/*' \
|
||||||
|
\
|
||||||
|
::'{hostname}-{now}' \
|
||||||
|
/etc \
|
||||||
|
/home \
|
||||||
|
/root \
|
||||||
|
/var \
|
||||||
|
|
||||||
|
backup_exit=$?
|
||||||
|
|
||||||
|
info "Pruning repository"
|
||||||
|
|
||||||
|
# Use the `prune` subcommand to maintain 7 daily, 4 weekly and 6 monthly
|
||||||
|
# archives of THIS machine. The '{hostname}-' prefix is very important to
|
||||||
|
# limit prune's operation to this machine's archives and not apply to
|
||||||
|
# other machines' archives also:
|
||||||
|
|
||||||
|
borg prune \
|
||||||
|
--list \
|
||||||
|
--prefix '{hostname}-' \
|
||||||
|
--show-rc \
|
||||||
|
--keep-daily 7 \
|
||||||
|
--keep-weekly 4 \
|
||||||
|
--keep-monthly 6 \
|
||||||
|
|
||||||
|
prune_exit=$?
|
||||||
|
|
||||||
|
global_exit=$(( ${backup_exit} > ${prune_exit} ? ${backup_exit} : ${prune_exit} ))
|
||||||
|
|
||||||
|
if [ ${global_exit} -eq 1 ];
|
||||||
|
then
|
||||||
|
info "Backup and/or Prune finished with a warning"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ${global_exit} -gt 1 ];
|
||||||
|
then
|
||||||
|
info "Backup and/or Prune finished with an error"
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit ${global_exit}
|
||||||
|
|
||||||
Pitfalls with shell variables and environment variables
|
Pitfalls with shell variables and environment variables
|
||||||
-------------------------------------------------------
|
-------------------------------------------------------
|
||||||
|
|
Loading…
Add table
Reference in a new issue