Swift хранилище — удобная штука. Не надо поддерживать сервер для бэкапа, думать о занятом там пространстве, да и дешево — платишь ровно столько, сколько используешь. Собственно, если у Вас сервер в датацентре, который предоставляет услугу облачного хранилища swift — вам повезло.

Будем использовать утилиту python-swiftclient  она стабильная и развивается, в отличии от cloudfuse .

Скрипт создаёт архив с паролем (переменная PASSWORD) и делает простейшую ротацию, количество хранимых копий задается в переменной LIMIT. Переменной CONTAINER надо присвоить имя контейнера, в который будут складываться архивы. Так же требуется указать данные для аутентификации в swift. Не забудьте, что на сервере должно быть место для создания архива. Может понадобится дописать условие, в котором будет проверяться свободное место.

#!/bin/bash
DATE="`date +%F_%T`"
BK_file=backup-$DATE.gz.gpg

#Custom variables
PASSWORD=12345
LIMIT=20
CONTAINER=pg-backup

#Swift auth
export ST_AUTH=https://url-swift
export ST_USER=user
export ST_KEY=password

echo "Start local backup"
pg_dump -c -h localhost -U test test | gzip | gpg -c --passphrase $PASSWORD > $BK_file;
echo "Local backup done"

echo "Swift upload"
swift upload -S 5368709120 $CONTAINER $BK_file

rm -rf $BK_file
echo "Local backup remove"

list=(`swift list $CONTAINER`)

#the number of elements in the array
quantity=${#list[@]}

echo 'Start rotate'
n=1
echo "Fixed limit: $LIMIT"
echo 'Delete files:'

for ((i=$quantity-1; i>=0; i--));
do
	if [ $n -gt $LIMIT ]
		then
			swift delete $CONTAINER ${list[i]}
	fi
	n=$(($n+1))
done

echo 'Rotate done'

Для использования по cron нужно добавить пароль базы в pgpass.conf , а он должен лежать в директории home пользователя, от имени которого производится бэкап.

Кстати, у дата-центра, который я использовал, стоит ограничение на один файл в размере 5ГБ, поэтому нужно пользоваться сегментированием, параметр -s 5368709120 (5ГБ по международному стандарту) указывает по сколько байт делить большие файлы.

Мой телеграм-канал .