Резервное копирование и восстановление в Linux
Раздел : Секреты и Советы
Опубликовано Виталий [20/10/2009]
Резервное копирование и восстановление в Linux

Краткий обзор.

Безопасность и надежность сервера вплотную связана с процедурой регулярного резервного копирования. Иногда могут возникать различные повреждения. Они могут быть следствием атак, ошибок аппаратного обеспечения, людских ошибок, перепадов напряжения и пр. Самый надежный метод резервного копирования это записать данные в место, независимое от Вашего Linux сервера, например, через сеть, на стример, сменный носитель, записываемый CD-ROM и пр.

В Linux существует много методов выполнить резервное копирование, среди них такие, как dump, tar, cpio и dd. Также доступны утилиты, базирующиеся на текстовых файлах, например, Amanda, которая разработана, чтобы добавить дружественный пользовательский интерфейс к процедуре резервного копирования и восстановления данных. И наконец, есть коммерческие пакеты резервного копирования, например, BRU.

Процедуры выполнения резервного копирования и восстановления данных будут отличаться в зависимости от выбранного Вами решения. Из этих соображений, мы будем обсуждать здесь процедуру резервного копирования при помощи традиционных для UNIX утилит: tar и dump.

Что такое резервное копирование

Основная идея резервного копирования это создание копий всего, что установлено на Вашей системе, но с некоторыми исключениями, о которых мы напишем ниже. Будет нелогичным включать их в Ваши резервные копии, так как это будет напрасная трата времени и пространства на носителе. Основными исключениями, не включаемыми в Ваши резервные копии, являются:

* Файловая система /proc, так как она содержит только данные, которые ядро генерирует автоматически, и нет никакого смысла сохранять их.
* Файловой системы /mnt, потому что в нее Вы монтируете Ваши сменные носители, подобные CD-ROM, гибким дискам и пр.
* Каталоги и носители, содержащие резервные копии, такие как стримеры, CD-ROM, смонтированная файловая система NFS, удаленные/локальные каталоги и прочие виды носителей.
* Программное обеспечение, которое может быть легко повторно установлено, хотя оно может иметь конфигурационные файлы, которые необходимо копировать, чтобы не выполнять работы по их настройке позже. Я рекомендую сохранять их (конфигурационные файлы программного обеспечения) на дискете.

Программа резервного копирования tar
Описание.

Программа резервного копирования tar это программа архивирования, которая была создана для хранения и извлечения файлов из архива, известного как тар-файл. Тар-файл может быть создан на лентопротяжном устройстве, однако, чаще всего тар-файлы записываются как обычные файлы.
Простая схема резервного копирования

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

Создание резервных копий с помощью tar

С шестью лентами Вы можете делать резервные копии каждый день; процедура использует ленту 1 для полного резервного копирования (пятница 1), и ленты со 2 по 5 для добавочного резервного копирования (с понедельника по четверг). Затем, мы делаем новую полную резервную копию на ленту 6 (вторая пятница), и далее делаем добавочные копии на лентах со 2 по 5. Важно сохранить 1 в неприкосновенности, пока мы не получим полную резервную копию на ленте 6. В следующем примере мы подразумеваем, что записываем резервные копии на ленточное устройство SCSI с именем /dev/st0, и создаем резервную копию домашнего каталога (/home) нашей системы.

Первое, мы должны переместиться в корневой раздел. Когда tar создает архивные файлы, он удаляет начальный символ / (слэш) из пути к файлу. Это значит, что после восстановления файлы могут оказаться не на своем месте. Чтобы решить эту проблему, необходимо до изготовления резервных копий и восстановления данных переходить в корневой раздел Вашей файловой системы.

Переместитесь в корневой раздел:

[root@deep]# cd /

Важно всегда начинать с изготовления полной резервной копии, например, в пятницу:

* Пятница 1 (используйте ленту 1 для первой полной резервной копии).

[root@deep /]# cd /
[root@deep /]# tar cpf /dev/st0 --label=" full-backup created on `date '+
%d-%B-%Y'`." --directory / home

* Понедельник (используется лента 2 для добавочной резервной копии).

[root@deep /]# cd /
[root@deep /]# tar cpNf /dev/st0 --label=" full-backup created on `date '+
%d-%B-%Y'`." --directory / home

* Вторник (используется лента 3 для добавочной резервной копии).

[root@deep /]# cd /
[root@deep /]# tar cpNf /dev/st0 --label=" full-backup created on `date '+
%d-%B-%Y'`." --directory / home

* Среда (используется лента 4 для добавочной резервной копии).

[root@deep /]# cd /
[root@deep /]# tar cpNf /dev/st0 --label=" full-backup created on `date '+
%d-%B-%Y'`." --directory / home

* Четверг (используется лента 5 для добавочной резервной копии).

[root@deep /]# cd /
[root@deep /]# tar cpNf /dev/st0 --label=" full-backup created on `date '+
%d-%B-%Y'`." --directory / home

* Пятница 2 (используется лента 6 для полной резервной копии).

[root@deep /]# cd /
[root@deep /]# tar cpf /dev/st0 --label=" full-backup created on `date '+
%d-%B-%Y'`." --directory / home

Далее, делаем добавочные резервные копии на лентах со 2 по 5 и так далее.

Опция c определяет, что мы создаем архивный файл. Опция p сохраняет права доступа. Опция N делает добавочную резервную копию и запоминает файлы новее, чем DATE. Опция f говорит, что следующий аргумент будет либо именем архивного файла, либо именем устройства, на которое производится запись.

Объясним, как мы получили имя файла, который содержит текущую дату: просто поместите команду date между обратными кавычками. К основному имени добавляется суффикс tar для несжатых архивов, и суффикс tar.gz для сжатых. Так как мы не определяем конкретное имя для файла резервной копии, то воспользуемся опцией --label, которая позволяет записать некоторую информацию в архивный файл. В заключение мы определяем, что только файлы из каталога /home будут записаны на ленту.

Так как лента это устройство посимвольного ввода, мы не можем определить имя файла. Поэтому, в качестве аргумента для опции "имя файла" программы tar используется просто имя устройства /dev/st0. Устройство /dev/st0 не перематывается после создания резервной копии, поэтому мы имеем возможность записать на одну ленту несколько сессий. Вы можете также сказать устройству /dev/st0 автоматически перемотать ленту после окончания записи резервной копии. При работы с лентой, Вы можете использовать следующие команды для перематывания и извлечения ленты из устройства:

[root@deep /]# mt -f /dev/st0 rewind
[root@deep /]# mt -f /dev/st0 offline

ПРЕДОСТЕРЕЖЕНИЕ. Для уменьшения пространства, занимаемого tar-архивом, резервная копия может быть сжата при помощи опции z программы tar. К сожалению, использование этой опции может создать ряд проблем. Из природы работы сжатия следует, что если хотя бы один бит будет испорчен, то и все данные, нужные для восстановления будут потеряны. Поэтому рекомендуется не использовать сжатие (опция z) для создания резервной копии при помощи команды tar.

Если Ваша резервная копия не помещается на ленте, то Вам надо использовать опцию --multi-volume (-M) для создания многотомных архивов:

[root@deep /]# cd /
[root@deep /]# tar cMpf /dev/st0 /home
Prepare volume #2 for /dev/st0 and hit return:

После того, как Вы создали резервную копию, Вы должны убедиться, что все OK, используя опцию --compare (-d):

[root@deep /]# cd /
[root@deep /]# tar dvf /dev/st0

Для резервного копирования всей системы используйте следующую команду:

[root@deep /]# cd /

[root@deep /]# tar cpf /archive/full-backup-`date '+%d-%B-%Y'`.tar
--directory / --exclude=proc --exclude=mnt
--exclude=archive --exclude=cache --exclude=*/lost+found .

Опция --directory говорит tar, что до начала резервного копирования надо перейти в следующий каталог (в нашем примере /). Опция --exclude говорит tar не создавать резервные копии заданных каталогов и файлов. Символ ., находящийся в конце командной строки говорит tar, что он должен копировать все в текущем каталоге.

ПРЕДУПРЕЖДЕНИЕ. Когда Вы создаете резервную копию Вашей системы, не включайте в нее псевдофайловую систему /proc! Файлы в /proc не настояшие файлы, это просто файлоподобные ссылки к структуре ядра. Также не включайте каталоги /mnt, /archive и все lost+found.

Автоматизация задачи резервного копирования при помощи 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
# и модифицирован Gerhard Mourani
# Измените следующие пять переменных под Вашу систему
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, он будет автоматически выполняться в час ночи каждый день.

Восстановление файлов с tar

Более важным, чем выполнение регулярных резервных копий, является их доступность в момент, когда надо восстановить информацию! Здесь мы рассмотрим методы восстановления файлов, которые были скопированы командой tar.

Следующая команда будет восстанавливать все файлы из архива full-backup-Day-Month-Year.tar, который является примером резервной копии нашего каталога home и был создан в нашем примере, описанном выше. Для восстановления полной резервной копии каталога home используйте следующую команду:

[root@deep /]# cd /
[root@deep /]# tar xpf /dev/st0/full-backup-Day-Month-Year.tar

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

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

Если Вам не надо извлекать все каталоги и файлы из архива, Вы можете указать, что Вам нужно.

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

[root@deep]# cd /
[root@deep]# tar xpf /dev/st0/full-backup-Day-Month-Year.tar
home/wahib/Personal/Contents.doc home/quota.use

Вышеприведенная команда извлекает файлы /home/wahib/Personal/Contents.doc и /home/quota.user из архива. Если Вы хотите посмотреть, какие файлы находятся в архиве, то используйте опцию --list (-t):

[root@deep /]# tar tf /dev/st0

ПРЕДУПРЕЖДЕНИЕ. Если Вы имеете в своей системе файлы с установленным битом постоянства, то используйте команду chattr +i, так как этот бит не сохраняется при резервном копировании при помощи команды tar.
Тестирование возможности восстановления из резервных копий

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

Для получения больших деталей Вы можете прочитать следующую страницу руководства (man):

Программа резервного копирования dump
Описание.

Dump полностью отличается от tar: эта программа предназначена для резервного копирования и восстановления файловой системы. Она создает резервные копии элементов файловой системы, а не файлов. Dump проверяет файлы на файловой системе ext2, определяет резервные копии каких из них необходимо выполнить и копирует эти файлы на заданный диск, ленту, файл или другой носитель. Это позволяет получить дамп одной файловой системы быстро и эффективно. К сожалению, его нельзя применить к отдельным каталогам, поэтому архивы потребляют больше места на устройстве хранения. Dump был написан специально для резервного копирования. Команда restore выполняет функцию обратную dump, она восстанавливает полную резервную копию файловой системы. Последующие добавочные резервные копии могут быть наложены слоями на вершину полной копии. Отдельные файлы и каталоги могут быть также восстановлены из полной или частичной резервной копии. Вы можете использовать dump, если нуждаетесь в процедуре резервного копирования и восстановления файловых систем.

Уровни Dump.


Dump имеет несколько уровней резервного копирования. Уровни входят в диапазон от 0 до 9, где уровень номер 0 это полная резервная копия системы, которая гарантирует, что все элементы файловой системы будут скопированы. Уровни выше 0 добавочные резервные копии, которые говорят dump копировать все файлы новее или модифицированные после последнего дампа из некоторых или более низкого уровня. Чтобы быть более точным, на каждом уровне добавочного резервного копирования Вы сохраняете все изменения, произошедшие после создания последней резервной копии на том же или предыдущем уровне. Каковы преимущества и причины использования многоуровневого резервного копирования? Я попробую объяснить это при помощи следующих схем:

0 3 2 5 4 7 6 9 8 9
| | | | | | | | | |
0 полная резервная копия | | |
| | | | | | | | |
3 копирует все новее или измененное после уровней 0 и 3.
| | | | | | | |
2 копирует все новее или измененное после уровней 0 и 2.
| | | | | | |
5 копирует все новее или измененное после уровней 0, 3 и 5.
| | | | | |
4 копирует все новее или измененное после уровней 0, 3 и 4.
| | | | |
7 копирует все новее или измененное после уровней 0, 3, 4 и 7.
| | | |
6 копирует все новее или измененное после уровней 0, 3, 4 и 6.
| | |
9 копирует все новее или измененное после уровней 0, 3, 4, 6 и 9.
| |
8 копирует все новее или измененное после уровней 0, 3, 4, 6 и 8.
|
9 копирует все новее или измененное после уровней 0, 3, 4, 6, 8 и 9.


Преимуществом этого метода является то, что более дешевым способом удается продлить хронологию резервных копий. Длинная хронология полезна тем, что часто в течение долгого времени не обнаруживается удаление или порча нужных файлов. Даже не самые новые версии файлов лучше, чем полная их потеря. Также, уровни резервирования используются, чтобы свести время выполнения резервных копий и восстановления к минимуму. Страницы руководства dump предлагают хорошую схему, чтобы использовать все преимущества уровней резервного копирования: 3, 2, 5, 4, 7, 6, 9, 8, 9 и так далее, как описано ниже в таблице. Число лент, необходимых для восстановления, зависит от количества времени, прошедшего между двумя полными резервными копиями.

Лента Уровень Резервная копия (дней) Ленты для восстановления
1 0 Нет 1
2 3 1 1,2
3 2 2 1,3
4 5 1 1,2,4
5 4 2 1,2,5
6 7 1 1,2,3,6
7 6 2 1,2,5,7
8 9 1 1,2,5,7,8
9 8 2 1,2,5,7,9
10 9 1 1,2,5,7,9,10

Создание резервных копий с помощью dump

Если Вы хотите использовать многоуровневую процедуру резервного копирования, то Вас заинтересует как использовать программу dump. Ниже я приведу процедуру, имеющую длинную историю резервного копирования, и поддерживающую время резервного копирования и восстановления данных на минимуме. В следующем примере мы подразумеваем, что записываем резервную копию каталога /home на ленточное устройство /dev/st0. Важно всегда начинать с 0 уровня резервного копирования, например:

* Пятница 1 (используется лента 1 для первой полной резервной копии).

[root@deep /]# dump -0u -f /dev/st0 /home
DUMP: Date of this level 0 dump: Fri Jan 28 21:25:12 2000
DUMP: Date of last level 0 dump: the epoch
DUMP: Dumping /dev/sda6 (/home) to /dev/st0
DUMP: mapping (Pass I) [regular files]
DUMP: mapping (Pass II) [directories]
DUMP: estimated 18582 tape blocks on 0.48 tape(s).
DUMP: Volume 1 started at: Fri Jan 28 21:25:14 2000
DUMP: dumping (Pass III) [directories]
DUMP: dumping (Pass IV) [regular files]
DUMP: DUMP: 18580 tape blocks on 1 volumes(s)
DUMP: finished in 4 seconds, throughput 4645 KBytes/sec
DUMP: Volume 1 completed at: Fri Jan 28 21:25:18 2000
DUMP: Volume 1 took 0:00:04

DUMP: Volume 1 transfer rate: 4645 KB/s
DUMP: level 0 dump on Fri Jan 28 21:25:12 2000
DUMP: DUMP: Date of this level 0 dump: Fri Jan 28 21:25:12 2000
DUMP: DUMP: Date this dump completed: Fri Jan 28 21:25:18 2000
DUMP: DUMP: Average transfer rate: 4645 KB/s
DUMP: Closing /dev/st0
DUMP: DUMP IS DONE

* Понедельник (используется лента 2 для добавочной резервной копии).

[root@deep /]# dump -3u -f /dev/st0 /home

* Вторник (используется лента 3 для добавочной резервной копии).

[root@deep /]# dump -2u -f /dev/st0 /home

* Среда (используется лента 4 для добавочной резервной копии).

[root@deep /]# dump -5u -f /dev/st0 /home

* Четверг (используется лента 5 для добавочной резервной копии).

[root@deep /]# dump -4u -f /dev/st0 /home

* Пятница 2 (используется лента 6 для добавочной резервной копии).

[root@deep /]# dump -7u -f /dev/st0 /home

* Понедельник (используется лента 2 для добавочной резервной копии).

[root@deep /]# dump -3u -f /dev/st0 /home

* Вторник (используется лента 3 для добавочной резервной копии).

[root@deep /]# dump -2u -f /dev/st0 /home

* Среда (используется лента 4 для добавочной резервной копии).

[root@deep /]# dump -5u -f /dev/st0 /home

* Четверг (используется лента 5 для добавочной резервной копии).

[root@deep /]# dump -4u -f /dev/st0 /home

* Пятница 3 (используется лента 7 для добавочной резервной копии).

[root@deep /]# dump -6u -f /dev/st0 /home

* Понедельник (используется лента 2 для добавочной резервной копии).

[root@deep /]# dump -3u -f /dev/st0 /home<
/pre>

* Вторник (используется лента 3 для добавочной резервной копии).

[root@deep /]# dump -2u -f /dev/st0 /home

* Среда (используется лента 4 для добавочной резервной копии).

[root@deep /]# dump -5u -f /dev/st0 /home

* Четверг (используется лента 5 для добавочной резервной копии).

[root@deep /]# dump -4u -f /dev/st0 /home

* Пятница 4 (используется лента 8 для добавочной резервной копии, только если в месяце пять пятниц).

[root@deep /]# dump -9u -f /dev/st0 /home

* Понедельник (используется лента 2 для добавочной резервной копии, только если в месяце пять пятниц).

[root@deep /]# dump -3u -f /dev/st0 /home

* Вторник (используется лента 3 для добавочной резервной копии, только если в месяце пять пятниц).

[root@deep /]# dump -2u -f /dev/st0 /home

* Среда (используется лента 4 для добавочной резервной копии, только если в месяце пять пятниц).

[root@deep /]# dump -5u -f /dev/st0 /home

* Четверг (используется лента 5 для добавочной резервной копии, только если в месяце пять пятниц).

[root@deep /]# dump -4u -f /dev/st0 /home

* Месяц (используйте другую ленту для полной резервной копии, когда изменяется месяц).

[root@deep /]# dump -0u -f /dev/st0 /home

где от -0 до -9 уровни резервного копирования, которые Вы хотите использовать, опция u говорит обновлять файл /etc/dumpdates после удачного дампа, опция -f указывает записывать резервную копию в файл, файл может быть специальным файлом устройства, например, /dev/st0 (ленточное устройство), /dev/rsd1c (дисковое устройство), обычным файлом, или - (стандартным вывод). В заключение, Вы должны определить, резервную копию чего Вы хотите сделать. В нашем примере это каталог /home. Вы можете видеть, что мы используем одни и те же ленты со 2 по 5 для ежедневного резервного копирования (с понедельника по четверг = 4 ленты), ленты 6, 7 и 8 для еженедельного резервного копирования (другие пятницы, 6 + 7 + 8 = 3 ленты, заметим, что может быть пять пятниц в месяце), и ленту 1 и любую новую ленту для ежемесячной резервной копии (первая пятница каждого месяца, 1 + любые следующие 11 месяцев = 12 лент). Итого, если мы используем 8 лент (4 + 3 + 1 = 8), мы можем получить полную резервную копию в первом месяце и повторить процедуру с 8 лентами в следующие 11 месяцев, чтобы получить в итоге годовую индивидуальную полную резервную копию. Полные резервные копии должны делаться в определенный интервал, скажем, один месяц, и на наборе чистых лент, на которые записывается навсегда. Для этого типа процедуры Вы должны иметь 12 лент на 12 месяцев, которые содержат хронологию и изменения Вашей системы за год. Затем, Вы можете скопировать 12 лент с резервными копиями на отдельный компьютер, предназначенный для долгого хранения всех годовых резервных копий, и использовать их (12 лент) в новом году.

Восстановление файлов с помощью dump

Команда restore выполняет функцию противоположную функции dump. Она восстанавливает файлы и каталоги из резервных копий полученных программой dump. Может быть восстановлена полная резервная копия файловой системы, а затем и уровни добавочных резервных копий поверх нее. Также из полной резервной копии или из частичной могут быть восстановлены отдельные файлы и каталоги. Вы имеете ряд возможных команд и опций для восстановления данных из резервных копий, полученных программой dump. Ниже мы покажем Вам процедуру, которая использует все возможности программы restore с большинством возможных опций. Все это также сделано в диалоговом режиме. При диалоговом восстановлении файлов из дампа, программа restore предоставляет shell-подобный интерфейс, который позволяет пользователю перемещаться по дереву каталогов, выбирая файлы для извлечения, после чтения информации о каталогах из дампа. Далее мы покажем, что Вы увидите, при восстановлении каталога /home.

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

Перейдите в раздел, который хотите восстановить (каталог /home в нашем случае) используя следующую команду:

[root@deep /]# cd /home

Для восстановления файлов из дампа в диалоговом режиме используйте команду:

[root@deep /home]# restore -i -f /dev/st0
restore >

На Вашем терминале Вы увидите командную строку, для получения списка файлов текущего или заданного каталога используйте команду ls:

restore > ls
.:
admin/ lost+found/ named/ quota.group quota.user wahib/
restore >

Для изменения текущего рабочего каталога на заданный используйте команду cd (в нашем примере мы переходим в каталог wahib):

restore > cd wahib
restore > ls
./wahib:
.Xdefaults .bash_logout .bashrc
.bash_history .bash_profile Personal/
restore >

Для внесения текущего каталога или файла в список файлов для извлечения используйте команду add (если задан каталог, то в список вносится он и все его подкаталоги):

restore > add Personal/
restore >

Файлы, которые входят в список для извлечения, обозначаются символом *, когда они выводятся командой ls:

restore > ls
./wahib:
.Xdefaults .bash_logout .bashrc
.bash_history .bash_profile *Personal/

Для удаления текущего каталога или заданного файла из списка файлов для извлечения используйте команду delete (если задан каталог, тогда вместе с ним будут удалены и все его элементы).

ЗАМЕЧАНИЕ Наиболее подходящий способ для извлечения большинства файлов из каталога это добавить каталог в список для извлечения, а затем удалить ненужные файлы:

restore > cd Personal/
restore > ls
./wahib/Personal:
*Ad?le_Nakad.doc *Overview.doc
*BIMCOR/ *Resume/
*My Webs/ *SAMS/
*Contents.doc *Templates/
*Divers.doc *bruno universite.doc
*Linux/ *My Pictures/
restore > delete Resume/
restore > ls
./wahib/Personal:
*Ad?le_Nakad.doc *Overview.doc
*BIMCOR/ Resume/
*My Webs/ *SAMS/
*Contents.doc *Templates/
*Divers.doc *bruno universite.doc
*Linux/ *My Pictures/

Для восстановления всех файлов из списка для извлечения используйте команду extract (Restore спросит, какой том пользователь хочет монтировать. Наиболее быстрый путь извлечь несколько файлов это начать с последнего тома и закончить первым):

restore > extract
You have not read any tapes yet.
Unless you know which volume your file(s) are on you should start
with the last volume and work towards the first.
Specify next volume #: 1
set owner/mode for '.'? [yn] y

Для выхода из интерактивного режима программы restore после завершения восстановления файлов используйте команду quit:

restore > quit

ЗАМЕЧАНИЕ. О других методах восстановления информации из резервных копий, созданных программой dump читайте в страницах руководства (man).

Дополнительная документация

Для получения большей информации читайте следующие страницы руководства:

$ man dump (8) программа создания резервных копий файловой системы ext2.
$ man restore (8) восстановление файлов или файловых систем из резервных копий, созданных программой dump.
Создание резервных копий и восстановление через сеть

Резервное копирование позволяет Вам восстановить доступность и целостность информационных ресурсов после нарушений безопасности и несчастных случаев. Без резервного копирования Вы не сможете восстановить данные на компьютере после системных сбоев. Важно разработать план, который будет охватывать все Ваши серверы. Мы должны определить, файлы какой категории нужно резервировать. Например, Вы можете решить создавать резервные копии только файлов пользователей (/home), потому что поврежденная система должна быть восстановлена с оригинального дистрибутива.

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

Важно гарантировать, что резервные копии выполнены безопасным способом и что их содержимое остается защищенным. Мы рекомендуем, чтобы в своем плане Вы определили:

* Исходные данные шифруются перед отправкой их на устройство хранения.
* Данные хранятся на устройстве хранения в зашифрованном виде.
* Хранители информации находятся в физически безопасном устройстве, которое защищено от искусственных и естественных бедствий.

Пересылка Вашей резервной копии в безопасной манере через сеть.

В предыдущей секции мы показали Вам как сделать резервную копию с помощью утилит tar и dump на ленту или в файл на той же системе, где выполнялась процедура резервного копирования. Эти программы способны также делать резервное копирование через сеть. Чтобы осуществлять резервное копирование по сети надо убедиться, что у Вас установлены пакеты rmt и rsh. Утилита rmt предоставляет удаленный доступ к ленточному устройству программам, подобным dump и tar. Пакет rsh содержит набор программ, которые позволяют пользователям выполнять команды на удаленной машине, подключаться к удаленным машинам и копировать файлы между машинами (rsh, rlogin и rcp).

Так как rsh может быть легко взломана, а rmt зависит в своей работе от rsh, мы не инсталлировали эти пакеты (смотрите главу 2, "Инсталляция Вашего Linux-сервера" для получения большей информации). Поэтому мы должны найти другой путь для осуществления резервного копирования через сеть. Технология SSH поможет решить эту проблему (смотрите главу 11, "Программы обеспечения безопасности и сетевая безопасность"), потому что она позволяет копировать данные через сеть командой scp с поддержкой шифрования. Следующий метод использует возможности программы SSH для пересылки наших резервных копий, сделанных командами tar или dump в безопасной манере, используя утилиту scp.

Использование SSH-команды scp для передачи резервных копий через сеть.

Команда scp копирует файлы между хостами в сети. Она использует SSH для пересылки данных, используя ту же систему аутентификации и предоставляя тот же уровень безопасности, что и SSH. В отличии от утилиты rcp из пакета rsh, scp запрашивает пароль или парольную фразу. В нашем примере мы пересылаем файл резервной копии, созданный программой tar: процедура передачи файла, созданного командой dump аналогична.

Для копирования файла на удаленную систему используйте команду:

[admin@deep /]# scp localdir/to/filelocation user@host:/dir/for/file

Здесь localdir/to/filelocation это каталог, где находится резервная копия на локальном сервере, а user@host:/dir/for/file представляет, по порядку, имя пользователя (user) на удаленной машине, который будет владеть резервной копией, имя компьютера (host), куда Вы хотите отправить файл, и каталог на этом компьютере.

Реальный пример будет выглядеть так:

[admin@deep /]# scp -Cp /backups/deep-01Feb.tar
admin@backupserver:/archive/deep/deep-01Feb.tar
admin@backupserver's password:
deep-01Feb.tgz | 10479 KB | 154.1 kB/s | ETA: 00:00:00 | 100%

ЗАМЕЧАНИЕ. Опция C включает сжатие для более быстрой передачи файла, опция p говорит, что необходимо сохранить время модификации, время доступа и режимы доступа к файлу, что обычно неплохо. Важно заметить, что каталог dir/for/file на удаленном компьютере (/archive/deep в нашем примере) должен принадлежать username, заданному в команде scp (admin в нашем примере), или Вы получите следующее сообщение об ошибке:
scp: /archive/deep/deep-01Feb.tar: Permission denied.


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

[admin@deep /]# scp user@host:/dir/for/file localdir/to/filelocation

Здесь user@host:/dir/for/file представляет, по порядку, имя пользователя (user) на удаленной машине, который владеет резервной копией, имя компьютера (host), откуда Вы хотите получить файл, и каталог на этом компьютере, в котором лежит файл, а localdir/to/filelocation это локальный каталог в который Вы хотите поместить файл, полученный с удаленного компьютера. Реальный пример выглядит примерно так:

[admin@deep /]# scp -Cp admin@backupserver:/archive/deep/deep-01Feb.tar
/backups
admin@backupserver's password:
deep-01Feb.tgz | 10479 KB | 154.1 kB/s | ETA: 00:00:00 | 100%

Альтернативы tar и dump

AMANDA
Домашняя страница AMANDA: http://www.cs.umd.edu/projects/amanda.

BRU
Домашняя страница BRU: http://www.bru.com.

Статья хоть и давнишняя, но вполне рабочая! Единственное что ленту надо заменить другим устройством на которое вы собираетесь складывать образы.