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

101

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

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

gardenhead
источник
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).

jofel
источник
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.

ejdi
источник
Интересный момент, но вопрос о снимке базы данных, вряд ли будет текстовым файлом, а не только 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 вы можете распаковать его и передать распакованные данные прямо в другой инструмент (например, в вашу базу данных) без необходимости сохранять распакованные данные в виде файла на диске. С тарболлом это сложнее.

plugwash
источник
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архив перемещается иначе, чем обычный файл.

Alexis
источник
6
GZIP также записывает оригинальное имя файла.
psusi
8
Ага. Имя является необязательным в заголовке gzip - очевидно, его не будет, если вы сжимаете потоковый вывод команды - и большинство инструментов не восстанавливают его по умолчанию (например, вы должны gzip --nameявно использовать его при распаковке), но Вам не нужно использовать tar, чтобы получить постоянство имени файла.
Майлз
Спасибо за указание на это, я не знал этого. Тем не менее, поскольку это не стандартное поведение, точка зрения остается неизменной: при распространении файла в формате tar сохраняется исходное имя файла (и, возможно, относительный путь), без вмешательства получателя. Распространение (g) заархивированного файла не.
Алексис
8

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

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

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

Criggie
источник
2

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

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

Томас Дики
источник
-1

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

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

mckenzm
источник