Quantcast
Channel: Guide in bash
Viewing all articles
Browse latest Browse all 4

Script per sincronizzare i dati della home su uno o più dischi esterni

$
0
0

Lo script è stato studiato per creare backup sincronizzati delle directory contenute nella home dell'utente, fornendo la possibilità di scegliere quali siano le dir che si vuole sincronizzare usando la variabile FOLDER contenuta nella funzione RSYNC. Nella funzione CHECK vengono rilevati e analizzati i dischi collegati al sistema permettendo il proseguo del backup qualora vi siano i permessi e lo spazio sufficiente per la scrittura dei dati. Terminata la fase di backup gli snapshot vengono creati una sola volta in una cartella separata dove la cronologia mensile ai vecchi file sarà sempre disponibile, qualora volessimo recuperare i file non più presenti nell'attuale backup. Il primo giorno del mese la funzione ERASE provvede ad eliminare gli snapshot più vecchi di 30 giorni.Naturalmente è possibile automatizzare i propri backup usando il tool cron, nel mio caso sincronizzo i miei dati ogni ora. In futuro cercherò, per quanto nelle mie possibilità, di aggiungere alcuni miglioramenti e qualora, tra gli utenti ci fosse qualcuno intenzionato ad utilizzare lo script e avesse dei consigli da dare è naturalmente il benvenuto.

#! /bin/bash 
# Versione Script	: 6.0# Autore		: Antonello Collini, gollum.suseit@gmail.com# Data di creazione	: 01-set-2010# Ultima Revisione	: 05-mar-2012 
# Recupera il nome dell'utente di sistemaUSER="$LOGNAME"# Assegna alla directory di salvataggio il nome# del proprietario della homeDIR="Dati_$USER"# Nome dell'archivio degli snapshotARC="Old_Files_$USER"# Recupera il numero del giorno del meseDAY_OF_MONTH=`LANG=it_IT date +%d`# Recupera il nome del meseNAME_OF_MONTH=`LANG=it_IT date +%B`# Recupera il numero del mese.MONTH_OF_YEAR=`LANG=it_IT date +%m |sed's/^0//'` 
 
CHECK (){# Assegna un numero al totale dei dischi montati dal file temporaneo.NUM_DEV=`wc/tmp/device-$USER.lst |awk'{print $1}'`echo""echo"VERIFICO LE UNITA DISCO COLLEGATE AL SISTEMA."# Itera il controllo dello spazio sui dischi finchè non ci sono più drive da controllare.while[$NUM_DEV-ge0]do# Recupera il nome del primo disco presente nella lista.DEV=`head-n1/tmp/device-$USER.lst`# Recupera la dimensione in blocchi da 1M della directory home.DIR_SIZE=`df-m$HOME|sed'1d'|awk'{print $3}'`# Recupera lo spazio disponibile in blocchi da 1M del disco analizzato.DISP_SIZE=`df-m$DEV|sed'1d'|head-n1|awk'{print $4}'`# Se la stringa DEV non sia nulla e che sia scrivibile# nel caso le due condizioni siano entrambe false il programma# restituisce un errore.if[[-n"$DEV"&&-w"$DEV"]]thenecho""echo"L'unità disco $DEVè collegata."elseecho""echo"Il sistema non ha rilevato altre unità disco."echo"Oppure non sono sufficienti i permessi per accedervi."echo""echo"IMPOSSIBILE PROSEGUIRE CON IL BACKUP."exit1fi 
		# Modifica il file device-user.lst eliminando di volta# in volta la prima riga contenente il nome di un disco# collegato.`sed-i-e'1d'/tmp/device-$USER.lst >>/tmp/device-$USER.lst`# Conta il numero delle unità collegateNUM_DEV=$((NUM_DEV--)) 
		# Se la misura in blocchi della home è maggiore di quella# della partizione del disco esterno il programma restituisce# un errore e passa al disco successivo (se esite) altrimenti# termina il programma.echo""echo"VERIFICO LA DIMENSIONE DELLO SPAZIO DISPONIBILE SULL'UNITA."if[$DIR_SIZE-ge$DISP_SIZE]thenecho""echo"ERRORE, SPAZIO INSUFFICIENTE!"echo"Controllo se ci sono altre unità disco collegate."continueelseecho""echo"SPAZIO DISPONIBILE"
			RSYNC
		fidone} 
ERASE (){# Elenco da cui ricavare il nome del mese per creare oppure eliminare gli Snapshot.MONTH=("gennaio""febbraio""marzo""aprile""maggio""giugno""luglio""agosto""settembre""ottobre""novembre""dicembre")# Recupera il nome del primo disco presente nella lista.DEV=`head-n1/tmp/device-$USER.lst`# Toglie al numero del mese corrente un valore corripsondente# ai mesi di cui si vuole mantenere le copie di backup.OLDMONTH=$((MONTH_OF_YEAR-3))# Itera il controllo sugli Snapshot da eliminare# fino a quando il numero del mese è diverso da quello corrente.while[$OLDMONTH-ge0]doif[-e"$DEV/$ARC/${MONTH[$OLDMONTH]}"]thenecho""TEST=1elseecho""TEST=2fi 
		case$TESTin1)echo"Lo Snapshot di ${MONTH[$OLDMONTH]} non è stato eliminato."echo"Eliminazione"rm-rf"$DEV/$ARC/${MONTH[$OLDMONTH]}";;2)echo"Lo Snapshot di ${MONTH[$OLDMONTH]}è stato eliminato!";;esac 
		OLDMONTH=$((OLDMONTH-1))done 
# Richiama la funzione CHECK
CHECK
} 
RSYNC (){# Controlla l'esistenza della directory finale per il# salvataggio dei file in caso positivo prosegue con la# sincronizzazione, altrimente provvede a crearla onde# permettere il proseguo del programma.echo""echo"CONTROLLO L'ALBERO DELLA DIRECTORY $DIR"if[-e"$DEV/$DIR"]thenecho""echo"Directory presente!"echo""elseecho""echo"Directory mancante, provvedo a crearla!"mkdir-p"$DEV/$DIR"fi 
# Controlla l'esistenza dello Snapshot giornaliero.# In caso positivo il programma prosegue altrimenti,# provvederà a creare una copia dei vecchi file.#if[-e"$DEV/$ARC/$NAME_OF_MONTH/$DAY_OF_MONTH"]thenecho""echo"UNO SNAPSHOT CON QUESTA DATA ESISTE!"echo"PROSEGUO CON IL PROGRAMMA"echo""elseecho""echo"CREO UNO SNAPSHOT AI VECCHI FILE."echo""mkdir-p"$DEV/$ARC/$NAME_OF_MONTH"cp-al"$DEV/$DIR/""$DEV/$ARC/$NAME_OF_MONTH/$DAY_OF_MONTH"fi 
##########################################INSERIRE NELLA VARIABILE FOLDER LE     ##CARTELLE DELLA HOME CHE SI VOGLIONO    ##SINCRONIZZARE.                         ##########################################FOLDER=(bin Documenti Immagini Musica Scaricati Scrivania Video)# Recupera il numero delle cartelle contenute nell'array FOLDER.VAR=${#FOLDER[*]}COUNT=0 
# Itera il processo di sincronizzazione finchè il numero# delle cartelle da sincronizzare sarà maggiore della# variabile contatore.while[$COUNT-lt$VAR]doecho"Sincronizzo i file della cartella: ${FOLDER[$COUNT]}"
	rsync -ra"$HOME/${FOLDER[$COUNT]}"--delete"$DEV/$DIR/"COUNT=$((COUNT+1))done} 
# Recupera il nome dei dischi montati sul sistema e li salva# un file temporaneo nella dir /tmp.`df|grep/media/|awk'{print $6}'>/tmp/device-$USER.lst` 
# Verifica il primo giorno del mese, nel caso il test# sia positivo crea un archivio tar dei file del mese# concluso. "Scegliere se eliminare il backup più vecchio# oppure crearne uno snapshot."if[$DAY_OF_MONTH == 01 ]thenecho""
	  ERASE
  elseecho""
	  CHECK
  fi

Viewing all articles
Browse latest Browse all 4

Trending Articles


Vimeo 10.7.1 by Vimeo.com, Inc.


UPDATE SC IDOL: TWO BECOME ONE


KASAMBAHAY BILL IN THE HOUSE


Girasoles para colorear


Presence Quotes – Positive Quotes


EASY COME, EASY GO


Love with Heart Breaking Quotes


Re:Mutton Pies (lleechef)


Ka longiing longsem kaba skhem bad kaba khlain ka pynlong kein ia ka...


Vimeo 10.7.0 by Vimeo.com, Inc.


FORECLOSURE OF REAL ESTATE MORTGAGE


FORTUITOUS EVENT


Pokemon para colorear


Sapos para colorear


Smile Quotes


Letting Go Quotes


Love Song lyrics that marks your Heart


RE: Mutton Pies (frankie241)


Hato lada ym dei namar ka jingpyrshah jong U JJM Nichols Roy (Bah Joy) ngin...


Long Distance Relationship Tagalog Love Quotes