From dba509a26f776cd55670b59242025088000ffadd Mon Sep 17 00:00:00 2001 From: archos Date: Sun, 14 Jul 2024 19:20:26 +0200 Subject: [PATCH] =?UTF-8?q?p=C5=99id=C3=A1n=20skript=20pro=20automatick?= =?UTF-8?q?=C3=A9=20z=C3=A1lohov=C3=A1n=C3=AD=20pomoc=C3=AD=20Borg?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- skripty/automatizované_zálohování_borg.sh | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 skripty/automatizované_zálohování_borg.sh diff --git a/skripty/automatizované_zálohování_borg.sh b/skripty/automatizované_zálohování_borg.sh new file mode 100644 index 0000000..d24d052 --- /dev/null +++ b/skripty/automatizované_zálohování_borg.sh @@ -0,0 +1,69 @@ +#!/bin/sh + +# Nastavení proměnných +# Můžete použít buď lokální repozitář nebo vzdálený repozitář přes SSH +# Upravte následující řádky podle vašich potřeb + +# Lokální repozitář +# export BORG_REPO=/mnt/backup/archos_repo + +# Vzdálený repozitář přes SSH +export BORG_REPO=ssh://user@remote-server:/cesta/k/repozitáři + +# 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" + +# 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}