2013-03-07 6 views
8

Я пытаюсь создать патч, используя две папки большого размера (~ 7 ГБ).память исчерпана: для больших файлов с использованием diff

Вот как я это делаю:

$ # дифф -Naurbw. ../other-folder> file.patch

Но, возможно, из-за размеров файлов, патч не получает создан и дает ошибку:

дифф: память исчерпала

Я попытался сделать пространство более 15 ГБ, но проблема остается.

Может ли кто-нибудь помочь мне с флагами, которые я должен использовать?

+2

Я googled "diff большие файлы linux" и нашел [это] (http://unix.stackexchange.com/questions/2150/diffing-two-big-text-files) среди множества других ссылок, вы могли бы на меньше всего притворялся, что сделал некоторые исследования ... это тоже не по теме. – Thomas

+1

Да, я пробовал поиск в Google и нашел некоторые изменения параметров, и ошибка «исчерпана память» все еще существует, даже если используется флаг «-speed-large-files». – pritam

+1

Как насчет того, чтобы различать их в несколько шагов? например разделить папки на, скажем, 1 ГБ блоков, diff, а затем конкатенировать патч, хотя я не уверен, что diff можно разделить так (так что вам может понадобиться дополнительная логика для применения патча). Почему вы в первую очередь сталкиваетесь с папками 7GB? Конечно, только некоторые файлы/папки внутри него изменились? – Thomas

ответ

12

Недавно я натолкнулся на это тоже, когда мне нужно было разделить два больших файла (> 5Gb каждый).

Я попытался использовать «diff» с различными параметрами, но даже --speed-large-files не имел никакого эффекта. Другие методы, такие как разделение файлов на более мелкие, с использованием xdelta или сортировка файлов в соответствии с this suggestion тоже не помогли. Я даже обнял очень мощную виртуальную машину (> 72Gb RAM), но все же получил эту ошибку memory exhausted.

я, наконец, получил работу, добавив следующий параметр sysctl.conf (sudo vim /etc/sysctl.conf):

vm.overcommit_memory=1 

Чтобы убедиться, что параметр действительно применяется вы можете запустить

sudo sysctl -p 

Не забудьте для изменения этого параметра, когда вы закончите!

+1

Спасибо за редактирование, я новичок в stackoverflow. Кроме того, некоторые объясняют этот параметр: vm.overcommit_memory имеет три значения (0,1,2) и устанавливает режим учета виртуальной памяти ядра. 'man 5 proc' 0: эвристический overcommit (это значение по умолчанию) 1: всегда overcommit, никогда не проверяйте 2: всегда проверяйте, никогда не перегружайте – Igor

+1

Мне действительно немного грустно в том, что такой интересный и нестандартный anwser, найденный мной и разделенный, сделал только 2 повтора для меня. в то время как история scho0l, как я играл с python, гораздо более скучно, дал мне гораздо больше @pritam – Igor

+1

Я согласен, интересен, нестандартен, и это сработало для меня! Сравнивая два файла на 70 ГБ, я вижу, например,317TB виртуальной и 150TB резидентной памяти ... сравнение, которое не могло быть выполнено до того, как даже с 250 ГБ оперативной памяти теперь завершено. Очень умно! –

Смежные вопросы