Вопрос или проблема
На 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
Установить размер записи наBLOCKS
x512 байт.
Таким образом, -b 20
дает вам блоки размером 10240 байт. Это минимальный размер архива GNU tar
по умолчанию. Вы можете использовать -b
для установки другого размера блока, но распространенный способ уменьшить размер архивов tar
— это сжать их, например, с помощью gzip
.
Таким образом, в действительности, то, что вы видите, — это выравнивание.
См. также руководство по GNU tar
: Фактор блокировки архива.
Ответ или решение
Вопрос о размере архивов, созданных с помощью утилиты tar, привлекает внимание IT-специалистов, особенно когда они замечают, что размер создаваемых архивов значительно превышает размер исходных файлов. Давайте подробно разберем это явление, а также обсудим возможности уменьшения размеров архивов.
Почему архивы tar имеют большой размер?
Когда вы создаете архив с помощью утилиты tar, она использует блоки фиксированного размера для хранения данных. В GNU tar по умолчанию устанавливается размер блока 20, что соответствует 10240 байтам (20 * 512 байт). Это означает, что даже если в архиве хранятся файлы размером всего 2186 байт, архив будет занимать минимум 10240 байт за счет внутреннего выравнивания и паддинга.
Основные факторы, способствующие увеличению размера tar-архивов:
-
Блочная структура: Каждый архив создается с фиксированной размерной структурой, что может приводить к «паддингу», чтобы заполнить блоки до их максимального размера.
-
Метаданные: Архивы tar содержат метаданные о файлах, такие как права доступа, временные метки и имена файлов, которые также добавляют к общему размеру archiva.
-
Отсутствие сжатия: Стандартные архивы tar не применяют сжатие, что делает неэффективным использование пространства для хранения.
Как уменьшить размер tar-архива?
Если вы хотите уменьшить размер создаваемых архивов tar, существует несколько подходов:
-
Изменение блока размера с помощью параметра
-b
: Вы можете уменьшить блок на опционном уровне, используя параметр-b
при создании архивов. Например, устанавливая размер блока в 1 (512 байт), вы сможете уменьшить размер архивов:tar -cf archive.tar -b 1 auto-fan-control.cpp Makefile
Однако помните, что очень маленькие блоки могут привести к увеличению общей длины архивов в некоторых случаях, поэтому важно протестировать разные параметры.
-
Использование сжатия: Наиболее распространенный и эффективный способ уменьшения размера файлов tar — это сжатие. Вы можете использовать такие утилиты, как
gzip
,bzip2
илиxz
, чтобы значительно сократить размер архивов:tar -czf archive.tar.gz auto-fan-control.cpp Makefile
Это также может значительно снизить использование дискового пространства.
-
Объединение сжатия и tar: Многие современные дистрибутивы Linux поддерживают сочетание методов тарирования и сжатия в одном процессе, что позволяет вам автоматизировать создание архивов меньшего размера.
Заключение
В заключение, размер архивов tar может иногда оказывать удивляющее влияние на пользователей, особенно когда архивы значительно больше, чем их содержимое. Понимание структуры архивов и возможности их настройки, а также применение методов сжатия, может помочь вам создать компактные и эффективно управляемые архивы, сохраняющие функциональность и доступность.
Если у вас возникают дополнительные вопросы по этой теме или есть необходимость в более глубоком изучении, не стесняйтесь задавать их.