Библиотека сайта rus-linux.net
Четыре инструмента архивации для администратора сервера Linux
Оригинал: 4 Archiving Tools for Linux Server AdminsАвтор: Juliet Kemp
Дата публикации: 11 октября 2010 г.
Перевод: Д.Оводов
Дата перевода: январь 2011 г.
Существует множество приложений резервного копирования самых разных видов - от простых и бесплатных и до сложных и дорогих. Но все равно остаются большими проблемами скорость работы, простота и удобность использования созданных резервных копий.
Старыми испытанными методами архивного резервирования Linux/Unix продолжают пользоваться и современные администраторы серверов Linux; данные методы быстры, просты, удобны в использовании и легко поддаются управлению путем скриптов.
tar
Иногда кажется, что tar существовал всегда. Он объединяет наборы файлов в один большой архив (что, кстати, упрощает задачу обмена файлами между разными людьми), но он не сжимает эти файлы, следовательно - не экономит дисковое пространство. Однако, не смотря на это, tar поддерживает параметры командной строки, которые позволяют сжимать архивы tar при помощи gzip или bzip2 (это будет продемонстрировано ниже).
Когда tar создает архив, он объединяет вместе файлы, каждый со своим заголовком, содержащим метаданные: имя файла, владельца, права доступа к файлу и любую другую информацию, описывающую файл. Метаданные для мобильности помещаются в архив в формате ASCII. Таким образом, архив потом предоставит информацию о файле вместе с самими данными, содержащимися в этом файле.
Одна из случайных проблем, которые могут возникнуть во время извлечения файлов из архива, - извлечение файлов "как есть", как был создан архив, то есть прямо в текущую директорию (вместо того чтобы создать свою собственную директорию). В лучшем случае это может просто "загрязнить" директорию, в худшем же это может привести к перезаписыванию уже существующих файлов. Избежать такой неприятности можно, используя команду tar -tf file.tar
, чтобы получить листинг файлов перед их извлечением; затем можно переместить архив в новую пустую директорию, если это необходимо.
Команды tar:
tar -cf archive.tar mydirectory/
Создает тарболл archive.tar, содержащий директорию mydirectory/ (извлечение произойдет с созданием директории mydirectory).
tar -xf archive.tar
Извлекает содержимое тарболла archive.tar в текущую директорию.
tar -zxf archive.tar.gz
Извлекает содержимое тарболла, сжатого gzip. Используйте -j вместо -z для архива bzip2.
tar -vxf archive.tar
Извлекает содержимое тарболла с подробным выводом (отображает список всех извлекаемых файлов).
zip
zip может одновременно и архивировать, и сжимать файлы; то есть вы можете сжать различные файлы, поместив их при этом в архив. Он известен еще с 1998 года и метод его работы был реализован на многих платформах, следовательно, это один из самых мобильных вариантов (особенно - если вам необходим доступ к вашему архиву из системы Windows).
Архив zip включает в себя главную директорию с именами файлов и метаданными файлов, находящуюся в конце файла. Это очень ускоряет процесс вывода списка файлов, находящихся в архиве, поскольку нет необходимости читать весь архив, достаточно прочитать только одну директорию.
Компреccия в большинстве случаев от zip-архивов не требуется, но по умолчанию она используется. Обычно используется метод DEFLATE, который устраняет повторяющиеся строки и записывает короткие варианты общих символов (и длинные варианты коротких вариантов). Файлы сжимаются по-отдельности, что предпочтительнее, чем сжатие всего архива целиком. Это делает доступ к архиву быстрее, но, поскольку метаданные не сжимаются, архив с большим количеством маленьких файлов не будет настолько уменьшен, как архив с малым числом больших файлов.
Команды zip:
zip -r myarchive dir
Создает архив myarchive.zip с содержимым директории dir.
unzip myarchive.zip
Извлекает содержимое архива myarchive.zip в текущую директорию, создавая вложенные директории (используйте -j чтоб не создавать вложенных директорий).
gzip
gzip может сжимать файлы, но не архивировать. Однако он прекрасно работает, если его использовать вместе с архивирующим инструментом - как бывает на практике, gzip и tar отлично работают вместе.
gzip, как и zip, использует вариант алгоритма DEFLATE. Однако gzip сожмет tar-архив лучше, чем zip, потому что он сжимает архив в целом лучше, нежели каждый файл по-отдельности, он, таким образом, может найти (и устранить!) повторения как между файлами, так и внутри них.
Команды gzip:
gzip file.tar
Сжимает файл file.tar и создает file.tar.gz.
tar czf file.tar.gz mydir/
Архивирует и сжимает mydir/ в файл file.tar.gz.
gunzip file.tar.gz
илиgzip -d file.tar.gz
Распаковывает file.tar.gz
tar zxf file.tar.gz
Распаковывает архив file.tar.gz и извлекает из него файлы.
Кстати, для распаковки напрямую в стандартный вывод можно использовать gzcat (используется так же, как gunzip).
bzip2
bzip2, как и gzip, сжимает, но не архивирует. И, опять-таки, он отлично работает с tar, если вы хотите получить и архивацию, и сжатие. Bzip2 сжимает лучше, чем gzip, но процесс сжатия у bzip2 занимает больше времени, чем у gzip.
Bzip2 использует последовательность преобразований сжимаемых данных, наиболее важное из которых - преобразование Барроуза-Уилера (англ. Burrows-Wheeler transform - прим. перев.) Данное преобразование сортирует блоки файла так, чтобы максимально увеличить число повторяющихся символов. Цепочки повторяющихся символов заменяются символом и кодом, указывающим на длину цепочки. Также применяется кодирование Хаффмана (которое применяется и в алгоритме DEFLATE). Словом, все это занимает очень много времени.
Команды bzip2:
bzip2 file.tar
Сжимает файл file.tar и создает file.tar.bz2.
bunzip2 file.tbz
Распаковывает file.tbz и создает file.tar
tar jxf file.tbz
Распаковывает архив file.tbz и извлекает из него файлы.
Кстати, для распаковки напрямую в стандартный вывод можно использовать bzcat.
Если вы заинтересовались алгоритмами сжатия, можете также обратить внимание на 7-zip (консольная версия под Linux - p7zip), который использует алгоритм LZM. В большинстве случаев он сжимает лучше, чем bzip2, и быстрее распаковывает (зато дольше сжимает). Однако он намного менее популярен.