Як вивести копію даних 40TB?


17

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

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

Я зараз експериментую з fdupes на дереві 900 Гб. Це 25% шляху, і використання оперативної пам’яті весь час повільно повзає, тепер це 700 Мб.

Або є спосіб направити процес на використання дискової оперативної пам’яті, відображеної на диску, щоб було набагато більше доступних і не використовується системна ОЗУ?

Я запускаю CentOS 6.


Файлові системи - це XFS, якщо це актуально. Тобто я знаю, що це не фс з такими можливостями, як XFS.
Майкл Штауфер

чому ви в першу чергу турбуєтесь про оперативну пам’ять? ОС має власні алгоритми управління пам’яттю, і те, що використання оперативної пам’яті «повзає», не означає, що вона зрештою з’їсть всю вашу оперативну пам’ять. Я впевнений, що цього не станеться.
Art Gertner

1
Я не знаю, як працюють спеціалізовані інструменти, але ви можете обчислити хеш для кожного файлу та записати його разом із шляхом до файлу, а потім сортувати за хешами та дублювати. Це можна зробити за допомогою простого сценарію Python або, можливо, навіть у Bash. Використання оперативної пам’яті повинно бути мінімальним, крім кроку сортування, але, мабуть, ви можете використовувати якийсь модифікований об'єднаний елемент, щоб тримати його досить низьким.
gronostaj

1
Так, виділений інструмент обчислює хеш, але спочатку зробіть такі речі, як переглянути розмір файлу, а хеш - лише початок файлів, щоб обмежити кількість повних хешів, які потребують обчислення.
Майкл Штауфер

Що стосується оперативної пам’яті, мене хвилювало сповільнення роботи сервера файлів - дивіться мій коментар нижче до відповіді.
Майкл Штауфер

Відповіді:


4

Або є спосіб направити процес на використання дискової оперативної пам’яті, відображеної на диску, щоб було набагато більше доступних і не використовується системна ОЗУ?

Так, це називається своп-накопичувач. Напевно, ви вже є. Якщо ви турбуєтеся про те, що вичерпаєте оперативну пам’ять, то збільшуйте це хороше місце для початку. Він працює автоматично, хоча немає нічого особливого робити.

Я б не турбувався про фдупів. Спробуйте, це повинно працювати без проблем.


Я думав, що покладання на своп уповільнить роботу всієї системи - це зайнятий сервер файлів. Але, може, не вистачає турбуватися? Я міг би використати ulimit, щоб запобігти використанню процесу в будь-якому випадку більше, ніж системний оперативної пам’яті, як помилку. Але здається, що krowe та smc не думаю, що 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

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

Можливо, ви могли це зробити за менш ніж двадцять чи тридцять рядків Python (використовуючи os.walk ()).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.