20 нояб. 2000 г.

Азы linux (для детей) урок 38

 Глава 9. Основные методы резервного копирования

Аварии рано или поздно случаются. В этой главе мы обсудим, как сохранить данные в безопасном месте с помощью других компьютеров, дискет, компакт-дисков и лент. Мы также рассмотрим наиболее популярные команды для сжатия и архивирования. По завершении этой главы вы будете знать, как: Создавать и распаковывать файловые архивы, а также получать о них сведения Обходиться дискетой и создавать загрузочный диск для вашей системы Записывать CD-диски Создавать обновляемые резервные копии Создавать Java-архивы Находить документацию по использованию других устройств и программ резервного копирования Как шифровать ваши данные.

Хотя Linux является одной из самых безопасных операционных систем существующих на данный момент, и даже если он проектировался, чтобы быть еще более надежным, данные могут быть потеряны. К потере данных чаще всего приводят ошибки пользователей, но иногда причиной является неисправность системы, такая как сбой питания или выход из строя диска, так что неплохо всегда иметь дополнительные копии личных и/или важных данных.

Подготовка данных

Архивирование с помощью tar

В большинстве случаев, сначала принято собирать все данные для резервного копирования в один архивный файл, который затем сжимают. Сам процесс архивирования представляет собой объединение всех перечисленных файлов и устранение бесполезных пустот. В Linux для этого часто используют команду tar. Эта команда была первоначально создана для архивирования данных на ленты, но она также может создавать архивы, известные как тарболы (tarballs).
У tar есть множество опций, наиболее важные из них приведены ниже:
-v: подробный вывод
-t: тест, показывающий содержимое архива
-x: извлечение архива
-c: создание архива
-f archivedevice: использование archivedevice в качестве источника/назначения для архива, устройство по умолчанию — первый накопитель на магнитной ленте (обычно /dev/st0 или что-то подобное)
-j: фильтр через bzip2, см. Раздел "Обновление бэкапов с помощью tar"
Перед опциями tar обычно пропускают штрих-префикс, что видно в примерах ниже.
Использование GNU tar для совместимости.
Архивы, созданные с помощью проприетарной версии tar в одной системе, могут быть несовместимы с tar на другой проприетарной системе. Это может доставить головную боль, например, если архив может быть восстановлен только в системе, которая больше не существует. Используйте GNU-версию tar на всех системах, чтобы ваш системный администратор не рыдал. Linux всегда использует GNU tar. При работе на других машинах UNIX, введите tar –help, чтобы выяснить, какую версию вы используете. Свяжитесь с системным администратором, если вы не заметите слова GNU.
В приведенном ниже примере архив создается и распаковывается.
gaby:~> ls images/
me+tux.jpg  nimf.jpg

gaby:~> tar cvf images-in-a-dir.tar images/
images/
images/nimf.jpg
images/me+tux.jpg

gaby:~> cd images

gaby:~/images> tar cvf images-without-a-dir.tar *.jpg
me+tux.jpg
nimf.jpg

gaby:~/images> cd

gaby:~> ls */*.tar
images/images-without-a-dir.tar

gaby:~> ls *.tar
images-in-a-dir.tar 

gaby:~> tar xvf images-in-a-dir.tar 
images/
images/nimf.jpg
images/me+tux.jpg

gaby:~> tar tvf images/images-without-dir.tar 
-rw-r--r-- gaby/gaby  42888 1999-06-30 20:52:25 me+tux.jpg
-rw-r--r-- gaby/gaby   7578 2000-01-26 12:58:46 nimf.jpg

gaby:~> tar xvf images/images-without-a-dir.tar 
me+tux.jpg
nimf.jpg

gaby:~> ls *.jpg
me+tux.jpg  nimf.jpg
Этот пример также иллюстрирует разницу между заархивированными каталогом и группой файлов. Желательно сжимать только каталоги, так как файлы могут не распаковаться вместе (архив может быть на другой системе, и вы можете не знать, какие файлы уже существовали, а какие те, которые из архива).
Если магнитный накопитель подключен к вашей машине и настроен системным администратором, имена файлов, оканчивающиеся на .tar заменяются именем устройства, например:
tar cvf /dev/tape mail/
Каталог почты и все файлы, которые он содержит, сжимаются в файл, который записывается сразу на носитель. Содержание листинга отображается, потому что мы использовали соответствующую опцию.

Обновление бэкапов с помощью tar

Программа tar поддерживает создание дополняющихся резервных копий, с помощью опции -N. С помощью этой опции можно указать дату, и tar будет проверять время изменения всех указанных файлов от этой даты. Если файлы будут изменены позже, они будут включены в бэкап. В приведенном ниже примере используется метка на предыдущий архив как значение даты. Сначала создается начальный архив и метка указывает на этот архивный файл. Затем создается новый файл, который принимает новую резервную копию, содержащую только этот новый файл:
jimmy:~> tar cvpf /var/tmp/javaproggies.tar java/*.java
java/btw.java
java/error.java
java/hello.java
java/income2.java
java/income.java
java/inputdevice.java
java/input.java
java/master.java
java/method1.java
java/mood.java
java/moodywaitress.java
java/test3.java
java/TestOne.java
java/TestTwo.java
java/Vehicle.java

jimmy:~> ls -l /var/tmp/javaproggies.tar
-rw-rw-r-- 1 jimmy   jimmy   10240 Jan 21 11:58 /var/tmp/javaproggies.tar

jimmy:~> touch java/newprog.java

jimmy:~> tar -N /var/tmp/javaproggies.tar \
-cvp /var/tmp/incremental1-javaproggies.tar java/*.java 2> /dev/null
java/newprog.java

jimmy:~> cd /var/tmp/

jimmy:~> tar xvf incremental1-javaproggies.tar
java/newprog.java
Стандартные ошибки перенаправляются в /dev/null. Если вы не сделаете этого, tar будет выводить сообщение для каждого неизмеренного файла, сообщая вам, что он не будет сбрасываться.
У такого способа работы есть неудобство, т.к. просматриваются метки на файлы. Скажем, вы загрузили архив в каталог, содержащий ваши бэкапы, и этот архив содержит файлы, которые были созданы два года назад. При сверке меток этих файлов с метками на начальный архив, новые файлы действительно окажутся старым для tar и не будут добавлены в резервную копию с помощью опции -N.
Лучшим выбором будет опция -g, которая создаст список файлов для резервного копирования. При обновлении резервной копии, файлы сверяются с этим списком. Вот как это работает:
jimmy:~> tar cvpf work-20030121.tar -g snapshot-20030121 work/
work/
work/file1
work/file2
work/file3

jimmy:~> file snapshot-20030121
snapshot-20030121: ASCII text
На следующий день, пользователь jimmy немного поработал с file3 и создал file4. В конце дня он создает новый бэкап:
jimmy:~> tar cvpf work-20030122.tar -g snapshot-20030121 work/
work/
work/file3
work/file4
Это очень простые примеры, но вы также можете использовать этот вид команды в работе хрона (см. Раздел "Cron и crontab"), который указывает, например, снимок файла для еженедельного резервного копирования и один для ежедневного резервного копирования. Снимки файлов должны быть заменены, в случае, когда создается полная резервная копия.
Более подробную информацию можно найти в документации к tar.
Важно знать.
Как вы могли, вероятно, заметить, tar хорошо работает, когда речь идет о простом каталоге с набором лежащих вместе файлов. Однако есть инструменты, которые легче в управлении, когда вам нужен архив целых разделов, дисков или больших проектов. Мы же рассказываем про tar потому, что это очень популярный инструмент для распространения архивов. Довольно часто бывает ситуация, когда вам необходимо установить программное обеспечение, входящее в так называемый "сжатый тарбол". См. Раздел "Использование rsync", чтобы узнать более простой способ выполнять регулярное резервное копирование.

Сжатие и распаковка с помощью gzip и bzip2

Данные, в том числе архивы, могут быть сжаты с использованием инструментов zip. Команда gzip добавит суффикс .gz к имени файла и удаляет исходный файл.
jimmy:~> ls -la | grep tar
-rw-rw-r-- 1 jimmy  jimmy    61440 Jun  6 14:08 images-without-dir.tar

jimmy:~> gzip images-without-dir.tar 

jimmy:~> ls -la images-without-dir.tar.gz 
-rw-rw-r-- 1 jimmy  jimmy    50562 Jun  6 14:08 images-without-dir.tar.gz
Распаковываются сжатые файлы с помощью опции -d.
bzip2 работает аналогично, но использует улучшенный алгоритм сжатия, поэтому файлы получаются меньшего размера. За дополнительной информацией обратитесь к info-страницам bzip2.
Пакеты софта для Linux часто распространяются как сжатые архивы. После распаковки такого архива разумно найти README и прочитать его. Он обычно содержат руководство для установки пакета.
Команда GNU tar понимает сжатые файлы. Используйте команду
tar zxvf file.tar.gz
для распаковки файлов tar.gz или .tgz. Используйте
tar jxvf file.tar.bz2
для распаковки tar-архивов, которые были сжаты c помощью bzip2.

Архивы Java

Проект GNU предоставляет также jar для создания Java-архивов. Это приложение Java, которая объединяет несколько файлов в один архивный файл JAR. Хотя он поддерживает обычное архивирование и сжатие, основанное на ZIP и ZLIB форматах сжатия, jar в основном предназначен для облегчения упаковки кода Java, апплетов и/или приложений в один файл. Скомбинированные в одном архиве, компоненты приложения Java, могут быть скачаны гораздо быстрее.
В отличие от tar, jar сжимает по умолчанию, независимо от других инструментов - потому что это в основном java-версия zip. Кроме того, jar позволяет на отдельные записи в архиве ставить подпись автора, что дает возможность проверять происхождение.
Синтаксис практически идентичен команде tar. Чтобы найти различия обратитесь к info-страницам jar.
tar, jar и символические ссылки.
То, на что следует обратить внимание в упомянутой документации, jar следует по символьным ссылкам. Данные, к которым эти ссылки указывают, будут включены в архив. По умолчанию tar делает резервную копию самой символьной ссылки, но это поведение можно изменить с помощью опции -h для tar.

Транспортировка данных

Сохранение копии ваших данных на другом компьютере является наиболее надежным способом создания резервных копий. См. Главу 10, Сеть для дополнительной информации по scp, ftp и др.
В следующем разделе мы обсудим иные устройства для резервного копирования.