Il nometar
è, per la maggior parte degli account, l’abbreviazione di tape archive. I “nastri”in questione sarebbero tutte quelle unità di archiviazione magnetiche che erano popolari fino agli anni’ 50.
Ciò suggerisce che lo strumento tar
potrebbe essere un po ‘ vecchio e oltre il suo primo. Ma la verità è che, nel corso degli anni e attraverso tutti i cambiamenti sismici al mondo IT, tar
non ha perso nulla del suo potere e valore.
In questo articolo, basato sul contenuto del mio Linux in Action book, ti mostrerò le basi della creazione, della compressione e del ripristino degli archivi tar. Cominciamo dall’inizio.
Questo esempio prenderà tutti i file e le directory all’interno e al di sotto della directory di lavoro corrente e creerà un file di archivio che ho abilmente chiamatoarchivename.tar
.
Qui uso tre argomenti dopo il comando tar:
- il
c
dice a tar di creare un nuovo archivio, -
v
imposta l’output dello schermo su verbose in modo da ottenere aggiornamenti, e -
f
punta al nome del file che vorrei dare all’archivio.
*
è ciò che dice a tar
di includere tutti i file e le directory locali in modo ricorsivo.
$ tar cvf archivename.tar *file1file2file3directory1directory1/morestuffdirectory1/morestuff/file100directory1/morestuff/file101
Il comando tar non sposterà mai o cancellerà nessuna delle directory e dei file originali che gli vengono forniti – crea solo copie archiviate.
Si dovrebbe anche notare che l’utilizzo di un punto (.) invece di un asterisco ( * ) nel comando precedente includerebbe anche i file nascosti (i cui nomi di file iniziano con un punto) nell’archivio.
Se stai seguendo sul tuo computer (come dovresti assolutamente fare), vedrai un nuovo file chiamato archivename.impeciare. Il .l’estensione del nome file tar non è necessaria, ma è sempre una buona idea comunicare chiaramente lo scopo di un file nel maggior numero possibile di modi.
Estrarre l’archivio per ripristinare i file è facile: Basta usare xvf
invece dicvf
. Questo, nell’esempio, salverà nuove copie dei file e delle directory originali nella posizione corrente.
$ tar xvf archivename.tarfile1file2file3directory1directory1/morestuffdirectory1/morestuff/file100directory1/morestuff/file101
naturalmente, si può anche avere tar invia il tuo file estratti in qualche altro posto usando il -C
argomento, seguito dal percorso di destinazione:
$ tar xvf archivename.tar -C /home/mydata/oldfiles/
non sempre si desidera includere tutti i file all’interno di un albero di directory nel tuo archivio.
Supponiamo di aver prodotto alcuni video, ma sono attualmente conservati in directory insieme a tutti i tipi di file grafici, audio e di testo (contenenti le note). Gli unici file di cui è necessario eseguire il backup sono i clip video finali utilizzando l’estensione .mp4.
Ecco come farlo:
$ tar cvf archivename.tar *.mp4
È fantastico. Ma quei file video sono enormi. Non sarebbe bello rendere quell’archivio un po ‘ più piccolo usando la compressione?
Non dire altro! Basta eseguire il comando precedente con l’argomentoz
(zip). Questo dirà al programma gzip di comprimere l’archivio.
Se vuoi seguire la convenzione, puoi anche aggiungere un’estensione.gz
oltre a.tar
che è già presente. Ricorda: chiarezza.
Ecco come sarebbe giocare fuori:
$ tar czvf archivename.tar.gz *.mp4
Se si prova sulla propria .mp4 file e quindi eseguire il comando ls-l nella directory contenente il nuovo archivio, si può notare che il .tar.gz
file non è molto più piccolo del .tar
file, forse il 10% o giù di lì. Che c’entra?
Bene, il formato di file.mp4
è di per sé compresso, quindi c’è molto meno spazio per gzip per fare le sue cose.
Poiché tar è pienamente consapevole del suo ambiente Linux, è possibile utilizzarlo per selezionare file e directory che vivono al di fuori della directory di lavoro corrente. Questo esempio aggiunge tutti i file.mp4
nella directory /home/myuser/Videos/
:
$ tar czvf archivename.tar.gz /home/myuser/Videos/*.mp4
Poiché i file di archivio possono diventare grandi, a volte potrebbe avere senso suddividerli in più file più piccoli, trasferirli nella loro nuova home e quindi ricreare il file originale all’altra estremità. Lo strumento split è fatto per questo scopo.
In questo esempio, -b
dice a Linux di dividere il nome dell’archivio.impeciare.file gz in parti di dimensioni 1 GB. L’operazione quindi nomina ciascuna delle parti-archivename.impeciare.zg.partaa, nome dell’archivio.impeciare.zg.partab, nome archivio.impeciare.zg.partac, e così via:
$ split -b 1G archivename.tar.gz "archivename.tar.gz.part"
Dall’altro lato, si ricrea l’archivio leggendo ciascuna delle parti in sequenza (cat archivename.impeciare.zg.part*), quindi reindirizzare l’output in un nuovo file chiamato archivename.impeciare.gz:
$ cat archivename.tar.gz.part* > archivename.tar.gz
Streaming file system archives
Ecco dove inizia la roba buona. Ti mostrerò come creare un’immagine di archivio di un’installazione Linux funzionante e trasmetterla in streaming in una posizione di archiviazione remota, il tutto all’interno di un singolo comando. Ecco il comando:
# tar czvf - --one-file-system / /usr /var \ --exclude=/home/andy/ | ssh [email protected] \ "cat > /home/username/workstation-backup-Apr-10.tar.gz"
Invece di cercare di spiegare tutto ciò subito, userò esempi più piccoli per esplorarlo un pezzo alla volta.
Creiamo un archivio del contenuto di una directory chiamata importantstuff che è piena di cose, beh, davvero importanti:
$ tar czvf - importantstuff/ | ssh [email protected] "cat > /home/username/myfiles.tar.gz"importantstuff/filename1importantstuff/[email protected]'s password:
Lasciami spiegare quell’esempio. Piuttosto che inserire il nome dell’archivio subito dopo gli argomenti del comando (come hai fatto fino ad ora), ho usato un trattino (czvf -).
Il cruscotto emette i dati allo standard output. Consente di spingere i dettagli del nome del file dell’archivio alla fine del comando e dice a tar di aspettarsi invece il contenuto sorgente per l’archivio.
Ho quindi convogliato (|) l’archivio compresso senza nome su un accesso ssh su un server remoto in cui mi è stata richiesta la mia password.
Il comando racchiuso tra virgolette ha quindi eseguito cat contro il flusso di dati dell’archivio, che ha scritto il contenuto del flusso in un file chiamato myfiles.impeciare.gz nella mia home directory sull’host remoto.
Un vantaggio di generare archivi in questo modo è che si evita il sovraccarico di un passaggio intermedio. Non è necessario salvare temporaneamente una copia dell’archivio sul computer locale. Immagina di eseguire il backup di un’installazione che riempie 110 GB dei suoi 128 GB di spazio disponibile. Dove andrebbe l’archivio?
Quella era solo una directory di file. Supponiamo che sia necessario eseguire il backup di un sistema operativo Linux attivo su un’unità USB in modo da poterlo spostare su una macchina separata e rilasciarlo nell’unità principale di quella macchina.
Supponendo che ci sia già una nuova installazione della stessa versione di Linux sulla seconda macchina, la prossima operazione di copia / incolla genererà una replica esatta della prima.
NOTA: questo non funzionerà su un’unità di destinazione che non ha già un file system Linux installato. Per gestire questa situazione, è necessario utilizzare
dd
Il prossimo esempio crea un archivio compresso sull’unità USB noto come /dev/sdc1
.
L’argomento --one-file-system
esclude tutti i dati da qualsiasi file system oltre a quello corrente. Ciò significa che pseudo partizioni come/sys/
e/dev/
non verranno aggiunte all’archivio. Se ci sono altre partizioni che vuoi includere (come farai per /usr/
e /var/
in questo esempio), allora dovrebbero essere aggiunte esplicitamente.
Infine, è possibile escludere i dati dal file system corrente utilizzando l’argomento--exclude
:
# tar czvf /dev/sdc1/workstation-backup-Apr-10.tar.gz \ --one-file-system \ / /usr /var \ --exclude=/home/andy/
Ora torniamo a quell’esempio di comando a servizio completo. Usando ciò che hai già imparato, archivia tutte le directory importanti di un file system e copia il file di archivio su un’unità USB. Dovrebbe avere senso per te ora:
# tar czvf - --one-file-system / /usr /var \ --exclude=/home/andy/ | ssh [email protected] \ "cat > /home/username/workstation-backup-Apr-10.tar.gz"
C’è molta più bontà amministrativa sotto forma di libri, corsi e articoli disponibili presso il mio bootstrap-it.com.