Действительно ли указание механизма сжатия для tar непосредственно использует меньше промежуточного дискового пространства, чем сначала сжатие, а затем сжатие?

295
joelostblom

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

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

Сначала я выдвигал гипотезу, что, возможно, архив tar был создан и удален постепенно, так как он был сжат, но в то же время я помню, что где-то читал, что весь архив tar должен быть создан перед сжатием. Я не могу наблюдать какой-либо временный tar-файл, скрытый или нет.

Нужно ли использовать tar с флагом сжатия на самом деле меньше свободного дискового пространства, чем при первом использовании tar с последующей утилитой сжатия? Почему / почему нет (возможно, шаг за шагом, что делает tar + флаг сжатия)?

0

1 ответ на вопрос

2
BowlesCR

Yes, using the compression flags in the tar command directly (eg, tar czf) will reduce intermediate disk usage as it does not create any temporary uncompressed tar file, but rather uses pipes to pass the stdout of tar directly to stdin of the compression utility.

Depending on how pipes are implemented on your particular system, tar might appear to be writing a file, but that file will actually be a FIFO queue with no appreciable space consumption.

Without the flag:
Files > tar = original files + .tar the same size
.tar > gzip = .tgz = original files + .tar + .tgz
Total disk usage just before deleting the .tar is 2-3x the original files depending on the compression ratio.

With the flag:
Files > tar > gzip = files + .tgz
Worst case usage is 2x the original files.

Спасибо! Означает ли это, что архив tar создается и передается утилите сжатия в битах по несколько файлов tarred за раз, каждый из которых удаляется сразу после сжатия? Таким образом, вместо того, чтобы архивировать весь каталог, gzip сожмет файл, как только tar выполнит перевод этого файла в формат архива? joelostblom 9 лет назад 0
Конвейер tar-to-gzip - это поток ... как только tar записывает некоторые биты, gzip начинает их сжимать, не зная, что представляет собой файл. Более того, ваш флаг `--remove-files` заставит tar удалить каждый файл, как только tar завершит его обработку. BowlesCR 9 лет назад 1

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