Il programma di ar­chi­via­zio­ne tar si basa su un vecchio metodo per la pro­te­zio­ne dei dati, che è comunque tenuto in con­si­de­ra­zio­ne ancora oggi. Il nome tar è in realtà un acronimo e sta per Tape Archiver, quindi ar­chi­via­zio­ne su nastro. Anche se og­gi­gior­no perlomeno gli utenti privati lo uti­liz­za­no solo raramente, il programma rimane sempre lo strumento più amato per l’ar­chi­via­zio­ne sui sistemi Unix. Grazie a questo pacchetto si possono anche creare backup in­cre­men­ta­li di un server, a in­ter­val­li di tempo regolari. Vi spie­ghia­mo come funziona tar e con quali comandi è possibile mettere in sicurezza i propri dati.

Cloud Backup powered by Acronis
Riduci i tempi di inat­ti­vi­tà e proteggi i carichi di lavoro
  • Backup au­to­ma­ti­ci e recupero dei dati
  • Pia­ni­fi­ca­zio­ne e gestione intuitive delle attività
  • Pro­te­zio­ne dalle minacce basata sul­l'in­tel­li­gen­za ar­ti­fi­cia­le

Come funziona tar?

tar è un programma per l’ar­chi­via­zio­ne su Linux e i sistemi im­pa­ren­ta­ti. Stra­na­men­te per un programma simile tar non offre di default nessuna com­pres­sio­ne, ma ciò no­no­stan­te è molto popolare. Infatti il maggiore vantaggio consiste nel poter rac­co­glie­re intere directory in un unico file. Questa tecnica è stret­ta­men­te legata alla storia del programma: in un’unità nastro i dati vengono trasmessi uno dietro l’altro su un nastro magnetico. Così si spiega la me­mo­riz­za­zio­ne lineare e se­quen­zia­le tipica del formato tar. I nuovi file vengono aggiunti alla fine nell’archivio. Il file che ne risulta viene anche chiamato “tarball” (in italiano “palla di catrame”), poiché i file sono pra­ti­ca­men­te “ap­pic­ci­ca­ti” gli uni agli altri.

Per ottenere una com­pres­sio­ne, tar viene spesso uti­liz­za­to in com­bi­na­zio­ne con gzip. I due programmi si com­ple­ta­no per­fet­ta­men­te: infatti gzip può com­pri­me­re sempre solo dei file singoli e perciò viene uti­liz­za­to so­li­ta­men­te prima tar e poi gzip (o anche un altro programma di com­pres­sio­ne). Così si formano infine dei file .tar.gz o .tzip.

In­stal­la­re tar

Su Ubuntu tar dovrebbe già essere pre­in­stal­la­to. Se uti­liz­za­te un’altra di­stri­bu­zio­ne di Linux o Unix, in­stal­la­te questo utile programma:

sudo apt-get install tar tar-doc

Il pacchetto tar-doc è in questo caso opzionale, in quanto contiene solo la do­cu­men­ta­zio­ne del programma di ar­chi­via­zio­ne.

Uti­liz­za­re tar

Se volete uti­liz­za­re tar, ricorrete sem­pli­ce­men­te a questa sintassi:

tar opzione file

Le opzioni di tar sono le seguenti:

Opzione De­scri­zio­ne Par­ti­co­la­ri­tà  
--help Mostra tutte le opzioni.    
--version Re­sti­tui­sce la versione uti­liz­za­ta di tar.    
-c Genera un nuovo archivio. (create)  
-d Compara tra di loro i file presenti nell’archivio e nel file system. (diff)  
-f Scrive un archivio nel file indicato o estrapola i dati dal file indicato. (file) questa opzione va inserita per ultima, visto che tutti gli input suc­ces­si­vi devono essere in­ter­pre­ta­ti come file.  
-z Comprime o de­com­pri­me di­ret­ta­men­te l’archivio con gzip. gzip deve già essere in­stal­la­to.  
-Z Comprime o de­com­pri­me di­ret­ta­men­te l’archivio con compress. compress deve già essere in­stal­la­to. Fare at­ten­zio­ne ai caratteri maiuscoli.  
-j Comprime o de­com­pri­me di­ret­ta­men­te l’archivio con bzip2. bzip2 deve già essere in­stal­la­to.  
-J Comprime o de­com­pri­me di­ret­ta­men­te l’archivio con xz. xz deve già essere in­stal­la­to. Fare at­ten­zio­ne ai caratteri maiuscoli.  
-k Impedisce che i file so­vra­scri­va­no i file già esistenti al momento dell’estra­zio­ne dell’archivio.    
-p Mantiene i permessi di accesso al momento dell’estra­zio­ne.    
-r Aggiunge un file a un archivio già esistente. (recreate) Il file viene aggiunto alla fine. Funziona solo con un archivio non compresso.  
-t Indica il contenuto di un archivio. (table)  
-u Aggiunge solo file che sono più recenti rispetto alle versioni contenute nell’archivio.    
-v Indica i passaggi per l’ar­chi­via­zio­ne. (verbose)  
-vv Indica in­for­ma­zio­ni più det­ta­glia­te per l’ar­chi­via­zio­ne. (very verbose)  
-w Ogni azione deve essere con­fer­ma­ta.    
-x Estrae i file dall’archivio. (extract) I file rimangono nell’archivio.  
-A Aggiunge i file di un archivio esistente a un altro. Fare at­ten­zio­ne ai caratteri maiuscoli.  
-C Indica il posto in cui i file devono essere estratti. Fare at­ten­zio­ne ai caratteri maiuscoli.  
-M Creare, mostrare o estrarre un archivio in più parti. Fare at­ten­zio­ne ai caratteri maiuscoli.  
-L Cambia il supporto a partire da una precisa di­men­sio­ne del file. Le di­men­sio­ni vengono indicate in kilobyte. Fare at­ten­zio­ne ai caratteri maiuscoli.  
-W Verifica l’archivio dopo che è stato scritto. Fare at­ten­zio­ne ai caratteri maiuscoli.  
-P Archivia tutti i file a partire dalla root. Fare at­ten­zio­ne ai caratteri maiuscoli.  
--exclude Esclude i file o le cartelle. Viene indicato seguendo il comando per la creazione dell’archivio con la sintassi --exclude=<file/cartella>.  
-X Legge una lista con i file esclusi. Richiede una lista creata prima: -X <Lista>.list. Fare at­ten­zio­ne ai caratteri maiuscoli.  
-g Crea un log di tutte le directory com­pren­si­vo di checksum.    

Creando degli archivi tar avete inoltre la pos­si­bi­li­tà di mettere wildcard con un asterisco. Se create un nuovo archivio, indicate sempre prima le opzioni, dopo il nome del file dell’archivio che volete creare, e infine i file e le cartelle che vi devono essere contenute. Nel seguente esempio create un archivio (-c) a partire da due file testuali, li com­pri­me­te con gzip (-z) e li scrivete nel file archivio.tar.gz (-f):

tar -czf archivio.tar.gz esempio_1.txt esempio_2.txt

Se volete rac­co­glie­re tutti i file testuali in un archivio, uti­liz­za­te la wildcard cor­ri­spon­den­te:

tar -cf testo_archivio.tar *.txt

Possono essere raccolti in un archivio anche intere cartelle com­pren­si­ve delle sot­to­car­tel­le. Nel seguente esempio viene ar­chi­via­ta /cartella1 incluse tutte le sot­to­car­tel­le e i file contenuti ad eccezione di /cartella1/sot­to­car­tel­la_x:

tar -cf archivio.tar --exclude="/cartella1/sottocartella_x" /cartella_1

Nel seguente esempio estraete (-x) l’archivio compresso (-z), che abbiamo creato nel primo esempio, in un’altra cartella (-C):

tar -xzf archivio.tar.gz -C /home/cartella1/archivio_cartella

Per ag­giun­ge­re a un archivio (che deve essere de­com­pres­so) un altro file, date ad esempio il seguente comando:

tar -rf archivio.tar esempio_extra.txt

Come funziona un backup con tar?

I webmaster ricorrono spesso a tar per creare dei backup: così la struttura delle cartelle rimane invariata e la varietà delle funzioni del programma permette anche in­nu­me­re­vo­li per­fe­zio­na­men­ti, come è visibile dalle molte opzioni. Di seguito vi spie­ghia­mo come creare un backup completo con tar e come ef­fet­tua­re dei backup in­cre­men­ta­li con il programma.

Creare un semplice backup con tar

Per la vostra strategia di backup è utile creare uno script di backup per l’ar­chi­via­zio­ne del vostro sistema, al posto di generare sem­pli­ce­men­te degli archivi manuali. Così potete ar­chi­via­re au­to­ma­ti­ca­men­te diverse cartelle, com­pri­mer­le e tra­smet­ter­le a un supporto di memoria esterno. È im­por­tan­te perciò che abbiate i permessi di scrittura e di lettura per le relative cartelle. Prima di tutto create nella vostra cartella home una cartella bin (nel caso in cui non sia già presente) e generate là lo script. Dovete adattare il seguente script di esempio alle vostre esigenze e alla struttura delle cartelle:

#!/bin/bash
    DATE=$(date +%Y-%m-%d-%H%M%S)
    BACKUP_DIR="/cartelladidestinazione/backup"
    SOURCE="$HOME/cartelladiorigine"
    tar -cvzpf $BACKUP_DIR/backup-$DATE.tar.gz $SOURCE

Per farvi com­pren­de­re come funziona pre­ci­sa­men­te questo script, ve lo spie­ghia­mo ora riga per riga:

  1. La prima riga è la co­sid­det­ta shebang, che comunica al sistema operativo quale in­ter­pre­te uti­liz­za­re. In questo caso viene uti­liz­za­to bash.
     
  2. Ogni backup con tar riceve una marca temporale, im­por­tan­te per poter di­stin­gue­re chia­ra­men­te più backup. Alle variabili si dà ad esempio il seguente formato: anno-mese-giorno-ora­mi­nu­ti­se­con­di, quindi 2017-09-07-152833.
     
  3. Qui definite la cartella in cui viene creato il backup. Non terminate l’ultima sot­to­car­tel­la con  “/“.
     
  4. In questa riga stabilite quali cartelle volete inserire nell’archivio. Qui si possono anche pre­sen­ta­re diverse cartelle che vengono divise solo da uno spazio: SOURCE="$HOME/car­tel­la­dio­ri­gi­ne1 $HOME/ car­tel­la­dio­ri­gi­ne2 ". Anche in questo punto non annotate nessun  “/“ alla fine delle cartelle. Fate sempre at­ten­zio­ne ad ag­giun­ge­re uno spazio prima delle vir­go­let­te con­clu­si­ve.
     
  5. L’ultima riga dello script contiene infine il comando tar:
    • -cvzpf crea un archivio (-c), vengono così mostrati i passaggi (-v), viene compresso con gzip (-z), i permessi di accesso rimangono invariati (-p) e tutto viene ri­pro­dot­to nel seguente file (-f). So­prat­tut­to -v e -p sono quindi opzionali e avete inoltre la pos­si­bi­li­tà di ag­giun­ge­re altre opzioni per poter pia­ni­fi­ca­re di­ver­sa­men­te il vostro backup.  
    • $BACKUP_DIR/backup-$DATE.tar.gz nomina la cartella ($BACKUP_DIR) e il file dove deve essere salvato il backup. Nel nostro esempio lo chiamiamo backup, seguito dalla marca temporale corrente. Il nome del file si conclude con l’in­di­ca­zio­ne del formato in cui è stato creato il file. Se volete uti­liz­za­re un’altra com­pres­sio­ne, dovreste pensare a mo­di­fi­ca­re sia il formato del file che l’opzione nel comando.
    • Infine con la variabile $SOURCE co­mu­ni­ca­te a tar cosa deve ar­chi­via­re. Inoltre è possibile anche escludere le cartelle o i file, che non devono entrare a far parte del backup, con --exclude o –X.
Consiglio

In teoria l’esten­sio­ne che date al file di script non gioca alcun ruolo su Linux e Unix. I sistemi estra­po­la­no il tipo di file, com­pa­ran­do la struttura del file con un magic file. Si tratta quindi di un database che si può so­li­ta­men­te trovare su /etc/magic. Tuttavia si è affermata come prassi l’in­di­ca­zio­ne delle esten­sio­ni dei file, di modo che gli utenti riescano a mantenere fa­cil­men­te la visione d’insieme.

Ora salvate il file con il nome backup nella cartella bin e ag­giun­ge­te al relativo percorso la variabile PATH:

PATH=$PATH:$HOME/bin

Poi rendete ese­gui­bi­le lo script di backup appena creato:

chmod u+x $HOME/bin/backup

In questo modo rendete ese­gui­bi­le il file solo per voi (u). Potete anche assegnare i permessi a un gruppo (g), a un altro (o) o a tutti (a). In questo modo avete terminato e potete eseguire lo script:

sudo backup

Se volete ri­pri­sti­na­re il backup, ovvero de­com­pri­me­re l’archivio, basta un comando:

tar -xzf backup.tar.gz -C /

Lo script crea un backup completo. Ma nel caso di un backup dell’intero server, non sempre è la scelta migliore. Perciò dovreste ri­flet­te­re se un backup in­cre­men­ta­le con tar non risulti più sensato per i vostri scopi.

N.B.

Creando un archivio con in­di­ca­zio­ni di percorso assolute tar comunica: “tar removing leading '/' from member names”. Non si tratta di un errore bensì di un sug­ge­ri­men­to a stare attenti durante l’utilizzo: tar realizza da /home/sot­to­car­tel­la il percorso home/ sot­to­car­tel­la. Se quando estraete l’archivio non vi trovate nella root, tar crea una nuova struttura di cartella, ad esempio: /home/sot­to­car­tel­la/home/sot­to­car­tel­la. Così di­mi­nui­sce la pro­ba­bi­li­tà che per errore venga so­vra­scrit­to tutto il vostro sistema. Ri­cor­da­te­vi però che Unix non vi comunica niente in caso di so­vra­scri­zio­ne. Dovete quindi po­si­zio­nar­vi prima nella root, in caso vogliate so­sti­tui­re davvero i contenuti già esistenti. Potete invece aggirarli tramite l’opzione -P

Che cos’è un backup in­cre­men­ta­le?

I webmaster creano re­go­lar­men­te dei backup per evitare una perdita di dati. Se il sistema vero e proprio dovesse impedire il corretto fun­zio­na­men­to del servizio, fosse com­pro­mes­so o fosse stato eliminato, si può uti­liz­za­re in questo caso una versione fun­zio­nan­te ri­pri­sti­na­ta da un backup. Più spesso impostate dei punti di ri­pri­sti­no, meno dovrete fare i conti, in caso di emergenza, con perdite di dati. Se ogni volta salvate un backup completo, quindi ar­chi­via­te tutti i dati del sistema, il processo ri­chie­de­rà molto tempo e sarà ne­ces­sa­rio un maggiore spazio sulla memoria. Al posto del backup completo potete affidarvi anche ai backup in­cre­men­ta­li.

Un backup in­cre­men­ta­le pre­sup­po­ne sempre una me­mo­riz­za­zio­ne completa. Dovete prima di tutto ar­chi­via­re almeno una volta il sistema completo (o almeno la parte che volete mettere in sicurezza). In seguito in un backup in­cre­men­ta­le vengono messi in sicurezza soltanto i file nuovi o mo­di­fi­ca­ti. Ciò porta a un minore afflusso di dati, anche se richiede un impegno maggiore al momento del ri­pri­sti­no. Quando quindi ri­pri­sti­na­te il backup, avete bisogno del backup completo e di ogni backup in­cre­men­ta­le che avete creato a partire da una prima ar­chi­via­zio­ne completa. Se un file dovesse andare perduto (è og­gi­gior­no meno probabile che ai tempi dei nastri magnetici), il backup pre­sen­te­reb­be delle lacune.

Creare un backup in­cre­men­ta­le con tar

Con tar si possono creare dei backup in­cre­men­ta­li a in­ter­val­li di tempo regolari. Anche per questo vi con­si­glia­mo di scrivere un vostro script di backup. In questo modo potete ad esempio stabilire che venga creato una volta al mese un backup completo e a seguire un backup in­cre­men­ta­le gior­na­lie­ro. Inoltre con il seguente script si ottiene che i vecchi backup vengano spostati re­go­lar­men­te nelle cartelle ordinate per data.

A questo scopo, in aggiunta a tar, avete bisogno anche di cron. Questo demone (un programma che funziona in back­ground) permette delle ese­cu­zio­ni a tempo degli altri processi; di base cron è già compreso su Ubuntu. Prima di tutto aprite di nuovo un editor testuale e create il vostro script:

#!/bin/bash
BACKUP_DIR="/cartelladidestinazione/backup"
ROTATE_DIR="/cartelladidestinazione/backup/rotate"
TIMESTAMP="timestamp.dat"
SOURCE="$HOME/cartelladiorigine "
DATE=$(date +%Y-%m-%d-%H%M%S)
EXCLUDE="--exclude=/mnt/* --exclude=/proc/* --exclude=/sys/* --exclude=/tmp/*"
cd /
mkdir -p ${BACKUP_DIR}
set -- ${BACKUP_DIR}/backup-??.tar.gz
lastname=${!#}
backupnr=${lastname##*backup-}
backupnr=${backupnr%%.*}
backupnr=${backupnr//\?/0}
backupnr=$[10#${backupnr}]
if [ "$[backupnr++]" -ge 30 ]; then
mkdir -p ${ROTATE_DIR}/${DATE}
mv ${BACKUP_DIR}/b* ${ROTATE_DIR}/${DATE}
mv ${BACKUP_DIR}/t* ${ROTATE_DIR}/${DATE}
backupnr=1
fi
backupnr=0${backupnr}
backupnr=${backupnr: -2}
filename=backup-${backupnr}.tar.gz
tar -cpzf ${BACKUP_DIR}/${filename} -g ${BACKUP_DIR}/${TIMESTAMP} -X $EXCLUDE ${SOURCE]

Anche per questo script di backup vi spie­ghia­mo passo per passo cosa succede:

  • Prima di tutto definite di nuovo l’in­ter­pre­te.
     
  • In seguito stabilite le variabili. Nuove sono la cartella per le rotazioni dei backup (una sorta di archivio dei backup) e un file per la marca temporale.
     
  • Nel nostro esempio vi il­lu­stria­mo che non è sempre utile inserire tutte le directory nel backup. Abbiamo escluso in questo caso i contenuti della cartella (e non la cartella stessa, perciò la wildcard “*“) mnt, proc, sys e tmp. Infatti i dati presenti in queste directory sono tem­po­ra­nei o vengono creati di nuovo a ogni nuovo riavvio del sistema.
     
  • Per fare in modo che i percorsi vengano in­ter­pre­ta­ti tutti in maniera corretta, lo script si sposta con cd / nella root.
     
  • Con mkdir create la cartella di backup, nel caso in cui non esista ancora.
     
  • Ora vengono inserite tutte le variabili. Visto che volete numerare i vostri backup, il blocco del codice individua il numero dell’ultimo backup. Ciò accade mentre lo script rimuove gli altri com­po­nen­ti del nome del file.
     
  • Inserite sempre solo 30 backup, poi lo script sposta tutti i file di archivio nella cartella di rotazione, che viene prima creata e poi con mv vengono spostati nella nuova cartella tutti i file che co­min­cia­no con le lettere b e t. La li­mi­ta­zio­ne delle lettere si esplica con il fatto che ci do­vreb­be­ro essere dei file con­tras­se­gna­ti nella cartella, cioè backup e timestamp. Infine lo script imposta il numero del backup di nuovo su 1. Se lo script rileva che non sono ancora stati fatti 30 backup, aumenta il numero di file sem­pli­ce­men­te di 1 (++).
     
  • Ora lo script torna indietro sui propri passi e su quello che aveva stabilito all’inizio: i comandi si occupano del fatto che il nome del file (ora con il nuovo numero) sia di nuovo completo.
     
  • Infine lo script esegue il comando tar vero e proprio: con­fron­ta­to con il comando del semplice backup completo è stata aggiunta qui un’altra opzione. Con –g viene con­sen­ti­to il backup in­cre­men­ta­le. Così tar estrapola la marca temporale di ogni file, la compara con i dati re­gi­stra­ti finora nel timestamp.dat e può così decidere quali modifiche sono presenti dall’ultimo backup. Solo queste entrano a far parte del nuovo archivio.
N.B.

Lo script sposta (durante l’ar­chi­via­zio­ne gior­na­lie­ra) ogni mese i file di backup in una nuova cartella di archivio, di modo che la cartella di backup vera e propria contenga solo i dati più recenti. Tuttavia non è integrata nessuna funzione che limiti il numero della cartella di archivio. Ciò significa che dovete eli­mi­nar­la ma­nual­men­te.

In questo modo lo script per la creazione di un backup in­cre­men­ta­le è pronto: salvate il file come backup nella cartella bin. Anche qui dovete esportare il percorso e rendere ese­gui­bi­le lo script:

PATH=$PATH:$HOME/bin
chmod u+x $HOME/bin/backup

Teo­ri­ca­men­te ora potete avviare il vostro script di backup con sudo backup. L’idea dietro al backup in­cre­men­ta­le è però quella che il pro­ce­di­men­to venga au­to­ma­tiz­za­to ed eseguito gior­nal­men­te. Per questo si ricorre a cron e si mo­di­fi­ca­no le co­sid­det­te crontab. Questa è la tabella che esegue le in­di­ca­zio­ni basandosi su cron. Ha sei campi:

Minuti (0-59) Ore (0-23) Giorni (1-31) Mesi (1-12) Giorni della settimana (0-7) Incarico

Nei campi potete inserire dei numeri relativi alla fascia dei valori (indicati tra parentesi) o un asterisco (*). Quest’ultimo significa pres­sap­po­co “a ogni possibile valore”. Una par­ti­co­la­ri­tà è rap­pre­sen­ta­ta dalla colonna dei giorni della settimana. Qui potete stabilire che un incarico venga eseguito ad esempio ogni lunedì (1) o solo nei giorni feriali (1-5). Si può indicare la domenica con due diversi valori: sia 0 che 7 si ri­fe­ri­sco­no alla domenica, visto che per alcune persone la settimana comincia con questo giorno e per altre termina con questo.

Nella riga di comando aprite la modalità editor di cron:

sudo crontab –e

Qui inserite la seguente riga:

30 7 * * * /home/bin/backup

In questo modo abbiamo au­to­riz­za­to che il backup venga eseguito ogni giorno (e ogni mese, in­di­pen­den­te­men­te dal giorno della settimana) alle 7.30 di mattina. Salvate le vostre modifiche e il vostro backup in­cre­men­ta­le gior­na­lie­ro è pronto per l’uso.

N.B.

cron funziona solo quando il vostro sistema è attivato. Questo è il caso per i web server. Se però pia­ni­fi­ca­te di uti­liz­za­re lo script per la sicurezza del vostro PC o del notebook, dovreste anche garantire che i di­spo­si­ti­vi fun­zio­ni­no ogni giorno alle 7.30. Se il di­spo­si­ti­vo non è attivato, il backup non verrà ef­fet­tua­to. Anacron offre una pos­si­bi­li­tà di aggirare questo im­pe­di­men­to: infatti il programma sposta su un sistema non fun­zio­nan­te la versione pia­ni­fi­ca­ta a un momento in cui il di­spo­si­ti­vo è di nuovo attivo.

Ri­pri­sti­na­re il sistema da un backup

Non lo si augura a nessuno, ma può succedere che a causa di un danno serio il vostro sistema debba essere ri­pri­sti­na­to. Con tar è possibile fa­cil­men­te e non c’è inoltre bisogno di uno script ag­giun­ti­vo. Non basta però un solo comando nel caso di un backup completo, poiché è insito nella natura dei backup in­cre­men­ta­li che debbano essere de­com­pres­si più file. Inserite queste righe di comando nella console:

BACKUP_DIR=/cartelladidestinazione/backup
cd /
    for archive in ${BACKUP_DIR}/backup-*.tar.gz; do
    tar -xpzf $archive -C /
    done
N.B.

Ri­pri­sti­nan­do il sistema da un backup, vengono so­vra­scrit­te tutte le cartelle ed even­tual­men­te anche i dati im­por­tan­ti.

Per evitare di dover estrarre sin­go­lar­men­te i file di archivio, uti­liz­za­te un ciclo for:

  1. Nel primo passaggio definite la cartella in cui si trovano i backup.
  2. Con cd / vi spostate nella root, di modo da as­si­cu­rar­vi che l’archivio venga estratto nel posto corretto.
  3. Ora avviate un ciclo for: questo comando ripete le azioni che si trovano tra do e done, fino a quando non sono state percorse tutte le pos­si­bi­li­tà. Per spe­ci­fi­ca­re il comando, indicate di nuovo il percorso del vostro backup con un asterisco come wildcard, perché volete estrarre tutti i file di archivio in questa cartella.
  4. Si specifica con il comando tar quanto segue: estraete (-x), man­te­nen­do i permessi di accesso (-p), e de­com­pri­me­te (-z) l’archivio (-f $archivio) nella root (-C /).
  5. Con done stabilite il punto finale del ciclo.

Visto che avete numerato l’archivio al momento della sua creazione, i backup vengono di nuovo riu­ti­liz­za­ti l’uno dopo l’altro, partendo dal più vecchio. È im­por­tan­te sapere che negli archivi, che sono stati generati dopo il backup completo, si trovano le versioni più nuove dei file. Ciò significa che durante il ciclo viene estratta prima la versione vecchia per poi essere so­vra­scrit­ta con una nuova versione nel ciclo suc­ces­si­vo. Alla fine avrete so­vra­scrit­to il sistema completo con il backup e ri­pri­sti­na­to la versione ar­chi­via­ta più recente di ogni singolo file.

Questo è il senso reale di un backup in­cre­men­ta­le: il ri­pri­sti­no completo del sistema. Per­cor­ren­do una strada un po’ più lunga è però persino possibile pro­teg­ge­re solo un singolo file e re­cu­pe­ra­re l’ultima versione ar­chi­via­ta pre­ce­den­te­men­te. Per fare ciò pro­ce­dia­mo in due passaggi:

BACKUP_DIR=/cartelladidestinazione/backup
    ls -l ${BACKUP_DIR}
    for archive in ${BACKUP_DIR}/backup-*tar.gz; do
    tar -tzf $archive | grep file-cercato;
    done

Anche in questo primo passaggio ricorrete a un ciclo for, che viene tuttavia uti­liz­za­to per la ricerca e non per l’estra­zio­ne:

  1. Definite di nuovo la cartella di backup.
  2. Con il comando ls vi vengono mostrati tutti i file e le cartelle nella cartella di backup. L’opzione –l consente di avere delle in­for­ma­zio­ni det­ta­glia­te.
  3. Iniziate un ciclo come accade per il ri­pri­sti­no dell’archivio completo.
  4. La modifica im­por­tan­te è ri­scon­tra­bi­le nelle opzioni del comando tar: al posto di creare un archivio (c) o di estrarlo (x), potete farvi mostrare il contenuto degli archivi (t). Visto che però non volete cercare il file ma­nual­men­te, ca­na­liz­za­te l‘output con una pipe (una lineetta verticale) al comando grep, che cerca in questo modo il file di cui siete alla ricerca all’interno dell’output (quindi il contenuto dell’archivio).
  5. Terminate il ciclo.

Ora il terminale vi indica il file ricercato e forse anche più di una volta, se l’avete mo­di­fi­ca­to re­go­lar­men­te e quindi appare in ogni backup in­cre­men­ta­le. Segnatevi il percorso al file e create un altro ciclo, che ri­pri­sti­na l’ultima versione salvata:

for archive in ${BACKUP_DIR}/backup-*.tar.gz; do
tar –xzf $archive -C /cartelladidestinazione/backup/file-cercato
done

Ora il file verrà ri­pri­sti­na­to nel posto ori­gi­na­rio so­vra­scri­ven­do così anche una possibile versione più attuale.

Vai al menu prin­ci­pa­le