LINUX-сервер пошаговые инструкции инсталляции и настройки - Бруй В. В. , Карлов С. В.
.pdf
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;
