Скрипт бэкапа.

Недельный инкрементный бэкап с шифрованием на 3 месяца.

вкратце работа скрипта: при первом вызове создается папка с именем ГОД-НОМЕР_НЕДЕЛИ. Так как в ней нет файла метаданных, делается полный бэкап, шифруется и создается файл метаданных тоже шифруется. Дальнейший вызов скрипта проверяем файл метаданных, файл расшифровывается и используется для архиватора.

PS: скрипт поправлен в связи с непредвиденными особенностями работы openssl.

 

nano /etc/cron.daily/backup_inc.sh

 

#!/bin/sh

SOURCE="/home/user/"; # Чего бэкапим

KEYS="Superpass"; # Ключ шифрования. можно подсунуть путь на файл ключа

test -d "$SOURCE" || exit 1

DEST_DIR_D=`date +%G-%V`; #weekly.

#Куда будем складировать

DEST_DIR="/mnt/backup/INC/"$DEST_DIR_D 

mkdir -p $DEST_DIR;

shift;

#Если в папке есть файл методанных мы его декодируем перед использовавнием

if [ -f "$DEST_DIR"/backup.snar ]

then

openssl enc -d -aes-256-cbc -k $KEYS -out "/tmp/backup.snar" -in "$DEST_DIR"/backup.snar

fi

# Упаковываем, и одновременно шифруем.

tar -cSjp --ignore-failed-read -f - -g "/tmp/backup.snar" "$SOURCE" | openssl enc -aes-256-cbc -k $KEYS -out "$DEST_DIR"/`date +%F-%s`.tbz2

#Шифруем файл методанных

openssl enc -aes-256-cbc -k $KEYS -in "/tmp/backup.snar" -out "$DEST_DIR"/backup.snar

rm -f /tmp/backup.snar

#Все что старше 3х месяцев в каталоге удаляется

find /mnt/backup/INC/ -type f -mtime +90 -exec rm {} \;

 

 

Для восстановления нужно:

Расшифровать

cat файл бэкапа | openssl enc -d -aes-256-cbc -k $KEYS -out файл_расшифрованного_бэкапа

Распаковать начиная от первого файла недели.

tar -xSjp --ignore-failed-read --preserve-permission -g /dev/null -f файл_бэкапа

#2 ИЛИ

openssl enc -d -aes-256-cbc -k $KEYS -in файл_бэкапа | tar -xSjp --ignore-failed-read --preserve-permission -g /dev/null