Avendo un server per registrare dalle telecamere tramite il software motion si è posto il problema di mantenere dello spazio libero sugli hard disk del server.
La soluzione più logica mi è sembrata quella di mantenere libero sempre almeno 1GB di memoria.
Online si trovano diversi script, ma ognuno presenta delle debolezze/BUG, così mi son deciso di scriverlo da zero.
Lo script scritto va a leggere tutti i file presenti nelle directory e subdirectory, li ordina per data di creazione e li elimina uno ad uno finché non c’è almeno 1GB di spazio libero sul disco. Una volta raggiunta la quota minima si preoccupa di eliminare le cartelle vuote, per non lasciare spazzatura.
Di seguito il codice:
#!/bin/bash # Cartella DIR=/video/hd # Quantita spazio da tenere libero(100GB) FREESPACE=100000000 # Rimuovo file vuoti/corrotti find $DIR -size 0 -delete find $DIR -type f -printf "%T@|%p\n" | sort -n | while read f ; do if [ `df --output=avail $DIR | tail -1` -ge $FREESPACE ] ; then break fi filename="$(cut -d'|' -f2 <<<"$f")" rm -f $filename done # Rimuovo cartelle vuote find $DIR -depth -type d -empty -exec rmdir {} \;
Il file è scritto in bash ed è molto semplice. Nella variabile DIR viene definita la directory da tenere pulita, mentre nella variabile FREESPACE lo spazio minimo da avere libero sul disco.
Tale script è stato poi inserito in esecuzione con crontab affinché venga eseguito ogni minuto
Più sono i file più lo script ha bisogno di memoria, in particolare dovete assicurarvi di avere spazio a sufficienza nella directory /tmp/. Personalmente tale directory per velocità e risparmiare scritture su disco è sta impostata che venga montata in RAM all'avvio del sistema tramite fstab
Molto interessante. E ben fatto.