Какой самый быстрый способ удалить тысячи файлов в файловой системе btrfs?

В настоящее время у меня есть точка монтирования btrfs со структурой, подобной этой:#

/mountpoint/month/day/hourAs24/

и каждый листовой каталог содержит от 5000 до 20000 маленьких файлов. Там я храню файлы в течение двух месяцев. Каждый день я удаляю каталог старше 60 дней с помощью команды

rm -R /mountpoint/month/day/

Эта команда выполняется много лет, а нагрузка на сервер во время выполнения команды чрезвычайно высока.

Будет ли лучше создать btrfs subvolumes под /mountpoint/month/ на каждый день, а затем очистить subvolumes в одной команде?

Существуют ли другие быстрые и легкие решения для избавления от файлов в одном каталоге btrfs с помощью одной команды?

Изменить: чтобы прояснить ситуацию. В структуре папки month, day а также hourAs24 переменные, которые заменяются соответствующими значениями текущей даты и времени.

Редактировать после решения: на моем тестовом компьютере это работает гладко. И все следующие работы живут с установленной точкой монтирования! Сначала я создаю нормальные каталоги для каждого месяца с

mkdir /mountpoint/month

Затем я создаю btrfs subvolumes для каждого дня месяца с

btrfs subvolume create /mountpoint/month/day

затем я создаю нормальные каталоги для каждого часа дня с

mkdir /mountpoint/month/day/hourAs24

И через 60 дней я могу легко очистить каталог дня

btrfs subvolume delete /mountpoint/month/day

(Теперь мне нужно подождать 60 дней, чтобы увидеть производительность на рабочем сервере)

3 ответа

Решение

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

Размонтирование, а затем удаление файловой системы с последующим созданием новой файловой системы и ее монтированием будет намного быстрее, чем удаление тысяч объектов в одной файловой системе. Операции метаданных, необходимые для удаления, на порядки выше, чем операции ввода-вывода, необходимые для массового удаления, а затем воссоздания новой.

LVM достаточно гибок, чтобы справляться с подобными вещами.

С другой стороны, если это невозможно, вы можете пойти по пути создания больших петлевых файлов в файловой системе BTRFS, которые вы затем форматируете как BTRFS и монтируете в свои каталоги. Не так быстро, как метод LVM, но все же заметно быстрее (или должно быть), чем отключение всех этих файлов. IIRC, BTRFS также поддерживает разреженные файлы, которые могут быть хорошим выбором для этого маршрута, если вы идете туда.

find может быть быстрее:

find /mountpoint -mtime +60 -delete
Другие вопросы по тегам