Безопасность и оптимизация Linux.Редакция для Red Hat

       

Автоматизация задачи резервного копирования при помощи tar


Всегда интересно автоматизировать задачу резервного копирования. Автоматизация предлагает огромные возможности использования вашего Linux сервере для целей, которые вы поставили. Следующий пример, представляет из себя скрипт для резервного копирования, называемый “backup.cron”. Этот скрипт написан для запуска на любом компьютере, при этом, вы должны поменять только четыре переменные: COMPUTER, DIRECTORIES, BACKUPDIR и TIMEDIR. Мы считаем, что вы устанавливаете этот сценарий для запуска его в начале месяца для получения полной резервной копии, а затем используете его в течении месяца для получения добавочных копий. В нашем примере, мы создаем резервную копию в каталоге на локальном сервере (BACKUPDIR), но вы можете изменить это для использования ленты на локальном сервере или смонтированной файловой системы NFS.
Шаг 1

Создайте скрипт резервного копирования backup.cron (touch /etc/cron.daily/backup.cron) и добавьте в него следующие строки: #!/bin/sh # скрипт полного и добавочного резервного копирования # создан 07 февраля 2000 # Базируется на скрипте Daniel O'Callaghan <danny@freebsd.org>

# и модифицирован Gerhard Mourani <gmourani@videotron.ca>

# Измените следующие пять переменных под вашу систему COMPUTER=deep # имя этого компьютера DIRECTORIES="/home" # каталог для резервного копирования BACKUPDIR=/backups # где храним резервные копии TIMEDIR=/backups/last-full # где сохраняем время полной резервной копи TAR=/bin/tar # имя и расположение tar #Вы не должны менять то, что написано ниже PATH=/usr/local/bin:/usr/bin:/bin DOW=`date +%a` # День недели, например Mon DOM=`date +%d` # Дата, например 27 DM=`date +%d%b` # Дата и месяц, например 27Sep # 1-го числа каждого месяца постоянно делаем полную резервную копию # Каждое воскресенье делаем полную копию – переписываем копию от # последнего воскресенья # В остальное время делаем добавочную резервную копию. Каждая добавочная # резервная копия переписывает добавочную копию с предыдущей недели, с # тем же именем. # # если NEWER = "", тогда tar создает резервные копии всех файлов в каталог, # иначе только новее чем дата в NEWER. NEWER берет дату из файла # записываемого каждое воскресенье. # Ежемесячная полная резервная копия if [ $DOM = "01" ]; then NEWER=""   $TAR $NEWER -cf $BACKUPDIR/$COMPUTER-$DM.tar $DIRECTORIES fi # Еженедельная полная резервная копия if [ $DOW = "Sun" ]; then   NEWER=""   NOW=`date +%d-%b`   # Обновление даты еженедельной полной резервной копии   echo $NOW > $TIMEDIR/$COMPUTER-full-date   $TAR $NEWER -cf $BACKUPDIR/$COMPUTER-$DOW.tar $DIRECTORIES   # Создание добавочной резервной копии – переписывание аналогичной с   # последней недели else   # Берем дату последней полной резервной копии   NEWER="--newer `cat $TIMEDIR/$COMPUTER-full-date`"   $TAR $NEWER -cf $BACKUPDIR/$COMPUTER-$DOW.tar $DIRECTORIES fi


Здесь приводится список файлов созданных после недели работы данного скрипта:
[root@deep /]# ls -l /backups/

total 22217

-rw-r--r-- 1 root root 10731288 Feb 7 11:24 deep-01Feb.tar

-rw-r--r-- 1 root root 6879 Feb 7 11:24 deep-Fri.tar

-rw-r--r-- 1 root root 2831 Feb 7 11:24 deep-Mon.tar

-rw-r--r-- 1 root root 7924 Feb 7 11:25 deep-Sat.tar

-rw-r--r-- 1 root root 11923013 Feb 7 11:24 deep-Sun.tar

-rw-r--r-- 1 root root 5643 Feb 7 11:25 deep-Thu.tar

-rw-r--r-- 1 root root 3152 Feb 7 11:25 deep-Tue.tar

-rw-r--r-- 1 root root 4567 Feb 7 11:25 deep-Wed.tar

drwxr-xr-x 2 root root 1024 Feb 7 11:20 last-full

ЗАМЕЧАНИЕ. Каталог в котором вы планируете хранить резервные копии (BACKUPDIR) и каталог , где запоминаете время (TIMEDIR) должны быть созданы до запуска этого скрипта, иначе вы получите сообщение об ошибке.
Шаг 2

Если вы не запустили этот скрипт вначале месяца (1 день месяца), добавочным резервным копиям для корректной работы будет нужно время полной воскресной резервной копии. Если вы запускаете скрипт в середине недели, вам нужно создать файл со временем в TIMEDIR. Для этого выполните следующую команду:
[root@deep /]# date +%d%b > /backups/last-full/myserver-full-date

где </backups/last-full> ваша переменная TIMEDIR, описывающая место хранения даты последней полной резервной копии, а <myserver-full-date>

- это имя вашего сервера (например, deep); наш файл времени состоит из одной строки содержащей дату (например 15-Feb).
Шаг 3

Сделайте скрипт исполняемым и измените права доступа к нему (755).
[root@deep /]# chmod 755 /etc/cron.daily/backup.cron

ЗАМЕЧАНИЕ. Так как этот скрипт расположен в каталоге “/etc/cron.daily”, он будет автоматически выполняться в час ночи каждый день.


Содержание раздела