LINUX.ORG.RU
ФорумTalks

Почему минимальный tar aрхив занимает нехилых 10Кб ?

 ,


0

1

Собственно сабж.

# tar --version | grep tar
tar (GNU tar) 1.23

# echo 123 >123.txt
# tar -cf 123.tar 123.txt
# zip -0 123.zip 123.txt
  adding: 123.txt (stored 0%)

# ls -l
итого 16
-rw-rw-r-- 1 root root 10240 Авг 30 16:36 123.tar
-rw-rw-r-- 1 root root     4 Авг 30 16:35 123.txt
-rw-rw-r-- 1 root root   168 Авг 30 16:42 123.zip

Если создавать пустой - всё те же 10Кб

Пишу в talks ибо вопрос больше из любопытства

★★★
Ответ на: комментарий от zJes

При чем тут сжатие? ТС про сжатие ни слова не сказал.

Мне вот тоже интересно, откуда 10K, если там вроде бы 2K должно хватать на всё.

geekless ★★
()
Последнее исправление: geekless (всего исправлений: 1)
Ответ на: комментарий от bakagaijin

Специально для вас, что бы было что спросить. А что ?

TEX ★★★
() автор топика
Ответ на: комментарий от bhfq

Меня вполне устраивает четырехбайтный 123.txt

TEX ★★★
() автор топика

Забивать гвозди микроскопом тоже неудобно.

olibjerd ★★★★★
()
Ответ на: комментарий от bakagaijin

Вот теперь понятно.

Непонятно только нафига оно такое больше, и ни на что не похожее.

TEX ★★★
() автор топика

http://www.gnu.org/software/tar/manual/html_node/Standard.html

Each file archived is represented by a header block which describes the file, followed by zero or more blocks which give the contents of the file. At the end of the archive file there are two 512-byte blocks filled with binary zeros as an end-of-file marker. A reasonable system should write such end-of-file marker at the end of an archive, but must not assume that such a block exists when reading an archive. In particular GNU tar always issues a warning if it does not encounter it.

посмотри du. Может там одни нули?

nanoolinux ★★★★
()
Ответ на: комментарий от zJes

zip с _нулевым сжатием_ занимает всего 168 байт да.

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

Вопрос в том откуда в те давние времена когда рождался unix такой странный дефолт ?

TEX ★★★
() автор топика

man tar

user@localhost /tmp $ echo 123 > 123.txt
user@localhost /tmp $ tar cf test.tar 123.txt 
user@localhost /tmp $ gzip test.tar 
user@localhost /tmp $ ls -l test.tar.gz 
-rw-r--r-- 1 user user 128 авг 30 14:16 test.tar.gz
derlafff ★★★★★
()
Последнее исправление: derlafff (всего исправлений: 1)

ну ты возьми, и посмотри внутрь.

И да, на самом деле, минимальный тарбол занимает ровно 512 байт.

вот, любуйся:

$ hexdump -C test.tar 
00000000  74 65 73 74 2e 74 78 74  00 00 00 00 00 00 00 00  |test.txt........|
00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000060  00 00 00 00 30 30 30 30  36 34 34 00 30 30 30 31  |....0000644.0001|
00000070  37 35 30 00 30 30 30 30  31 34 34 00 30 30 30 30  |750.0000144.0000|
00000080  30 30 30 30 30 30 30 00  31 32 32 31 30 30 37 30  |0000000.12210070|
00000090  37 30 33 00 30 31 31 32  34 32 00 20 30 00 00 00  |703.011242. 0...|
000000a0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000100  00 75 73 74 61 72 20 20  00 64 72 62 00 00 00 00  |.ustar  .drb....|
00000110  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000120  00 00 00 00 00 00 00 00  00 75 73 65 72 73 00 00  |.........users..|
00000130  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00002800
всё ясно?

emulek
()
Ответ на: комментарий от nanoolinux

Естественно нули. Вопрос и нафига они там ? Кто и почему вдруг внезапно решил что Blocking-Factor должен быть равен 20-ти ?

TEX ★★★
() автор топика
Ответ на: комментарий от emulek

И да, на самом деле, минимальный тарбол занимает ровно 512 байт.

Вот ТС и спрашивает, почему там еще несколько килобайт нулей. Вон выше уже дали ссылку с ответом.

geekless ★★
()
Ответ на: комментарий от TEX

Я больше о том, что у зипа и тара немного разные предназначения. Коэффициент сжатия ничего не меняет.

zJes ★★
()
Ответ на: комментарий от AiFiLTr0

Мне с ним вообще ничего не нужно делать.

Мне хотелось бы понять нафига оно такое большое. Когда могло быть спокойно куда меньше и даже помещаться в «inode». Раньше отцы unix вроде не были замечены в расточительстве. А тут бац и 10Кб на нули потратили

TEX ★★★
() автор топика
Ответ на: комментарий от TEX

zip с _нулевым сжатием_ занимает всего 168 байт да.

обосраться и не жить. Мы теперь будем мерять архивы с файлом «123» внутри? Прими разупорин, СРОЧНО.

emulek
()
Ответ на: комментарий от TEX

Вопрос в том откуда в те давние времена когда рождался unix такой странный дефолт ?

ты точно УПОРОТ

у тебя tar какого года, детка??

emulek
()
Ответ на: комментарий от TEX

Я конечно тех времён не застал, но вангую, что так было проще 10 килограммовые бобины с магнитной лентой позиционировать на начало нужного файла например.

nanoolinux ★★★★
()
Последнее исправление: nanoolinux (всего исправлений: 1)
Ответ на: комментарий от nanoolinux

Окай, если напрячь память то был еще спектрум с кассетами.

Там 10Кб на кассете занимали нехило. Многовато для позиционирования

TEX ★★★
() автор топика
Ответ на: комментарий от TEX

Мне хотелось бы понять нафига оно такое большое.

ну посмотри в changelog'е или в сырцах, почему они как минимум 20 блоков запихали. Возможно просто от балды.

И да, в древние времена tar был меньше, ЕМНИП в один блок 512 байт. А сейчас «подрос».

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

Когда могло быть спокойно куда меньше и даже помещаться в «inode».

1. зачем ты таришь такие мелкие файлы? Почему не as is?

2. читай про sparse файлы. Эти нули всё равно места не занимают. ФС их просто не хранит. (в силу мелкости твоего файла таки хранит, просто не выгодно экономить на спичках. Мало того, ещё и резервирует восемь блоков после файла, потому он занимает даже не 4*4К, как пишет du, а 12*4К байт. Ибо такой tar скорее всего будет расти)

emulek
()
Ответ на: комментарий от TEX

И тот и другой архив.

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

mm3 ★★★
()
Ответ на: комментарий от bhfq

Создай 18 мб файл с текстом в кодировке latin1. Получишь 30 мб tar.

Что-то я сомневаюсь что tar такое сделает. Пруфлинк в студию.

true_admin ★★★★★
()
Ответ на: комментарий от TEX

Там 10Кб на кассете занимали нехило. Многовато для позиционирования

а вот и нет
игруля в 40кил занимала 5 минут прослушивания
таким образом на двух сторонах кассеты игр было столько-же, сколько и песен в каком-нибудь альбоме музычки
то есть примерно 10-12

q11q11 ★★★★★
()
Последнее исправление: q11q11 (всего исправлений: 1)
Ответ на: комментарий от TEX

Кто и почему вдруг внезапно решил что Blocking-Factor должен быть равен 20-ти ?

Ты по ссылке точно ходил?

tar uses by default a blocking of 20 for historical reasons

Вопрос и нафига они там ?

По ссылке опять есть ответ:

When handling various tapes or cartridges, you have to take care of selecting a proper blocking, that is, the number of disk blocks you put together as a single tape block on the tape, without intervening tape gaps. A tape gap is a small landing area on the tape with no information on it, used for decelerating the tape to a full stop, and for later regaining the reading or writing speed. When the tape driver starts reading a record, the record has to be read whole without stopping, as a tape gap is needed to stop the tape motion without losing information.

Если проблемы с английским, то кратко:
1. На ленту пишется так называемыми записями по несколько блоков, между которыми оставляются промежутки без информации
2. Запись пишется и читается только целиком.
3. Промежуток нужен для того, чтобы лента успела остановиться до начала следующей записи

redgremlin ★★★★★
()
fantom@buldozer:/tmp$ touch ./123.txt
fantom@buldozer:/tmp$ tar cf ./ttt.tar ./123.txt 
fantom@buldozer:/tmp$ ll ./ttt.tar 
-rw-rw-r-- 1 fantom fantom 20480 Aug 30 19:04 ./ttt.tar

хм

Deleted
()
/tmp > touch 1       
/tmp > tar cf 1.tar 1
/tmp > du 1.tar      
12	1.tar
/tmp > 
vasily_pupkin ★★★★★
()
Ответ на: комментарий от wxw

Внезапно, для архивации файлов. Кстати, в линуксе это де-факто стандарт.

router ★★★★★
()
Ответ на: комментарий от mm3

А zip, созданный на много позднее, это уже метод сжатия поддерживающий сохранение нескольких файлов. Чуешь разницу?

1-e man zip, в частности параметр -0

2-е zip это архив с необязательным сжатием содержимого файлов.

3-е в примере специально приведен код с опцией -0 и сообщением stored 0%.

4-е расскажи чем принципиально отличается tar от zip, если я сначала сожму файлы, тем же gzip, и уже затем помещу в tar ?

5-е какое отношение, всё вышеперечисленное, имеет к формату tar который по сути представляет собой fs из «кластеров» в 20 секторов в 512 байт ?

Чуешь разницу?

TEX ★★★
() автор топика
Ответ на: комментарий от Kosyak

Это уже на внутреннем уровне fs, на логическом он занимает 4 байта и 4092байт хвоста.

Другой вопрос отчего в tar дефолт такой странный ? Не 2048, не 4096 как в большинстве fs, не 8192, не 16384 - а именно 10240 ?

TEX ★★★
() автор топика
Ответ на: комментарий от wxw

Я не в восторге от tar. Но альтернативы еще хуже. Если не по функциям, так по интеграцию в linux среду.

TEX ★★★
() автор топика
Ответ на: комментарий от redgremlin

Если проблемы с английским, то кратко:

Лажа.

1. Физический сектор ленты не равен 10Кб

2. Зависит от реализации программы, в большинстве случаев размер минимального блока (кластера) программы больше минимального «блока» устройства.

3. Промежуток в 10Кб это дохрена. У спектрума всё ПЗУ помещалось в 16Кб

TEX ★★★
() автор топика

минимальный tar должен занимать 512 байт на заголовок, тело с выравниванием по 512, то есть 123 это еще 512 и два блока-заполнителя в конце, еще 1024. итого 2 кб.

zip здесь за каким хреном?

chg ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.