17

Я унаследовал исследовательский кластер с ~ 40 ТБ данных в трех файловых системах. Данные растянуты почти на 15 лет, и, скорее всего, существует большое количество дубликатов, поскольку исследователи копируют данные друг друга по разным причинам, а затем просто держатся за копии.

Я знаю об инструментах удаления дубликатов, таких как fdupes и rmlint. Я пытаюсь найти тот, который будет работать с таким большим набором данных. Мне все равно, потребуются ли недели (или, может быть, даже месяцы) для сканирования всех данных - я, вероятно, все равно ограничу их, чтобы облегчить работу с файловыми системами. Но мне нужно найти инструмент, который либо как-то очень эффективен с оперативной памятью, либо может хранить все необходимые промежуточные данные в файлах, а не в оперативной памяти. Я предполагаю, что моя оперативная память (64 ГБ) будет исчерпана, если я просканирую все эти данные как один набор.

Сейчас я экспериментирую с fdupes на дереве 900 ГБ. Проходит 25% времени, и использование ОЗУ медленно растет все время, теперь оно составляет 700 МБ.

Или есть ли способ направить процесс на использование ОЗУ с отображением на диске, чтобы было гораздо больше доступного и не использовать системную ОЗУ?

Я использую CentOS 6.

3 ответа3

4

Или есть ли способ направить процесс на использование ОЗУ с отображением на диске, чтобы было гораздо больше доступного и не использовать системную ОЗУ?

Да, это называется диск подкачки. Вы, наверное, уже есть. Если вы беспокоитесь о нехватке ОЗУ, то увеличение это хорошее место для начала. Он работает автоматически, поэтому нет необходимости делать что-то особенное.

Я не буду беспокоиться о Fdupes. Попробуйте, это должно работать без проблем.

1

поиск дубликатов на основе хэш-ключа работает хорошо и очень быстро.

find -not -empty -type f -printf "%s\n" | sort -rn | uniq -d | xargs -I{} -n1 find -type f -size {}c -print0 | xargs -0 md5sum | sort | uniq -w32 --all-repeated=separate
0

Напишите быстрое приложение для обхода деревьев, либо нажав (hash, mtime)=> filepath в словарь, либо отметив файл для удаления, если запись уже существует. Хеш будет просто MD5, рассчитанным на первые N байтов. Вы можете сделать несколько разных проходов, с хешем над малым N и затем другим с хешем над большим N.

Возможно, вы могли бы сделать это менее чем за двадцать или тридцать строк Python (используя os.walk ()).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .