Newsgroup: it.comp.os.linux.sys
Titolo: piccolo scriptino per backup

scusate,
ho fatto uno script che fa un backup e viene lanciato da cron in 
automatico. tuttavia ho un problema che non riesco a superare (non so 
nemmeno da dove si inizia!):
ho delle cartelle tipo
2008-05-01
2008-07-01
2008-08-01
2008-09-01
2008-10-01
un nuovo backup, il primo del mese (è un esempio, sono più frequenti), 
mi genera una cartella di tipo
2008-11-01
però prima o poi i backup saltano perchè lo spazio su disco finisce
come faccio a dire "la cartella alfabeticamente prima eliminala"?
sto impazzendo!

 sto impazzendo!
con una funzione tipo
DATEOLD=`date -d '2 week ago' +%Y%m%d`
scegliendo l'intervallo corretto ed il fomato adatto, ti ricavi il nome 
della directory da eliminare e poi fai un bel
rm -rf $DATEOLD
Ciao
Stefano 

 mi genera una cartella di tipo
se devi mantenere solo un backup, perche' non usi direttamente
rsync ?
-- 
Never try to teach a pig to sing.
It wastes your time and annoys the pig.

 
vorrei avere storicità almeno di 5 backup

 vorrei avere storicità almeno di 5 backup
usa rsync con l'opzione --link-dest, in modo da mantenere degli hard link
ai file immutati senza usare ulteriore spazio, e poi fai "ruotare" le
directory come ti ha detto Stefano ...
ciao



usa rsnapshot

 come faccio a dire "la cartella alfabeticamente prima eliminala"?
Se i backup sono in $SNAPSHOT_RW, vuoi stare intorno a $MAXDF dello spazio
sulla partizione su cui si trova $SNAPSHOT_RW, ma vuoi cancellare al
massimo $LIMIT [traduzione di directory in italiano], puoi provare con
questo:
=====================================================================
MAXDF=90
LIMIT=10
FIRST=`find $SNAPSHOT_RW -maxdepth 1 -name "2*" | sort | head -n 1`;
for ((i=1; i <= LIMIT ; i++))
do
  if [ -d $FIRST ]
  then
    curdf=`di -f p -n $SNAPSHOT_RW | cut -d'%' -f1`
    if [ $curdf -gt $MAXDF ];
    then
      echo
      echo "Removing $FIRST ..."
      sleep 5
      rm -fR $FIRST
      FIRST=`find $SNAPSHOT_RW -maxdepth 1 -name "2*" | sort | head -n 1`;
    fi
  fi
done
=====================================================================
Ciao,
  Void


Io utilizzo questo metodo:
1 directory aggiornata sempre con rsync (+ un file di nome timestamp con
l'output di date per tenere traccia di quando è stato fatto il backup),
+ n file (con n arbitrario > 1 opportunamente dimensionato) tgz che
rappresentano gli storici.
Ad ogni esecuzione fo questa procedura:
dato n elimino il file backup_n.tgz (se esiste)
rinomino il file backup_(n-1).tgz in backup_n.tgz (se esiste)
il file backup_(n-2).tgz in backup_(n-1).tgz (se esiste)
così via fino al file
backup_1.tgz in backup_2.tgz (se esiste)
(piccola nota: il roll si fa con un semplice ciclo for anche in bash)
creo un nuovo file backup_1.tgz come compressione della directory backup
eseguo rsync
ricreo il file timestamp nella directory backup che è stato tolto
(giustamente) da rsync
oppure
eseguo rsync e creo il file di timestamp
cancellazione del file n
roll in su di 1 di tutti i tgz
compressione in tgz della dir di backup per avere il file backup_1.tgz
Eseguito da cron una volta al giorno, ho il backup corrente
(incrementale) e le copie compresse degli ultimi n giorni. (lo tengo
anche per 30 giorni senza problemi)
Se aumento n non c'è problema, se lo riduco devo solo ricordarmi di
cancellare a mano i file in sovrappiù, ma dal momento che scolpisco n
nel file di bash, la modifica del parametro è già di per sè una
operazione manuale, la cancellazione di qualche file non è un problema.
PSK

ho risolto in maniera banale e fantasiosa :)
unset RMMESE
unset RMANNO
RMMESE=`date +%m`
RMMESE=`echo $RMMESE-2 | bc`
RMANNO=`date +%Y`
if [ "$RMMESE" = "1" ]; then RMMESE=11; RMANNO=`echo $RMANNO-1 | bc`; fi
if [ "$RMMESE" = "2" ]; then RMMESE=12; RMANNO=`echo $RMANNO-1 | bc`; fi
if [ "$RMMESE" = "3" ]; then RMMESE=03; fi
if [ "$RMMESE" = "4" ]; then RMMESE=04; fi
if [ "$RMMESE" = "5" ]; then RMMESE=05; fi
if [ "$RMMESE" = "6" ]; then RMMESE=06; fi
if [ "$RMMESE" = "7" ]; then RMMESE=07; fi
if [ "$RMMESE" = "8" ]; then RMMESE=08; fi
if [ "$RMMESE" = "9" ]; then RMMESE=09; fi
rm -R /backup/$RMANNO-$RMMESE*
grazie comunque a tutti, prenderò spunti.
PS: ...non è che ve la state un po' troppo menando con sta storia della 
directory/cartella? emmadonna, è sfuggito, non crocifiggetemi! :)

 nemmeno da dove si inizia!):
find /csv/backup -type f -mtime +3 -exec rm {} \;
Questa cancella tutto cio' piu' vecchio di 3gg rispetto alla data 
corrente che trovasi nella directory /csv/backup.
La metti in cron e la fai girare una volta al giorno.
Ciao.

 sto impazzendo!
rsnapshot: fa esattamente al caso tuo.