Как ограничить использование памяти во время tar

Мне нужно заархивировать (или заархивировать) более 2,7 миллионов файлов. (150 ГБ)

Однако с таким количеством файлов команда tar использует слишком много памяти, и моя система дает сбой. Что я могу сделать?

tar -cf /path/filename.tar /path_to_file/

Я пытался делать это партиями (несколько tar-файлов было бы в порядке) на основе даты создания файла и «найти», но «найти» занимает еще больше памяти.


person user984003    schedule 18.08.2015    source источник
comment
Сколько памяти использует tar в первом случае? Сколько памяти доступно в системе?   -  person wallyk    schedule 18.08.2015
comment
Как выглядит структура каталогов, все файлы в каталоге верхнего уровня? Что такое файловая система? Что выводит df -i?   -  person Anatoly    schedule 18.08.2015
comment
Вы пробовали tar -c /path_to_file | pv -L 3k > out.tar?   -  person ClojureMostly    schedule 18.08.2015
comment
Вы уверены, что на самом деле не записываете файл в ОЗУ, например. на /tmp, настроенный как tmpfs, или во время работы с livecd?   -  person that other guy    schedule 18.08.2015


Ответы (1)


Не уверен, что это именно тот ответ, поскольку в нем не сказано, как явно снизить использование памяти tar, но...

Я думаю, вы можете указать программу сжатия, используемую с tar, для использования pigz (параллельный gzip), а затем указать количество используемых потоков, чтобы лучше управлять памятью. Может быть, что-то вроде:

tar cvf - paths-to-archive | pigz -p 4 > archive.tar.gz

где -p $NUM — количество ядер.

person steezeburger    schedule 18.08.2015
comment
Я предполагаю, что проблема заключается в кеше файловой страницы, а не в потреблении ЦП, где могут помочь потоки. - person Anatoly; 18.08.2015
comment
Вы совершенно правы. Ход моих мыслей был не в том направлении. Должен ли я удалить этот ответ? - person steezeburger; 18.08.2015