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/-> .*(dddd+-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/-> .*(dddd+-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 не будет опубликован.

Sidebar