Зачем мне tar один файл?


101

В моей компании мы загружаем снимок локальной базы данных разработки в виде db.dump.tar.gzфайла. Сжатие имеет смысл, но тарбол содержит только один файл ( db.dump).

Есть ли смысл архивировать отдельный файл или это .tar.gzпросто такая распространенная идиома? Почему не просто .gz?


5
По моему мнению, это просто вопрос соглашения. Когда люди видят файл с расширением GZ, их по умолчанию мышление, используя tar -zxvf. Но для тех, кто смотрит на имя файла и видит, что оно не имеет .tgzрасширения, вполне можно распаковать файл db dump. Поскольку я не знаю подробности алгоритмов сжатия, я не уверен, что tar выполняет какое-либо сжатие для разреженных файлов, таких как db dump, но для простых текстовых файлов прямой gzip файла имеет очень небольшое преимущество в размере по сравнению с tary first и gzip. составление файла
MelBurslan

3
Все, что нужно сделать для одного файла, это добавить несколько блоков метаданных в начало и конец файла. Фактические данные файла передаются через tar в компрессор без изменений. Таким образом, для большого файла разница в размере между простым сжатием и тарированием будет незначительной.
plugwash

В прошлом, когда я пробовал различные методы сжатия, я обнаружил, .tar.gzчто он превосходит большинство других распространенных методов. Я помню, что .tarэто было лучше, чем просто, но не могу вспомнить, было ли это лучше, чем просто .gz. По иронии судьбы .cabформат Window был лучшим из тех, что я пробовал, что было очень неожиданно.
Pharap

@Pharap tar- это не алгоритм сжатия, это формат архивирования
gardenhead

1
@gardenhead Ну, это объясняет, почему это не сработало.
Pharap

Ответы:


163

Преимущества использования .tar.gzвместо того .gz, что

  • tarхранит больше метаданных (разрешения UNIX и т. д.), чем gzip.
  • настройки могут быть легко расширены для хранения нескольких файлов
  • Файлы .tar.gz очень распространены, некоторые файлы могут озадачить только некоторые файлы. (см. комментарий MelBurslans )

Накладные расходы на использование tarтакже очень малы.

Если в этом нет особой необходимости, я все равно не рекомендую tar-файл для одного файла Существует множество полезных инструментов, которые могут напрямую обращаться к сжатым отдельным файлам (например zcat, zgrepи т. Д. , Которые также существуют для bzip2и xz).


35
Я не рассматривал аспект метаданных. Очень хороший момент
садовник

5
Если я вижу .gz, мой первый инстинкт это tar -zxf foo.gz. Запоминание того, что gzip - это даже команда, занимает еще несколько секунд.
bgStack15

2
@ bgStack15 FWIW вам не нужно z(или, если -на то пошло), большинство современных tars автоматически обнаружат, что файл должен быть распакован.
Дрюбенн

2
По умолчанию gzipбудут сохранены исходное имя файла и отметка времени. Вы можете использовать -Nопцию при распаковке, чтобы восстановить их.
Росс Ридж

@RossRidge спасибо, я снова удалил текст об оригинальном имени файла.
Джофель

63

Вы на самом деле задаете только половину вопроса. Другой вопрос: «Зачем мне сжимать файл tar с помощью gzip?». И ответ не только в том, gzipчто файл становится меньше (в большинстве случаев):

tar:

  • хранит имя файла и другие метаданные : режим, идентификатор владельца, идентификатор группы, размер файла, время модификации
  • сохраняет контрольную сумму (только для заголовка)

gzip:

  • может хранить исходное имя файла, но это необязательно
  • имеет контрольную сумму CRC-32 поверх исходных данных
  • это сжимает файл

Только tarвы не можете быть уверены, что ваши данные не были повреждены. С помощью только gzipвы не можете восстановить идентификатор пользователя / группы, время изменения и, возможно, не оригинальное имя файла.

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


Спасибо за разъяснение этого! Когда я читал tarстраницу википедии, я неправильно понял описание, чтобы обозначить, что контрольная сумма была для всего файла.
садовник

Мне кажется, что это правильный ответ. Я также добавил бы еще несколько причин, которые вы можете отредактировать, если согласитесь. 1) администратору не нужно платить за .tgz больше, чем за .tar или .gz: все это всего лишь одна команда 2) администраторы выполняют резервное копирование, копирование, перемещение, перемещение большого количества файлов по множеству разных причин; Резервные копии БД - только один из них. Они могут использовать один и тот же рабочий процесс, инструменты и команды для резервного копирования одного или нескольких файлов; так зачем использовать синтаксис команды gzip для случая, когда существует один файл?
Деви Морган

30

Существует довольно большое преимущество в использовании только- сжат GZIP текстовые файлы - содержимое могут быть доступны непосредственно с помощью инструментов командной строки , как less, zgrep, zcat.


Интересный момент, но вопрос о снимке базы данных, вряд ли будет текстовым файлом, а не только gzipped.
underscore_d

9
@underscore_d все мои дампы базы данных (в основном, mysql и pgsql) являются текстовыми дампами, отчасти потому, что они более пригодны для восстановления, если что-то случится, чтобы частично испортить дамп, и отчасти потому, что я могу предварительно обработать любое восстановление обычными инструментами (sed). , awk, perl и т. д.) если мне нужно. т.е. более надежный и более полезный, чем двоичные дампы. Компромисс заключается в том, что текстовые дампы, как правило, больше (кого это волнует - дисковое пространство дешево и у нас хорошее сжатие), а восстановление происходит значительно медленнее (но меньше, если вы оборачиваете восстановление в транзакцию).
КАС

1
В чем преимущество этих инструментов перед простой передачей выходного сигнала декомпрессора в простые инструменты?
CodesInChaos,

21

Я бы сказал, что люди просто не понимают, что могут использовать gzip / bzip2 / xz без tar. Возможно, потому что они происходят из фона DOS / Windows, где обычно сжатие и архивирование объединяются в одном формате ( ZIP , RAR и т. Д.).

Хотя в некоторых ситуациях использование tar может иметь небольшие преимущества из-за хранения метаданных или возможности добавления дополнительных файлов, есть и недостатки. С помощью простого файла gzip / bzip2 / xz вы можете распаковать его и передать распакованные данные прямо в другой инструмент (например, в вашу базу данных) без необходимости сохранять распакованные данные в виде файла на диске. С тарболлом это сложнее.


2
С GNU tar требуется только -O переключиться на вывод на стандартный вывод, так что я бы не сказал, что это намного сложнее!
Hyde

5
Первый абзац кажется достаточно правдоподобным для файлов, использующих tgzрасширение. Тем не менее, случай OP использует tar.gz- и если эти гипотетические бывшие пользователи Win / DOS похожи на меня, первое, что они говорят, глядя на такой файл: «Почему у него 2 расширения?». Затем они гуглят и быстро получают ответ, который конкретно объясняет, что tarи сжатие различны. ;-)
underscore_d

17

Существует важное отличие, которое может иметь tarзначение при некоторых обстоятельствах: помимо «метаданных», о которых @jofel упомянул в своем ответе, tar записывает имя файла в архиве. Когда вы извлекаете его, вы получаете оригинальное имя файла независимо от того, как называется архив.

В вашем случае архив tar и содержащийся в нем файл имеют связанные имена db.dump.tar.gzи db.tar, но предположим, что вы переименовываете файл tar в 20-Apr-16.dump.tgzили как угодно. Распакуйте это tar xvfz, и вы получите db.dump. Для сравнения разархивируй 20-Apr-16.dump.gzи получишь 20-Apr-16.dump. (Редактировать: как указано в комментариях, gzip также делает запись имени файла; но обычно он не используется при распаковке). tarАрхив может также содержать относительный путь к файлу , который помещает извлеченный файл в подкаталоге.

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


6
GZIP также записывает оригинальное имя файла.
psusi

8
Ага. Имя является необязательным в заголовке gzip - очевидно, его не будет, если вы сжимаете потоковый вывод команды - и большинство инструментов не восстанавливают его по умолчанию (например, вы должны gzip --nameявно использовать его при распаковке), но Вам не нужно использовать tar, чтобы получить постоянство имени файла.
Майлз

Спасибо за указание на это, я не знал этого. Тем не менее, поскольку это не стандартное поведение, точка зрения остается неизменной: при распространении файла в формате tar сохраняется исходное имя файла (и, возможно, относительный путь), без вмешательства получателя. Распространение (g) заархивированного файла не.
Алексис

8

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

Когда процесс вырос до такой степени, что создал файл размером 4,3 ГБ, он перевернулся и создал файл .dump.001 в дополнение к файлу .dump. Все сценарии просто продолжали работать.

То есть проактивная лень сисадмина определяется!


2

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

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


-1

Tar особенно полезен для нескольких файлов, не записанных в формальную файловую систему, так было всегда. Если по какой-либо причине есть только один файл, который будет записан, это не имеет никакого реального значения. Я могу добавить мой .tar.gz напрямую в / dev / sdx, независимо от раздела или файловой системы. Это может быть и лента.

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.