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

Трябва да архивирам (или по друг начин да компресирам) повече от 2,7 милиона файла. (150GB)

С толкова много файлове обаче командата tar използва твърде много памет и системата ми се срива. Какво мога да направя?

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

Опитах се да го направя на партиди (няколко tar файла биха били ОК) въз основа на датата на създаване на файла и „find“, но „find“ заема още повече памет.


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
Сигурни ли сте, че всъщност не записвате файла в RAM, напр. към /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