Скрипт для бэкапа при помощи restic

restic — инструмент для бэкапов. cli-интерфейсом напоминает git. Умеет бэкапить на другие серверы по ftp/ssh, поддерживает S3 и кучу других облачных сервисов.

Скрипт backup.sh упрощает доступ к бэкапам от restic. Для доступа к репозиторию бэкапа требуется наличие переменной окружения RESTIC_PASSWORD:
export RESTIC_PASSWORD=yoursupersecretpassword
  1. #/usr/bin/env bash
  2. # File: backup.sh
  3. confirm() {
  4.   read -r -p "${1:-Are you sure? [y/N]} " response
  5.   case "$response" in
  6.     [yY][eE][sS]|[yY])
  7.       true
  8.       ;;
  9.     *)
  10.       false
  11.       ;;
  12.   esac
  13. }
  14.  
  15. restic -r "$RESTIC_REPO" cat config 2> /dev/null
  16. if [ $? -ne 0 ]
  17. then
  18.   ## Repo not initialized
  19.   confirm "Init repo? [y/N]" && restic -r "$RESTIC_REPO" init
  20. elif [ $# -eq 0 ]; then
  21.     ## Dry backup
  22.     echo "Perform dry backup"
  23.     restic -r "$RESTIC_REPO" \
  24.         -n --verbose backup "$RESTIC_BACKUP_PATH" \
  25.         --exclude-file="$RESTIC_BACKUP_EXCLUDES"
  26. else
  27.   ## Repo initialized
  28.   case "$1" in
  29.     backup)
  30.       confirm "Confirm backup [y/N]" && restic -r "$RESTIC_REPO" \
  31.           --verbose backup "$RESTIC_BACKUP_PATH" \
  32.           --exclude-file="$RESTIC_BACKUP_EXCLUDES"
  33.       ;;
  34.     *)
  35.       restic -r "$RESTIC_REPO" $*
  36.       ;;
  37.   esac
  38. fi
При необходимости, можно создать разные скрипты для разных источников. Например, бэкап папки /annimon.com/www на сервер gm в /var/backups/annimon.com
  1. #/usr/bin/env bash
  2. # File: backup-annimon
  3. export RESTIC_REPO=sftp:gm:/var/backups/annimon.com
  4. export RESTIC_BACKUP_PATH=/annimon.com/www
  5. export RESTIC_BACKUP_EXCLUDES=backup-annimonc.excludes
  6.  
  7. source ./backup.sh "$@"
  1. # File: backup-annimonc.excludes
  2. .git
  3. .sass-cache
  4. vendor
А здесь бэкап папки /annimon.com/projects на сервер gm в /var/backups/projects.annimon.com
  1. #/usr/bin/env bash
  2. # File: backup-projects
  3. export RESTIC_REPO=sftp:gm:/var/backups/projects.annimon.com
  4. export RESTIC_BACKUP_PATH=/annimon.com/projects
  5. export RESTIC_BACKUP_EXCLUDES=backup-projects.excludes
  6.  
  7. source ./backup.sh "$@"
  1. # File: backup-projects.excludes
  2. .git
  3. vendor
  4. cache
Использование:
./backup-annimon
Без аргументов — проводится тестовый замер: возможен ли бэкап в данный источник, сколько файлов забэкапит и сколько будут переданы на другой сервер (в сжатом виде)
Открыть спойлер

./backup-annimon backup
Непосредственно бэкап. В процессе будет ещё раз запрошено подтверждение бэкапа.
Открыть спойлер

Если же нужно выполнить какую-то команду restic на указанном репозитории бэкапа, то это можно сделать, передав параметры в скрипт:
./backup-annimon cache --cleanup
Открыть спойлер

Реклама

Мы в соцсетях

tw tg yt gt