Резервное копирование информации

Резервное копирование информации с помощью программы tar.

Справка по tar 

Дмитрий Аленичев

Текст из книги: "ALT Linux снаружи. ALT Linux изнутри "
 В наше время резервное копирование информации необходимо хотя бы по той причине, что её потеря может сильно сказаться на вре мени, необходимом для восстановления испорченных или потерянных данных. Принятие простых мер поможет избежать необратимых последствий. Хотя своевременное резервное копирование и не спасёт вас от всех возможных проблем с испорченными данными, оно, по крайней мере, сделает возможным восстановление сохранённой информации. Создание резервных копий Количество информации, которую вы сможете восстановить, во многом зависит от того, как часто вы её сохраняете и насколько надёжно храните.
 Для начала определитесь с тем, где вы будите хранить backup- копии. Наилучшим решением для домашнего компьютера является использование отдельного жёсткого диска, но, к сожалению, не у всех есть такая возможность. Поэтому, скорее всего, вы будете сохранять копии в отдельной директории или на отдельном разделе жёсткого диска и периодически переписывать их на CD-R(W) или DVD-R(W).
 Не используйте некачественные носители для сохранения резервных копий! Информация может быть дороже денег, затраченных на покупку качественных носителей. Вне зависимости от того, где физически будет располагаться директория для сохранения копий, далее будем предполагать, что это директория /backup.
В простейшем случае скрипт для сохранение backup-копии будет выглядеть следующим образом:

 #!/bin/sh
tar -zcf /backup/home.tar.gz /home
tar -zcf /backup/etc.tar.gz /etc

В этом скрипте нет ничего особенного, но основные принципы он демонстрирует:
 • Сохранение и сжатие директории /home (домашние директории пользователей) в отдельный файл;
 • Сохранение и сжатие директории /etc (общие системные на- стройки) в отдельный файл.

Рассмотрим использованные ключи команды tar: -z
 Сжать файл с использованием gzip -c
 Создать новый архив -f
 Использовать указанный файл

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

 #!/bin/sh
 tar -zcvpf /backup/backup-‘date ’+%d-%B-%Y’‘.tar.gz \ --directory / --exclude=proc --exclude=var --exclude=mnt \ --exclude=usr --exclude=backup

В данном примере сохраняются не отдельные директории, а корневая директория /, исключая /proc, /var, /mnt, /usr и, конечно, /backup.
 Также к имени файла добавляется дата создания резервной копии.
 Дополнительно к уже рассмотренным были задействованы следующие ключи команды tar:
 -v Выводить список обработанных файлов
 -p Сохранять информацию о правах доступа --directory
  Директория для сохранения в архив --exclude
 
Исключить директорию при сохранении в архив Вы можете комбинировать оба предложенных варианта. Например, использовать первый скрипт ежедневно для ручного резервного копирования, а второй запускать по расписанию раз в неделю для полного сохранения.
Если вы решили использовать отдельный HDD для резервных копий, то вам подойдёт следующее решение.
 Для начала подключите предварительно отформатированный HDD. Далее подразумевается, что это /dev/hdb1, т. е. первый раздел на втором диске канала IDE1.
Создайте точку монтирования:

$ cd / $ mkdir backup

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

 #!/bin/sh
 mount /dev/hdb1 /backup
 #######################
 # ваш скрипт
 # #######################
 umount /backup

Со временем вы сами разработаете наиболее удобный и эффективный для вас способ проведения регулярного резервного копирования. Например, вы можете исключить директории (ключ --exclude) с музыкой и фильмами из списка резервируемых директории.

Резервное копирование по расписанию
Далее вам предстоит настроить запуск скрипта по расписанию.
 На самом деле нет ничего проще. Со времён ОС UNIX существует программа cron, предназначенная для выполнения действий по расписанию.
Откройте файл /etc/crontab и запишите новое правило:

 #мин час число месяц день недели команда
 0         1     *     *         5                 /usr/bin/full-backup

Это правило будет выполняться каждую пятницу в 1 час ночи. Выберите удобное для вас время и запишите нужные значения в соответствующих колонках. В примере предполагается, что командой резервного копирования является /usr/bin/full-backup Замените эту команду на имя вашего скрипта. Отчёт о выполнении работы будет отправлен пользователю root по почте (при условии, что у вас настроена локальная доставка почтовых сообщений).

Восстановление из резервных копий
Ниже приведены основные команды для восстановления файлов из архива резервной копии.
 Перед замещением существующего файла убедитесь, что замена действительно необходима!
Перед извлечением файлов из резервной копии бывает необходимым просмотреть содержимое архива. Для этого укажите ключ -t команды tar. Например, следующая команда позволит просмотреть содержимое архива /backup/backup-07-March-2005.tar.gz:

$ tar -ztvpf /backup/backup-07-March-2005.tar.gz

Не забывайте о конвейерах. Для поиска файла в архиве вы можете использовать программу GNU grep:
 $ tar -ztvpf /backup/backup-07-March-2005.tar.gz | grep smb.conf

Для извлечения файлов из архива предназначен ключ -x команды tar.
 Например, следующая команда восстановит все файлы из архива /backup/backup-12-March-2005.tar.gz:

 $ tar -zxvpf /backup/backup-12-March-2005.tar.gz

Для восстановления определённых файлов из архива укажите их имена после имени архива. Например, следующая команда восстановит файлы home/alenitchev/adt/backup.xml и etc/sendmail.cf из архива /backup/backup-17-March-2005.tar.gz:

 $ tar -zxvpf /backup/backup-17-March-2005.tar.gz \ home/alenitchev/adt/backup.xml etc/sendmail.cf

Перед восстановлением файла из резервной копии убедитесь, что восстанавливаемый файл не заменит более новый экземпляр.