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

78

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

Le script semble fonctionner avec succès, en ce sens qu'un fichier .tar.gz utilisable est créé après son exécution.

Cependant, je reçois ce message gênant une fois le script terminé:

tar: Sortie avec 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 ni erreurs. Puisque j'utilise ceci dans le cadre de ma sauvegarde, je veux m'assurer de ne pas ignorer quelque chose de grave.

Quelles sont les raisons possibles pour lesquelles ce message d'erreur / avertissement est généré - et puis-je l'ignorer en toute sécurité ?. Si je ne peux pas l'ignorer, quelles sont les étapes à suivre pour diagnostiquer et résoudre l'erreur?

Je cours sur Ubuntu 10.0.4

morphe
la source

Réponses:

100

Vous recevrez ce message si, pour une raison quelconque, tar ne peut pas ajouter tous les fichiers spécifiés à tar. L'une des plus courantes est de ne pas avoir l'autorisation de lecture sur l'un des fichiers. Cela pourrait être un gros problème puisque vous l'utilisez pour la sauvegarde. Si vous utilisez le -vdrapeau, essayez de le laisser. Cela devrait réduire le rendement et vous permettre de voir ce qui se passe.

KeithB
la source
8
+1 pour la suggestion (j'utilisais précédemment l'option 'verbose'). J'ai constaté qu'il y avait un problème de permission sur au moins un des fichiers. Au moins maintenant je sais comment résoudre ce problème. merci beaucoup
morpheous
oui en utilisant sudo corrigé le problème
whizcreed
abandonner le drapeau -v est un bon conseil et m'a aidé à résoudre mon problème. 'verbose' masque la cause de l'échec derrière un mur de texte
scottyseus
22

le problème est l'argument, l' fargument prend le suivant comme nom de fichier, il doit donc être le dernier de l'argument

tar cvzf output.tgz folder

ou

tar -cvzf output.tgz folder

est le même et aucune erreur de prise.

Andrea Monni
la source
Résolu mon problème. J'essayais de donner une erreur à tar -zcvfp, mais quand tout a été essayé, alors tout va bien. Merci.
Mian Asbat Ahmad le
6

Parfois, lors de la sauvegarde de fichiers susceptibles de changer au cours de la sauvegarde, tels que les fichiers journaux, vous pouvez trouver utile l’option tar «--ignore-failed-read» (je suis sous Debian Linux, ce qui n’est pas sûr pour les non-gnu tar).

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 que cela est généralement sans danger, mais s'il vous plaît soyez prudent car le goudron ne va pas s'arrêter ...

Fabio Pedrazzoli
la source
5

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

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

Les erreurs auxquelles il était fait référence dans tar: Exiting with failure status due to previous errorspeuvent être identifiées en désactivant l'option -v. Après examen, les erreurs provenaient de répertoires tels que /runet /sys.

En excluant ces répertoires, cela fonctionne très bien. J'espère que cela aide quelqu'un avec un problème similaire.

Domaines à l'honneur
la source
3

J'ai eu 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 /

essayez de taper comme

dossier tar cvfz output.tar.gz /

Je ne sais pas pourquoi le tiret posait des problèmes dans mon cas, mais au moins cela a fonctionné.

jack
la source
6
Vous avez probablement testé cela avec GNU tar. Votre confusion vient du fait qu’elle accepte deux styles d’options différents: les options "old-style" tar sans tiret et les options "standard unix" avec tiret. Les options avec tiret nécessitent un argument d'une option pour suivre l'option. Donc, dans ce cas, l'argument pour -fdevrait être output.tar.gzet il ne doit pas y avoir zd'intermédiaire. Sans réordonnancement des options qu'il serait correctement être: tar -cvf output.tar.gz -z folder/. L'ancien style attend toutes les options en un seul endroit et tous les arguments suivent.
Pabouk
Reportez-vous à la documentation de GNU tar et à la page de manuel Tru64 UNIX tar, par exemple .
Pabouk
@pabouk Ce commentaire semblait digne d'être une réponse en soi. S'il vous plaît ajouter le contenu de ce commentaire comme une réponse à cette question afin que le crédit va là où le crédit est dû.
cwallenpoole
J'ai aussi eu des problèmes, mais c'était un fichier avec le nom -v, donc apparemment, tar a quelques bugs concernant les fichiers qu'il peut sauvegarder ... cela ne devrait pas être un problème. ma solution de contournement, car rm et mv ne fonctionnerait pas, consistait à utiliser un gestionnaire de fichiers. donc apparemment, mv et rm sont aussi buggés. J'ai essayé mv '-v' v et rm '-v' mais j'ai eu des messages d'erreur. tar a mentionné qu'il ne pouvait pas stater le fichier tar. utilisait -cfjv
Jim Michaels
1

Vous avez mal compris une réponse précédente. Le problème n'est pas le -, c'est où se trouve le fdans votre liste d'arguments.

tar cvfz target.tgz <files>

Je vais essayer de créer une archive appelée "z", car c'est le texte qui suit f. Le message d'erreur vient du fait que tar ne peut pas trouver "target.gz" à ajouter à l'archive "z".

tar cvzf target.tgz <files>

Créera correctement target.tgz et y ajoutera des fichiers. C'est parce que target.tgz est le premier texte après l' fargument.

Thornbury
la source
Cela devrait être ajouté en tant que commentaire à la réponse "confuse". Malheureusement, vous ne pourrez ajouter de tels commentaires qu'après avoir gagné 50 points de réputation. Pour le sujet: l' avez-vous testé? Je l'ai testé avec GNU tar 1.26 et les variantes avec et sans tiret sont vraiment différentes de celles décrites dans la réponse de jack. Il se comporte comme il est écrit dans la réponse.
Pabouk
0

Habituellement, vous pouvez ignorer ce message. Si des modifications (telles que des suppressions / créations / modifications de fichiers) ont été apportées à l’arborescence de répertoires sous-jacente lors de la création de l’archive tar, ce message sera envoyé. De plus, s’il existe des fichiers spéciaux tels que des nœuds de périphériques, fifos, etc., ils provoqueront cet avertissement.

Êtes-vous sûr de ne voir aucun fichier coupable? Essayer avectar cvfz yourtarball.tgz /your/path

Janne Pikkarainen
la source
0

J'ai eu un problème similaire lors de la décomposition d'un fichier que j'avais reçu. Il s'avère que je n'avais pas la permission d'écrire les fichiers dans l'archive appartenant à root. En utilisant sudo corrigé.

ttwalkertt
la source
0

Une des raisons pour obtenir ces erreurs pour les débutants est que
Ils oublient d'effectuer des opérations dans le répertoire où se trouvent les fichiers
Allez à cet endroit et exécutez la commande 
Comme mes fichiers sont dans le bureau 
~ / Desktop # tar - cf done.tar abc xyz
Où xyz et abc sont des fichiers et nous les stockons dans done.tar
Si nous allons exécuter la commande ailleurs, nous aurons l'erreur ci-dessus 

Ravi Teja Mureboina
la source