Скрипт для бэкапа при помощи restic
restic — инструмент для бэкапов. cli-интерфейсом напоминает git. Умеет бэкапить на другие серверы по ftp/ssh, поддерживает S3 и кучу других облачных сервисов.
Скрипт backup.sh упрощает доступ к бэкапам от restic. Для доступа к репозиторию бэкапа требуется наличие переменной окружения RESTIC_PASSWORD:
export RESTIC_PASSWORD=yoursupersecretpassword
Скрипт backup.sh упрощает доступ к бэкапам от restic. Для доступа к репозиторию бэкапа требуется наличие переменной окружения RESTIC_PASSWORD:
export RESTIC_PASSWORD=yoursupersecretpassword
- #/usr/bin/env bash
- # File: backup.sh
- confirm() {
- read -r -p "${1:-Are you sure? [y/N]} " response
- case "$response" in
- [yY][eE][sS]|[yY])
- true
- ;;
- *)
- false
- ;;
- esac
- }
- restic -r "$RESTIC_REPO" cat config 2> /dev/null
- if [ $? -ne 0 ]
- then
- ## Repo not initialized
- confirm "Init repo? [y/N]" && restic -r "$RESTIC_REPO" init
- elif [ $# -eq 0 ]; then
- ## Dry backup
- echo "Perform dry backup"
- restic -r "$RESTIC_REPO" \
- -n --verbose backup "$RESTIC_BACKUP_PATH" \
- --exclude-file="$RESTIC_BACKUP_EXCLUDES"
- else
- ## Repo initialized
- case "$1" in
- backup)
- confirm "Confirm backup [y/N]" && restic -r "$RESTIC_REPO" \
- --verbose backup "$RESTIC_BACKUP_PATH" \
- --exclude-file="$RESTIC_BACKUP_EXCLUDES"
- ;;
- *)
- restic -r "$RESTIC_REPO" $*
- ;;
- esac
- fi
При необходимости, можно создать разные скрипты для разных источников. Например, бэкап папки /annimon.com/www на сервер gm в /var/backups/annimon.com
- #/usr/bin/env bash
- # File: backup-annimon
- export RESTIC_REPO=sftp:gm:/var/backups/annimon.com
- export RESTIC_BACKUP_PATH=/annimon.com/www
- export RESTIC_BACKUP_EXCLUDES=backup-annimonc.excludes
- source ./backup.sh "$@"
- # File: backup-annimonc.excludes
- .git
- .sass-cache
- vendor
А здесь бэкап папки /annimon.com/projects на сервер gm в /var/backups/projects.annimon.com
- #/usr/bin/env bash
- # File: backup-projects
- export RESTIC_REPO=sftp:gm:/var/backups/projects.annimon.com
- export RESTIC_BACKUP_PATH=/annimon.com/projects
- export RESTIC_BACKUP_EXCLUDES=backup-projects.excludes
- source ./backup.sh "$@"
- # File: backup-projects.excludes
- .git
- vendor
- cache
Использование:
./backup-annimon
Без аргументов — проводится тестовый замер: возможен ли бэкап в данный источник, сколько файлов забэкапит и сколько будут переданы на другой сервер (в сжатом виде)
./backup-annimon backup
Непосредственно бэкап. В процессе будет ещё раз запрошено подтверждение бэкапа.
Если же нужно выполнить какую-то команду restic на указанном репозитории бэкапа, то это можно сделать, передав параметры в скрипт:
./backup-annimon cache --cleanup
./backup-annimon
Без аргументов — проводится тестовый замер: возможен ли бэкап в данный источник, сколько файлов забэкапит и сколько будут переданы на другой сервер (в сжатом виде)
Открыть спойлер
./backup-annimon backup
Непосредственно бэкап. В процессе будет ещё раз запрошено подтверждение бэкапа.
Открыть спойлер
Если же нужно выполнить какую-то команду restic на указанном репозитории бэкапа, то это можно сделать, передав параметры в скрипт:
./backup-annimon cache --cleanup
Открыть спойлер