vendredi 18 mars 2011

Le secret de la commande tar

Le programme tar (ou tape archiver qui veut dire littéralement archiveur pour bande ) est un logiciel d'archivage de fichiers standard des systèmes de type UNIX. C'est un outil très puissant pour la manipulation d'archives sous les systèmes Unix et les dérivés dont Linux. Il ne compresse pas les fichiers, mais les concatène au sein d'une seule et même archive. La majorité des programmes linux utilisent ce système d'archivage.
Plusieurs distributions de Unix ou de Linux contiennent dès l'installation le programme tar , la commande associée à tar porte le même nom que le programme lui même. Cette commande se revèle complexe lorsqu'il s'agit d'y joindre des options qui rendent la commande encore plus puissante que d'autres commandes du même domaine.


Quelques options liées à tar

- c : crée l'archive
- x : extrait l'archive
- f : utilise le fichier donné en paramètre
- v : active le mode « verbeux » (bavard, affiche ce qu'il fait).
- z : ajoute la compression Gzip.
- j : ajoute la compression Bzip2.
- J : ajoute la compression Lzma.

Afficher liste des fichiers :

tar -tf archive.tar

Extraction (éventuellement pour un fichier ou un répertoire spécifique) :

tar -xvf archive.tar [fichier1... ]

Décompression + extraction (spécifique à GNU tar) :


tar -xzvf archive.tar.gz
tar -xjvf archive.tar.bz2
tar -xYvf archive.tar.lzma


Plus généralement, on peut arriver au même résultat avec :

zcat archive.tar.gz  | tar -xvf -
bzcat archive.tar.bz2 | tar -xvf -


Remarque : on utilise parfois gzcat ou gzip -cd.

Archivage :

tar -cvf fichier.tar MonRepertoire1 [MonRepertoire2... ]

Compression et archivage :

tar -czvf archive.tar.gz MonRepertoire
tar -cjvf archive.tar.bz2 MonRepertoire


ou encore :

tar -cvf - MonRepertoire | gzip > archive.tar.gz
tar -cvf - MonRepertoire | bzip2 > archive.tar.bz2


Ceci créera une archive compressée dans le répertoire courant (donc un seul fichier) contenant l'ensemble des fichiers du répertoire MonRepertoire et de ses sous-répertoires.

copie d'une partie de l'arborescence vers un autre endroit :

tar -cf - . | ( cd /Repertoire/Destination; tar -xvf - )

Utilisation en archivage incrémentiel

Pourquoi utiliser un archivage incrémentiel ?


La taille des archives et leur stockage peut très vite poser problème. Voici un cas d'utilisation illustrant l'utilité de cet archivage. En fait c'est un problème qui m'est arrivé lors de mes propres expériences , en effet je voulais sauvegarder le repertoire /home (données des utilisateurs) toutes les semaines sur un second disque dur, tout en gardant les données antérieures. J'avais en tout 50 Go de données et le second disque dur faisait 500Go. 10% de ces données changaient toutes les semaines (5Go). Dans le cas d'une sauvegarde complète, chaque archive faisait 50Go, mon disque dur était rempli en mois de deux mois. J'ai remarqué que si 10% de ces données changent toutes les semaines, 90% sont identiques et ne nécessitent pas d'être sauvegardées à chaque fois. Il me faut donc sauvegarder uniquement les nouvelles données en utilisant la sauvegarde incrémentielle. La première sauvegarde est complète, la suivante copie uniquement les nouveaux fichiers et ainsi de suite. Je garde ainsi chaque sauvegarde dans l'état à différentes dates.

Création de  la première sauvegarde (sauvegarde complète) : 

tar --create --file=archive.1.tar --listed-incremental=/save/save.list /home
 
Seconde sauvegarde (incrémentée avec uniquement les fichiers ayant changé) :
 
tar --create --file=archive.2.tar --listed-incremental=/save/save.list /home
 
Restauration : 

tar --extract --listed-incremental=/dev/null --file archive.1.tar tar --extract --listed-incremental=/dev/null --file archive.2.tar 

Utiliser la date pour incrémenter le numéro :
 
tar --create --file=/save/archive.`date --rfc-3339=seconds`.tar --listed-incremental=/save/archive.list /home 

Aucun commentaire:

Enregistrer un commentaire