Это старая версия документа.


Сценарии Shell

Один из простейших вариантов резервного копирования системы - использование shell сценария. Например, сценарий может быть использован для настройки какие каталоги требуют резервного копирования и для передачи этих каталогов в качестве аргументов утилите tar, которая создает архивные файлы. Архивный файл может быть затем перемещен или скопирован в другое место. Архив также может быть создан на удаленной файловой системе, такой как NFS.

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

Простой Shell сценарий

Следующий shell сценарий использует tar для создания архивного файла на удаленно смонтированной файловой системе. Имя архива определяется с помощью дополнительных утилит командной строки.

#!/bin/sh
####################################
#
# Backup to NFS mount script.
#
####################################

# What to backup. 
backup_files="/home /var/spool/mail /etc /root /boot /opt"

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

# Create archive filename.
day=$(date +%A)
hostname=$(hostname -s)
archive_file="$hostname-$day.tgz"

# 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
~~ **$backup_files**: переменная для перечисления какие каталоги вы желаете сохранять. Список может быть изменен под ваши требования.
~~ **$day**: переменная, содержащая день недели. Она используется для создания архивных файлов на каждый день недели, обеспечивая историю резервного копирования на семь дней. Существуют иные способы получения такого результата, включая использование утилиты **date**.
~~ **$hostname**: переменная, содержащая короткое сетевое имя системы. Использование сетевого имени в имени архива позволяет вам помещать ежедневные архивы от разных систем в один каталог.
~~ **$archive_file**: полное имя архива.
~~ **$dest**: место расположения архивного файла. Каталог должен быть создан и в данном случае смонтирован до выполнения сценария резервного копирования. Смотрите раздел [[wiki:руководство_по_ubuntu_server:файловые_сервера:nfs|Сетевая файловая система (NFS)]] для уточнения деталей использования NFS.
~~ **status messages**: необязательные сообщения, выводимые в консоль с использованием утилиты **echo**.
~~ **tar czf $dest/$archive_file $backup_files**: команда **tar**, используемая для создания архивного файла.
  ~~ **c**: создание архива.
  ~~ **z**: пропускание архива через утилиту сжатия **gzip**.
  ~~ **f**: вывод в архивный файл. В противном случае **tar** будет посылать результат в STDOUT.
~~ **ls -lh $dest**: необязательный оператор, выводящий **//-l//** длинный вариант списка в **//-h//** читаемом виде целевого каталога. Это удобно для быстрой проверки размера архивного файла. Эта проверка не заменяет тестирования целостности архивного файла.

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

Выполнение сценария

Выполнение сценария из терминала

Простейший способ выполнить приведенный выше сценарий - это скопировать его содержимое в файл. Например, backup.sh. Затем ввести в терминале:

sudo bash backup.sh

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

Выполнение с помощью cron

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

cron настраивается через записи в файле crontab. Файлы crontab разделяются на поля:

# m h dom mon dow   command
  1. m: минуты запуска команды, от 0 до 59.

  2. h: час запуска команды, от 0 до 23.

  3. dom: день месяца для выполнения команды.

  4. mon: месяц даты выполнения команды.

  5. dow: день недели для выполнения команды, от 0 до 7. Воскресенье может быть обозначено как 0 так и 7, оба значения допустимые.

  6. command: выполняемая команда.

To add or change entries in a crontab file the crontab -e command should be used. Also, the contents of a crontab file can be viewed using the crontab -l command.

To execute the backup.sh script listed above using cron. Enter the following from a terminal prompt:

sudo crontab -e

Using sudo with the crontab -e command edits the root user's crontab. This is necessary if you are backing up directories only the root user has access to.

Add the following entry to the crontab file:

# m h dom mon dow command 0 0 * * * bash /usr/local/bin/backup.sh

The backup.sh script will now be executed every day at 12:00 am.

The backup.sh script will need to be copied to the /usr/local/bin/ directory in order for this entry to execute properly. The script can reside anywhere on the file system, simply change the script path appropriately.

For more in-depth crontab options see References.

Восстановление из архива

Once an archive has been created it is important to test the archive. The archive can be tested by listing the files it contains, but the best test is to restore a file from the archive.

  To see a listing of the archive contents. From a terminal prompt type:
  tar -tzvf /mnt/backup/host-Monday.tgz
  To restore a file from the archive to a different directory enter:
  tar -xzvf /mnt/backup/host-Monday.tgz -C /tmp etc/hosts
  The -C option to tar redirects the extracted files to the specified directory. The above example will extract the /etc/hosts file to /tmp/etc/hosts. tar recreates the directory structure that it contains.
  Also, notice the leading "/" is left off the path of the file to restore.
  To restore all files in the archive enter the following:
  cd /
  sudo tar -xzvf /mnt/backup/host-Monday.tgz

This will overwrite the files currently on the file system.

Ссылки

  For more information on shell scripting see the Advanced Bash-Scripting Guide
  The book Teach Yourself Shell Programming in 24 Hours is available online and a great resource for shell scripting.
  The CronHowto Wiki Page contains details on advanced cron options.
  See the GNU tar Manual for more tar options.
  The Wikipedia Backup Rotation Scheme article contains information on other backup rotation schemes.
  The shell script uses tar to create the archive, but there many other command line utilities that can be used. For example:
      cpio: used to copy files to and from archives.
      dd: part of the coreutils package. A low level utility that can copy data from one format to another.
      rsnapshot: a file system snapshot utility used to create copies of an entire file system.
      rsync: a flexible utility used to create incremental copies of files.