Поддерживаем размер свободного пространства на уровне 80% от всего объема
На сервервере резервных копий стоит nas4free. На него ежедневно в автоматическом режиме закидываются несколько файлов архивов с баз данных. Если не следить за заполнением, то пространство легко переполнится и запись новых архивов будет невозможна.
Данный скрипт просто поддерживает заполнение пространства на уровне не более 80% Естественно порог задается. Если заполнение в какойто период достигнет значения более 80% то начинается удаление самых старых файлов.
В данном конкретнос случае удаление производится только из одного подкаталога, потому как в остальных количество архивов меньше и они совсем свежие.
Структура каталогов такова: в рабочем каталоге, который задается work_dir создаются каталоги в которые в свою очередь записываются свои архивы данных.
- free-space-check.sh
#!/bin/sh # Если заполнение ФС больше 80% начинаем работать occuped_space=80 work_dir="/mnt/backupdata/Backup" # Получаем заполненный объем пространства get_occuped_space() { perc_numb=`df -h | grep backup | awk '{print $5}'` ret_val=`echo $perc_numb | cut -c1-2` return $ret_val } # Цикл удаления по одному самому старому файлу из всех каталогов clear_one() { echo "Clearing one!" cd $work_dir dirs="ats_upr1" # for i in `ls -1` for i in $dirs do fd=`ls -1 -rt $i/ | head -n 1` echo "Deleting $i/$fd" rm $i/$fd done sync sleep 17 } get_occuped_space cur_occuped=$? # Удаляем до тех пор, пока объем не достигнет заданного while [ "$cur_occuped" -gt "$occuped_space" ] do clear_one get_occuped_space cur_occuped=$? echo "cur_occuped: $cur_occuped" done