linux_helper/skripty/automatizované_zálohování_borg.sh

69 lines
2.4 KiB
Bash
Raw Permalink Normal View History

#!/bin/sh
# Nastavení proměnných
# Vzdálený repozitář přes SSH s nestandardním portem
# Lokální repozitář
# export BORG_REPO=/mnt/backup/archos_repo
export BORG_REPO=ssh://user@user.your-storagebox.de:23/cesta/k_repo
# Poznámka: Z bezpečnostních důvodů není vhodné ukládat heslo přímo ve skriptu
# Doporučujeme použít Borg s `borg init --encryption=repokey` a nastavit heslo v interaktivním módu
# Alternativně můžete použít BORG_PASSPHRASE prostředí nastavené v systémových proměnných nebo z jiného bezpečného zdroje
# export BORG_PASSPHRASE='vaše_heslo'
# Pomocné funkce a ošetření chyb
info() { printf "\n%s %s\n\n" "$(date)" "$*" >&2; }
trap 'echo $(date) Backup interrupted >&2; exit 2' INT TERM
info "Starting backup"
# Inicializace repozitáře, pokud ještě není inicializován
borg init -e repokey-blake2 "$BORG_REPO"
# Zálohování důležitých adresářů do archivu pojmenovaného podle hostname a aktuálního data
borg create \
--verbose \
--filter AME \
--list \
--stats \
--show-rc \
--compression lz4 \
--exclude-caches \
--exclude '/home/*/.cache/*' \
--exclude '/var/cache/*' \
--exclude '/var/tmp/*' \
--exclude '/home/archos/.local/share/Trash' \
--exclude '/home/archos/Stažené' \
::'{hostname}-{now}' \
/home/archos
backup_exit=$?
info "Pruning repository"
# Použití příkazu `prune` pro udržování 7 denních, 4 týdenních a 6 měsíčních záloh tohoto stroje
# Prefix '{hostname}-' je důležitý pro omezení operace prune na zálohy tohoto stroje
borg prune \
--list \
--glob-archives '{hostname}-*' \
--show-rc \
--keep-daily 7 \
--keep-weekly 4 \
--keep-monthly 6 \
--keep-yearly 2
prune_exit=$?
# Použití nejvyššího exit kódu jako globálního exit kódu
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}