|
Dimensione: 9917
Commento: amministrazione
|
← Versione 64 del 17/11/2025 11.22.03 ⇥
Dimensione: 11714
Commento: +sintassi_zstd
|
| Le cancellazioni sono segnalate in questo modo. | Le aggiunte sono segnalate in questo modo. |
| Linea 1: | Linea 1: |
| ## page was renamed from BackupConTar [[BR]] [[BR]] ||<tablestyle="font-size: 18px; text-align: center; width:100%; background:red; margin: 0 0 0 0;" style="padding:0.5em;">[[Immagine(Icone/Piccole/warning.png,50,left)]]'''ATTENZIONE: Questo documento richiede una revisione. Usatelo a vostro rischio. Si raccomanda di leggere l'intera guida prima di effettuare alcuna operazione. Per una guida più aggiornata consultare la pagina BackupDelSistemaConSbackup'''|| [[BR]] ||<tablestyle="fixed; font-size: 0.9em; width:50%; background:#F1F1ED; margin: 0 0 1em 1em;" style="padding:0.5em;">'''Indice'''[[BR]][[TableOfContents]]|| [[BR]]Questa guida al backup del sistema con tar è tratta da un post scritto da Heliode sul Forum Ubuntu. Questo è il thread originale della discussione: [http://www.ubuntuforums.org/showthread.php?t=35087] |
## page was renamed from BackupDelSistema/BackupConTar #LANGUAGE it #format wiki <<BR>> <<Indice(depth=2)>> <<Informazioni(forum="https://forum.ubuntu-it.org/viewtopic.php?f=46&t=599983"; rilasci="24.04 22.04 20.04 18.04")>> |
| Linea 16: | Linea 10: |
| Molti di voi probabilmente usavano Windows prima di iniziare ad usare Ubuntu. Prima o poi avrete avuto la necessità di fare il backup e ripristinare il sistema. In Windows queste operazioni richiedono software proprietario per il quale avrete dovuto riavviare il sistema e fare il boot in una sessione speciale in cui eseguire il back-up o il ripristino (questo avviene con programmi come '''Norton Ghost'''). | Con '''Ubuntu''' è possibile eseguire un backup dell'intero sistema con gli stessi strumenti utilizzati per archiviare o comprimere ogni altro file: '''[[https://it.wikipedia.org/wiki/Tar_(software)|tar]]'''. |
| Linea 18: | Linea 12: |
| Sicuramente vi sarete chiesti per quale motivo non fosse possibile semplicemente salvare l'intera unità `C:\` in un archivio `*.zip`. Quest'operazione è impossibile perchè in Windows ci sono molti files che non possono essere copiati o sovrascritti mentre sono in uso dal sistema, per questo motivo è necessario un software specifico per eseguire questa operazione. | = Installazione = |
| Linea 20: | Linea 14: |
| È evidente che questa caratteristica di Windows, come il continuo reboot, è una follia. In Ubuntu non vi è alcuna necessità di usare programmi come Ghost per creare un back-up dell'intero sistema (questo avviene su ogni sistema Linux, peraltro). Del resto utilizzare Ghost su sistemi con filesystem diverso da '''ext2''' sarebbe una pessima idea. '''ext3''', il filesystem standard delle partizioni Ubuntu, è considerato da Ghost come un formato '''ext2''' difettoso e ciò può causare dei danni seri ai dati salvati su di esso. | '''tar''' è già preinstallato nel sistema Ubuntu.<<BR>> Se si è su sistema [[Installazione/CdMinimale|minimale]] nel caso non fosse presente, [[AmministrazioneSistema/InstallareProgrammi|installare]] il pacchetto [[apt://tar|tar]]. |
| Linea 22: | Linea 17: |
| = Il Back-up = | = Procedimento backup = |
| Linea 24: | Linea 19: |
| Allora vi chiederete "Come faccio a fare il backup del sistema ?". La risposta è semplice: con gli stessi strumenti che utilizzi per archiviare o comprimere ogni altro file: '''tar'''. A differenza di Windows, Linux non restringe l'accesso di root per alcuni file, perciò (con i permessi necessari) puoi salvare ogni file presente nella partizione in un file `*.tar`. Per fare questo, è sufficiente divenire '''root''' attraverso il comando: {{{ sudo su |
Per eseguire un backup dell'intero sistema, partendo dalla directory root `/`, è necessario utilizzare i [[AmministrazioneSistema/PrivilegiDiAmministrazione|privilegi di amministratore]] in un [[AmministrazioneSistema/Terminale|terminale]]. 0. Spostarsi nella directory o partizione di destinazione del backup, digitando in un [[AmministrazioneSistema/Terminale|terminale]] il comando:{{{ cd `/directory_destinazione_backup` }}} 0. 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. {{{#!wiki note 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: <<Anchor(sintassi)>> ||<tablestyle="width:50%;" -2:>'''Sintassi opzioni'''|| ||<:30%> '''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. {{{#!wiki note 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). |
| Linea 30: | Linea 57: |
| e andare alla directory root del sistema (`/`); il metodo descritto può essere applicato a qualunque directory o partizione, comprese quelle remote o installate su unità rimovibili. Per spostarsi nella directory root digitate: {{{ cd / |
== 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` |
| Linea 36: | Linea 63: |
| Questo è il comando da utilizzare per fare il back-up del sistema: {{{ tar -cvpzf /backup.tgz --exclude=/proc --exclude=/lost+found --exclude=/backup.tgz --exclude=/mnt --exclude=/sys / |
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 / |
| Linea 41: | Linea 67: |
| Vediamo ora di spiegare questa sintassi: * `tar`: è il programma necessario a fare il back-up * `c`: crea un nuovo archivio di backup * `v`: modalità ''verbose'', tar restituisce sullo schermo una descrizione delle operazioni in corso * `p`: mantieni permessi, mantiene intatti i permessi di tutti i files * `z`: comprime il file di back-up con `gzip` per renderlo più piccolo * `f <nomefile>`: specifica dove salvare il backup, `/backup.tgz` è il file utilizzato in questo esempio * Qui si mettono tutte le directory che si vogliono escludere dal back-up. Non è necessario fare il back-up di tutto quanto, alcune directory non sono indispensabili. Assicuratevi di non includere anche il file di back-up stesso, altrimenti avrete strani risultati. È meglio anche non includere la cartella `/mnt`, se avete altre partizioni montate lì finirete col fare il back-up anche di quelle. Assiucuratevi anche di non avere niente montato all'interno della cartella `/media` (ad esempio CD, CD-RW), oppure potete escludere anche la cartella `/media`. * Dopo tutte le opzioni c'è le directory di cui vogliamo fare il back-up. Utilizziamo `/` dato che vogliamo salvare quasi tutto. Se volete escludere tutti gli altri filesystems, potete usare l'opzione `l` al posto di `--exclude`. Il comando precedente risulterebbe: {{{ tar -cvpzlf /backup.tgz --exclude=/lost+found --exclude=/backup.tgz / |
{{{#!wiki note Ricordarsi di aggiungere `--selinux` anche qui se il sistema lo richiede. |
| Linea 57: | Linea 71: |
| Se il comando è stato scritto giusto, premete `Invio` e rilassatevi, tutto il procedimento ci metterà un po'. | = Compressione della Directory = |
| Linea 59: | Linea 73: |
| Dopo questo avrete un file `backup.tgz`, probabilmente molto grande, all'interno della directory root del filesystem. Ora potete copiarlo su un DVD o spostarlo in un'altra macchina. | È possibile utilizzare diversi algoritmi di compressione per il file di backup. |
| Linea 61: | Linea 75: |
| [[Immagine(Icone/Piccole/warning.png,50,left)]] Files di dimensioni maggiori ai 2GB non sono supportati da `ISO9660` e potrebbero essere o non essere ripristinabili. Non create un DVD con una unica immagine `.iso` del file, dividetelo utilizzando il comando `split` (controllate il manuale in linea di split, digitando in terminale ''man split'') o utilizzate un altro metodo per copiarlo nel DVD. Una possibilità (non verificata) potrebbe essere: {{{ sudo tar --create --bzip2 --exclude /tmp --one-file-system --sparse / | growisofs -use-the-force-luke -Z /dev/hda=/proc/self/fd/0 |
== 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 / |
| Linea 67: | Linea 83: |
| Questo comando eseguirà il back-up di un solo filesystem. Potete usare `--exclude` al posto di `--one-file-system` per filtrare i files da non salvare. `/dev/hda` dovrebbe essere il vostro masterizzatore, in caso contrario modificatelo con i vostri parametri. Per ripristinare il file dovrete fare riferimento al file con: {{{ sudo tar --extract --bzip2 --file /dev/hda |
{{{#!wiki note Ricordarsi di aggiungere --selinux anche qui se il sistema lo richiede. |
| Linea 72: | Linea 87: |
| attachment:Icone/Piccole/note.png Alla fine del back-up potreste ricevere un messaggio tipo `tar: Error exit delayed from previous errors`, nella maggior parte dei casi potete ignorarlo. | == Compressione con Zstd (Raccomandato) == |
| Linea 74: | Linea 89: |
| Potete anche utilizzare '''Bzip2''' per comprimere il file di back-up. Questo porta un maggiore compressione ad una velocità minore. Se volete avere un file piccolo sostituite, nel comando la `z` con una `j` e modificate l'estensione. Il comando diventerebbe: {{{ tar -cvpjf /backup.tar.bz2 --exclude=/proc --exclude=/lost+found --exclude=/backup.tar.bz2 --exclude=/mnt --exclude=/sys / |
'''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 / |
| Linea 79: | Linea 95: |
| == Back-up attraverso la rete == Se il vostro hard-disk non ha abbastanza spazio o non potete montarne un altro in cui salvare il back-up, potete usare '''netcat''' per spostare il file di back-up. Dalla parte del ricevente ipmostate '''netcat''' in modo da scrivere il back-up in questo modo: {{{ nc -l -p 1024 > backup.tar.bz2 |
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 / |
| Linea 88: | Linea 103: |
| Quindi mandate in pipe il comando per eseguire il back-up, senza il flag `f`, con '''netcat''' in questo modo: {{{ tar -cvpj <all those other options> / | nc -q 0 <receiving host> 1024 |
{{{#!wiki note Ricordarsi di aggiungere --selinux anche qui se il sistema lo richiede. |
| Linea 93: | Linea 107: |
| attachment:Icone/Piccole/note.png Nel comando precedente 1024 è un numero di porta qualsiasi, un numero da 1024 in su dovrebbe andare bene. | = Ripristino = |
| Linea 95: | Linea 109: |
| Se tutto funziona correttamente il back-up sarà mandata in pipe attraverso la rete senza toccare il filesystem. Con una rete abbastanza veloce questo potrebbe essere più veloce dello scrivere il file sul disco. = Ripristinare = [[Immagine(Icone/Piccole/warning.png,50,left)]] '''Prestate molta attenzione qui. Se non capite chiaramente quello che state per fare potreste sovrascrivere file importanti per il sistema, prestate attenzione!''' [[BR]]Assicuratevi di avere i permessi di root o super-utente (consultate il [:Sudo:manuale di Sudo]) e che il file creato sia nella directory root del filesystem. Una delle pecularietà di Linux è che tutto ciò funziona su un sistema in esecuzione, non c'è bisogno di usare CD di boot o altro. Nel caso in cui il sistema non sia più eseguibile dovrete usare un CD Live, ma i risultati sono gli stessi. Potete rimuovere qualsiasi file dal sistema mentre questo è in esecuzione, con tutto ciò che questo comporta al successivo riavvio. Questo è il comando da utilizzare per il ripristino: {{{ tar -xvpzf /backup.tgz -C / |
{{{#!wiki important 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. |
| Linea 110: | Linea 113: |
| Nel caso in cui sia stato utilizzato '''bunzip2''' il comando invece sarà: {{{ tar -xvpjf backup.tar.bz2 -C / |
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. 0. Copiare il file di backup nella directory `/`. 0. 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 [[AmministrazioneSistema/Terminale|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 }}} 0. Premere '''Invio''' per avviare il ripristino. 0. 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: ||<tablestyle="width:50%;" -2:>'''Sintassi opzioni'''|| ||<:30%> '''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. || {{{#!wiki note Se il backup è stato creato con '''--selinux''', è indispensabile includerlo anche nel comando di ripristino, dopo le opzioni di compressione e '''f <file>'''. |
| Linea 115: | Linea 152: |
| Alcune opzioni: * `x`: serve per estrarre i file nell'archivio * `-C <directory>: serve per spostarsi in una specifica directory, in questo caso `/`, prima di estrarre i file. |
= Backup attraverso la rete = |
| Linea 119: | Linea 154: |
| [[Immagine(Icone/Piccole/warning.png,50,left)]] '''ATTENZIONE: questo comando sovrascriverà tutti i file della partizione con quelli presenti all'interno dell'archivio!''' | 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. |
| Linea 121: | Linea 156: |
| Premete `Invio` e rilassatevi, potrebbe metterci un po'. Quando avrà finito avrete un sistema Ubuntu completamente ripristinato. Assicuratevi anche, prima di fare qualsiasi altra cosa, di ri-creare le directory escluse durante il back-up (`/proc`, `/lost+found`, `/mnt`, `/sys'...): {{{ mkdir /proc /lost+found /mnt /sys |
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 |
| Linea 126: | Linea 174: |
| Al prossimo riavvio tutto dovrebbe essere come prima di effettuare il back-up. | {{{#!wiki note «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. }}} |
| Linea 128: | Linea 178: |
| == Ripristinare GRUB == | 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. |
| Linea 130: | Linea 180: |
| Se volete spostare il vostro sistema su di un altro hard-disk o se avete rovinato l'installazione di GRUB (come quando si installa Windows), dovrete re-installare GRUB. Ci sono molti how-to validi sparsi per la rete e nei forum di Ubuntu. In particolare potete controllare RecuperoUbuntuDopoInstallazioneWindows. |
= Programmare il backup con Cron = |
| Linea 133: | Linea 182: |
| = Programmare il backup con cron = | L'esecuzione di queste operazioni può essere programmata e resa automatica con '''cron'''. Per maggiori informazioni, consultare [[AmministrazioneSistema/Cron|questa guida]]. |
| Linea 135: | Linea 184: |
| L'esecuzione di queste operazioni può essere programmata, e quindi resa automatica, con il comando '''cron''' che viene dettagliatamente descritto in questa [:CronHowTo:Guida a Cron]. | = Ulteriori risorse = |
| Linea 137: | Linea 186: |
| = Metodi alternativi = | * [[Ubuntu:BackupYourSystem|Documento originale]] * [[https://it.wikipedia.org/wiki/Tar_(software)|Tar (wikipedia)]] * [[AmministrazioneSistema/FormatiDiCompressione|Formati di compressione]] |
| Linea 139: | Linea 190: |
| Consultate la pagina BackupDelSistema.[[BR]] Qui si trova una buona [:Amanda:guida ad Amanda] |
|
| Linea 142: | Linea 191: |
| Documento originale: [wiki:Ubuntu/BackupYourSystem BackupYourSystem] {en} CategoryAmministrazione CategoryDaRevisionare |
CategoryAmministrazione |
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.
Spostarsi nella directory o partizione di destinazione del backup, digitando in un terminale il comando:
cd `/directory_destinazione_backup`
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.
Copiare il file di backup nella directory /.
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
Premere Invio per avviare il ripristino.
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.
