Tout le monde sait créer un .tar.gz. Le niveau RHCSA et LFCS exige davantage. Sauvegardes incrémentales après minuit, exclusion des /proc et des caches, transfert direct vers un serveur de backup via SSH sans créer de fichier intermédiaire, restauration d'un seul fichier dans une archive de 50 Go, ce sont ces gestes que ce guide couvre.
Ce sujet est un objectif direct RHCSA ("Archive, compress, unpack, and uncompress files using tar, star, gzip, and bzip2") et LFCS ("Archive, backup, compress, unpack, and decompress files").
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Créer une sauvegarde complète puis des sauvegardes incrémentales avec
--listed-incremental - Exclure des répertoires ou patterns avec
--excludeet--exclude-from - Choisir entre gzip, bzip2, xz et zstd selon le compromis vitesse/taux
- Extraire un fichier précis d'une grande archive sans tout décompresser
- Transférer une archive via SSH en un pipeline sans fichier temporaire
- Vérifier l'intégrité d'une archive avant restauration
Dans quel contexte ?
Section intitulée « Dans quel contexte ? »Le tableau ci-dessous fait le lien entre une situation d'exploitation réelle
et l'option tar qui la résout. Lisez-le de gauche à droite : la colonne de
droite donne le mot-clé à retenir, pas la commande complète. Chaque technique
est détaillée plus bas avec sa commande de vérification, car une sauvegarde
qu'on n'a jamais relue n'est pas une sauvegarde.
| Situation | Technique tar |
|---|---|
| Backup quotidien d'un répertoire de config | --listed-incremental |
Sauvegarder /home sans les caches et .git | --exclude |
| Archiver un gros répertoire sur un serveur limité en espace | xz ou zstd |
Restaurer un seul fichier /etc/nginx.conf depuis une archive | extraction sélective |
| Envoyer un backup vers un serveur distant sans monter de NFS | tar + ssh pipeline |
| Vérifier qu'une archive de sauvegarde est lisible | tar -tvf ou --compare |
Rappel express : les options fondamentales
Section intitulée « Rappel express : les options fondamentales »Une seule règle de syntaxe évite la majorité des erreurs de débutant : l'option
-f doit être la dernière lettre du groupe, parce que c'est elle qui
consomme l'argument suivant comme nom d'archive. Taper tar -fcz archive.tar.gz
fait lire cz comme nom de fichier, et tar répond
You must specify one of the '-Acdtrux' … options. Les autres lettres se
répartissent en deux familles : le mode d'action (-c, -x, -t), dont une
seule est autorisée par commande, et le codec de compression (-z, -j,
-J, --zstd).
# Créer une archive compressée gziptar -czf archive.tar.gz /repertoire/
# Lister le contenutar -tvf archive.tar.gz
# Extrairetar -xzf archive.tar.gz -C /destination/-c créer · -x extraire · -t lister · -v verbose · -f fichier · -z gzip · -j bzip2 · -J xz · --zstd zstd
Sauvegardes incrémentales avec --listed-incremental
Section intitulée « Sauvegardes incrémentales avec --listed-incremental »Une sauvegarde complète archive tout. Une sauvegarde incrémentale n'archive que les fichiers modifiés ou créés depuis la dernière sauvegarde. C'est la base de tout plan de backup sérieux.
tar gère cela nativement via un fichier snapshot (.snar) qui enregistre l'état du répertoire au moment du backup.
Étape 1, Backup complet (niveau 0)
Section intitulée « Étape 1, Backup complet (niveau 0) »Le premier appel a deux effets simultanés : il produit l'archive complète et
il crée le fichier snapshot. Placez ce .snar hors du répertoire sauvegardé,
sinon il finit dans sa propre archive et change à chaque exécution. Le
répertoire /var/backup/ doit exister au préalable : tar ne crée pas
l'arborescence du snapshot et s'arrête sur Cannot open.
tar --listed-incremental=/var/backup/home.snar \ -czf /var/backup/home-full-$(date +%F).tar.gz \ /home/bob/--listed-incremental=/var/backup/home.snar: crée ou met à jour le fichier snapshot- Au premier appel, le
.snarn'existe pas →tararchive tout
Étape 2, Backup incrémental (niveau 1+)
Section intitulée « Étape 2, Backup incrémental (niveau 1+) »tar --listed-incremental=/var/backup/home.snar \ -czf /var/backup/home-incr-$(date +%F-%H%M).tar.gz \ /home/bob/La deuxième fois, tar lit le snapshot et n'inclut que les fichiers modifiés depuis la dernière exécution.
Vérification
Section intitulée « Vérification »# Compter les fichiers dans chaque backuptar -tvf /var/backup/home-full-2026-04-09.tar.gz | wc -ltar -tvf /var/backup/home-incr-2026-04-09-0200.tar.gz | wc -lLe backup incrémental doit contenir beaucoup moins de fichiers que le backup
complet. Ne vous étonnez pas d'y retrouver tous les répertoires de
l'arborescence, même ceux qui n'ont pas bougé : tar les réinscrit à chaque
niveau pour pouvoir rejouer les suppressions à la restauration. Ce sont les
lignes commençant par -rw qu'il faut compter, pas celles en drwx.
Restauration d'une chaîne incrémentale
Section intitulée « Restauration d'une chaîne incrémentale »La restauration se fait dans l'ordre : backup complet, puis chaque incrémental dans l'ordre chronologique.
# 1. Extraire le backup complettar --listed-incremental=/dev/null \ -xzf /var/backup/home-full-2026-04-09.tar.gz \ -C /restore/
# 2. Appliquer l'incrémental du lendemaintar --listed-incremental=/dev/null \ -xzf /var/backup/home-incr-2026-04-10-0200.tar.gz \ -C /restore/--listed-incremental=/dev/null lors de l'extraction indique à tar d'appliquer les suppressions enregistrées dans le snapshot (fichiers effacés entre deux backups).
Exclure des fichiers et répertoires
Section intitulée « Exclure des fichiers et répertoires »Sauvegarder /home en incluant les caches de navigateur, les .git et les répertoires node_modules est un gaspillage. tar offre deux mécanismes d'exclusion.
--exclude, exclure un pattern
Section intitulée « --exclude, exclure un pattern »Un --exclude mal placé ne sert à rien : l'option doit apparaître avant le
chemin à archiver sur la ligne de commande, faute de quoi GNU tar l'applique
seulement aux arguments qui la suivent. Pensez aussi à quoter chaque motif,
sinon le shell l'expanse avant que tar le reçoive et l'exclusion ne portera que
sur les fichiers présents dans le répertoire courant.
tar -czf /var/backup/home-clean.tar.gz \ --exclude='.cache' \ --exclude='.local/share/Trash' \ --exclude='**/node_modules' \ --exclude='**/.git' \ /home/bob/- Les patterns sont relatifs au répertoire archivé
- On peut cumuler plusieurs
--exclude - Les
**(globbing) fonctionnent avec GNU tar
--exclude-from, fichier de liste d'exclusions
Section intitulée « --exclude-from, fichier de liste d'exclusions »Au-delà de trois ou quatre motifs, la ligne de commande devient illisible et
surtout impossible à versionner. Un fichier d'exclusions se relit et se
partage entre plusieurs scripts de sauvegarde. Deux contraintes de format :
un motif par ligne, sans guillemets (c'est tar qui lit le fichier, pas le
shell), et aucun commentaire, car GNU tar traite une ligne commençant par
# comme un motif ordinaire qui ne correspondra à rien.
Contenu de /etc/backup/exclusions.txt :
.cache.local/share/Trash**/node_modules**/.git**/tmp*.log*.pid/proc/sys/dev/runtar -czf /var/backup/systeme.tar.gz \ --exclude-from=/etc/backup/exclusions.txt \ /Choisir entre gzip, bzip2, xz et zstd
Section intitulée « Choisir entre gzip, bzip2, xz et zstd »Le choix d'un codec est un arbitrage entre le temps CPU passé à compresser et
l'espace disque économisé. Deux colonnes du tableau comptent vraiment : la
vitesse, qui détermine si la sauvegarde tient dans sa fenêtre nocturne, et le
taux, qui décide de la place occupée sur le serveur de backup. La compression
n'est pas intégrée à tar : l'option délègue à un programme externe
(gzip, bzip2, xz, zstd). Le codec doit donc être installé sur la machine
qui relit l'archive, pas seulement sur celle qui la crée. Une sauvegarde en
.tar.zst illisible sur le serveur de restauration est un incident classique.
| Codec | Option tar | Extension | Taux | Vitesse | Quand l'utiliser |
|---|---|---|---|---|---|
| gzip | -z | .tar.gz | Moyen | Très rapide | Par défaut, logs, configs, transferts fréquents |
| bzip2 | -j | .tar.bz2 | Bon | Lent | Archivage longue durée, espace prioritaire |
| xz | -J | .tar.xz | Excellent | Très lent | Distributions, sources, taille minimale |
| zstd | --zstd | .tar.zst | Très bon | Rapide | Backups modernes, meilleur ratio vitesse/taux |
Exemples concrets
Section intitulée « Exemples concrets »Repérez l'extension utilisée dans chaque commande : elle n'a aucun effet
technique (tar détecte seul le format à la lecture), mais elle documente le
codec pour l'administrateur qui trouvera le fichier dans six mois. Notez aussi
que --zstd est une option longue et ne se groupe pas avec les autres lettres :
on écrit tar --zstd -cf, jamais tar -c--zstdf.
# gzip : usage quotidien (défaut)tar -czf logs-$(date +%F).tar.gz /var/log/nginx/
# bzip2 : archivage longue duréetar -cjf archives-2025.tar.bz2 /var/archive/2025/
# xz : distribution de sourcestar -cJf mon-projet-1.0.tar.xz ./mon-projet/
# zstd : backup rapide avec bon tauxtar --zstd -cf backup-$(date +%F).tar.zst /home/Vérifier le taux de compression effectif
Section intitulée « Vérifier le taux de compression effectif »Les taux annoncés dans le tableau sont des ordres de grandeur : le gain réel dépend entièrement de vos données. Des logs texte se compressent à plus de 90 %, des images JPEG ou des archives déjà compressées ne gagnent rien et coûtent du temps CPU pour rien. Mesurez sur votre jeu de données avant de figer un codec dans un script de production, en comparant la taille des archives à celle de la source.
ls -lh /var/backup/home-full-2026-04-09.tar.{gz,zst,bz2,xz}du -sh /home/bob/Extraction sélective, un seul fichier d'une grande archive
Section intitulée « Extraction sélective, un seul fichier d'une grande archive »Inutile de décompresser 50 Go pour récupérer un seul fichier de configuration.
Lister le contenu pour trouver le chemin exact
Section intitulée « Lister le contenu pour trouver le chemin exact »L'extraction sélective échoue presque toujours pour la même raison : le chemin
demandé ne correspond pas à celui stocké dans l'archive. Commencez donc par
lister, puis copiez-collez le chemin affiché. Sur une archive volumineuse, cette
lecture décompresse quand même tout le flux ; comptez plusieurs minutes sur
plusieurs dizaines de gigaoctets, et filtrez avec grep plutôt que de faire
défiler la sortie.
tar -tvf /var/backup/home-full-2026-04-09.tar.gz | grep nginx.conf-rw-r--r-- bob/bob 2847 2026-04-08 22:13 home/bob/.config/nginx/nginx.confExtraire un fichier précis
Section intitulée « Extraire un fichier précis »tar -xzf /var/backup/home-full-2026-04-09.tar.gz \ -C /tmp/restore/ \ home/bob/.config/nginx/nginx.confLe chemin doit correspondre exactement à ce que tar -tvf affiche (sans / initial dans la plupart des cas).
Extraire un répertoire complet
Section intitulée « Extraire un répertoire complet »Le même principe s'applique à un répertoire : passez son chemin sans le /
initial et tar restaure toute la sous-arborescence, permissions et dates
comprises. Le répertoire de destination passé à -C doit exister, tar ne le
crée pas et s'arrête sur Cannot open. L'arborescence complète du chemin est
recréée sous cette destination.
tar -xzf /var/backup/home-full-2026-04-09.tar.gz \ -C /tmp/restore/ \ home/bob/.config/Extraire vers un répertoire différent
Section intitulée « Extraire vers un répertoire différent »tar -xzf /var/backup/home-full-2026-04-09.tar.gz \ --strip-components=2 \ -C /tmp/restore/ \ home/bob/.config/--strip-components=2 supprime les 2 premiers niveaux du chemin dans l'archive (home/bob/) pour extraire directement dans /tmp/restore/.
Transfert via SSH, sans fichier intermédiaire
Section intitulée « Transfert via SSH, sans fichier intermédiaire »L'un des gestes les plus élégants de tar : créer une archive sur la sortie standard, la passer directement dans SSH, et l'extraire sur le serveur distant, tout en un seul pipeline.
Envoyer vers un serveur distant
Section intitulée « Envoyer vers un serveur distant »Le - qui suit -czf remplace le nom de fichier par la sortie standard :
tar n'écrit rien sur le disque local, le flux part directement dans le tube
vers ssh. Attention à l'endroit où $(date +%F) est évalué : entre guillemets
doubles, la substitution a lieu sur la machine locale avant l'envoi, ce qui
est généralement le comportement voulu pour dater l'archive selon l'horloge de la
source.
# Archiver localement, extraire sur le serveur distanttar -czf - /home/bob/projets/ | ssh bob@serveur-backup "cat > /backup/projets-$(date +%F).tar.gz"Copier une arborescence en préservant les permissions
Section intitulée « Copier une arborescence en préservant les permissions »# Archiver et extraire immédiatement sur le serveur distanttar -czf - /etc/ | ssh bob@serveur-backup "tar -xzf - -C /backup/etc/"Ce pipeline préserve les permissions, les UID, les GID, les liens symboliques et les dates, ce que scp -r ne fait pas toujours correctement.
Récupérer une archive depuis un serveur distant
Section intitulée « Récupérer une archive depuis un serveur distant »Le sens inverse fonctionne aussi : c'est tar qui s'exécute à distance et
écrit sur sa sortie standard, que ssh rapatrie et qu'une redirection locale
enregistre. Utile quand le serveur source manque d'espace disque pour héberger
l'archive intermédiaire. Vérifiez toujours l'archive reçue avec tar -tvf avant
de supprimer quoi que ce soit à la source : une coupure réseau produit un fichier
tronqué qui a l'air normal jusqu'à ce qu'on tente de le lire.
ssh bob@serveur-source "tar -czf - /var/www/html/" > /backup/html-$(date +%F).tar.gzVérifier l'intégrité d'une archive
Section intitulée « Vérifier l'intégrité d'une archive »Un backup inutilisable est pire qu'aucun backup. Toujours vérifier avant de se
retrouver dans une situation d'urgence. Gardez en tête la limite du format :
une archive tar ne porte aucune somme de contrôle globale. Une lecture
complète détecte une troncature au milieu d'un fichier, mais une archive coupée
pile sur une frontière de bloc peut se lister sans erreur. Pour une garantie
réelle, stockez un sha256sum de l'archive à côté d'elle.
Lister le contenu (test de lecture)
Section intitulée « Lister le contenu (test de lecture) »tar -tvf /var/backup/home-full-2026-04-09.tar.gz > /dev/null && echo "Archive OK"Si tar renvoie un code de retour non-nul, l'archive est corrompue.
Récupérer le bon code de retour dans un script
Section intitulée « Récupérer le bon code de retour dans un script »Le piège se cache dans le tube : $? renvoie le code du dernier élément
du pipeline, donc celui de tail, qui réussit même quand tar a échoué avant
lui. Un script de supervision écrit ainsi déclare toutes ses archives valides.
Deux parades en bash : tester tar seul, ou lire ${PIPESTATUS[0]}
immédiatement après le pipeline.
# Mauvais : $? contient le code de tail, toujours 0tar -tvf /var/backup/home-full-2026-04-09.tar.gz | tail -5echo "Code retour : $?"
# Correct : on lit le code de tar lui-mêmetar -tvf /var/backup/home-full-2026-04-09.tar.gz | tail -5echo "Code retour tar : ${PIPESTATUS[0]}"Une archive tronquée, par exemple parce que le disque s'est rempli pendant la
sauvegarde, se signale par tar: Unexpected EOF in archive ou par une erreur
remontée du décompresseur, et tar sort avec le code 2.
Comparer avec la source (si elle existe encore)
Section intitulée « Comparer avec la source (si elle existe encore) »tar --compare -f sauvegarde.tar.gz -C / 2>&1 | head -20Cette commande compare le contenu de l'archive existante avec le système de
fichiers actuel, et affiche les différences (taille, date, contenu). L'option
-C / indique depuis quelle racine comparer les chemins de l'archive.
Dépannage courant
Section intitulée « Dépannage courant »Les erreurs de tar sont laconiques et la cause réelle est rarement celle
qu'annonce le message. Avant de chercher plus loin, distinguez trois familles :
un problème d'archive (corrompue, tronquée), un problème d'environnement
(codec absent, disque plein) et un problème de chemin (snapshot égaré, /
initial retiré). Le tableau ci-dessous associe le message affiché à la famille
concernée et à l'action corrective.
| Symptôme | Cause probable | Solution |
|---|---|---|
tar: Error is not recoverable: exiting now | Archive corrompue ou tronquée | Vérifier le fichier source, retester avec -tvf |
tar: Removing leading '/' from member names | Chemins absolus dans l'archive | Normal avec -C / à l'extraction. Utiliser --strip-components si besoin |
Backup incrémental archive tout malgré le .snar | Fichier .snar absent ou corrompu | Supprimer le .snar et refaire un backup complet |
xz: Cannot exec: No such file or directory | xz non installé | apt install xz-utils ou dnf install xz |
zstd: command not found | zstd non installé | apt install zstd ou dnf install zstd |
| Extraction coupée à mi-chemin | Espace disque insuffisant | df -h pour vérifier, libérer de l'espace |
Contrôle de connaissances
Section intitulée « Contrôle de connaissances »Vérifiez que l'essentiel de ce guide est acquis. Les questions portent uniquement sur ce qui vient d'être expliqué ici.
Contrôle de connaissances
Validez vos connaissances avec ce quiz interactif
Informations
- Le chronomètre démarre au clic sur Démarrer
- Questions à choix multiples, vrai/faux et réponses courtes
- Vous pouvez naviguer entre les questions
- Les résultats détaillés sont affichés à la fin
Lance le quiz et démarre le chronomètre
Vérification
(0/0)Profil de compétences
Quoi faire maintenant
Ressources pour progresser
Des indices pour retenter votre chance ?
Nouveau quiz complet avec des questions aléatoires
Retravailler uniquement les questions ratées
Retour à la liste des certifications
À retenir
Section intitulée « À retenir »--listed-incrementalest le mécanisme natif detarpour les backups incrémentaux : backup complet au premier appel, incrémental ensuite.--excludeet--exclude-fromévitent d'archiver les caches,.gitetnode_modules.- zstd est le meilleur choix pour les backups modernes : taux comparable à
bzip2, vitesse proche degzip. - L'extraction sélective (
tar -xzf archive.tar.gz chemin/dans/archive) évite de tout décompresser. - Le pipeline
tar | sshtransfère une arborescence complète sans fichier temporaire et préserve les permissions. - Toujours tester une archive avec
tar -tvfavant d'en avoir besoin.
Pour aller plus loin
Section intitulée « Pour aller plus loin »- Synchroniser avec rsync : Synchronisation intelligente (delta) vers un serveur distant, l'outil complémentaire de tar pour les backups continus.
- Vérifier l'intégrité d'un fichier : sha256sum, md5sum et signatures GPG pour s'assurer qu'une archive n'a pas été altérée.
- Copier avec SCP : Copie rapide one-shot via SSH, l'alternative simple à tar+ssh pour les fichiers individuels.
- Référence tar : Toutes les options tar classées par usage, cheatsheet complète.