tar, имеющий гораздо больший размер, чем содержащиеся в нем файлы, могу ли я сделать его меньше?

Вопрос или проблема

На Linux Mint 22 я создал версии tar как для GNU, так и для POSIX, содержащие 2 маленьких файла с:

$ tar --posix -cf archive-posix.tar auto-fan-control.cpp Makefile

$ tar         -cf   archive-gnu.tar auto-fan-control.cpp Makefile
$ file *.tar

archive-gnu.tar:   POSIX tar archive (GNU)
archive-posix.tar: POSIX tar archive

Удивительно, но оба tar имеют одинаковый размер 10240, тогда как мои файлы значительно меньше:

$ \ls -l *.tar

-rw-rw-r-- 1 vlastimil vlastimil 10240 Dec 22 10:41 archive-gnu.tar
-rw-rw-r-- 1 vlastimil vlastimil 10240 Dec 22 10:40 archive-posix.tar


$ \ls -l auto-fan-control.cpp Makefile 

-rw-rw-r-- 1 vlastimil vlastimil  863 Dec 22 01:10 auto-fan-control.cpp
-rw-rw-r-- 1 vlastimil vlastimil 1323 Dec 22 09:48 Makefile

То есть, мои файлы в сумме составляют всего 2186 байт, что в контексте обоих tar, занимающих ровно 10240 байт, нельзя просто объяснить включением некоторых метаданных, таких как CRC и тому подобное. На мой взгляд, должно быть какое-то выравнивание, если я правильно это назвал.

Так что, чтобы прояснить, ответы на этот вопрос НЕ отвечают на мой: Размер архива tar больше размера архивируемых файлов


Размышляя вслух, похоже, что минимальный размер tar составляет 10240 или его кратные, я прав?

Если я прав, просто из любопытства, есть ли что-то, что я могу сделать, чтобы уменьшить размер tar?

Спасибо.

С GNU tar на Debian 12:

$ tar --show-defaults
--format=gnu -f- -b20 --quoting-style=escape --rmt-command=/usr/sbin/rmt --rsh-command=/usr/bin/rsh

Изучая опцию -b:

-b, --blocking-factor=BLOCKS
Установить размер записи на BLOCKSx512 байт.

Таким образом, -b 20 дает вам блоки размером 10240 байт. Это минимальный размер архива GNU tar по умолчанию. Вы можете использовать -b для установки другого размера блока, но распространенный способ уменьшить размер архивов tar — это сжать их, например, с помощью gzip.

Таким образом, в действительности, то, что вы видите, — это выравнивание.

См. также руководство по GNU tar: Фактор блокировки архива.

Ответ или решение

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

Почему архивы tar имеют большой размер?

Когда вы создаете архив с помощью утилиты tar, она использует блоки фиксированного размера для хранения данных. В GNU tar по умолчанию устанавливается размер блока 20, что соответствует 10240 байтам (20 * 512 байт). Это означает, что даже если в архиве хранятся файлы размером всего 2186 байт, архив будет занимать минимум 10240 байт за счет внутреннего выравнивания и паддинга.

Основные факторы, способствующие увеличению размера tar-архивов:

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

  2. Метаданные: Архивы tar содержат метаданные о файлах, такие как права доступа, временные метки и имена файлов, которые также добавляют к общему размеру archiva.

  3. Отсутствие сжатия: Стандартные архивы tar не применяют сжатие, что делает неэффективным использование пространства для хранения.

Как уменьшить размер tar-архива?

Если вы хотите уменьшить размер создаваемых архивов tar, существует несколько подходов:

  1. Изменение блока размера с помощью параметра -b: Вы можете уменьшить блок на опционном уровне, используя параметр -b при создании архивов. Например, устанавливая размер блока в 1 (512 байт), вы сможете уменьшить размер архивов:

    tar -cf archive.tar -b 1 auto-fan-control.cpp Makefile

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

  2. Использование сжатия: Наиболее распространенный и эффективный способ уменьшения размера файлов tar — это сжатие. Вы можете использовать такие утилиты, как gzip, bzip2 или xz, чтобы значительно сократить размер архивов:

    tar -czf archive.tar.gz auto-fan-control.cpp Makefile

    Это также может значительно снизить использование дискового пространства.

  3. Объединение сжатия и tar: Многие современные дистрибутивы Linux поддерживают сочетание методов тарирования и сжатия в одном процессе, что позволяет вам автоматизировать создание архивов меньшего размера.

Заключение

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

Если у вас возникают дополнительные вопросы по этой теме или есть необходимость в более глубоком изучении, не стесняйтесь задавать их.

Оцените материал
Добавить комментарий

Капча загружается...