Назад | Перейти на главную страницу

Как лучше всего установить максимальный размер файлового каталога?

Я хочу создать каталог с максимальным размером, скажем, 500 МБ. Каталог может содержать любое количество и глубину подкаталогов.

Когда предел максимального размера каталога превышен, я хотел бы очистить каталог последнего доступного файла (ов), пока он не вернется ниже ограничения размера. В идеале пустые каталоги должны быть очищены во время этой операции очистки.

Это не обязательно должно происходить в реальном времени - то есть нормально, если каталог превышает максимум, если только он регулярно очищается.

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

Без лучшего предложения я планирую освежить свои навыки работы с bash и написать сценарий, который проверяет размер каталога через du -s, и если он обнаруживает, что каталог больше максимального, то он рекурсивно находит все файлы в каталоге, сначала сортирует их по дате доступа, а затем удаляет их один за другим, проверяя размер каталога и закрывая его, когда каталог обратно под мишень. Этот скрипт можно запустить как задание cron.

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

(Если вам интересно, почему я спрашиваю, я использую s3fs для монтирования корзин Amazon S3 в локальной файловой системе, и я исследую возможность использования опции use_cache для поддержки локального кеша. Поскольку сегменты S3 могут стать довольно большими, мне нужен способ разумного управления этим кешем.)

Редактировать: tmpreaper - еще один инструмент, о котором я только что узнал, и он довольно близок к выполнению своей работы. Кажется, что он может очищать папки только в зависимости от времени доступа (а не ограничения размера), но во всех остальных отношениях это хороший выбор.

Все, что вам нужно, это использовать скрипт, размещенный здесь (http://ubuntuforums.org/showthread.php?t=698649). Вам нужно только определить $ TrashPath.