Tar

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Domaine Archivage de fichiers
Commande tar
Format .tar (non compressé) — combinable avec gzip/bzip2/xz
Options clés -c créer, -x extraire, -t lister, -v verbeux, -f fichier
Compresseurs -z gzip, -j bzip2, -J xz

tar (tape archive) regroupe un ensemble de fichiers et de répertoires dans une seule archive, en conservant l'arborescence, les permissions et les liens. Il ne compresse rien par lui-même : la compression est déléguée à un outil externe (gzip, bzip2, xz…), que tar peut invoquer directement via une option dédiée.

Commandes de base

tar -cvf archive.tar /chemin/a/sauvegarder     # créer une archive
tar -tvf archive.tar                           # lister le contenu sans extraire
tar -xvf archive.tar                           # extraire dans le répertoire courant
tar -xvf archive.tar -C /chemin/de/destination # extraire vers un autre répertoire

Avec compression intégrée (l'option de compresseur se combine avec c/x) :

tar -czvf archive.tar.gz /chemin   # créer, compression gzip
tar -xzvf archive.tar.gz          # extraire une archive gzip

tar -cjvf archive.tar.bz2 /chemin # créer, compression bzip2
tar -xjvf archive.tar.bz2         # extraire une archive bzip2

tar -cJvf archive.tar.xz /chemin  # créer, compression xz (lzma2)
tar -xJvf archive.tar.xz          # extraire une archive xz

xz n'est pas toujours installé par défaut :

apt-get install xz-utils

Exclure des fichiers

tar -czf archive.tar.gz --exclude={'*.log','*.tmp','*.old'} /chemin/a/sauvegarder

Archive multi-volumes

Pour découper une archive en plusieurs morceaux (support de taille limitée, transfert par lots…), on combine tar avec split plutôt que d'utiliser le mode multi-volume natif de tar (plus contraignant à l'usage) :

# Sauvegarde en volumes de 2000 Mo
tar -cvf - /rep/a/sauvegarder | split -b 2000m - /rep/de/dest/archive.tar.

# Restauration : réassembler puis lister/extraire
cat /rep/de/dest/archive.tar.* | tar -tvf -
cat /rep/de/dest/archive.tar.* | tar -xvf -

Transfert par SSH

Envoyer une archive compressée à la volée vers un serveur distant, sans fichier intermédiaire :

tar -czf - toto | ssh user@host "cd /chemin/distant/ && tar -xzpf -"

Le -p à l'extraction préserve les permissions d'origine.

Cloner un disque à distance (flux tar redirigé vers dd côté distant) :

tar -xzOf image-disque.tar.gz | ssh root@host "dd of=/dev/sdb bs=1M"

-O envoie le contenu extrait sur la sortie standard au lieu de l'écrire sur disque localement.

Choisir un algorithme de compression

Comparatif rapide, du plus rapide au plus compact :

  • gzip (-z) — le plus rapide, bon compromis vitesse/taux par défaut.
  • lzo — extrêmement rapide (peut aller plus vite que le disque), taux de compression modeste.
  • bzip2 (-j) — plus lent que gzip pour un gain de compression qui ne le justifie plus guère ; à éviter pour de nouvelles archives.
  • xz / lzma2 (-J) — meilleur taux de compression, au prix de la vitesse (surtout en écriture). lzma est l'ancienne génération de xz, à peu près équivalente en taux mais sans intérêt aujourd'hui puisque xz fait au moins aussi bien.

Pousser le niveau de compression au maximum (-9/-9e) rapporte peu en pratique et coûte cher en temps CPU ; le niveau par défaut est généralement suffisant.

# Compression a posteriori avec un niveau spécifique
tar -cvf archive.tar /chemin && gzip -9 archive.tar

# Variable d'environnement pour piloter les options de xz depuis tar
XZ_OPT=-9 tar -Jcvf archive.tar.xz /chemin

Voir aussi

  • Split — découpage de fichiers volumineux
  • Ssh — transfert et exécution distante