en:backup:server

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
en:backup:server [2022/02/26 23:07] – added syncthing danen:backup:server [2022/07/05 19:24] (current) – [Script] -- prevent DokuWiki markup from rendering dan
Line 110: Line 110:
  
 ===== borg ===== ===== borg =====
- 
-<alert type="info" icon="fa fa-wrench">Work in progress</alert> 
  
 Follow our [[en:server:services:borg|borg]] tutorial first. Follow our [[en:server:services:borg|borg]] tutorial first.
Line 117: Line 115:
 The snapshots are stored remotely via ssh.  The snapshots are stored remotely via ssh. 
  
 +==== Script ====
 +
 +Don't forget to create the borg repo first and add the credentials to the script.
 +<code>
 +borg init --encryption=keyfile-blake2 --make-parent-dirs ssh://username@remote.host.address:$port>/~/backups/borg/{hostname}
 +</code>
 +
 +Add your excluded folders/files ''%%--%%exclude '/home/*/.cache/*' \'' and under ''::'{hostname}-{now}' \'' add folders/files you want to backup. 
 +<code>
 +#!/bin/sh
 +
 +# Setting this, so the repo does not need to be given on the commandline:
 +export BORG_REPO=ssh://username@example.com:2022/~/backups/borg/{hostname}
 +
 +# See the section "Passphrase notes" for more infos.
 +export BORG_PASSPHRASE='XYZl0ngandsecurepa_55_phrasea&&123'
 +
 +# some helpers and error handling:
 +info() { printf "\n%s %s\n\n" "$( date )" "$*" >&2; }
 +trap 'echo $( date ) Backup interrupted >&2; exit 2' INT TERM
 +
 +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 AMEhsx                 \
 +    --list                          \
 +    --stats                         \
 +    --progress                      \
 +    --verbose                       \
 +    --show-version                  \
 +    --show-rc                       \
 +    --compression zstd,11           \
 +    --exclude-caches                \
 +    --exclude '/home/*/.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                 \
 +    --keep-monthly  6               \
 +    --keep-yearly                 \
 +
 +prune_exit=$?
 +
 +# use highest exit code as global exit code
 +global_exit=$(( backup_exit > prune_exit ? backup_exit : prune_exit ))
 +
 +if [ ${global_exit} -eq 0 ]; then
 +    info "Backup and Prune finished successfully"
 +elif [ ${global_exit} -eq 1 ]; then
 +    info "Backup and/or Prune finished with warnings"
 +else
 +    info "Backup and/or Prune finished with errors"
 +fi
  
 +exit ${global_exit}
 +</code>
 ===== Crontab - rsync and borg ===== ===== Crontab - rsync and borg =====
  
  • en/backup/server.1645916863.txt.gz
  • Last modified: 2022/02/26 23:07
  • by dan