LINUX.ORG.RU

Добавление файла в большой архив tarом


0

0

Есть вот такой скрипт
Размер фвйла file.test ~ 1.2 Mb


#! /bin/sh

tar -cf test.tar file.test

date +%s

for i in `seq 1 100000`; do
cp file.test "file.$i"
tar -rf test.tar "file.$i"
rm "file.$i"
done

date +%s

Примерно на 600ом файле операция добавления файла в конец архива становится очень долгой. Причём скорость добавления файла падает пропорционально i. Пробовал на разный ФС (ext3, jfs, xfs). В чём может быть дело и как с этим бороться?

Мне (субъективно) кажется, что проблема с seekом в конец файла.

Может при создании ФС ключик какой надо или с tarом можно как-нибудь исхитриться?


>tar -rf test.tar "file.$i"

замени на:

tar -с "file.$i" >>test.tar

работать должно быстро но извлечение и листинг скорее всего будет заметно медленее

при извлечении/листинге не забудь опципю -i

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

А как-нибудь так, чтобы и извлечение быстрым было?

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

> работать должно быстро но извлечение и листинг скорее всего будет заметно медленее

я всегда думал что для листинга любого стандартного тар-архива нужно просканить весь архив

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

согласно man в конце архива пишется собственно список имен файлов так что если я првильно понял - просто ищется конец файла

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

> согласно man в конце архива пишется собственно список имен файлов так что если я првильно понял - просто ищется конец файла

ага, и как теперь это согласуется с командой:
>tar -с "file.$i" >>test.tar

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

Судя по hexdumpу архива, состоящего из нескольких файлов, никакого списка нет в принципе. Перед каждым файлом хранится его заголовок.

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

info tar:

However, `tar' archives incorporate an end-of-file marker which must be removed if the concatenated archives are to be read properly as one archive. `--concatenate' removes the end-of-archive marker from the target archive before each new archive is appended. If you use `cat' to combine the archives, the result will not be a valid `tar' format archive. If you need to retrieve files from an archive that was added to using the `cat' utility, use the `--ignore-zeros' (`-i') option. *Note Ignore Zeros::, for further information on dealing with archives improperly combined using the `cat' shell utility.

скорее всего я неправиильно понял содержимое метки eof. доки которая сформировала моя понимание под рукою нету

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