В настоящее время у меня есть точка монтирования btrfs со следующей структурой: #
/mountpoint/month/day/hourAs24/
и каждый листовой каталог содержит от 5 000 до 20 000 небольших файлов. Там храню файлы два месяца. Каждый день я удаляю каталог старше 60 дней с помощью команды
rm -R /mountpoint/month/day/
Для выполнения этой команды требуется много времени, а нагрузка на сервер во время выполнения команды чрезвычайно высока.
Было бы лучше создать подтома btrfs под /mountpoint/month/
на каждый день, а затем очистить подтомы одной командой?
Есть ли другие быстрые и легкие решения для избавления от файлов в одном каталоге btrfs с помощью одной команды?
Редактировать: Чтобы прояснить ситуацию. В структуре папки month
, day
и hourAs24
- это переменные, которые заменяются соответствующими значениями текущей даты и времени.
Изменить после решения: На моей тестовой машине он работает без сбоев. И все следующие работы работают с установленной точкой монтирования! Сначала я создаю нормальные каталоги на каждый месяц с
mkdir /mountpoint/month
Затем я создаю подтомы btrfs для каждого дня месяца с помощью
btrfs subvolume create /mountpoint/month/day
затем я создаю обычные каталоги на каждый час дня с
mkdir /mountpoint/month/day/hourAs24
И через 60 дней я могу легко очистить каталог дня
btrfs subvolume delete /mountpoint/month/day
(Теперь мне нужно подождать 60 дней, чтобы увидеть производительность на рабочем сервере)
Я бы сам пошел по маршруту подтомов. Вы просто не можете победить его по скорости, и если вы наклоните голову и немного прищуритесь, вы даже можете сказать, что это выглядит как "правильный" способ хранения файлов ...
Размонтирование, а затем удаление файловой системы с последующим созданием новой файловой системы и ее монтированием будет намного быстрее, чем удаление тысяч объектов в одной файловой системе. Операции с метаданными, необходимые для удаления, на несколько порядков выше, чем операции ввода-вывода, необходимые для массового удаления, а затем воссоздания нового.
LVM достаточно гибок, чтобы справиться с подобными вещами.
В качестве альтернативы, если это невозможно, вы можете пойти по пути создания больших файлов обратной связи в файловой системе BTRFS, которые вы затем отформатируете как BTRFS и подключите к своим каталогам. Не так быстро, как метод LVM, но все же заметно быстрее (или должен быть), чем отключение всех этих файлов. IIRC, BTRFS также поддерживает разреженные файлы, которые могут быть хорошим выбором для этого маршрута, если вы туда пойдете.
find
может быть быстрее:
find /mountpoint -mtime +60 -delete