Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

LINUX-сервер пошаговые инструкции инсталляции и настройки - Бруй В. В. , Карлов С. В.

.pdf
Скачиваний:
123
Добавлен:
24.05.2014
Размер:
4 Мб
Скачать
☆

Глава 38. Резервное копирование

561

Интернет

 

Концентратор

Роутер

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Шлюз

 

 

Почтовый

 

Сервер

Web-сервер

 

 

сервер

баз данных

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Концентратор

 

Локальная сеть

 

 

 

 

 

 

Сервер

 

 

 

 

 

 

Файл-сервер

Сервер баз данных

 

 

 

 

 

 

 

 

 

 

резервного копирования

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рабочие станции

Рис. 38.1. Схема организации службы резервного копирования.

562

Часть 12. Организация резервного копирования

Резервное копирование файлов программного обеспечения с использованием программы tar

Если вы устанавливали Apache HTTP Server, PHP, mod_perl и переносили его в окружение chroot-jail в соответствии с рекомендациями глав 34,35 и 36, то все исполняемые файлы установленного программного обеспечения находятся в каталоге /chroot/httpd. Единственным исключением является инициализационный файл /etc/init.d/httpd. Следует отметить, что доступ даже на чтение к этому файлу разрешен только пользователю root. Поэтому резервное копирование и восстановление файлов необходимо осуществлять от имени пользователя root, используя программу Sudo или команду su. Для большей безопасности мы используем Sudo, а использование su запрещено на нашей системе в соответствии с рекомендациями главы 14.

Для резервного копирования файлов инсталляции Apache HTTP Server, PHP, mod_perl необходимо выполнить следующие операции.

Шаг 1

Для создания архива, содержащего все файлы, необходимые для запуска Apache HTTP Server в окружении chroot jail с поддержкой PHP и mod_perl, необходимо выполнить команду:

[karlnext@test karl_next]$ sudo tar cpf

>/home/karl_next/apache-php-perl-chroot.20030719.tar \

>/chroot/httpd /etc/rc.d/init.d/httpd

Password: Secretnoe_$loV0

tar: Removing leading `/' from member names tar: Removing leading `/' from member names

В рассматриваемом примере опция с указывает на необходимость создания архива, p – сохранения в архиве прав доступа к файлам и каталогам, f – на то, что после нее идет только перечисление имен файлов и каталогов, первый из которых является именем создаваемого архива.

ЗАМЕЧАНИЕ Программа tar выдала два предупреждения о том, что из путей к каталогу /chroot/httpd и файлу /etc/rc.d/init.d/httpd удалены первые символы /. Эту особенность программы tar следует учитывать при распаковке архива, осуществляя ее в корневом каталоге сервера. В противном случае пути к файлам и каталогам, создаваемым при распаковке архива, будут неверными, т. к. будут определяться от текущего каталога.

Например, если вы распаковываете архив apache-php-perl-chroot.20030719.tar в каталоге /var/tmp, то главный конфигурационный файл Apache HTTP Server окажется в каталоге

/var/tmp/etc/rc.d/init.d/httpd.

Шаг 2 При использовании архива для восстановления файлов вам необходимо будет убедиться в их целост-

ности. Для этого определите контрольную сумму архива с использованием утилиты md5sum и сохраните контрольную сумму в файле, имеющем то же имя, но с добавлением расширения md5, например:

[karlnext@test karl_next]$ md5sum apache-php-perl-chroot.20030719.tar >

\

> apache-php-perl-chroot.20030719.tar.md5

В результате выполнения указанных выше операций у вас появятся два файла. В первом из них – apache-php-perl-chroot.20030719.tar – содержатся все файлы, необходимые для восстановления вашей инсталляции, а во втором – apache-php-perl-chroot.20030719.tar.md5 – содержится кон-

трольная сумма, с помощью которой вы можете проверить целостность архива.

В случае необходимости восстановление вашей инсталляции Apache HTTP Server может быть выполнена с использованием следующих операций.

Шаг 1

Для моделирования нештатной ситуации удалите все файлы инсталляции Apache HTTP Server с использованием команд:

[karlnext@test karl_next/]$ sudo rm –f /etc/rc.d/init.d/httpd

[karlnext@test karl_next/]$ sudo rm –rf /chroot/httpd/

Шаг 2 Определите текущее время:

[karlnext@test karl_next]$ date

Глава 38. Резервное копирование

563

Суб Июл 19 17:41:19 MSD 2003

Шаг 3 Скопируйте архив и файл, содержащий его контрольную сумму, в корневой каталог вашего сервера:

[karlnext@test karl_next]$ cd / [karlnext@test /]$ sudo cp \

>home/rootarh/apache-php-perl-chroot.20030719.tar \

>home/rootarh/apache-php-perl-chroot.20030719.tar.md5sum / Password: Secretnoe_$loV0

ЗАМЕЧАНИЕ Обратите внимание, что в рассматриваемом примере Sudo запрашивает пароль не при каждом выполнении команд от имени пользователя root. Это объясняется тем, что в настройках, используемых Sudo по умолчанию, пароль при выполнении команд должен вводиться не каждый раз, а по истечении пятиминутного интервала.

Шаг 4 Проверьте совпадение контрольных сумм архива и контрольной суммы, определенной нами при соз-

дании архива:

[karlnext@test /]$ sudo cat /apache-php-perl-chroot.20030719.tar.md5sum c1977535648f0840db3893b3c2d36730 apache-php-perl-chroot.20030719.tar

[karlnext@test /]$ sudo md5sum /apache-php-perl-chroot.20030719.tar c1977535648f0840db3893b3c2d36730 /apache-php-perl-chroot.20030719.tar

Шаг 5

Восстановите инсталляцию Apache HTTP Server:

[karlnext@test /]$ sudo tar xpf /apache-php-perl-chroot.20030719.tar

Шаг 6

Запустите Apache HTTP Server:

[karlnext@test /]$

sudo /etc/init.d/httpd

start

Запускается httpd:

[ОК]

 

Шаг 7 Удалите в корневом каталоге архив и файл, содержащий контрольную сумму:

[karlnext@test /]$ sudo rm -f apache-php-perl-chroot.20030719.tar \ > apache-php-perl-chroot.20030719.tar.md5sum

Шаг 8 Определите текущее время:

[karlnext@test /]$ date

Суб Июл 19 17:44:55 MSD 2003

Неплохой результат – всего лишь за несколько минут программа tar восстановила инсталляцию. При хорошем стечении обстоятельств повторная инсталляция Apache HTTP Server, PHP, mod_perl в окружении chroot-jail заняла бы не менее часа. На самом деле времени на восстановление инсталляции с использованием программы tar уйдет несколько больше, т. к. при этом возможно несанкционированное изменение прав доступа к файлам. Права доступа к файлам придется проверить вручную, при этом списки проинсталлированных файлов, которые мы рекомендовали создавать для каждого программного обеспечения, устанавливаемого на сервере, могут оказаться очень полезными. А где же взять исходные права доступа к файлам? Их нужно запомнить и сохранить в надежном месте сразу же после инсталляции программного обеспечения. Например, если вы установили программу LogSentry в соответствии с рекомендациям главы 16, после удаления из файла logsentry.installed файлов псевдофайловой системы /proc, непрерывно модифицируемых во время нормальной работы системы, в частности, при инсталляции программного обеспечения, в нем останется следующий список проинсталлированных файлов:

/etc/logsentry

/etc/logsentry/violations

/etc/logsentry/violations.ignore

/etc/logsentry/ignore

/etc/logsentry/hacking

/usr/bin/logtail

/usr/sbin/logcheck.sh

/var/logsentry

564

Часть 12. Организация резервного копирования

Для сохранения прав доступа к этим файлам выполните команду:

[karlnext@test /]$ sudo ls -l `cat logsentry.installed` \ > > logsentry.installed.perm

Password: Secretnoe_$loV0

В результате выполнения команды в файле logsentry.installed.perm сохранятся права досту-

па файлов, установленные при инсталляции программы LogSentry:

Апр 24 14:11

-rw-------

1

root

root

1037

/etc/logsentry/hacking

 

 

Апр 24 14:11

-rw-------

1

root

root

1172

/etc/logsentry/ignore

 

 

Апр 24 14:11

-rw-------

1

root

root

407

/etc/logsentry/violations

 

 

Апр 24 14:11

-rw-------

1

root

root

14

/etc/logsentry/violations.ignore

 

Апр 24 14:12 /usr/bin/logtail

-rwx------

1

root

root

6500

-rwx------

1

root

root

10915

Апр 24 14:11

/usr/sbin/logcheck.sh

 

 

 

 

/etc/logsentry:

 

 

 

 

 

итого 6

 

 

 

 

Апр 24

 

-rw-------

1

root

root

1037

14:11 hacking

-rw-------

1

root

root

1172

Апр 24

14:11 ignore

-rw-------

1

root

root

407

Апр 24

14:11 violations

-rw-------

1

root

root

14

Апр 24

14:11 violations.ignore

/var/logsentry:

итого 0

Сохранив файл logsentry.installed.perm в надежном месте, вы всегда сможете использовать его при восстановлении программы LogSentry из архива с помощью программы tar.

Автоматическое резервное копирование периодически изменяемых файлов

Ниже предлагается алгоритм организации автоматического резервирования периодически изменяемых файлов. В рассматриваемом примере автоматизация резервирования осуществляется с использованием файлов сценариев, исполняемых командным интерпретатором, и регулярно запускаемых с помощью cron.

Как было отмечено выше, для архивации некоторых файлов в каталоге /etc/ требуются права суперпользователя root. Запуск сценария, осуществляющего архивацию от имени пользователя root, да еще

вавтоматическом режиме, представляет существенную угрозу для безопасности сервера. Использование для запуска сценария учетных записей пользователей drwalbr и karlnext, которым в соответствии с рекомендациями главы 14 в настройках программы Sudo по существу делегированы полномочия пользователя root, также не является приемлемым вариантом. Кроме того, указанные пользователи при выполнении команд от имени суперпользователя root должны вводить пароли, что исключает запуск сценария архивации

вавтоматическом режиме. Поэтому в дальнейшем мы создадим пользователя rootarh, полномочия которого с использованием настроек Sudo будут существенно ограничены, т. е. ему будет разрешено запускать от имени пользователя root только сценарий архивации без ввода пароля.

Полное резервное копирование

Схема полного копирования подразумевает периодическое, например, ежедневное, создание и перенос на съемный носитель или сервер резервного копирования архива, содержащего копии всех подлежащих архивации файлов и каталогов. Для реализации такой схемы необходимо выполнить следующие операции.

Шаг 1

Создайте пользователя rootarh, которому в дальнейшем будет разрешен доступ для архивации файлов, доступных только для пользователя root:

[karlnext@test karl_next]$ sudo /usr/sbin/useradd -d /home/rootarh -g users -s /bin/bash rootarh

[karlnext@test karl_next]$ sudo /usr/bin/passwd rootarh Enter new password: ()(hen_$ecretnoe_S!0vo

Глава 38. Резервное копирование

565

Re-type

new

password: ()(hen_$ecretnoe_S!0vo

 

passwd:

all

authentication tokens updated successfully.

 

Шаг 2

Создайте файл /root/tar_etc, содержащий следующие строки:

#!/bin/bash

#######################################################################

# Исходные данные #

#######################################################################

COMPUTER =test.bruy.info

#Имя системы.

LABELARH=etc-configs

#Осмысленное название архива.

DIRECTORIES="/etc/"

#Архивируемый каталог.

BACKUPDIR=/home/rootarh

#Каталог в который архивируется.

TAR=/bin/tar

#Путь к программе tar.

MD5SUM=/usr/bin/md5sum

#Путь к программе md5sum.

RESSERV=reserv.bruy.info

#Сервер резервного копирования.

RESSERVUSER=rootarh

#Пользователь для доступа к серверу

 

#резервного копирования.

RESDIR=/home/test.bruy.info

MAIL=/bin/mail

#Каталог на сервере резервного копирования.

#Путь к программе mail.

ADMINMAIL=ahradmin@bruy.info

 

#Почтовый адрес администратора

SCP=/usr/bin/scp

#резервного копирования.

#Путь к программе scp.

PATH=/usr/local/bin:usr/bin:/bin

#######################################################################

#######################################################################

#Текущая дата в,включаемая в имена файлов.

DATA=`date +%Y%m%d-%H.%M` #YYYYMMDD-HH.MM

#######################################################################

# Полное резервное копирование #

#######################################################################

#Создаем имя архива, включая путь.

#Имя файла имеет вид:

#etc-configs-test.bruy.info-YYYYMMDD-HH.MM.tar.

ARHIVNAME=$BACKUPDIR/$LABELARH-$COMPUTER-$DATA.tar

#Создаем архив.

$TAR -cpf $ARHIVNAME $DIRECTORIES

#Рассчитываем контрольную сумму архива и сохраняем ее в файле вида:

#etc-configs-test.bruy.info-YYYYMMDD-HH.MM.tar.md5

$MD5SUM $ARHIVNAME > $ARHIVNAME.md5

#Копируем архив и его контрольную сумму

#на сервер резервного копирования, используя команду scp.

$SCP -p $ARHIVNAME $ARHIVNAME.md5 $RESSERVUSER@$RESSERV:$RESDIR RETVAL=$?

if [ $RETVAL = 0 ]; then

#Если копирование прошло удачно

#удаляем архив и файл с контрольной суммой на системе $COMPUTER. rm -f $ARHIVNAME

rm -f $ARHIVNAME.md5

else

#Если копирование прошло неудачно,

#cоздаем тело сообщения о неудачном копировании.

BODY=$LABELARH-$COMPUTER-$DATA.body

echo Не могу скопировать $ARHIVNAME и $ARHIVNAME.md5 на $RESSERV ! \

> $BODY

#Отправляем сообщение о неудачном копировании

#администратору, оставляя архив и контрольную сумму

#на системе $COMPUTER.

$MAIL $ADMINMAIL \

-s "$COMPUTER:$BACKUPDIR проблемы с резервным копированием !" \

< $BODY

566

Часть 12. Организация резервного копирования

#Удаляем тело сообщения о неудачном копировании. rm -f $BODY

fi

ЗАМЕЧАНИЕ Раздел сценария, содержащий исходные данные, вы можете модифицировать в соот-

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

В рассматриваемом примере сценарий выполняет следующие операции:

• создает на системе test.bruy.info архив etc-configs-test.bruy.info-YYYYMMDD- HH.MM.tar;

• определяет контрольную сумму архива и сохраняет ее в файле etc-configs-

test.bruy.info-YYYYMMDD-HH.MM.tar.md5;

• копирует файлы, содержащие архив и контрольную сумму, на сервер резервного копирования reserv.bruy.info в каталог /home/test.bruy.info, используя на удаленном сервере учетную запись пользователя rootarh;

• в случае удачного копирования удаляет файлы с архивом и его контрольной суммой с системы test.bruy.info, в противном случае оставляет файлы на системе test.bruy.info и отправляет администратору резервного копирования на почтовый адрес ahradmin@bruy.info сообщение следующего содержания:

Subject: test.bruy.info:/home/rootarh проблемы с резервным копированием

Не могу скопировать /home/rootarh/etc-configs-test.bruy.info-YYYYMMDD- HH.MM.tar и /home/rootarh/etc-configs-test.bruy.info-YYYYMMDD- HH.MM.tar.md5 на reserv.bruy.info !

Шаг 3

Установите права доступа к файлу /root/tar_etc и назначьте его владельцем пользователя root:

[karlnext@test karl_next]$ sudo chmod 500 /root/tar_etc

Password: Secretnoe_$loV0

[karlnext@test karl_next]$ sudo chown 0.0 /root/tar_etc

Шаг 4

Разрешите пользователю rootarh выполнение сценария /root/tar_etc от имени пользователя root без ввода пароля. Для этого с использованием специализированного текстового редактора visudo (использование других редакторов недопустимо):

[karlnext@test karl_next]$ sudo visudo

отредактируйте файл /etc/sudoers, руководствуясь вашими потребностями и ниже приведенными рекомендациями:

#Описание пользователей, которым разрешено использовать SUDO

User_Alias FULLTIME_USERS = drwalbr, karlnext

#Описание команд

Cmnd_Alias ETC=/root/tar_etc

#drwalbr, karlnext при обращении к Sudo

#должны вводить не свой, а пароль root

Defaults:FULLTIME_USERS rootpw Defaults:FULLTIME_USERS !lecture

#Пользователю root разрешено выполнение команд

#от имени других пользователей root ALL = (ALL) ALL

#drwalbr, karlnext могут выполнять любые команды

# но после ввода пароля

FULLTIME_USERS ALL = ALL

#rootarh от имени root

#без ввода пароля

#может выполнять только команды

Глава 38. Резервное копирование

567

#определенные алиасом ETC rootarh test = NOPASSWD: ETC

Строка:

rootarh test = NOPASSWD: ETC

разрешает пользователю rootarh выполнять команду, указанную в строке:

Cmnd_Alias ETC=/root/tar_etc

на системе test без ввода пароля.

Шаг 5

Для организации копирования с использованием команды scp необходимо выполнить следующие операции.

Сгенерируйте на системе test.bruy.info открытый и закрытый ключи OpenSSH для пользователя rootarh в соответствии с рекомендациями главы 13:

[karlnext@test karl_next]$ ssh karlnext@resserv.bruy.info

Enter passphrase for key '/home/karlnext/.ssh/id_dsa': Estcho_()dn0_(ecretn0e_$lovo

Создайте на сервере резервного копирования пользователя rootarh c домашним каталогом

/home/rootarh:

[karlnext@resserv karl_next]$ sudo /usr/sbin/useradd -d /home/rootarh -g users -s /bin/bash rootarh

Password: Secretnoe_$loV0

[karlnext@resserv karl_next]$ sudo /usr/bin/passwd rootarh

Enter new password: ()(hen_$ecretnoe_S!0vo Re-type new password: ()(hen_$ecretnoe_S!0vo

passwd: all authentication tokens updated successfully.

и каталог для хранения архивных файлов системы test.bruy.info:

[karlnext@resserv karl_next]$ sudo mkdir /home/rootarh/test.bruy.info [karlnext@resserv karl_next]$ sudo chmod 0600 –R /home/rootarh/

Сгенерируйте открытый и закрытый ключи OpenSSH для пользователя rootarh в соответствии с рекомендациями главы 13.

Осуществите обмен ключами пользователя rootarh между системами test.bruy.info и resserv.bruy.info в соответствии с рекомендациями главы 13.

Для обеспечения доступа пользователя rootarh с системы test.bruy.info на систему resserv.bruy.info внесите изменения в файл /etc/ssh/ssh_config, находящийся на сервере резервного копирования, добавив в конец файла строки, разрешающие соединение с IP-адреса, используемого системой test.bruy.info, например, 212.111.80.42:

Host 212.111.80.42

ForwardAgent no ForwardX11 no RhostsAuthentication no

RhostsRSAAuthentication no RSAAuthentication no PasswordAuthentication no FallBackToRsh no

UseRsh no

BatchMode yes

CheckHostIP no StrictHostKeyChecking yes IdentityFile ~/.ssh/identity IdentityFile ~/.ssh/id_dsa IdentityFiie ~/.ssh/id_rsal IdentityFile ~/.ssh/id_rsa2 Port 22

Protocol 2,1 Cipher blowfish EscapeChar ~

При этом строка:

568

Часть 12. Организация резервного копирования

Host 212.111.80.42

указывает на то, что все следующие ниже директивы относятся только к IP-адресу 212.111.80.42. Строка:

BatchMode yes

разрешает доступ пользователей без ввода пароля.

В файле /etc/ssh/sshd_config отредактируй строку:

AllowUsers drwalbr karlnext

в которой определен список пользователей, которым разрешен доступ к системе resserv.bruy.info, добавив в нее пользователя rootarh:

AllowUsers drwalbr karlnext rootarh

Для вступления изменений в силу перезагрузите sshd на системе resserv.bruy.info:

[karlnext@resserv karl_next]$ sudo /etc/init.d/sshd restart

Password: Secretnoe_$loV0

[ОК]

Останавливается sshd:

Запускается sshd:

[ОК]

Завершите работу с системой resserv.bruy.info:

[karlnext@resserv karl_next]$ exit

Шаг 6 Для проверки работоспособности сценария и сделанных вами настроек зарегистрируйтесь на системе

test.bruy.info в качестве пользователя rootarh и запустите сценарий /root/tar_etc:

[rootarh@test rootarh]$ sudo /root/tar_etc

Шаг 7 Если сценарий работает нормально, и вы хотите, чтобы он выполнялся ежедневно, например, в 19.25

– добавьте в таблицу заданий crontab пользователя rootarh, используя команду:

[rootarh@test rootarh]$ crontab –e

и используя функции редактирования текстового редактора vi – следующую строку:

25 19 * * * sudo /root/tar_etc

Шаг 8 Подождите, пока сценарий запустится автоматически. По окончании его выполнения на почтовый ад-

рес rootarh@test.bruy.info должно поступить сообщение, автоматически сгенерированное демоном crond обо всех ошибках, имевших место при выполнении сценария.

Инкрементное резервирование копирование

Рассмотренная выше схема полного резервного копирования предъявляет достаточно жесткие требования к объему носителей, используемых для хранения резервируемой информации, и пропускной способности сети, т. к. регулярно создает и копирует по сети архив, содержащий копии всех файлов и каталогов. Для сокращения объема хранимой и передаваемой по сети информации обычно используют схему инкрементного резервного копирования. При этом копирование полного архива, содержащего копии всех файлов и каталогов, происходит относительно редко и более часто – архивов, содержащих файлы и каталоги, измененные после последнего полного резервного копирования. Ниже приведен пример сценария, еженедельно осуществляющего полное резервное копирование и инкрементное ежедневное резервное копирование:

!/bin/bash

#######################################################################

# Исходные данные #

#######################################################################

$COMPUTER=test.bruy.info

#Имя системы

LABELARH=etc-configs

#Осмысленное название архива.

DIRECTORIES="/etc/"

#Архивируемый каталог.

BACKUPDIR=/home/rootarh

#Каталог в который архивируется.

TAR=/bin/tar

#Путь к программе tar.

MD5SUM=/usr/bin/md5sum

#Путь к программе md5sum.

FULLDAY=5

#Номер дня недели (0,1,2,...6 начиная с Вск.)

 

#в который осуществляется

 

#полная еженедельная

Глава 38. Резервное копирование

569

RESSERV=reserv.bruy.info

#архивация.

#Сервер резервного копирования

RESSERVUSER=rootarh

#Пользователь для доступа к серверу

 

#резервного копирования

RESDIR=/home/test.bruy.info

MAIL=/bin/mail

#Каталог на сервере резервного копирования

#Путь к программе mail.

ADMINMAIL=ahradmin@bruy.info

 

#Почтовый адрес администратора

SCP=/usr/bin/scp

#резервного копирования.

#Путь к программе scp

#######################################################################

#######################################################################

PATH=/usr/local/bin:usr/bin:/bin

#Текущая дата в разных форматах

#включаемая в имена файлов архивов.

DATA=`date +%Y%m%d-%H.%M` #YYYYMMDD-HH.MM

DOW=`date +%w`

#0,1,2,...6 (начиная с Вск.)

DOM=`date

+%d`

#01,02,03,...31

NOW=`date

+%D`

#MM/DD/YY

TIMEFILE=$LABELARH-$COMPUTER-last-full-date

#######################################################################

# Еженедельное полное резервное копирование #

#######################################################################

if [ $DOW = $FULLDAY ]; then

#Создаем файл, содержащий дату последнего полного архивирования.

echo $NOW > $TIMEFILE

#Создаем имя архива, включая путь.

#Имя файла имеет вид:

#etc-configs-test.bruy.info-full_week-YYYYMMDD-HH.MM.tar.

ARHIVNAME=$BACKUPDIR/$LABELARH-$COMPUTER-full_week-$DATA.tar.

#Создаем архив.

$TAR -cpf $ARHIVNAME $DIRECTORIES

#Рассчитываем контрольную сумму архива и сохраняем ее в файле вида:

#etc-configs-test.bruy.info-full_week-YYYYMMDD-HH.MM.tar.md5

$MD5SUM $ARHIVNAME > $ARHIVNAME.md5

#Копируем архив и его контрольную сумму

#на сервер резервного копирования, используя команду scp.

$SCP -p $ARHIVNAME $ARHIVNAME.md5 $RESSERVUSER@$RESSERV:$RESDIR RETVAL=$?

if [ $RETVAL = 0 ]; then

#Если копирование прошло удачно

#удаляем архив и файл с контрольной суммой на системе $COMPUTER. rm -f $ARHIVNAME

rm -f $ARHIVNAME.md5

else

#Если копирование прошло неудачно,

#cоздаем тело сообщения о неудачном копировании.

BODY=$LABELARH-$COMPUTER-$DATA.body

echo Не могу скопировать $ARHIVNAME и $ARHIVNAME.md5 на $RESSERV !\

> BODY

#Отправляем сообщение о неудачном копировании

#администратору, оставляя архив и контрольную сумму

#на системе $COMPUTER.

$MAIL $ADMINMAIL \

-s "$COMPUTER:$BACKUPDIR проблемы с резервным копированием !" \

< $BODY

#Удаляем тело сообщения о неудачном копировании. rm -f $BODY

fi else

570

Часть 12. Организация резервного копирования

#######################################################################

#

Ежедневное инкрементное резервное копирование

#

#######################################################################

#Генерируем строку, содержащую опцию tar --newer,

#предписывающую добавлять в архив только файлы

#с датой модификации после последней полной архивации.

#Дату последней полной архивации мы берем из файла $TIMEFILE

OPTIONS="--newer `cat $TIMEFILE`"

ARHIVNAME=$BACKUPDIR/$LABELARH-$COMPUTER-$DOW-$DATA.tar

#Создаем архив, куда включаются только файлы с датой модификации

#большей, чем дата последней полной архивации.

#Имя файла имеет вид:

#etc-configs-test.bruy.info-W-YYYYMMDD-HH.MM.tar.

$TAR $OPTIONS -cpf $ARHIVNAME $DIRECTORIES

#Рассчитываем контрольную сумму архива и сохраняем ее в файле вида:

#etc-configs-test.bruy.info-W-YYYYMMDD-HH.MM.tar.md5

$MD5SUM $ARHIVNAME > $ARHIVNAME.md5

#Копируем архив и его контрольную сумму

#на сервер резервного копирования, используя команду scp.

#В случае неудачного копирования отправляем письмо администратору. $SCP -p $ARHIVNAME $ARHIVNAME.md5 $RESSERVUSER@$RESSERV:$RESDIR RETVAL=$?

if [ $RETVAL = 0 ]; then rm -f $ARHIVNAME

else

BODY=$LABELARH-$COMPUTER-$DATA.body

echo Не могу скопировать $ARHIVNAME или $ARHIVNAME.md5 на $RESSERV

!\

> \ $BODY

$MAIL $ADMINMAIL \

-s "$COMPUTER:$BACKUPDIR проблемы с резервным копированием !" \ < $BODY

rm -f $BODY

fi

fi

В рассматриваемом примере сценарий каждую пятницу осуществляет полное резервное копирование, выполняя следующие операции:

• создает на системе test.bruy.info архив etc-configs-test.bruy.info-full_week- YYYYMMDD-HH.MM.tar;

• определяет контрольную сумму архива и сохраняет в файле etc-configs-test.bruy.info- full_week-YYYYMMDD-HH.MM.tar.md5;

• запоминает дату последнего полного резервного копирования в файле etc-configs-

test.bruy-last-full-date;

• копирует файлы, содержащие архив и контрольную сумму на сервер резервного копирования reserv.bruy.info в каталог /home/test.bruy.info, используя на удаленном сервере учетную запись пользователя rootarh;

• в случае удачного копирования удаляет файл с архивом и его контрольной суммой на системе test.bruy.info, в противном случае оставляет файлы на системе test.bruy.info и отправляет администратору резервного копирования на почтовый адрес ahradmin@bruy.info сообщение вида:

Не могу скопировать $ARHIVNAME и $ARHIVNAME.md5 на $RESSERV !\.

В остальные дни недели:

•создает с использованием опции --newer программы tar на системе test.bruy.info архив etc-configs-test.bruy.info-W-YYYYMMDD-HH.MM.tar, содержащий все файлы, измененные со времени последнего полного резервного копирования;

•определяет его контрольную сумму архива и сохраняет в файле etc-configs-

test.bruy.info-W-YYYYMMDD-HH.MM.tar.md5;

• копирует файлы, содержащие архив и контрольную сумму на сервер резервного копирования reserv.bruy.info в каталог /home/test.bruy.info, используя на удаленном сервере учетную запись пользователя rootarh;