Несколько процессов tar, пишущих в тот же архивный файл сразу

Использовать расширение кривой?

curl ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.{548..1000}

6
13.09.2017, 02:54
3 ответа

GNU tar --append:

tar -f foo.tar --append newfiles

К сожалению, он читает полный файл tar.

.
0
27.01.2020, 20:26

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

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

В Unix есть функция, предназначенная для размещения группы файлов, которые записываются самостоятельно. Это называется каталог.

Есть очень мало случаев, когда вы могли бы получить что-нибудь из несжатого архива через каталог. В некоторых случаях чтение может быть немного быстрее; это является внутренним следствием формата каталога (где каждый элемент файла является указателем на его содержимое) в отличие от формата архива (где каждый элемент файла является непосредственно его содержимым), что как раз и делает возможным построение каталога кусочками. Преобразование дерева каталога в архив является постобработкой, которая должна выполняться последовательно.

5
27.01.2020, 20:26

Можно начать создание финального файла tar до того, как будут созданы все выходные файлы: Может быть, это даст вам нужную скорость.

Вы можете вызвать tar следующим образом:

tar -cf foo.tar -T file-list

файл-список будет FIFO. Вам нужен скрипт, который обнаруживает

  1. новых файлов в исходном каталоге (inotifywatch)

  2. когда каждый из этих новых файлов завершается (fuser)

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

3
27.01.2020, 20:26

Теги

Похожие вопросы