Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
serverguide-precise-ru.pdf
Скачиваний:
77
Добавлен:
03.05.2015
Размер:
1.86 Mб
Скачать

Резервное копирование

2. Ротация архивов

Shell сценарий в разделе Раздел 1, «Сценарии Shell» [342] позволяет создавать только 7 различных архивов. Для сервера, данные на котором меняются нечасто, этого может быть достаточно. Если же сервер содержит большой объем данных, требуется использовать более комплексную схему ротации архивов.

2.1. Ротация NFS архивов

В этой секции наш shell сценарий будет немного модифицирован с целью осуществления схемы ротации 'дед-отец-сын' (ежемесячно-еженедельно- ежедневно):

ротация будет выполнять ежедневное резервное копирование с воскресенья по пятницу.

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

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

Вот новый сценарий:

#!/bin/bash

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

#

#Backup to NFS mount script with

#grandfather-father-son rotation.

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

#What to backup.

backup_files="/home /var/spool/mail /etc /root /boot /opt"

#Where to backup to. dest="/mnt/backup"

#Setup variables for the archive filename. day=$(date +%A)

hostname=$(hostname -s)

#Find which week of the month 1-4 it is. day_num=$(date +%d)

if (( $day_num <= 7 )); then week_file="$hostname-week1.tgz"

elif (( $day_num > 7 && $day_num <= 14 )); then week_file="$hostname-week2.tgz"

347

Резервное копирование

elif (( $day_num > 14 && $day_num <= 21 )); then week_file="$hostname-week3.tgz"

elif (( $day_num > 21 && $day_num < 32 )); then week_file="$hostname-week4.tgz"

fi

#Find if the Month is odd or even. month_num=$(date +%m)

month=$(expr $month_num % 2) if [ $month -eq 0 ]; then

month_file="$hostname-month2.tgz"

else

month_file="$hostname-month1.tgz"

fi

#Create archive filename.

if [ $day_num == 1 ]; then archive_file=$month_file

elif [ $day != "Saturday" ]; then archive_file="$hostname-$day.tgz"

else archive_file=$week_file

fi

# Print start status message.

echo "Backing up $backup_files to $dest/$archive_file" date

echo

# Backup the files using tar.

tar czf $dest/$archive_file $backup_files

#Print end status message. echo

echo "Backup finished" date

#Long listing of files in $dest to check file sizes. ls -lh $dest/

Сценарий может запускаться так же, как описано в секции Раздел 1.2, «Выполнение сценария» [344].

Хорошей практикой является выделять для резервного копирования удалённый носитель на случай физического уничтожения сервера. В примере shell сценария носителем для резервной копии является NFSресурс на другом сервере. По всей вероятности, перенос NFS-сервера в другое место не является целесообразным. В зависимости от скорости связи, подходящим вариантом может быть копирование архивного файла через соединение по внешней сети (WAN) на сервер, находящийся на другой территории.

348

Резервное копирование

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

2.2. Устройства на магнитной ленте

Устройство на магнитной ленте, подключенное к серверу, может использоваться вместо ресурса NFS. Использование ленточного устройства упрощает ротацию архивов, а также решает проблему хранения резервного носителя отдельно от сервера.

При использовании ленточного устройства часть сценария, касающаяся имени файла, становится ненужной, поскольку данные посылаются непосредственно на устройство. Однако требуются некоторые команды для управления лентой. Это достигается использованием утилиты управления магнитной лентой mt, являющейся частью пакета cpio.

Здесь приведён сценарий, изменённый для использования с ленточным устройством:

#!/bin/bash

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

#

#Backup to tape drive script.

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

#What to backup.

backup_files="/home /var/spool/mail /etc /root /boot /opt"

#Where to backup to. dest="/dev/st0"

#Print start status message.

echo "Backing up $backup_files to $dest" date

echo

#Make sure the tape is rewound. mt -f $dest rewind

#Backup the files using tar. tar czf $dest $backup_files

#Rewind and eject the tape.

349

Резервное копирование

mt -f $dest rewoffl

# Print end status message. echo

echo "Backup finished" date

По умолчанию именем ленточного SCSI устройства является /dev/st0. Используйте подходящий путь к устройству для вашей системы.

Восстановление с ленточного устройства в основном такое же, как и из файла. Просто перемотайте ленту и используйте путь к устройству вместо пути к файлу. Например, для восстановления файла /etc/hosts в /tmp/etc/ hosts используйте следующее:

mt -f /dev/st0 rewind

tar -xzf /dev/st0 -C /tmp etc/hosts

350

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]