Backup e ripristino¶
In questo capitolo imparerai come eseguire il backup e ripristinare i tuoi dati con Linux.
Obiettivi : In questo capitolo, futuri amministratori Linux impareranno come:
usare i comandi tar
e cpio
per effettuare un backup;
controllare i loro backup e ripristinare i dati;
comprimere o decomprimere i loro backup.
backup, ripristino, compressione
Conoscenza:
Complessità:
Tempo di lettura: 40 minuti
Nota
In tutto questo capitolo le strutture di comando usano "device" per specificare sia la posizione di destinazione per il backup, sia la posizione di origine durante il ripristino. Il dispositivo può essere un supporto esterno o un file locale. Dovresti sviluppare una certa confidenza con questo concetto durante lo svolgimento del capitolo, ma puoi sempre ritornare a questa nota per chiarimenti se ne hai bisogno.
Il backup risponde a una necessità di conservare e ripristinare i dati in modo sicuro ed efficace.
Il backup consente di proteggersi dai seguenti problemi:
- Distruzione: volontaria o involontaria. Umana o tecnica. Virus, ...
- Cancellazione: volontaria o involontaria. Umana o tecnica. Virus, ...
- Integrità : i dati diventano inutilizzabili.
Nessun sistema è infallibile, nessun umano è infallibile, quindi per evitare di perdere dati, questi devono essere salvati per poi essere in grado di ripristinarli dopo un problema.
Il supporto di backup dovrebbe essere tenuto in un'altra stanza (o edificio) rispetto al server in modo che un disastro non distrugga il server e i backup.
Inoltre, l'amministratore deve controllare regolarmente che i supporti siano ancora leggibili.
Generalità¶
Ci sono due principi, il backup e l'archivio.
- L'archivio distrugge la fonte delle informazioni dopo l'operazione.
- Il backup conserva la fonte delle informazioni dopo l'operazione.
Queste operazioni consistono nel salvare informazioni in un file, su un supporto periferico o supportato (nastri, dischi, ...).
Il processo¶
I backup richiedono molta disciplina e rigore da parte dell'amministratore di sistema. È necessario porsi le seguenti domande:
- Qual è il mezzo appropriato?
- Cosa dovrebbe essere salvato?
- Quante copie?
- Quanto durerà il backup?
- Metodo?
- Quante volte?
- Automatico o manuale?
- Dove conservarlo?
- Quanto tempo sarà conservato?
Metodi di backup¶
- Completo: uno o più filesystems sono salvati (kernel, dati, utilità, ...).
- Parziale: uno o più files sono salvati (configurazioni, directories, ...).
- Differenziale: solo i file modificati dall'ultimo backup completo sono salvati.
- Incrementale: solo i file modificati dall'ultimo backup sono salvati.
Periodicità¶
- Pre-corrente : in un dato momento (prima di un aggiornamento del sistema, ...).
- Periodica: Ogni giorno, settimana, mese, ...
Suggerimento
Prima di una modifica del sistema, può essere utile fare un backup. Tuttavia, non ha senso eseguire il backup dei dati ogni giorno se vengono modificati solo ogni mese.
Metodi di ripristino¶
A seconda delle utilità disponibili, sarà possibile eseguire diversi tipi di ripristini.
- Ripristino Completo: alberi delle directory, ...
- Ripristino Selettivo: parte dell'albero, files, ...
È possibile ripristinare un intero backup ma è anche possibile ripristinarne solo una parte. Tuttavia, quando si ripristina una directory, i file creati dopo il backup non vengono eliminati.
Suggerimento
Per ripristinare una directory come era al momento del backup, è necessario eliminare completamente il suo contenuto prima di avviare il ripristino.
Gli strumenti¶
Ci sono molte utilità per fare il backup.
- strumenti di editor ;
- strumenti grafici;
- strumenti da riga di comando:
tar
,cpio
,pax
,dd
,dump
, ...
I comandi che useremo qui sono tar
e cpio
.
-
tar
: -
facile da usare;
-
consente di aggiungere file a un backup esistente.
-
cpio
: -
conserva i proprietari;
- conserva gruppi, date e permessi;
- salta i file danneggiati;
- file system completo.
Nota
Questi comandi salvano in un formato proprietario e standardizzato.
Convenzione di denominazione¶
L'uso di una convenzione di denominazione consente di indirizzare rapidamente il contenuto di un file di backup ed evitare così ripristini pericolosi.
- nome della directory;
- utilità utilizzata;
- opzioni utilizzate;
- data.
Suggerimento
Il nome del backup deve essere un nome esplicito.
Nota
La nozione di estensione in Linux non esiste. In altre parole, il nostro uso delle estensioni qui è per l'operatore umano. Se l'amministratore di sistema vede un file .tar.gz
o .tgz
, per esempio, sa come gestire il file.
Contenuto di un backup¶
Un backup contiene in genere i seguenti elementi:
- il file;
- il nome;
- il proprietario;
- la dimensione;
- le autorizzazioni;
- data di accesso.
Nota
Manca il numero inode
.
Modalità di archiviazione¶
Esistono due diverse modalità di archiviazione:
- file su disco;
- dispositivo.
Tape ArchiveR - tar
¶
Il comando tar
consente di salvare su più supporti successivi (opzioni multi-volume).
È possibile estrarre tutto o parte di un backup.
tar
esegue implicitamente il backup in modalità relativa anche se il percorso delle informazioni di cui eseguire il backup è menzionato in modalità assoluta. Tuttavia, sono possibili backup e ripristini in modalità assoluta.
Linee guida per il ripristino¶
Le domande giuste da porsi sono:
- cosa: parziale o completo;
- dove: il luogo in cui i dati saranno ripristinati;
- come: assoluto o relativo.
Attenzione
Prima di un ripristino, è importante prendere del tempo per pensare e determinare il metodo più appropriato per evitare errori.
I ripristini vengono solitamente eseguiti dopo che si è verificato un problema che deve essere risolto rapidamente. Un ripristino scadente può, in alcuni casi, peggiorare la situazione.
Backup con tar
¶
L'utilità predefinita per la creazione di backup su sistemi UNIX è il comando tar
. Questi backup possono essere compressi con bzip2
, xz
, lzip
, lzma
, lzop
, gzip
, compress
o zstd
.
tar
consente di estrarre un singolo file o una directory da un backup, visualizzarne il contenuto o convalidarne l'integrità.
Stimare le dimensioni di un backup¶
Il comando seguente stima la dimensione in kilobyte di un possibile file tar:
$ tar cf - /directory/to/backup/ | wc -c
20480
$ tar czf - /directory/to/backup/ | wc -c
508
$ tar cjf - /directory/to/backup/ | wc -c
428
Attenzione
Attenzione, la presenza di "-" nella riga di comando disturba zsh
. Passa a bash
!
Convenzione di denominazione per un backup tar
¶
Ecco un esempio di convenzione di denominazione per un backup tar
, sapendo che la data deve essere aggiunta al nome.
chiavi | Files | Suffisso | Funzionalità |
---|---|---|---|
cvf |
home |
home.tar |
/home in modalità relativa, forma non compressa |
cvfP |
/etc |
etc.A.tar |
/etc in modalità assoluta, nessuna compressione |
cvfz |
usr |
usr.tar.gz |
/usr in modalità relativa, compressione gzip |
cvfj |
usr |
usr.tar.bz2 |
/usr in modalità relativa, compressione bzip2 |
cvfPz |
/home |
home.A.tar.gz |
home in modalità assoluta, compressione gzip |
cvfPj |
/home |
home.A.tar.bz2 |
home in modalità assoluta, compressione bzip2 |
… |
Creare un backup¶
Creare un backup in modalità relativa¶
La creazione di un backup non compresso in modalità relativa viene eseguita con le opzioni cvf
:
tar c[vf] [device] [file(s)]
Esempio:
[root]# tar cvf /backups/home.133.tar /home/
Opzione | Descrizione |
---|---|
c |
Crea un backup. |
v |
Visualizza il nome dei file elaborati. |
f |
Consente di specificare il nome del backup (supporto). |
Suggerimento
Il trattino (-) davanti alle opzioni di 'tar' non è necessario!
Creare un backup in modalità assoluta¶
La creazione di un backup non compresso in modo esplicito in modalità assoluta viene eseguita con le opzioni cvfP
:
tar c[vf]P [device] [file(s)]
Esempio:
[root]# tar cvfP /backups/home.133.P.tar /home/
Opzione | Descrizione |
---|---|
P |
Crea un backup in modalità assoluta. |
Attenzione
Con la chiave P
, il percorso dei file su cui eseguire il backup deve essere inserito come assoluto. Se le due condizioni (chiave P
e percorso assoluto) non sono indicate, il backup è in modalità relativa.
Creazione di un backup compresso con gzip
¶
La creazione di un backup compresso con 'gzip' viene eseguita con le opzioni cvfz
:
tar cvzf backup.tar.gz dirname/
Opzione | Descrizione |
---|---|
z |
Comprime il backup con gzip. |
Nota
L'estensione .tgz
è un'estensione equivalente a .tar.gz
.
Nota
Mantenere le chiavi cvf
(tvf
o xvf
) invariate per tutte le operazioni di backup e aggiungere semplicemente la chiave di compressione alla fine delle chiavi rende il comando più facile da capire (ad esempio, cvfz
o cvfj
, ecc.).
Creazione di un backup compresso con bzip
¶
La creazione di un backup compresso con bzip
viene eseguita con le opzioni cvfj
:
tar cvfj backup.tar.bz2 dirname/
Opzione | Descrizione |
---|---|
j |
Comprime il backup con bzip2. |
Nota
Le estensioni .tbz
e .tb2
sono equivalenti alle estensioni .tar.bz2
.
Compressione compress
, gzip
, bzip2
, lzip
e xz
¶
La compressione, e di conseguenza la decompressione, avrà un impatto sul consumo di risorse (tempo e utilizzo della CPU).
Ecco una classifica della compressione di un insieme di file di testo, dal meno al più efficiente:
- compress (
.tar.Z
) - gzip (
.tar.gz
) - bzip2 (
.tar.bz2
) - lzip (
.tar.lz
) - xz (
.tar.xz
)
Aggiungere un file o una directory a un backup esistente¶
È possibile aggiungere uno o più elementi a un backup esistente.
tar {r|A}[key(s)] [device] [file(s)]
Per aggiungere /etc/passwd
al backup /backups/home.133.tar
:
[root]# tar rvf /backups/home.133.tar /etc/passwd
L'aggiunta di una directory è simile. Qui aggiungi dirtoadd
a backup_name.tar
:
tar rvf backup_name.tar dirtoadd
Opzione | Descrizione |
---|---|
r |
Aggiunge uno o più file alla fine di un backup multimediale ad accesso diretto (disco rigido). |
A |
Aggiunge uno o più file al termine di un backup su un supporto di accesso sequenziale (nastro). |
Nota
Non è possibile aggiungere file o cartelle a un backup compresso.
$ tar rvfz backup.tgz filetoadd
tar: Cannot update compressed archives
Try `tar --help' or `tar --usage' for more information.
Nota
Se il backup è stato eseguito in modalità relativa, aggiungere file in modalità relativa. Se il backup è stato eseguito in modalità assoluta, aggiungere i file in modalità assoluta.
Le modalità miste possono causare problemi durante il ripristino.
Elencare il contenuto di un backup¶
È possibile visualizzare il contenuto di un backup senza estrarlo.
tar t[key(s)] [device]
Opzione | Descrizione |
---|---|
t |
Visualizza il contenuto di un backup (compresso o meno). |
Esempi:
tar tvf backup.tar
tar tvfz backup.tar.gz
tar tvfj backup.tar.bz2
Quando il numero di file in un backup diventa grande, è possibile inviare in pipe il risultato del comando tar
ad un impaginatore (more
, less
, most
, ecc.):
tar tvf backup.tar | less
Suggerimento
Per elencare o recuperare il contenuto di un backup, non è necessario menzionare l'algoritmo di compressione utilizzato quando è stato creato il backup. Cioè, un tar tvf
è equivalente a tar tvfj
, per leggere il contenuto, e un tar xvf
è equivalente a tar xvfj
, per estrarre.
Suggerimento
Controlla sempre il contenuto di un backup.
Verificare l'integrità di un backup¶
L'integrità di un backup può essere testata con la chiave W
al momento della sua creazione:
tar cvfW file_name.tar dir/
L'integrità di un backup può essere testata con la chiave d
dopo la sua creazione:
tar vfd file_name.tar dir/
Suggerimento
Aggiungendo una seconda v
alla chiave precedente, si otterrà l'elenco dei file archiviati così come le differenze tra i file archiviati e quelli presenti nel file system.
$ tar vvfd /tmp/quodlibet.tar .quodlibet/
drwxr-x--- rockstar/rockstar 0 2021-05-21 00:11 .quodlibet/
-rw-r--r-- rockstar/rockstar 0 2021-05-19 00:59 .quodlibet/queue
[…]
-rw------- rockstar/rockstar 3323 2021-05-21 00:11 .quodlibet/config
.quodlibet/config: Mod time differs
.quodlibet/config: Size differs
[…]
L'opzione W
viene utilizzata anche per confrontare il contenuto di un archivio con il filesystem:
$ tar tvfW file_name.tar
Verify 1/file1
1/file1: Mod time differs
1/file1: Size differs
Verify 1/file2
Verify 1/file3
La verifica con l'opzione W
non può essere eseguita con un archivio compresso. Deve essere utilizzata l'opzione D:
tar dfz file_name.tgz
tar dfj file_name.tar.bz2
Estrarre (untar) un backup¶
L'estrazione di un backup (untar) *.tar
viene eseguito con le opzioni xvf
:
Estrarre il file etc/exports
dal backup /savings/etc.133.tar
nella cartella etc
della directory corrente:
tar xvf /backups/etc.133.tar etc/exports
Estrarre tutti i file dal backup compresso /backups/home.133.tar.bz2
nella directory corrente:
[root]# tar xvfj /backups/home.133.tar.bz2
Estrarre tutti i file dal backup /backups/etc.133.P.tar
nella loro directory originale:
tar xvfP /backups/etc.133.P.tar
Attenzione
Vai nel posto giusto.
Controlla il contenuto del backup.
Opzione | Descrizione |
---|---|
x |
Estrarre i file dal backup, compressi o meno. |
L'estrazione di un backup tar-gzipped (*.tar.gz
) viene eseguita con le opzioni xvfz
:
tar xvfz backup.tar.gz
L'estrazione di un tar-bzipped (*.tar.bz2
) viene eseguita con le opzioni xvfj
:
tar xvfj backup.tar.bz2
Suggerimento
Per estrarre o elencare il contenuto di un backup, non è necessario menzionare l'algoritmo di compressione utilizzato per creare il backup. Cioè, un tar xvf
è equivalente a tar xvfj
, per estrarre il contenuto, e un tar tvf
è equivalente a tar tvfj
, per elencare.
Attenzione
Per ripristinare i file nella loro cartella originale (chiave P
di un tar xvf
), devi aver generato il backup con il percorso assoluto. Cioè, con la chiave P
di un tar cvf
.
Estrarre solo un file da un backup tar¶
Per estrarre un file specifico da un backup tar, specificare il nome di tale file alla fine del comando tar xvf
.
tar xvf backup.tar /path/to/file
Il comando precedente estrae solo il file /path/to/file
dal backup backup.tar
. Questo file verrà ripristinato nella directory /path/to/
creata, o già presente, nella directory corrente.
tar xvfz backup.tar.gz /path/to/file
tar xvfj backup.tar.bz2 /path/to/file
Estrarre una cartella da un backup tar¶
Per estrarre una sola directory (incluse le sottodirectory e i file) da un backup, specificare il nome della directory alla fine del comando tar xvf
.
tar xvf backup.tar /path/to/dir/
Per estrarre più directory, specificare ciascuno dei nomi uno dopo l'altro:
tar xvf backup.tar /path/to/dir1/ /path/to/dir2/
tar xvfz backup.tar.gz /path/to/dir1/ /path/to/dir2/
tar xvfj backup.tar.bz2 /path/to/dir1/ /path/to/dir2/
Estrarre un gruppo di file da un backup tar utilizzando espressioni regolari (regex)¶
Specificate un (regex) per estrarre i file corrispondenti al modello di selezione specificato.
Ad esempio, per estrarre tutti i file con l'estensione .conf
:
tar xvf backup.tar --wildcards '*.conf'
chiavi :
--wildcards *.conf
corrisponde ai file con estensione.conf
.
CoPy Input Output - cpio
¶
Il comando cpio
consente di salvare su più supporti successivi senza specificare alcuna opzione.
È possibile estrarre tutto o parte di un backup.
Non c'è alcuna opzione, a differenza del comando tar
, per eseguire il backup e comprimere allo stesso tempo. Quindi è fatto in due passaggi: backup e compressione.
Per eseguire un backup con cpio
, è necessario specificare un elenco di file di cui eseguire il backup.
Questo elenco è fornito con i comandi find
, ls
o cat
.
find
: naviga in un albero, ricorsivo o meno;ls
: elencare una directory, ricorsiva o meno;cat
: legge un file contenente gli alberi delle directory o i file da salvare.
Nota
ls
non può essere usato con -l
(dettagli) o -R
(ricorsivo).
Richiede un semplice elenco di nomi.
Creare un backup con il comando cpio
¶
Sintassi del comando cpio
:
[files command |] cpio {-o| --create} [-options] [<file-list] [>device]
Esempio:
Con un reindirizzamento dell'output di cpio
:
find /etc | cpio -ov > /backups/etc.cpio
Utilizzo del nome di un supporto di backup:
find /etc | cpio -ovF /backups/etc.cpio
Il risultato del comando find
viene inviato come input al comando cpio
tramite una pipe (carattere |
, AltGr+6).
Qui, il comando find /etc
restituisce un elenco di file corrispondenti al contenuto della directory /etc
(ricorsivamente) al comando cpio
, che esegue il backup.
Non dimenticare il segno >
durante il salvataggio o l'opzione F save_name_cpio
.
Opzioni | Descrizione |
---|---|
-o |
Crea un backup (output). |
-v |
Visualizza il nome dei file elaborati. |
-F |
Indica il backup da modificare (medium). |
Backup su un supporto:
find /etc | cpio -ov > /dev/rmt0
Il supporto può essere di vari tipi:
- unità nastro:
/dev/rmt0
; - una partizione:
/dev/sda5
,/dev/hda5
, etc.
Tipo di backup¶
Backup con percorso relativo¶
cd /
find etc | cpio -o > /backups/etc.cpio
Backup con percorso assoluto¶
find /etc | cpio -o > /backups/etc.A.cpio
Attenzione
Se il percorso specificato nel comando find
è assoluto il backup verrà eseguito in assoluto.
Se il percorso indicato nel comando find
è relativo il backup verrà eseguito in relativo.
Aggiungere a un backup¶
[files command |] cpio {-o| --create} -A [-options] [<fic-list] {F|>device}
Esempio:
find /etc/shadow | cpio -o -AF SystemFiles.A.cpio
L'aggiunta di file è possibile solo su supporti ad accesso diretto.
Opzione | Descrizione |
---|---|
-A |
Aggiunge uno o più file a un backup su disco. |
-F |
Indica il backup da modificare. |
Compressione di un backup¶
- Salva poi comprimi
$ find /etc | cpio –o > etc.A.cpio
$ gzip /backups/etc.A.cpio
$ ls /backups/etc.A.cpio*
/backups/etc.A.cpio.gz
- Salva e comprimi
find /etc | cpio –o | gzip > /backups/etc.A.cpio.gz
Non c'è alcuna opzione, a differenza del comando tar
, per salvare e comprimere allo stesso tempo. Quindi è fatto in due passaggi: salvataggio e compressione.
La sintassi del primo metodo è più facile da capire e ricordare, perché viene eseguita in due passaggi.
Per il primo metodo, il file di backup viene automaticamente rinominato dall'utilità gzip
che aggiunge .gz
alla fine del nome del file. Allo stesso modo l'utilità bzip2
aggiunge automaticamente .bz2
.
Leggere il contenuto di un backup¶
Sintassi del comando cpio
per leggere il contenuto di un backup cpio:
cpio -t [-options] [<fic-list]
Esempio:
cpio -tv </backups/etc.152.cpio | less
Opzioni | Descrizione |
---|---|
-t |
Legge un backup. |
-v |
Visualizza gli attributi del file. |
Dopo aver eseguito un backup, è necessario leggerne il contenuto per essere sicuri che non ci siano stati errori.
Allo stesso modo, prima di eseguire un ripristino, è necessario leggere il contenuto del backup che verrà utilizzato.
Ripristinare un backup¶
Sintassi del comando cpio
per ripristinare un backup:
cpio {-i| --extract} [-E file] [-options] [<device]
Esempio:
cpio -iv /backups/etc.152.cpio | less
Opzioni | Descrizione |
---|---|
-i |
Ripristinare un backup completo. |
-E file |
Ripristina solo i file il cui nome è contenuto nel file. |
--make-directories o -d |
Ricostruisce la struttura ad albero mancante. |
-u |
Sostituisce tutti i file anche se esistono. |
--no-absolute-filenames |
Permette di ripristinare un backup effettuato in modalità assoluta in modo relativo. |
Attenzione
Per impostazione predefinita, al momento del ripristino, i file sul disco la cui ultima data di modifica è più recente o uguale alla data del backup non vengono ripristinati (per evitare di sovrascrivere le informazioni recenti con informazioni più vecchie).
L'opzione u
, d'altra parte, consente di ripristinare le versioni precedenti dei file.
Esempi:
- Ripristinare un backup assoluto in modalità assoluta
cpio –ivF home.A.cpio
- Ripristino assoluto su una struttura ad albero esistente
L'opzione u
consente di sovrascrivere i file esistenti nella posizione in cui avviene il ripristino.
cpio –iuvF home.A.cpio
- Ripristinare un backup assoluto in modalità relativa
L'opzione lunga no-absolute-filenames
consente un ripristino in modalità relativa. Infatti la /
all'inizio del percorso verrà rimossa.
cpio --no-absolute-filenames -divuF home.A.cpio
Suggerimento
La creazione di directory è forse necessaria, quindi l'utilizzo dell'opzione d
- Ripristinare un backup relativo
cpio –iv etc.cpio
- Ripristino in modalità assoluta di un file o di una directory
Il ripristino di un particolare file o directory richiede la creazione di un file di elenco che deve poi essere eliminato.
echo "/etc/passwd" > tmp
cpio –iuE tmp -F etc.A.cpio
rm -f tmp
Utilità di Compressione - decompressione¶
L'utilizzo della compressione al momento di un backup può avere una serie di inconvenienti:
- Allunga il tempo di backup e il tempo di ripristino.
- Rende impossibile aggiungere file al backup.
Nota
È quindi meglio fare un backup e comprimerlo piuttosto che comprimerlo durante il backup.
Compressione con gzip
¶
Il comando gzip
comprime i dati.
Sintassi del comando gzip
:
gzip [options] [file ...]
Esempio:
$ gzip usr.tar
$ ls
usr.tar.gz
Il file riceve l'estensione .gz
.
Mantiene gli stessi permessi e le stesse date di ultimo accesso e modifica.
Compressione con bunzip2
¶
Anche il comando bunzip2
comprime i dati.
Sintassi del comando bzip2
:
bzip2 [options] [file ...]
Esempio:
$ bzip2 usr.cpio
$ ls
usr.cpio.bz2
Al nome del file viene assegnata l'estensione .bz2
.
La compressione con bzip2
è migliore della compressione con gzip
ma ci vuole più tempo per eseguirla.
Decompressione con gunzip
¶
Il comando gunzip
decomprime i dati compressi.
Sintassi del comando gunzip
:
gunzip [options] [file ...]
Esempio:
$ gunzip usr.tar.gz
$ ls
usr.tar
Il nome del file viene troncato da gunzip
e l'estensione .gz
viene rimossa.
gunzip
decomprime anche i file con le seguenti estensioni:
.z
;-z
;_z
.
Decompressione con bunzip2
¶
Il comando bunzip2
decomprime i dati compressi.
Sintassi del comando bzip2
:
bzip2 [options] [file ...]
Esempio:
$ bunzip2 usr.cpio.bz2
$ ls
usr.cpio
Il nome del file viene troncato da bunzip2
e l'estensione .bz2
viene rimossa.
bunzip2
decomprime anche il file con le seguenti estensioni:
-bz
;.tbz2
;tbz
.