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

Latest Images

Pangarap Quotes

Pangarap Quotes

Vimeo 10.7.0 by Vimeo.com, Inc.

Vimeo 10.7.0 by Vimeo.com, Inc.

HANGAD

HANGAD

MAKAKAALAM

MAKAKAALAM

Doodle Jump 3.11.30 by Lima Sky LLC

Doodle Jump 3.11.30 by Lima Sky LLC

Trending Articles


Ang Nobela sa “From Darna to ZsaZsa Zaturnnah: Desire and Fantasy, Essays on...


Lola Bunny para colorear


Dino Rey para colorear


Girasoles para colorear


Dibujos de animales para imprimir


Renos para colorear


Dromedario para colorear


Long Distance Relationship Tagalog Love Quotes


Tagalog Long Distance Relationship Love Quotes


RE: Mutton Pies (mely)


Gwapo Quotes : Babaero Quotes


Kung Fu Panda para colorear


Libros para colorear


Mandalas de flores para colorear


Dibujos para colorear de perros


Toro para colorear


mayabang Quotes, Torpe Quotes, tanga Quotes


Love Quotes Tagalog


Tropa Quotes


Mga Tala sa “Unang Siglo ng Nobela sa Filipinas” (2009) ni Virgilio S. Almario



Latest Images

Pangarap Quotes

Pangarap Quotes

Vimeo 10.7.0 by Vimeo.com, Inc.

Vimeo 10.7.0 by Vimeo.com, Inc.

HANGAD

HANGAD

MAKAKAALAM

MAKAKAALAM

Doodle Jump 3.11.30 by Lima Sky LLC

Doodle Jump 3.11.30 by Lima Sky LLC