Monitoring velikosti adresáře (zálohy)

Úvodem

Script má široké využití a může mít různé podoby.
Vznikl za účelem hlídání velikosti adresáře (lvm jednotky velikosti 120Gb), do kterého si virtuální mašiny samy pře NFS provádí své zálohy jakéhokoliv typu.
Tento adresář je ručně (scriptem přes rsync) kopírován na externí disk omezené velikosti (75Gb). Tento disk je plně offline a připojuje se externě pře USB jendou za čas (cca. 1x týdně).
Jedná se o zálohu dat, která umožní i pří 'výbuchu' počítače uvést vše do původního (zálohovaného) stavu.
Data, jak už to bývá, rostou i když nemusí, a tento script upozorní včas, že je třeba prověřit velikost zálohy, či pořídit větší disk.
Script se spouští v čase, kdy jsou zálohy všech strojů již provedeny (optimisticky určeno 2hodiny po spuštění poslední zálohy, která trvá většinou 15min).
Script může mít větší režii v závislosti na adresářové struktuře a počtu souborů.

Zjištění velikosti a notifikace e-mailem

Tento script zjistí velikost a v případě, že velikost překročila nastavenou mez, pošle podrobné hlášení, na e-maily.
Mail obsahuje: Každý si musí zvážit sám jak mu to vyhovuje, v mém případě již z mailu poznám kde je problém a co narostlo více než mělo :).
Na běžném systému se není třeba obávat opakovaného zatížení příkazem 'du' při procházení struktury adresářů, většinou to vše zůstává v cache.
#!/bin/bash
ADMIN="jmeno@domena.primarni jmeno@domena.zalozni"
HOSTNAME=`/bin/hostname`
FROM="sizemonitor@$HOSTNAME"
#maximum allowed size in megabytes
MAXSIZEMB=65000
#checked dir name
CHECKDIR="/check/directory/"

set -- `du -sm "$CHECKDIR"`
size=$1

if [ $size -gt $MAXSIZEMB ]; then
  TOTAL=`du -sh "$CHECKDIR"`
  DETAIL=`du -h  --max-depth=1 "$CHECKDIR"`
  DETAIL2=`du -h --max-depth=3 "$CHECKDIR"`
  echo -e "WARNING: size of backup is too big on ${HOSTNAME}\n\n${TOTAL}\n\n${DETAIL}\n\n${DETAIL2}\n" | /usr/bin/mailx \
      -s "WARNING sizeof backup is too big on: ${HOSTNAME}" -r ${FROM} ${ADMIN}

  logger -p warning "WARNING: size of backup is greather then ${MAXSIZEMB}Mb (size is: ${size}Mb)"
  echo "Size of backups is too big, e-mail has been sent"
else
  echo "Size of backups is OK"
fi

exit 0

ADMIN udává kam se má poslat chybové hlášení
FROM je pole from v odeslaném emailu
MAXSIZEMB maximální možná velikost adresáře v megabajtech
CHECKDIR kontrolovaný adresář
Předpokládá se, že 'du' umožňuje parametr -h (lidsky čitelná velikost s koncovkou Mb Gb apod.)


Script odešle email pomocí
/usr/bin/mailx
případně opravit na
/usr/bin/mail
či jinou cestu, pak zapíše do logu hlášení.
Posílá hlášení i na stdout - okamžitá informace při ručním spuštění.
Scipt nekontroluje provedení příkazů 'du' či 'mailx' - selhání scriptu není kritické :).

Naplánování pravidelné kontroly

Pomocí příkazu (na roota)
crontab -e
vložíme řádek pro kontrolu 1x denně v 6:10
10  6 * * *    /moje/cesta/checksizeofbackup > /dev/null
případně jiným zápisem nebo zápisy.

Kdo nezná příkazi 'vi' editoru, tak ať se základní naučí :)

Příkaz crontab -e otevře (silně pravděpodobně) editor 'vi' nebo 'vim' a po uložení a uzavření editoru například pomoci klávesy Esc a zápisu :wq nainstaluje novou crontab tabulku.
Indikuje to obvykle výpisem 'crontab: installing new crontab'

Zdroje informací: