Зачистка GlusterFS

Знадобилося тут видалити том GlusterFS, але без того, щоб грохнути фізично брік. Треба було просто звільнити на ньому місце. На томі жило кілька мільйонів дрібних файлів, терміни піджимали, рішення «в лоб не було».

У чому загвоздка: GlusterFS на бріку організовує дані хитрим способом. По-перше, відтворюється нормальна структура даних, така ж само, яку бачить користувач, коли монтує том. По-друге, створюється підкаталог .glusterfs, який містить хардлінки на ці файли, ну тільки з іншими назвами (відповідно до використовуваного алгоритму хешування). Якщо робити тупий rm -rf, find . -delete чи навіть rsync –delete, то нічого хорошого швидко не вийде, оскільки кожний файл буде видалятися як мінімум двічі (а то й більшу кількість разів), і місце на диску звільнятиметься тільки після видалення останнього хардлінка кожного файла.

Тому в голову прийшло спочатку робити truncate:

find . -type f -print -exec truncate --size=0 {} \;

А потім уже робити видалення пустих файлів:

rsync -av -H --progress --delete empty/ folder/

Тільки так можна швидко звільнити місце за наявності кількох мільйонів файлів із хардлінками.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

*

Цей сайт використовує Akismet для зменшення спаму. Дізнайтеся, як обробляються ваші дані коментарів.