Почему архив tar занимает 1 МБ?Разве это не должно занимать только 1 КБ? - PullRequest
1 голос
/ 13 марта 2019

Я читаю статью о разнице между файлами tar и zip и gz .

Мне трудно понять, как автор придумал 1 МБ в качестве размера архива tar:

Одна ключевая вещь, которую нужно запомнить, это простой tar-файл - это просто архив, данные которого не сжимаются. Другими словами, если вы скопируете 100 файлов размером 50 КБ, вы получите архив, размер которого составит около 5000 КБ. Единственный выигрыш, который вы можете ожидать, используя только tar, будет избегать потери пространства файловой системой, поскольку большинство из них выделяют пространство с некоторой степенью детализации (например, в моей системе однобайтовый файл использует 4 КБ дискового пространства, 1000 они будут использовать 4 МБ, но соответствующий архив tar «только» 1 МБ).

Разве размер архива не должен занимать около 1 КБ? Вот мои рассуждения:

Если вы сохраните дополнительное пространство, сохраненное файловой системой, то 1000 файлов X 1 байт на файл должны занимать только 1000 байтов или 1 КБ. Таким образом, архив tar должен иметь размер около 1 КБ. Почему это 1 МБ.

Я также протестировал такой сценарий в моей системе (MACOSX Terminal):

mkdir test
cd test
for i in {1..1000}; do echo "" > $i.txt; done
cd ..
tar -cf tarredFile.tar test
ls -l tarredFile.tar

Даже файловая система показывает 1 МБ для архива tar. В заключение я точно знаю, что мои рассуждения неверны, но я не знаю почему. Что я пропускаю?

1 Ответ

4 голосов
/ 13 марта 2019

Формат tar записан в 512-байтовых блоках. Каждый однобайтовый файл занимает 512 байт для заголовка, который содержит имя файла, и 512 байт для содержимого файла, из которых важен только один байт. Таким образом, минимум 1024 байта на файл.

В основном это нули, поэтому он сжимается немного. GZIP получает около 9K. Обратите внимание, что это все еще далеко от 1 КБ, потому что вам также необходимо хранить имена файлов в архиве.

...