97 votes

Tar: Sortie avec un statut d'échec en raison d'erreurs précédentes

J'ai écrit un petit script qui tare et compresse une liste de répertoires + fichiers.

Le script semble s'exécuter correctement, car un fichier .tar.gz utilisable est créé après l'exécution du script.

Cependant, je reçois ce message ennuyeux après la fin du script :

tar: Sortie avec un statut d'échec en raison d'erreurs précédentes

Je ne vois aucun message d'erreur pendant que le script fonctionne, et comme je l'ai dit, le fichier produit peut être décompressé sans avertissements/erreurs. Comme je l'utilise dans le cadre de ma sauvegarde, je veux m'assurer de ne pas ignorer quelque chose de sérieux.

Quelles sont les raisons possibles de la production de ce message d'erreur/avertissement - et puis-je l'ignorer en toute sécurité ? Si je ne peux pas l'ignorer, quelles sont les étapes pour diagnostiquer et résoudre l'erreur ?

Je suis sous Ubuntu 10.0.4

123voto

Mike Green Points 607

Vous recevrez ce message si, pour une raison quelconque, tar ne peut pas ajouter tous les fichiers spécifiés au tar. L'un des plus courants est de ne pas avoir la permission de lecture sur l'un des fichiers. Cela pourrait être un gros problème car vous utilisez cela pour la sauvegarde. Si vous utilisez le drapeau -v, essayez de le laisser de côté. Cela devrait réduire la production et vous permettre de voir ce qui se passe.

12 votes

+1 pour la suggestion (j'utilisais précédemment l'option « verbeuse »). J'ai trouvé qu'il y avait un problème de permission sur au moins l'un des fichiers. Au moins maintenant je sais comment résoudre cela. Merci beaucoup

0 votes

Oui, l'utilisation de sudo a résolu le problème

0 votes

Abandonner le drapeau -v est un excellent conseil et m'a aidé à résoudre mon problème. 'verbeux' obscurcit la cause de l'échec derrière un mur de texte

41voto

Andrea Monni Points 361

Le problème est l'argument f. Il prend la valeur suivante comme nom de fichier, donc il doit être le dernier argument:

tar cvzf output.tgz dossier

ou:

tar -cvzf output.tgz dossier

Ce sont les mêmes et ne produisent pas d'erreur.

0 votes

Résolu mon problème. J'essayais de tar -zcvfp donnant une erreur mais quand j'ai essayé tar -zxvpf alors tout va bien. Merci.

10voto

Fabio Pedrazzoli Points 211

Parfois, lors de la sauvegarde de fichiers qui pourraient changer pendant la sauvegarde comme les fichiers journaux, vous pourriez trouver utile l'option tar '--ignore-failed-read' (Je suis sur Debian Linux, je ne suis pas sûr pour tar non gnu).

La sortie standard et les erreurs peuvent être redirigées dans 2 fichiers différents avec quelque chose comme :

LOGDIR='/var/log/mylogdir' 
LOG=${LOGDIR}/backup.log 
ERRLOG=${LOGDIR}/backup.error.log 
DATE=$(date +%Y-%m-%d)
HOSTNAME=$(hostname)
DATA_DIRS='/etc /home /root'

tar --ignore-failed-read -f ${BACKUP_DIR}/${HOSTNAME}-${DATE}.tgz -cvz ${DATA_DIRS} > $LOG 2> $ERRLOG

Je trouve cela généralement sûr, mais s'il vous plaît soyez prudent car tar ne s'arrêtera pas...

6voto

DomainsFeatured Points 189

J'avais le même problème et aucune des réponses ci-dessus n'a fonctionné pour moi. Cependant, j'ai trouvé que l'exécution de la commande suivante a fonctionné :

tar -cpzf /backups/fullbackup.tar.gz --exclude=backups --exclude=proc --exclude=tmp --exclude=mnt --exclude=sys --exclude=dev --exclude=run /

Les erreurs qui étaient mentionnées dans tar: Sortie avec un statut d'échec en raison d'erreurs précédentes peuvent être identifiées en désactivant l'option -v. Après examen, les erreurs provenaient des répertoires comme /run et /sys.

En excluant ces répertoires, cela fonctionne très bien. J'espère que cela aidera toute personne ayant un problème similaire.

2voto

jack Points 29

J'avais le même problème. Tout ce que j'ai fait était de supprimer le tiret ("-") de la commande.

Au lieu de le taper comme

tar -cvfz output.tar.gz folder/

essaie de le taper comme

tar cvfz output.tar.gz folder/

Je ne sais pas pourquoi le tiret causait des problèmes dans mon cas mais au moins ça a marché.

7 votes

Vous avez probablement testé ceci avec GNU tar. Votre confusion vient du fait qu'il accepte deux styles différents d'options - les options tar "anciennes" sans tiret et les options "standard unix" avec un tiret. Les options avec un tiret nécessitent un argument d'une option à suivre l'option. Donc dans ce cas l'argument pour -f devrait être output.tar.gz et il ne doit pas y avoir de z entre les deux. Sans réorganisation des options, cela serait correctement: tar -cvf output.tar.gz -z folder/. Le style ancien attend que toutes les options soient au même endroit et que tous les arguments suivent.

0 votes

Regardez la documentation de GNU tar et aussi par exemple page de manuel Tru64 UNIX tar.

1 votes

@pabouk Ce commentaire semblait digne d'être une réponse en soi. Veuillez ajouter le contenu de ce commentaire en tant que réponse à cette question afin que le mérite revienne à qui de droit.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X