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, чтобы автоматизировать создание нескольких бэкапов ваших данных за разные периоды.