Newsgroup: it.comp.os.linux.sys
Titolo: rsnapshot

Sto testando rsnapshot come sistema di backup incrementale per i miei server (sono tutti linux)
 
La documentazione dice di schedulare dei cron con le varie operazioni da compiere, dove prima si fanno le rotazioni più grandi poi quelle più piccole, quindi: anno -> mese -> settimana -> giorno -> ora
 
Si potrebbe generare una buffa race-condition, dove la rotazione del giorno parte in mezzo alla rotazione della settimana non ancora terminata.
 
Mi spiego.
 
Alle 00:00 ruoto il settimanale
Alle 01:00 ruoto il giornaliero
 
Ovviamente il settimanale viene ruotato la domenica o il lunedì, il giornaliero tutti i giorni. Ma domenica o lunedì, vengono fatte entrambe.
 
Se la rotazione settimanale dovesse richiedere 2 ore a terminare (perchè li dentro c'è anche un bel "rm -rf" della rotazione precedente, in base alla retention policy, che almeno nel mio caso richiede ben 2 ore e mezzo), ci si ritrova in un bel casino:
il settimanale cancella il weekly.1 poi sposta il daily.10 in weekly.0, il giornaliero (che parte nel bel mezzo della rotazione) sposta il daily.9 in daily.10 facendo a cazzotti con il settimanale tutt'ora in corso e che sta spostando i file.
 
dopo questo bel pippone, mi domandavo: se invece di fare tanti cron 'a cazzo' che partono ognuno per i fatti suoi, ne facessi solo uno, che parte ad esempio a mezzanotte tutti i giorni, con un caro e vecchio script sequenziale?
 
----
if [ "$(date +%j)" -eq "001" ]; do
   rsnapshot yearly
done
if [ $(date +%d) -eq 1 ]; do
   rsnapshot monthly
done
if [ $(date +%w) -eq 0 ]; do
   rsnapshot weekly
done
 
rsnapshot sync && rsnapshot daily
----
 
in pratica, al sync+daily, non ci arriva finchè non ha finito il weekly (se lo deve fare, altrimenti tira dritto), al weekly non ci arriva finchè non ha finito il mensile, etc etc 
 
Essendo sequenziale, non ho race condition come avrei invece con il cron.
Esattamente 11 righe di script considerando anche la riga vuota.
 
Mi sfugge qualcosa? Perchè non viene proposto "di default" anzichè usare un accrocchio tramite cron con potenziali (grossi) problemi in fase di rotazione?

 rsnapshot sync && rsnapshot daily
----
 
ovviamente if/then/fi e no if/do/done :)

 Se la rotazione settimanale dovesse richiedere 2 ore a terminare
 
Dalla manpage di rsnapshot (in particolare il secondo paragrafo):
 
It is usually a good idea to schedule the larger backup levels to run a
bit before the lower ones. For example, in the crontab above, notice
that "daily" runs 10 minutes before "hourly".  The main reason for this
is that the daily rotate will pull out the oldest hourly and make that
the youngest daily (which means that the next hourly rotate will not
need to delete the oldest hourly), which is more efficient.  A
secondary reason is that it is harder to predict how long the lowest
backup level will take, since it needs to actually do an rsync of the
source as well as the rotate that all backups do.
 
If rsnapshot takes longer than 10 minutes to do the "daily" rotate
(which usually includes deleting the oldest daily snapshot), then you
should increase the time between the backup levels.  Otherwise
(assuming you have set the lockfile parameter, as is recommended) your
hourly snapshot will fail sometimes because the daily still has the
lock.
 
 
In definitiva: stai sufficientemente largo con i tempi. Il settimanale,
potresti farlo anche alle 20.00 della domenica, non cambierebbe nulla e
poi avere il giornaliero alle 01.00.

 poi avere il giornaliero alle 01.00.
 
Si, ok, ma resta comunque il fatto che si tratta di una "approssimazione".
Dal mio punto di vista, porcheria è e porcheria resta. Se per qualsivoglia motivo il weekly dovesse tardare, tutti i backup seguenti saltano. Se dovesse tardare l'annuale, potenzialmente ti salta il mensile, il settimanale, il giornaliero e l'orario. (o vengono eseguiti ma con risultati non previsti)
 
Al momento sto testando lo script postato in precedenza, oggi ha fatto il primo weekly e funziona bene. I giorni passati ha sempre fatto sync+daily in successione.
 
Oltretutto ho variato lo script postato per usare "parallel" e faccio partire parallelamente il backup di 5 host per volta su circa 80 in totale.
 
Funziona, o almeno così sembra. Ed ha il vantaggio di avere 1 singola entry nel crontab.

 ha 
scritto:
