Wiki Ubuntu-it

Indice
Partecipa
FAQ
Wiki Blog
------------------
Ubuntu-it.org
Forum
Chiedi
Chat
Cerca
Planet
  • Pagina non alterabile
  • Informazioni
  • Allegati


Guida verificata con Ubuntu: 22.04 24.04

Problemi in questa pagina? Segnalali in questa discussione

Introduzione

Con Ubuntu è possibile eseguire un backup dell'intero sistema con gli stessi strumenti utilizzati per archiviare o comprimere ogni altro file: tar.

Installazione

tar è già preinstallato nel sistema Ubuntu.
Se si è su sistema minimale nel caso non fosse presente, installare il pacchetto tar.

Procedimento backup

Per eseguire un backup dell'intero sistema, partendo dalla directory root /, è necessario utilizzare i privilegi di amministratore in un terminale.

  1. Spostarsi nella directory o partizione di destinazione del backup, digitando in un terminale il comando:

     cd `/directory_destinazione_backup`
  2. Per effettuare il backup del sistema /, digitare il seguente comando:

     sudo tar -cvpzf /backup.tgz --exclude=/proc --exclude=/lost_found --exclude=/backup.tgz --exclude=/mnt --exclude=/sys --exclude=/run --exclude=/tmp --exclude=/var/tmp --exclude=/var_run --exclude=/dev --xattrs --acls /
    Questo comando include le opzioni essenziali per preservare permessi, attributi estesi e ACLs, fondamentali per un ripristino funzionale.
    • Per i sistemi che utilizzano SELinux (come Fedora, RHEL, CentOS e OpenSUSE), è fondamentale aggiungere anche l'opzione --selinux al comando di backup per preservare i contesti di sicurezza.

Di seguito è riportata in dettaglio la spiegazione della sintassi del comando:

Sintassi opzioni

Opzione

Risultato

tar

Programma di archiviazione utilizzato per eseguire il backup.

-c

Crea un nuovo archivio di backup.

-v

Modalità verbose: tar restituisce sullo schermo una descrizione delle operazioni in corso.

-p

Mantiene i permessi POSIX di tutti i file.

-z

Comprime il file di backup con gzip per ridurne le dimensioni.

-f <nomefile>

Specifica il percorso di salvataggio del backup (/backup.tgz è il file utilizzato in questo esempio).

--exclude=/<dir>

Esclude dal backup la directory specificata.

--xattrs

Preserva gli attributi estesi dei file (extended attributes). Essenziale per un ripristino completo.

--acls

Preserva le liste di controllo accessi (Access Control Lists - ACLs). Essenziale per un ripristino completo.

--selinux

Preserva i contesti di sicurezza SELinux. Fondamentale per i sistemi che utilizzano SELinux.

/

Specifica / come directory di backup (root).

Esclusione directory

Si consiglia di non includere le cartelle di sistema /mnt e /media, poiché la loro inclusione comporterebbe il backup di altre partizioni eventualmente montate. È altresì consigliabile escludere le directory /run, /tmp, /var/tmp, /var/run e /dev, in quanto contengono file temporanei, dati di runtime e file speciali di periferica che vengono ricreati dinamicamente all'avvio del sistema e non sono necessari per un ripristino efficace.

Non è necessario effettuare il backup di tutto il sistema, dato che alcune directory non sono indispensabili (compreso il file di backup stesso e quelle contenenti dati temporanei, di runtime o file speciali di periferica).

Aggiungere la data

Al nome del file di backup è possibile aggiungere la data di esecuzione. A tale scopo, è sufficiente inserire la seguente dicitura nel comando di backup:

`date +%d-%m-%Y`

Il comando aggiungerà al nome del file una data in formato «giorno-mese-anno», come nel seguente esempio:

sudo tar -cvpjf /backup-`date+%d-%m-%Y`.tar.bz2 --exclude=/proc --exclude=/lost_found --exclude=/backup-`date+%d-%m-%Y`.tar.bz2 --exclude=/mnt --exclude=/sys --exclude=/run --exclude=/tmp --exclude=/var/tmp --exclude=/var_run --exclude=/dev --xattrs --acls /

Ricordarsi di aggiungere --selinux anche qui se il sistema lo richiede.

Compressione della Directory

È possibile utilizzare diversi algoritmi di compressione per il file di backup.

Compressione con bzip2

È possibile anche utilizzare bzip2 per comprimere il file di backup. Questo porta una maggiore compressione, seppur a discapito di una minore velocità rispetto a gzip.

Per utilizzare bzip2, sostituire nel comando di creazione del backup l'opzione z con j e modificare l'estensione del file di backup, come nel seguente esempio:

sudo tar -cvpjf /backup.tar.bz2 --exclude=/proc --exclude=/lost_found --exclude=/backup.tar.bz2 --exclude=/mnt --exclude=/sys --exclude=/run --exclude=/tmp --exclude=/var/tmp --exclude=/var_run --exclude=/dev --xattrs --acls /

Ricordarsi di aggiungere --selinux anche qui se il sistema lo richiede.

Compressione con Zstd (Raccomandato)

Zstd (Zstandard) è un algoritmo di compressione moderno che offre un eccellente bilanciamento tra velocità e rapporto di compressione, spesso superando gzip e bzip2. Supporta anche il multithreading, accelerando notevolmente le operazioni su CPU moderne.

Per utilizzare zstd con il multithreading, è necessario utilizzare l'opzione -I di tar e specificare il comando zstd con l'opzione -T$(nproc) che sfrutta tutti i core della CPU disponibili. L'estensione del file sarà solitamente .tar.zst.

sudo tar -cvpI 'zstd -T$(nproc)' -f /backup.tar.zst --exclude=/proc --exclude=/lost_found --exclude=/backup.tar.zst --exclude=/mnt --exclude=/sys --exclude=/run --exclude=/tmp --exclude=/var/tmp --exclude=/var_run --exclude=/dev --xattrs --acls /

Per una compressione zstd a singolo thread (o se zstd non supporta -T o non si vuole il multithreading), si può anche usare la scorciatoia --zstd direttamente con tar (se la versione di tar lo supporta) o -I 'zstd':

  • Con l'opzione nativa di tar (se disponibile):

    sudo tar -cvp --zstd -f /backup.tar.zst --exclude=/proc --exclude=/lost_found --exclude=/backup.tar.zst --exclude=/mnt --exclude=/sys --exclude=/run --exclude=/tmp --exclude=/var/tmp --exclude=/var_run --exclude=/dev --xattrs --acls /
  • Oppure forzando zstd senza multithreading:

    sudo tar -cvpI 'zstd' -f /backup.tar.zst --exclude=/proc --exclude=/lost_found --exclude=/backup.tar.zst --exclude=/mnt --exclude=/sys --exclude=/run --exclude=/tmp --exclude=/var/tmp --exclude=/var_run --exclude=/dev --xattrs --acls /

Ricordarsi di aggiungere --selinux anche qui se il sistema lo richiede.

Ripristino

Prestare molta attenzione alle istruzioni seguenti. Errori potrebbero sovrascrivere file importanti per il sistema. Il comando seguente sovrascriverà tutti i file del sistema con quelli presenti nell'archivio di backup.

Per ripristinare il backup, non è necessario accedere a una modalità speciale del sistema operativo; è possibile farlo con il sistema in esecuzione. Nel caso in cui l'accesso al sistema non sia possibile, è utilizzabile un DVD/USB live per ottenere gli stessi risultati.

È possibile rimuovere qualsiasi file dal sistema mentre questo è in esecuzione, con tutte le implicazioni al successivo riavvio.

  1. Copiare il file di backup nella directory /.

  2. Per eseguire il ripristino, assicurarsi di includere le stesse opzioni di compressione, --xattrs, --acls e --selinux (se usata) che sono state usate durante la creazione del backup. Digitare in un terminale il seguente comando:

    • Per backup gzip (.tgz):

        sudo tar -xvpzf /backup.tgz -C / --xattrs --acls
    • Per backup bzip2 (.tar.bz2):

        sudo tar -xvpjf backup.tar.bz2 -C / --xattrs --acls
    • Per backup zstd (.tar.zst) con compressione esterna (-I):

        sudo tar -xvpI 'zstd -d -T$(nproc)' -f /backup.tar.zst -C / --xattrs --acls

      Usare zstd -d per la decompressione, con -T$(nproc) se usato in compressione.

    • Per backup zstd (.tar.zst) con opzione nativa (--zstd):

        sudo tar -xvp --zstd -f /backup.tar.zst -C / --xattrs --acls
  3. Premere Invio per avviare il ripristino.

  4. Al termine della procedura, assicurarsi di ricreare eventuali directory escluse durante il backup nel caso siano state compromesse (ad esempio /proc, /lost+found, /mnt, /sys, /run, /tmp, /var/tmp, /var_run, /dev, ecc.):

     sudo mkdir /proc /lost_found /mnt /sys /run /tmp /var/tmp /var_run /dev

Al successivo riavvio, l'intero sistema sarà stato ripristinato.

Alcune opzioni per ripristino:

Sintassi opzioni

Opzione

Risultato

x

estrae i file dall'archivio.

-C <directory>

sposta in una specifica directory, in questo caso /, prima di estrarre i file.

--xattrs

Ripristina gli attributi estesi.

--acls

Ripristina le liste di controllo accessi.

--selinux

Ripristina i contesti di sicurezza SELinux.

Se il backup è stato creato con --selinux, è indispensabile includerlo anche nel comando di ripristino, dopo le opzioni di compressione e f <file>.

Backup attraverso la rete

Qualora il disco fisso non disponga di spazio sufficiente o non fosse possibile montarne un altro per salvare il backup, è possibile usare netcat per spostare il file di backup.

Dalla parte del ricevente, impostare netcat in base al tipo di compressione utilizzata:

  • Per backup gzip (.tgz):

     nc -l -p 1024 > backup.tgz
  • Per backup bzip2 (.tar.bz2):

     nc -l -p 1024 > backup.tar.bz2
  • Per backup zstd (.tar.zst):

     nc -l -p 1024 > backup.tar.zst

Quindi, inviare in pipe il comando per eseguire il backup con netcat, senza il flag -f, e ricordando di includere --xattrs, --acls e --selinux (se usato), come in questo esempio (per bzip2):

sudo tar -cvpj <tutte le altre opzioni> --xattrs --acls / | nc -q 0 <host_di_ricezione> 1024

O per zstd con multithreading:

sudo tar -cvpI 'zstd -T$(nproc)' <tutte le altre opzioni> --xattrs --acls / | nc -q 0 <host_di_ricezione> 1024

«1024» si riferisce al numero di una porta. Utilizzare un numero pari a 1024 o superiore. Ricordarsi di aggiungere --selinux anche qui se il sistema lo richiede.

Se tutto è andato a buon fine, il backup sarà inviato in pipe attraverso la rete. La scrittura del file su disco sarà più rapida se la rete è veloce.

Programmare il backup con Cron

L'esecuzione di queste operazioni può essere programmata e resa automatica con cron. Per maggiori informazioni, consultare questa guida.

Ulteriori risorse


CategoryAmministrazione