Назад | Перейти на главную страницу

Почему "tar -cSf file.tar source" не хватает памяти?

Я пытаюсь создать резервную копию 66 гигабайт на NAS, создав tarball, но tar -cSf ... завершает работу с ошибкой «память исчерпана» после гигабайта 62. Моя Linux-машина имеет гигабайт оперативной памяти и гигабайт пространство подкачки.

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

Эти данные удивительно устойчивы к резервному копированию. rsync в 4 раза медленнее, чем tar, потому что NAS не очень быстрый и завершает работу в середине с помощью «сброса соединения одноранговым узлом»; 'cp' не работает с общим ресурсом cifs, потому что он не может создавать специальные файлы. Есть ли способ лучше?

Не знаю почему, но могу предложить попробовать что-нибудь вроде

tar -L 32212254720 -f piece1.tar -f piece2.tar -f piece3.tar <path>

который будет создавать один файл на каждые 30 ГБ. Если вы когда-нибудь достигнете отметки в 120 ГБ, вам нужно будет добавить четвертый файл (-f piece4.tar)

Если это все еще не удается, вы можете попробовать с меньшими частями и написать сценарий для генерации командной строки (потому что командную строку с аргументами 80 -f было бы сложно написать :-))

Попробуйте передать параметр --hard-dereference. Это отключит отслеживание жестких ссылок, для которого требуется память, пропорциональная количеству резервных копий inodes. Также может быть интересно попробовать проанализировать процесс tar, пока он пытается создать резервную копию проблемного файла.

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

tar cf foo.tar *

или

tar czf foo.tar.gz *