Backup con TAR

Problemi di programmazione riguardante il linguaggio script Bash
Rispondi
Avatar utente
sabayonino
Messaggi: 1482
Iscritto il: 16/01/2012, 20:47
Distribuzione: GentooKDE
Kernel: 4.4.6-gentoo-BFQ
Architettura: x86_64
Contatta:

Backup con TAR

Messaggio da sabayonino » 21/01/2015, 0:11

Immagine

Tipologia di backup

- Completo
Ogni dato viene salvato una volta sola.
Ad un successivo backup completo , anche se ci sono stati minimi cambiamenti nel filesystem
ogni dato viene salvato nuovamente.

  • Vantaggi :
  • e' possibile recuperare tutti i dati. Se si hanno più backup completi è possibile ripristinare lo stato del filesystem completamente anche a distanza di molto tempo
  • [i]Svantaggi[/i] :
  • Utilizzo elevato dello spazio sul disco
- Differenziale
Un backup differenziale necessita di un backup completo come base di partenza ma effettuerà solo il salvataggio dei dati che sono cambiati dall'ultimo backup completo.
Per il recupero dei dati sarà sufficiente avere un backup completo e l'ultimo backup differenziale disponibile.
  • Vantaggi :
  • Le immagini differenziali create dopo l'immagine completa iniziale sono create molto velocemente, perché vengono salvate solo le modifiche apportate ai file di sistema dall’ultimo backup completo.
  • La quantità di spazio su disco utilizzato dalle immagini differenziali è significativamente inferiore a quella di immagini complete
  • Sono necessari due soli file di immagine per ripristinare il sistema (quello completo + l’ultimo differenziale)
  • [i]Svantaggi :[/i]
  • Man mano che aumenta il tempo dall’ultimo backup completo, la dimensione dell’immagine differenziale crescerà, così come crescerà il tempo necessario per la sua creazione. Per ridurre questo tempo, è necessario eseguire occasionalmente una immagine completa per diminuire  nuovamente la dimensione delle immagini differenziali successive.
Immagine

- Incrementale
Le immagini incrementali sono simili alle immagini differenziali in quanto necessitano che sia eseguito prima un backup completo. La differenza principale è che sono memorizzate solo le ultime modifiche del filesystem dall’ultima immagine, sia essa completa o incrementale. Il set di backup risultante sarà quindi costituito da una immagine completa e da un numero di immagini incrementali che devono essere tutte presenti per poter ripristinare il sistema correttamente.
  • Vantaggi :
  • Le immagini incrementali hanno gli stessi vantaggi delle immagini differenziali, dal momento che sono memorizzate le sole modifiche che sono state apportate dall’ultima immagine completa o incrementale.
  • Sono sempre piccole e molto veloci da effettuare, soprattutto se eseguite frequentemente.
  • [i]Svantaggi :[/i]
  • Il solo svantaggio di utilizzare le immagini incrementali è che tutti i backup devono essere conservati. Infatti se dovesse mancare anche una sola delle immagini di backup intermedie incrementali, non sarà possibile ripristinare il sistema all’ultimo backup effettuato ma solo fino al backup incrementale precedente dell'immagine intermedia mancante.
Immagine



Avatar utente
sabayonino
Messaggi: 1482
Iscritto il: 16/01/2012, 20:47
Distribuzione: GentooKDE
Kernel: 4.4.6-gentoo-BFQ
Architettura: x86_64
Contatta:

Backup con TAR

Messaggio da sabayonino » 21/01/2015, 0:12

TAR Home Page

Storia di TAR.

TAR è l'acronimo di TapeARchive , nato come software di archiviazione per dispositivi ad accesso sequenziale (unità a nastro) è presente di default nella maggiornaza delle distribuzioni GNU-Linux.

TAR si limita alla sola archiviazione dei dati. Per la loro compressione viene utilizzato in combinazione con ulteriori software di compressione quali ad esempio bzip2 o gzip.

Negli anni sono state aggiunte funzionalità , se utilizzate in combinazione con altri software ne permettono di sfruttare le capacità di archiviazione/compressione e controllo utili per effettuare backup dei dati su qualunque tipo di dispositivo.

Avatar utente
sabayonino
Messaggi: 1482
Iscritto il: 16/01/2012, 20:47
Distribuzione: GentooKDE
Kernel: 4.4.6-gentoo-BFQ
Architettura: x86_64
Contatta:

Backup con TAR

Messaggio da sabayonino » 21/01/2015, 0:13

Linux Man Page : TAR

Sintassi

uso classico:

Codice: Seleziona tutto

tar [-] c|r|t|x [v] f NOME_ARCHIVIO [FILE...] [DIRECTORY...]
Descrizione
tar gestisce gli archivi di tipo ".tar". Un archivio di questo tipo non è altro che un insieme di file e directory conservati in modo ordinato in un unico file non compresso. In tale file sono presenti tutte le informazioni per ricostruire correttamente la gerarchia di directory originale con tutto il suo contenuto. Generalmente si crea un archivio di questo tipo per ottenere un unico file da comprimere poi con gzip bzip2 o altro.
Opzioni più comuni

f NOME_ARCHIVIO
Con questa opzione si specifica il nome dell'archivio da creare (o processare).

v
Opera in modalità verbosa (visualizza quello che sta facendo).

c
Crea un archivio.

r
Aggiunge file ad un archivio esistente.

t
Mostra il contenuto di un archivio.

x
Estrae i file contenuti in un archivio e ricrea la struttura di directory originale (a partire dalla directory corrente).

z
Permette di comprimere o decomprimere gli archivi senza chiamare esplicitamente gzip.
Esempi

Codice: Seleziona tutto

tar -cvf doc.tar Documenti
Archivia la directory Documenti e tutto il suo contenuto in doc.tar .

Codice: Seleziona tutto

tar -zcvf archivio.tgz *
Archivia tutto il contenuto della directory corrente nel file compresso archivio.tgz.

Codice: Seleziona tutto

tar -zxvf archivio.tar.gz
Estrae il contenuto di archivio.tar.gz nella directory corrente.

Codice: Seleziona tutto

tar -ztvf doc.tgz
Visualizza il contenuto di doc.tgz.

Avatar utente
sabayonino
Messaggi: 1482
Iscritto il: 16/01/2012, 20:47
Distribuzione: GentooKDE
Kernel: 4.4.6-gentoo-BFQ
Architettura: x86_64
Contatta:

Re: Script di backup con TAR

Messaggio da sabayonino » 21/01/2015, 0:13

IN PROGRESS

Codice: Seleziona tutto

#!/bin/bash

# Script per backup Completo,Incrementale,Differenziale
# Esempio : Eseguire il backup della cartella /home/<user>/Documenti   e  di  /home/<user>/Foto
# bash script-backup  /home/<user>/Documenti /home/<user>/Foto
# 
# Se una cartella da effettuare il backup contenga degli spazi , indicarla tra doppi apici
# Esempio : /home/<user>/"Immagini d tenere"
#
# Altri esempi :
# bash scrip-backup /usr/src /boot /etc /var/www
# effettuerà il backup di
# /usr/src --> xx.src.full.tar.xz
# /boot --> xx.boot.full.tar.xz
# /etc --> xx.etc.full.tar.xz
# /var/www --> xx.www.full.tar.xz
#
# bash script-backup /
# effettuerà il backup del sistema , prendendo il nome dell'hostname
# / --> xx.sabayon.full.tar.xz

WEEK=$(date +%u)              # Giorno della settimana 1 = Lunedi
DAY=$(date +%d)                 # Giorno del mese  01 = primo del mese
MONTH=$(date +%m)         # Mese 1=Gennaio, 2=Febbraio ...
YEAR=$(date +%Y)                # Anno nel formato YYYY = 2016

BASE="/snapshots/archives"  # Directory base del backup e file
if [[ ! -d $BASE ]] ; then mkdir -p $BASE ; fi # Se non esiste verrà creata

OLD=60     # In giorni , imposta per quanti giorni tenere i backup 
find $BASE/$YEAR/$MONTH -maxdepth 1 -type d -mtime +$OLD -exec rm -rf {} \; # Rimuove i backup più vecchi di $OLD giorni

# Opzioni da passare a TAR
#  --one-file-system --> Vengono esclusi i filesystem virtuali e device oltre ai punti di montaggio esterni alla directory di riferimento
# ed esclude i file di cache , di backups ed ignora eventuali errori di lettura nel caso alcuni files venissero modificati durante il backup
# ulteriori informazioni , fare riferimento al manuale di rsync
TAROPTS=" --one-file-system --exclude-caches --exclude-backups --ignore-failed-read"

# Ciclo for per i paramatri passati ossia le directories da effettuare il backup
for i in "$@" ; do

if [[ -z $i ]] ; then echo "Nessuna directory per il backup." ; exit 0 ; fi # Lo script termina se non è indicata alcuna directory da salvare
if [[ ! -d "$i" ]] ; then continue ; fi # Se la directory indicata non esiste , continua con la prossima se presente. altrimenti termina

TYPE=$(basename "$i") # Imposta il nome dell'archivio con il nome della cartella di backup
TYPE="$(echo "$TYPE" | sed 's/ /-/' )" # sostituisce gli spazi con un "-" nel nome dell'archivio nel caso una cartella indicata contenga degli spazi nel suo nome

if [[ "$TYPE" == "/" ]] ; then TYPE="$HOSTNAME" ; fi # se la directory da salvare è la / di sistema imposta il nome dell'archivio sarà l'hostname del sistema

NAMEF="$DAY.$TYPE.full.tar.xz" # Backup completo con compressione XZ
NAMEI="$DAY.$TYPE.incr.tar.gz" # Backup incrementale con compressione GZIP
NAMED="$DAY.$TYPE.diff.tar.bz2" # Backup differenziale con cmpressione BZIP2
ARCHIVES="$BASE/$YEAR/$MONTH/"$TYPE"" # Imposta la direcotry di backup secondo il formato indicato : <base>/YYYY/MM/DIR
FULLBK="$(basename $ARCHIVES/*.full.tar.xz)" # Estrae il nome del backup completo
DATEFULL="$(echo ${FULLBK:0:2})" # Estrae le prime due lettere (il giorno del backup completo) al backup completo
INCRFILE="$ARCHIVES/incremental.dat" # File utilizzato da TAR per memorizzare gli incrementi
CHECK="$ARCHIVES/checksum.sha256" # File dove verranno salvati i files di check di ogni backup
LOGFILE="$ARCHIVES/backup.log" # File dove verranno indicate le informazioni sui backup eseguiti
EXCLFILE="$BASE/$TYPE.exclude" # File delle esclusioni per TAR
if [[  ! -f $EXCLFILE ]] ; then 
    EXCLFROM=""  
else
    EXCLFROM="--exclude-from=$EXCLFILE"
fi

 if [[ ! -d "$ARCHIVES" ]] ; then mkdir -p "$ARCHIVES" ; fi # Crea la directory di salvataggio del backup

 # Funzione backup compelto
 FULL () {
 TAROPTS="$TAROPTS -g $INCRFILE $EXCLFROM"
 tar $TAROPTS -cvpaf $ARCHIVES/$NAMEF "$i" && cd $ARCHIVES ; sha256sum $NAMEF > $CHECK
 echo "$(date) Backup Completo [ "$i" ] " > $LOGFILE
 }
 
 # Funzione backup incrementale
 INCR () {
 if [[ -f $ARCHIVES/$NAMEI ]] ; then
    echo "Esiste già un backup incrementale - $NAMEI -"
 elif [ $DATEFULL -eq $DAY ] ; then
    echo "E' già stato effettuato un backup completo il - $DAY -"
 else
    TAROPTS="$TAROPTS -g $INCRFILE $EXCLFROM"
    tar $TAROPTS -cvpaf $ARCHIVES/$NAMEI  "$i" && cd $ARCHIVES ; sha256sum $NAMEI >> $CHECK
    echo "$(date) Backup Incrementale [ "$i" ] " >> $LOGFILE
 fi
 }
 
 # Funzione backup differenziale
 DIFF () {
TAROPTS="$TAROPT $EXCLFROM"
 if [[ -f $ARCHIVES/$NAMED ]] ; then
    echo "Esiste già un backup differenziale - $NAMED -"
 elif [ $DATEFULL -eq $DAY ] ; then
    echo "E' già stato effettuato un backup completo il - $DAY -"
 else
    tar $TAROPTS --newer-mtime=$FULLBK -cvpaf $ARCHIVES/$NAMEDI "$i" && cd $ARCHIVES ; sha256sum $NAMED >> $CHECK
    echo "$(date) Backup Differenziale [ "$i" ] " >> $LOGFILE
 fi
 }

# Effettua il backup completo il primo del mese o se non esiste ancora nessun backup completo
if [[ $DAY -eq 01 ||  ! -f $ARCHIVES/$FULLBK  ]] ; then
    FULL
else
    case $WEEK in
    [2-7])  INCR ;; # backup incrementale tutti i giorni escluso il lunedi il quale è riservato al backup differenziale
    "1") DIFF ;; # backup differenziale ogni lunedi
    esac
fi

done


Avatar utente
sabayonino
Messaggi: 1482
Iscritto il: 16/01/2012, 20:47
Distribuzione: GentooKDE
Kernel: 4.4.6-gentoo-BFQ
Architettura: x86_64
Contatta:

Re: Script di backup con TAR

Messaggio da sabayonino » 21/01/2015, 0:13

Work in Progress...
lo script è semplice e comunque migliorabile.

Se schedulato quotidianamente
  • Effettua backup completo ogni primo giorno (01) del mese .
    Se non è presente alcun backup completo effettuato , ne effettua uno completo indipendentemente dal giorno di esecuzione.
    Effettua backup Differenziali ogni lunedi
    Effettua backup Incrementali per i restanti giorni della settimana
    Vengono rimossi i backup più vecchi di N giorni settando apposita variabile nello script
    I parametri passati allo script indicano le cartelle di cui effettuare il backup (se esistenti)

Lo script, se schedulato ogni lunedi effettuerà solo backup differenziali.

Codice: Seleziona tutto

[...]
    case $WEEK in
    [2-7]) INCR ;; # backup incrementale tutti i giorni escluso il lunedi il quale è riservato al backup differenziale
    "1") DIFF ;; # backup differenziale ogni lunedi
    esac
[...]
La compressione degli archivi è impostata in :
  • XZ per i backup completi
    GZIP per i backup incrementali
    BZIP2 per i backup differenziali
Ogni backup verrà salvato in
<DIR>/YYYY/MM/<tag-directory>/

Codice: Seleziona tutto

/backup/tar/2016/11/Documenti
/backup/tar/2016/11/Foto
/backup/tar/2016/12/Documenti
/backup/tar/2016/12/Foto
...
Tutti i backup hanno una impronta sha256 di controllo e log


Immagine

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite