Rsync. Быстрое создание нескольких бэкапов за разные даты

Если вы уже организовали у себя автоматическое создание бэкапов данных с помощью Rsync, но хочется всегда иметь под рукой не только бэкап текущих данных, но и еще бэкап данных за прошлые периоды, причем постоянно делать полный бэкап данных не хочется (чтобы оставить нетронутым предыдущий бэкап), то вам сюда.

Ниже представлен самописный скрипт на bash с описанием, ни на что  не претендующий, просто еще одно возможное решение часто возникающей задачи.

Изначально необходимо создать 2 папки с именами дат и времени к примеру “2011-09-01–12-00” и  “2011-10-01–13-30“, названия взяты от фонаря но формат названия нужен именно такой

и две символические ссылки current и last, ссылающиеся на эти папки

(В примере делаем все по умолчанию в папке “/BACKUP“, но можете под это дело заменить и на свой вариант ).

mkdir /BACKUP/2011-09-01--12-00

mkdir /BACKUP/2011-10-01--13-30

ln -s /BACKUP/2011-10-01--13-30   /BACKUP/current

ln -s /BACKUP/2011-09-01--12-00   /BACKUP/last

ссылка current будет ссылаться на папку с последним бэкапом, last соответственно на папку с прошлым бэкапом.

Делается все с помощью Rsync. если вам незнакома данная утилита то вначале стоит прочитать это обязательно.

Собственно сам скрипт:

#!/bin/bash

# Получаем текущую дату и время
# в нужном нам формате 'год-месяц-число--час-минуты'
current_date=`date +%F--%H-%M`

# Через регулярное выражение получаем название папки
# на которую ссылается 'current'
# В итоге в переменной current_ln имеем что-то вроде этого '2011-10-01--13-30'
tmp1=`ls -la /BACKUP | grep current`
current_ln=`echo $tmp1 | perl -ne 'if ( m/-> .*(\d\d\d\d+-\d+-\d+--\d+-\d+)/ ) { print $1; }'`

# Удаляем ссылку current
rm /BACKUP/current

# Через регулярное выражение получаем название папки на которую ссылается 'last'
tmp1=`ls -la /BACKUP | grep last`
last_ln=`echo $tmp1 | perl -ne 'if ( m/-> .*(\d\d\d\d+-\d+-\d+--\d+-\d+)/ ) { print $1; }'`

# Удаляем ссылку last
rm /BACKUP/last

# Переименование самой старой папки с бэкапом, которая уже не нужна - В папку с именем текущей даты
mv /BACKUP/$last_ln /BACKUP/$current_date

# Делаем синхронизацию файлов с удаленным сервером
# Напоминаю, если непонятно как работает эта команда,
# то читаем предыдущую статью, ссылка приведена выше
# (Можете добавить ключи -hv и --progress для просмотра процесса)
rsync -urlogt --delete-after --password-file=/BACKUP/rsync.scrt backup@192.168.0.5::data /BACKUP/$current_date

# Создаем новые символические ссылки
ln -s /BACKUP/$current_date /BACKUP/current
ln -s /BACKUP/$current_ln  /BACKUP/last

Таким образом каждый раз при запуске скрипта он просто обновляет самый старый из 2 бэкапов, что позволяет не делать постоянно полный бэкап (а если данных много, то это существенно экономит время) и одновременно оставлять предыдущий нетронутым.

Также как и в прошлой статье, можно этот скрипт поместить в cron, чтобы автоматизировать создание нескольких бэкапов ваших данных за разные периоды.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *