Использование временных файлов и памяти при использовании tar для резервного копирования очень больших файлов со сжатием - PullRequest
0 голосов
/ 05 февраля 2020

При резервном копировании одного или нескольких _very_large_ файлов с использованием tar со сжатием (-j или -z) как GNU tar управляет использованием временных файлов и памяти?

Резервное копирование и сжатие файлов блок за блоком, файл за файлом или каким-либо другим способом?

Есть ли разница между тем, как следующие две команды используют временные файлы и память?

tar -czf data.tar.gz ./data/*
tar -cf - ./data/* | gzip > data.tar.gz

Спасибо.

1 Ответ

0 голосов
/ 06 марта 2020

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

Для каждого файла tar он помещается в архив, он вычисляет датаграмму информации о файле, которая содержит путь к файлу, его пользователя, права доступа и т. д. c., а также его размер. Это нужно знать заранее (поэтому поместить вывод потока в архив tar непросто без использования временного файла). После этой дейтаграммы следует простое содержимое файла. Поскольку его размер известен, и он уже является частью информации о файле, конец файла однозначен. Таким образом, после этого следующий файл в архиве может следовать непосредственно. В этом процессе никакие временные файлы не нужны ни для чего.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...