У меня есть сервер с огромной файловой системой, который используется для непрерывной записи и чтения без сбоев и должен быть постоянно активен.
Моя цель - создать задание cron, которое удаляет пустые папки и файлы по имени и старше X дней. Очевидный ответ - использовать find -name -mtime -delete
но он использует слишком много дисковых ресурсов и вызывает ожидание ввода-вывода, а другие программы пропускают свои проверки из-за зависания сервера.
Есть ли какой-нибудь простой в использовании инструмент, который выполняет такую работу? может ограничить использование диска? что-то еще, о чем я не думал?
Использовать ionice
, чтобы снизить приоритет вашей команды find и минимизировать влияние на другие приложения.
ionice -c 3 find -name -mtime -delete
-c 3
- это класс "простаивающий", и программа, работающая с приоритетом idle io, получит дисковое время только тогда, когда никакая другая программа не запросила дисковый ввод-вывод (в течение определенного периода отсрочки). Влияние простаивающих процессов ввода-вывода на нормальную работу системы должно быть нулевым.
Если этого никогда не произойдет (вероятно, в системе, которая видит использование 24x7), попробуйте, например, -c 2 -n 7
для наименьшего приоритета наилучшего усилия
Большинство файловых систем не обрабатывают изменения миллионов файлов эффективно, они выполняют огромное количество операций ввода-вывода метаданных. Надеюсь, у вас меньше 100 000 файлов в каталоге.
Регулировка приоритетов io и / или контрольных групп может заставить систему реагировать, но может привести к тому, что эта очистка не будет завершена в разумные сроки.
В Linux LVM вы можете добавить слой кеширования с lvmcache. Добавьте самый быстрый SSD, который у вас есть, чтобы он мог обслуживать несколько тысяч операций ввода-вывода в секунду. Дросселирование, вероятно, все еще необходимо, если вам нужно, чтобы время отклика ввода-вывода не ухудшалось.