Capitolo 9. Tecniche fondamentali di backup
9.1.1. Preparazione dei vostri dati
Nella maggioranza dei casi prima raccoglieremo tutti i dati da conservare in un unico file
d'archivio, che poi compatteremo. Il processo di archiviazione implica il concatenamento di tutti i
file elencati e l'estrazione di tutti gli spazi non necessari. In Linux di solito questo si fa con il
comando tar. In origine tar era stato creato per archiviare dati su nastro, ma può anche creare
archivi, noti come tarball.
tar ha molte opzioni, di cui citiamo qui sotto le più importanti:
●-v: dettagliata o “verbosa”
●-t: prova o test. Mostra il contenuto di una tarball
●-x: estrazione archivio
●-c: creazione archivio
●
-f perifericaarchivio: usa perifericaarchivio come
sorgente/destinazione della tarball. La periferica predefinita è la prima a nastro
(di solito /dev/st0 o qualcosa di simile)
E' comune trascurare il prefisso meno [] con le opzioni di tar, come potete vedere negli esempi
seguenti.
Usate GNU tar per la compatibilità
Gli archivi creati con una versione proprietaria di tar in un sistema potrebbero essere
incompatibili con tar di un altro sistema proprietario. Ciò potrebbe causare molti mal di
testa, come quando l'archivio deve essere ripristinato in un sistema che non esiste più.
Usate la versione GNU di tar in tutti i sistemi per prevenire che il vostro
amministratore di sistema scoppi in lacrime. Linux utilizza sempre tar di GNU. Quando
lavorate su altre macchine UNIX, inserite tar help per scoprire quale versione state
usando. Contattate il vostro amministratore di sistema se non vedete la parola GNU da
qualche parte.
Nell'esempio seguente viene creato e spacchettato un archivio.
gaby:~> ls images/ me+tux.jpg nimf.jpggaby:~> tar cvf images in a dir.tar images/− − − images/
images/nimf.jpg images/me+tux.jpg
gaby:~> cd images
gaby:~/images> tar cvf images without a dir.tar *.jpg− − − me+tux.jpg
nimf.jpg
gaby:~/images> cd
gaby:~> ls */*.tar
images/images without a dir.tar− − − gaby:~> ls *.tar
images in a dir.tar− − −
gaby:~> tar xvf images in a dir.tar− − − images/
images/nimf.jpg images/me+tux.jpg
gaby:~> tar tvf images/images without dir.tar− −
rw r r gaby/gaby 42888 1999 06 30 20:52:25 me+tux.jpg
− − −− −− − −
rw r r gaby/gaby 7578 2000 01 26 12:58:46 nimf.jpg
− − −− −− − −
gaby:~> tar xvf images/images without a dir.tar− − − me+tux.jpg
nimf.jpg
gaby:~> ls *.jpg me+tux.jpg nimf.jpg
Questo esempio illustra anche la differenza tra una directory archiviata con tar e un complesso di
file archiviati con tar. E' consigliabile comprimere le directory solamente, cosicché i file non
sprizzeranno ovunque nel momento dello spacchettamento della tarball (cosa che potrebbe avvenire
in un altro sistema dove non potreste sapere quali file ci siano già là e quali siano quelli
dell'archivio).
Quando una unità a nastro è connessa al vostro computer ed è stata configurata dall'amministratore
di sistema, i nomi dei file terminanti in .tar vengono rimpiazzati con il nome della periferica a
nastro, per esempio:
tar cvf /dev/tape mail/
La directory mail e tutti i file che contiene vengono compressi in un file che viene
immediatamente scritto su nastro. Un elenco dei contenuti ci viene mostrato perché abbiamo usato
l'opzione "verboso".
9.1.1.2. Copie di sicurezza incrementali con tar
Lo strumento tar supporta la creazione di backup incrementali, usando l'opzione N. Con tale
opzione potete specificare una data e tar controllerà la marca temporale (timestamp) di tutti i file
specificati rispetto a questa data. Se i file sono cambiati più recentemente di tale data, saranno
inclusi nella copia di sicurezza. L'esempio seguente utilizza il tempo di creazione di un precedente
archivio come valore della data. Per prima cosa viene creato l'archivio iniziale e viene mostrata la
marca temporale del file di backup. Poi viene creato un nuovo file di cui vogliamo fare un nuovo
backup, che contenga solo questo nuovo file:
jimmy:~> tar cvpf /var/tmp/javaproggies.tar java/*.java java/btw.java java/error.java java/hello.java java/income2.java java/income.java java/inputdevice.java java/input.java java/master.java java/method1.java java/mood.java java/moodywaitress.java java/test3.java java/TestOne.java java/TestTwo.java java/Vehicle.java jimmy:~> ls −l /var/tmp/javaproggies.tar
rw rw r 1 jimmy jimmy 10240 Jan 21 11:58 /var/tmp/javaproggies.tar − − − −−
jimmy:~> touch java/newprog.java
jimmy:~> tar −N /var/tmp/javaproggies.tar \
cvp /var/tmp/incremental1 javaproggies.tar java/*.java 2> /dev/null
− −
java/newprog.java
jimmy:~> cd /var/tmp/
jimmy:~> tar xvf incremental1 javaproggies.tar− java/newprog.java
Gli errori standard vengono rediretti verso /dev/null: se non fate ciò, tar stamperà un
messaggio per ogni file non modificato dicendovi che non sarà eliminato.
Questo modo di funzionare ha lo svantaggio che si basa sul tempo di creazione dei file: dite che
scaricate un archivio nella directory contenente le vostre copie di sicurezza e l'archivio contiene file
che sono stati creati due anni fa. Quando viene controllata la data di creazione di quei file rispetto al
tempo di creazione dell'archivio iniziale, i nuovi file sembreranno in realtà vecchi a tar e non
saranno inclusi in un backup incrementale fatto usando l'opzione -N.
Una scelta migliore potrebbe essere l'opzione -g, che creerà un elenco di file da archiviare. Nel
momento della copia di sicurezza incrementale, i file saranno confrontati con questo elenco.
Funziona così:
jimmy:~> tar cvpf work 20030121.tar − −g snapshot 20030121 work/− work/
work/file1 work/file2 work/file3
jimmy:~> file snapshot 20030121− snapshot 20030121: ASCII text−
Il giorno dopo l'utente jimmy lavora ancora un po' su file3 e crea file4. Al termine della
giornata effettua una nuova copia di sicurezza:
jimmy:~> tar cvpf work 20030122.tar g snapshot 20030121 work/− − − work/ work/file3 work/file4
Questi sono alcuni semplici esempi, ma potreste usare anche questo tipo di comando in un processo
cron (v. Sezione 4.4.4.) che indica per esempio un file di snapshot per il backup settimanale e uno
per quello giornaliero. I file di snapshot verranno rimpiazzati al momento dei backup completi in tal
caso.
Maggiori informazioni si possono trovare nella documentazione di tar.
La vera sostanza
Come probabilmente potete notare, tar va bene quando stiamo discorrendo di una
semplice directory, un insieme di file che stanno assieme. Comunque esistono degli
strumenti che sono più facili da gestire quando volete archiviare intere partizioni, dischi
o progetti più grandi. Noi parliamo qui solo di tar perché è uno strumento molto diffuso
per distribuire archivi. Capiterà abbastanza spesso che avrete bisogno di installare un
software che trovate nella cosiddetta "tarball compressa". Date uno sguardo alla Sezione
9.3. per un modo più semplice di effettuare copie di sicurezza regolari.
9.1.1.3. Compressione e spacchettamento con gzip o bzip2
I dati, comprese le tarball, possono essere compressi usando gli strumenti zip. Il comando gzip
aggiungerà il suffisso .gz al nome del file e rimuoverà il file originale.
jimmy:~> ls −la | grep tar
rw rw r 1 jimmy jimmy 61440 Jun 6 14:08 images without dir.tar
− − − −− − −
jimmy:~> ls −la images without dir.tar.gz− −
rw rw r 1 jimmy jimmy 50562 Jun 6 14:08 images without dir.tar.gz
− − − −− − −